diff mbox series

[isar-cip-core] swupdate: add recipe to cause kernel panic during system boot

Message ID 20220127142042.6692-1-Shivanand.Kunijadar@toshiba-tsip.com (mailing list archive)
State Handled Elsewhere
Headers show
Series [isar-cip-core] swupdate: add recipe to cause kernel panic during system boot | expand

Commit Message

Shivanand Kunijadar Jan. 27, 2022, 2:20 p.m. UTC
From: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>

Cc: dinesh.kumar@toshiba-tsip.com,
    kazuhiro3.hayashi@toshiba.co.jp,
    akihiro27.suzuki@toshiba.co.jp

This recipe adds necessary scripts to cause kernel panic during system
boot, these scripts are required to test swupdate rollback feature.

Signed-off-by: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
---
 kas/opt/swupdate-rollback.yml                 | 19 +++++++++++++
 .../files/sysrq-panic.service                 | 10 +++++++
 .../swupdate-rollback/files/sysrq-panic.sh    |  4 +++
 .../swupdate-rollback/swupdate-rollback.bb    | 27 +++++++++++++++++++
 4 files changed, 60 insertions(+)
 create mode 100644 kas/opt/swupdate-rollback.yml
 create mode 100644 recipes-core/swupdate-rollback/files/sysrq-panic.service
 create mode 100644 recipes-core/swupdate-rollback/files/sysrq-panic.sh
 create mode 100644 recipes-core/swupdate-rollback/swupdate-rollback.bb

Comments

Jan Kiszka Jan. 27, 2022, 3:55 p.m. UTC | #1
On 27.01.22 15:20, Shivanand.Kunijadar@toshiba-tsip.com wrote:
> From: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> 
> Cc: dinesh.kumar@toshiba-tsip.com,
>      kazuhiro3.hayashi@toshiba.co.jp,
>      akihiro27.suzuki@toshiba.co.jp
> 
> This recipe adds necessary scripts to cause kernel panic during system
> boot, these scripts are required to test swupdate rollback feature.

Valuable piece in the puzzle! I would just use a different name than 
"swupdate-rollback". Effectively, this creates a broken boot, not only 
for swupdate, no? Then call it accordingly.

The fact that a broken boot will trigger a rollback under swupdate is a 
consequence, but not directly related to these changes.

> 
> Signed-off-by: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> ---
>   kas/opt/swupdate-rollback.yml                 | 19 +++++++++++++
>   .../files/sysrq-panic.service                 | 10 +++++++
>   .../swupdate-rollback/files/sysrq-panic.sh    |  4 +++
>   .../swupdate-rollback/swupdate-rollback.bb    | 27 +++++++++++++++++++
>   4 files changed, 60 insertions(+)
>   create mode 100644 kas/opt/swupdate-rollback.yml
>   create mode 100644 recipes-core/swupdate-rollback/files/sysrq-panic.service
>   create mode 100644 recipes-core/swupdate-rollback/files/sysrq-panic.sh
>   create mode 100644 recipes-core/swupdate-rollback/swupdate-rollback.bb
> 
> diff --git a/kas/opt/swupdate-rollback.yml b/kas/opt/swupdate-rollback.yml
> new file mode 100644
> index 0000000..a3b0e28
> --- /dev/null
> +++ b/kas/opt/swupdate-rollback.yml
> @@ -0,0 +1,19 @@
> +#
> +# CIP Core, generic profile
> +#
> +# Copyright (c) Toshiba Corporation, 2022
> +#
> +# Authors:
> +#  Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> +#
> +# SPDX-License-Identifier: MIT
> +#
> +# This kas file adds necessary scripts to cause kernel panic during system boot
> +# which are required to test swupdate rollback feature
> +
> +header:
> +  version: 10
> +
> +local_conf_header:
> +  swupdate: |
> +    IMAGE_INSTALL_append = " swupdate-rollback"
> diff --git a/recipes-core/swupdate-rollback/files/sysrq-panic.service b/recipes-core/swupdate-rollback/files/sysrq-panic.service
> new file mode 100644
> index 0000000..ae868f9
> --- /dev/null
> +++ b/recipes-core/swupdate-rollback/files/sysrq-panic.service
> @@ -0,0 +1,10 @@
> +[Unit]
> +Description=sysrq panic
> +
> +[Service]
> +Type=oneshot
> +ExecStart=/root/sysrq-panic.sh
> +
> +[Install]
> +WantedBy=default.target
> +
> diff --git a/recipes-core/swupdate-rollback/files/sysrq-panic.sh b/recipes-core/swupdate-rollback/files/sysrq-panic.sh
> new file mode 100644
> index 0000000..a3c1bb7
> --- /dev/null
> +++ b/recipes-core/swupdate-rollback/files/sysrq-panic.sh
> @@ -0,0 +1,4 @@
> +#!/bin/sh
> +
> +echo c > /proc/sysrq-trigger

Why not doing that directly in the service file (/bin/sh -c "...")?

Jan

> +
> diff --git a/recipes-core/swupdate-rollback/swupdate-rollback.bb b/recipes-core/swupdate-rollback/swupdate-rollback.bb
> new file mode 100644
> index 0000000..5c93bb5
> --- /dev/null
> +++ b/recipes-core/swupdate-rollback/swupdate-rollback.bb
> @@ -0,0 +1,27 @@
> +#
> +# CIP Core, generic profile
> +#
> +# Copyright (c) Toshiba Corporation, 2022
> +#
> +# Authors:
> +#  Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> +#
> +# SPDX-License-Identifier: MIT
> +#
> +
> +inherit dpkg-raw
> +
> +DESCRIPTION = "Script and service files to cause kernel panic"
> +
> +SRC_URI = " \
> +    file://sysrq-panic.sh \
> +    file://sysrq-panic.service"
> +
> +do_install() {
> +	install -v -d ${D}/root
> +	install -v -m 0755 ${WORKDIR}/sysrq-panic.sh ${D}/root/
> +	install -v -d ${D}/lib/systemd/system
> +	install -v -m 0644 ${WORKDIR}/sysrq-panic.service ${D}/lib/systemd/system/
> +	install -v -d ${D}/etc/systemd/system/default.target.wants
> +	ln -s /lib/systemd/system/sysrq-panic.service ${D}/etc/systemd/system/default.target.wants/
> +}
Quirin Gylstorff Feb. 3, 2022, 11:57 a.m. UTC | #2
Hi,

On 2/1/22 16:35, Shivanand.Kunijadar@toshiba-tsip.com wrote:
> From: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> 
> Prepare readme file with necessary steps to verify swupdate feature
> with rollback functionality.
> 
> Signed-off-by: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> ---
>   doc/README.swupdate.md | 208 +++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 208 insertions(+)
>   create mode 100644 doc/README.swupdate.md
> 
> diff --git a/doc/README.swupdate.md b/doc/README.swupdate.md
> new file mode 100644
> index 0000000..56bc77c
> --- /dev/null
> +++ b/doc/README.swupdate.md
> @@ -0,0 +1,208 @@
> +
> +Clone the isar-cip-core repository
> +```
> +host$ git clone https://gitlab.com/cip-project/cip-core/isar-cip-core.git
> +```
> +
> +Install `kas-container` from the [kas project](https://github.com/siemens/kas):
> +
> +```
> +host$ wget https://raw.githubusercontent.com/siemens/kas/2.6.2/kas-container
> +host$ chmod a+x kas-container
> +```
> +
> +Build the image for swupdate
> +
> +```
> +host$ ./kas-container --isar build kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml

Would it be better to use ./kas-container menu?

> +```
> +- save the generated swu build/tmp/deploy/images/qemu-amd64/cip-core-image-cip-core-buster-qemu-amd64.swu in a separate folder (ex: tmp)
> +- modify the image for example add a new version to the image by adding PV=2.0.0 to cip-core-image.bb
> +- rebuild the image using above command and start the new target
> +```
> +host$ SWUPDATE_BOOT=y ./start-qemu.sh amd64
> +```
> +
> +Copy `cip-core-image-cip-core-buster-qemu-amd64.swu` file from `tmp` folder to the running system
> +
> +```
> +root@demo:~# scp <host-user>@<host-ip>:<path-to-swu-file>/tmp/cip-core-image-cip-core-buster-qemu-amd64.swu .
> +```

According to https://wiki.qemu.org/Documentation/Networking the default 
host ip should be 10.0.2.2.
> +
> +Check which partition is booted, e.g. with lsblk:
> +
> +```
> +root@demo:~# lsblk
> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
> +sda      8:0    0    2G  0 disk
> +├─sda1   8:1    0 16.4M  0 part
> +├─sda2   8:2    0   32M  0 part
> +├─sda3   8:3    0   32M  0 part
> +├─sda4   8:4    0 1000M  0 part /
> +└─sda5   8:5    0 1000M  0 part
> +```
> +
> +Apply swupdate and reboot
> +```
> +root@demo:~# swupdate -i cip-core-image-cip-core-buster-qemu-amd64.swu
> +root@demo:~# reboot
> +```
> +Check which partition is booted, e.g. with lsblk and the rootfs should have changed
> +```
> +root@demo:~# lsblk
> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
> +sda      8:0    0    2G  0 disk
> +├─sda1   8:1    0 16.4M  0 part
> +├─sda2   8:2    0   32M  0 part
> +├─sda3   8:3    0   32M  0 part
> +├─sda4   8:4    0 1000M  0 part
> +└─sda5   8:5    0 1000M  0 part /
> +```
> +
> +Check bootloader ustate after swupdate
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> +Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +
> +----------------------------
> + Config Partition #1 Values:
> +in_progress:      no
> +revision:         3
> +kernel:           C:BOOT1:vmlinuz
> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 console=tty0 console=ttyS0,115200 rootwait earlyprintk rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           2 (TESTING)
> +```
> +
> +if Partition #1 usate is 2 (TESTING) then execute below command to confirm swupdate and the command will set ustate to "OK"
> +```
> +root@demo:~# bg_setenv -c
> +```
> +
> +# swupdate rollback example
> +
> +Build the image for swupdate with service which causes kernel panic during system boot using below command.
> +
> +```
> +host$ ./kas-container --isar build kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml:kas/opt/kernel-panic.yml
> +```
> +- save the generated swu build/tmp/deploy/images/qemu-amd64/cip-core-image-cip-core-buster-qemu-amd64.swu in a separate folder (ex: tmp)
> +- build the image again without `kernel-panic.yml` recipe using below command
> +```
> +host$ ./kas-container --isar build kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml
> +```
> +
> +Start the target on QEMU
> +```
> +host$ SWUPDATE_BOOT=y ./start-qemu.sh amd64
> +```
> +
> +Copy `cip-core-image-cip-core-buster-qemu-amd64.swu` file from `tmp` folder to the running system
> +
> +```
> +root@demo:~# scp <host-user>@<host-ip>:<path-to-swu-file>/tmp/cip-core-image-cip-core-buster-qemu-amd64.swu .
> +```
> +
> +Check which partition is booted, e.g. with lsblk:
> +
> +```
> +root@demo:~# lsblk
> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
> +sda      8:0    0    2G  0 disk
> +├─sda1   8:1    0 16.4M  0 part
> +├─sda2   8:2    0   32M  0 part
> +├─sda3   8:3    0   32M  0 part
> +├─sda4   8:4    0 1000M  0 part /
> +└─sda5   8:5    0 1000M  0 part
> +```
> +
> +Check bootloader ustate before swupdate and should be as below
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> +Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +----------------------------
> +Config Partition #1 Values:
> +in_progress:      no
> +revision:         1
> +kernel:           C:BOOT1:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK > +```
> +
> +Apply swupdate as below
> +```
> +root@demo:~# swupdate -i cip-core-image-cip-core-buster-qemu-amd64.swu
> +```
> +
> +check bootloader ustate after swupdate. if the swupdate is successful then **revision number** should increase to **3** and status should be changed to **INSTALLED** for Partition #1.
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> +Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +----------------------------
> +Config Partition #1 Values:
> +in_progress:      no
> +revision:         3
> +kernel:           C:BOOT1:vmlinuz
> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 console=tty0 console=ttyS0,115200 rootwait earlyprintk rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           1 (INSTALLED)
> +```
> +
> +Execute reboot command
> +- reboot command should cause kernel panic error.
> +- watchdog timer should expire and restart the qemu. bootloader should select previous partition to boot.
> +```
> +root@demo:~# reboot
> +```
> +
> +Once the system is restarted, check the bootloader ustate
> +- if update is failed then **revision number** should reduce to **0** and status should change to **FAILED** for Partition #1.
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> + Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-corg
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +----------------------------
> + Config Partition #1 Values:
> +in_progress:      no
> +revision:         0
> +kernel:           C:BOOT1:vmlinuz
> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 console=tty0 console=ttyS0,115200 rootwait earlyprintk rw initrd=cip-core-image-cip-corg
> +watchdog timeout: 60 seconds
> +ustate:           3 (FAILED)
> +```

Quirin
Jan Kiszka Feb. 4, 2022, 6:48 a.m. UTC | #3
On 03.02.22 12:57, Gylstorff Quirin wrote:
> Hi,
> 
> On 2/1/22 16:35, Shivanand.Kunijadar@toshiba-tsip.com wrote:
>> From: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
>>
>> Prepare readme file with necessary steps to verify swupdate feature
>> with rollback functionality.
>>
>> Signed-off-by: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
>> ---
>>   doc/README.swupdate.md | 208 +++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 208 insertions(+)
>>   create mode 100644 doc/README.swupdate.md
>>
>> diff --git a/doc/README.swupdate.md b/doc/README.swupdate.md
>> new file mode 100644
>> index 0000000..56bc77c
>> --- /dev/null
>> +++ b/doc/README.swupdate.md
>> @@ -0,0 +1,208 @@
>> +
>> +Clone the isar-cip-core repository
>> +```
>> +host$ git clone
>> https://gitlab.com/cip-project/cip-core/isar-cip-core.git
>> +```
>> +
>> +Install `kas-container` from the [kas
>> project](https://github.com/siemens/kas):
>> +
>> +```
>> +host$ wget
>> https://raw.githubusercontent.com/siemens/kas/2.6.2/kas-container
>> +host$ chmod a+x kas-container
>> +```
>> +

Please refer to the existing instructions, rather than duplicating them.
Otherwise, we have to patch the kas-container version information in yet
another place.

>> +Build the image for swupdate
>> +
>> +```
>> +host$ ./kas-container --isar build
>> kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml
> 
> Would it be better to use ./kas-container menu?

Technically the same, but the above is probably easier to describe here.
But drop the obsolete "--isar".

> 
>> +```
>> +- save the generated swu
>> build/tmp/deploy/images/qemu-amd64/cip-core-image-cip-core-buster-qemu-amd64.swu
>> in a separate folder (ex: tmp)
>> +- modify the image for example add a new version to the image by
>> adding PV=2.0.0 to cip-core-image.bb
>> +- rebuild the image using above command and start the new target
>> +```
>> +host$ SWUPDATE_BOOT=y ./start-qemu.sh amd64
>> +```

OK, here that explicit building above, not using kas-container menu,
requires this explicit "SWUPDATE_BOOT=y". But not a major issue, also
given that we will add the panic option below, something that is likely
not helpful to expose in the kconfig menu.

>> +
>> +Copy `cip-core-image-cip-core-buster-qemu-amd64.swu` file from `tmp`
>> folder to the running system
>> +
>> +```
>> +root@demo:~# scp
>> <host-user>@<host-ip>:<path-to-swu-file>/tmp/cip-core-image-cip-core-buster-qemu-amd64.swu
>> .
>> +```
> 
> According to https://wiki.qemu.org/Documentation/Networking the default
> host ip should be 10.0.2.2.

Indeed, would be one variable less.

>> +
>> +Check which partition is booted, e.g. with lsblk:
>> +
>> +```
>> +root@demo:~# lsblk
>> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
>> +sda      8:0    0    2G  0 disk
>> +├─sda1   8:1    0 16.4M  0 part
>> +├─sda2   8:2    0   32M  0 part
>> +├─sda3   8:3    0   32M  0 part
>> +├─sda4   8:4    0 1000M  0 part /
>> +└─sda5   8:5    0 1000M  0 part
>> +```
>> +
>> +Apply swupdate and reboot
>> +```
>> +root@demo:~# swupdate -i cip-core-image-cip-core-buster-qemu-amd64.swu
>> +root@demo:~# reboot
>> +```
>> +Check which partition is booted, e.g. with lsblk and the rootfs
>> should have changed
>> +```
>> +root@demo:~# lsblk
>> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
>> +sda      8:0    0    2G  0 disk
>> +├─sda1   8:1    0 16.4M  0 part
>> +├─sda2   8:2    0   32M  0 part
>> +├─sda3   8:3    0   32M  0 part
>> +├─sda4   8:4    0 1000M  0 part
>> +└─sda5   8:5    0 1000M  0 part /
>> +```
>> +
>> +Check bootloader ustate after swupdate
>> +```
>> +root@demo:~# bg_printenv
>> +----------------------------
>> +Config Partition #0 Values:
>> +in_progress:      no
>> +revision:         2
>> +kernel:          
>> C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
>> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait
>> earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw
>> initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
>> +watchdog timeout: 60 seconds
>> +ustate:           0 (OK)
>> +
>> +user variables:
>> +
>> +----------------------------
>> + Config Partition #1 Values:
>> +in_progress:      no
>> +revision:         3
>> +kernel:           C:BOOT1:vmlinuz
>> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002
>> console=tty0 console=ttyS0,115200 rootwait earlyprintk rw
>> initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
>> +watchdog timeout: 60 seconds
>> +ustate:           2 (TESTING)
>> +```
>> +
>> +if Partition #1 usate is 2 (TESTING) then execute below command to
>> confirm swupdate and the command will set ustate to "OK"
>> +```
>> +root@demo:~# bg_setenv -c
>> +```
>> +
>> +# swupdate rollback example
>> +
>> +Build the image for swupdate with service which causes kernel panic
>> during system boot using below command.
>> +
>> +```
>> +host$ ./kas-container --isar build
>> kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml:kas/opt/kernel-panic.yml

Again, no more "--isar".

>>
>> +```
>> +- save the generated swu
>> build/tmp/deploy/images/qemu-amd64/cip-core-image-cip-core-buster-qemu-amd64.swu
>> in a separate folder (ex: tmp)
>> +- build the image again without `kernel-panic.yml` recipe using below
>> command
>> +```
>> +host$ ./kas-container --isar build
>> kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml

Also here.

>> +```
>> +
>> +Start the target on QEMU
>> +```
>> +host$ SWUPDATE_BOOT=y ./start-qemu.sh amd64
>> +```
>> +
>> +Copy `cip-core-image-cip-core-buster-qemu-amd64.swu` file from `tmp`
>> folder to the running system
>> +
>> +```
>> +root@demo:~# scp
>> <host-user>@<host-ip>:<path-to-swu-file>/tmp/cip-core-image-cip-core-buster-qemu-amd64.swu
>> .
>> +```
>> +
>> +Check which partition is booted, e.g. with lsblk:
>> +
>> +```
>> +root@demo:~# lsblk
>> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
>> +sda      8:0    0    2G  0 disk
>> +├─sda1   8:1    0 16.4M  0 part
>> +├─sda2   8:2    0   32M  0 part
>> +├─sda3   8:3    0   32M  0 part
>> +├─sda4   8:4    0 1000M  0 part /
>> +└─sda5   8:5    0 1000M  0 part
>> +```
>> +
>> +Check bootloader ustate before swupdate and should be as below
>> +```
>> +root@demo:~# bg_printenv
>> +----------------------------
>> +Config Partition #0 Values:
>> +in_progress:      no
>> +revision:         2
>> +kernel:          
>> C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
>> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait
>> earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw
>> initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
>> +watchdog timeout: 60 seconds
>> +ustate:           0 (OK)
>> +
>> +user variables:
>> +----------------------------
>> +Config Partition #1 Values:
>> +in_progress:      no
>> +revision:         1
>> +kernel:          
>> C:BOOT1:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
>> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait
>> earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 rw
>> initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
>> +watchdog timeout: 60 seconds
>> +ustate:           0 (OK > +```
>> +
>> +Apply swupdate as below
>> +```
>> +root@demo:~# swupdate -i cip-core-image-cip-core-buster-qemu-amd64.swu
>> +```
>> +
>> +check bootloader ustate after swupdate. if the swupdate is successful
>> then **revision number** should increase to **3** and status should be
>> changed to **INSTALLED** for Partition #1.
>> +```
>> +root@demo:~# bg_printenv
>> +----------------------------
>> +Config Partition #0 Values:
>> +in_progress:      no
>> +revision:         2
>> +kernel:          
>> C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
>> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait
>> earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw
>> initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
>> +watchdog timeout: 60 seconds
>> +ustate:           0 (OK)
>> +
>> +user variables:
>> +----------------------------
>> +Config Partition #1 Values:
>> +in_progress:      no
>> +revision:         3
>> +kernel:           C:BOOT1:vmlinuz
>> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002
>> console=tty0 console=ttyS0,115200 rootwait earlyprintk rw
>> initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
>> +watchdog timeout: 60 seconds
>> +ustate:           1 (INSTALLED)
>> +```
>> +
>> +Execute reboot command
>> +- reboot command should cause kernel panic error.
>> +- watchdog timer should expire and restart the qemu. bootloader
>> should select previous partition to boot.
>> +```
>> +root@demo:~# reboot
>> +```
>> +
>> +Once the system is restarted, check the bootloader ustate
>> +- if update is failed then **revision number** should reduce to **0**
>> and status should change to **FAILED** for Partition #1.
>> +```
>> +root@demo:~# bg_printenv
>> +----------------------------
>> + Config Partition #0 Values:
>> +in_progress:      no
>> +revision:         2
>> +kernel:          
>> C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
>> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait
>> earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw
>> initrd=cip-core-image-cip-corg
>> +watchdog timeout: 60 seconds
>> +ustate:           0 (OK)
>> +
>> +user variables:
>> +----------------------------
>> + Config Partition #1 Values:
>> +in_progress:      no
>> +revision:         0
>> +kernel:           C:BOOT1:vmlinuz
>> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002
>> console=tty0 console=ttyS0,115200 rootwait earlyprintk rw
>> initrd=cip-core-image-cip-corg
>> +watchdog timeout: 60 seconds
>> +ustate:           3 (FAILED)
>> +```
> 
> Quirin
> 

Thanks,
Jan
Jan Kiszka Feb. 8, 2022, 6:42 p.m. UTC | #4
On 08.02.22 12:32, Shivanand.Kunijadar@toshiba-tsip.com wrote:
> From: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> 
> Prepare readme file with necessary steps to verify swupdate feature
> with rollback functionality.
> 
> Signed-off-by: Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
> ---
>  doc/README.swupdate.md | 203 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 203 insertions(+)
>  create mode 100644 doc/README.swupdate.md
> 
> diff --git a/doc/README.swupdate.md b/doc/README.swupdate.md
> new file mode 100644
> index 0000000..05768da
> --- /dev/null
> +++ b/doc/README.swupdate.md
> @@ -0,0 +1,203 @@
> +
> +Clone the isar-cip-core repository
> +```
> +host$ git clone https://gitlab.com/cip-project/cip-core/isar-cip-core.git
> +```
> +
> +Build the CIP Core image
> +
> +Set up `kas-container` as described in the [top-level README](../README.md).
> +Then build the image:
> +```
> +host$ ./kas-container build kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml
> +```
> +- save the generated swu build/tmp/deploy/images/qemu-amd64/cip-core-image-cip-core-buster-qemu-amd64.swu in a separate folder (ex: tmp)
> +- modify the image for example add a new version to the image by adding PV=2.0.0 to cip-core-image.bb
> +- rebuild the image using above command and start the new target
> +```
> +host$ SWUPDATE_BOOT=y ./start-qemu.sh amd64
> +```
> +
> +Copy `cip-core-image-cip-core-buster-qemu-amd64.swu` file from `tmp` folder to the running system
> +
> +```
> +root@demo:~# scp <host-user>@10.0.2.2:<path-to-swu-file>/tmp/cip-core-image-cip-core-buster-qemu-amd64.swu .
> +```
> +
> +Check which partition is booted, e.g. with lsblk:
> +
> +```
> +root@demo:~# lsblk
> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
> +sda      8:0    0    2G  0 disk
> +├─sda1   8:1    0 16.4M  0 part
> +├─sda2   8:2    0   32M  0 part
> +├─sda3   8:3    0   32M  0 part
> +├─sda4   8:4    0 1000M  0 part /
> +└─sda5   8:5    0 1000M  0 part
> +```
> +
> +Apply swupdate and reboot
> +```
> +root@demo:~# swupdate -i cip-core-image-cip-core-buster-qemu-amd64.swu
> +root@demo:~# reboot
> +```
> +Check which partition is booted, e.g. with lsblk and the rootfs should have changed
> +```
> +root@demo:~# lsblk
> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
> +sda      8:0    0    2G  0 disk
> +├─sda1   8:1    0 16.4M  0 part
> +├─sda2   8:2    0   32M  0 part
> +├─sda3   8:3    0   32M  0 part
> +├─sda4   8:4    0 1000M  0 part
> +└─sda5   8:5    0 1000M  0 part /
> +```
> +
> +Check bootloader ustate after swupdate
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> +Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +
> +----------------------------
> + Config Partition #1 Values:
> +in_progress:      no
> +revision:         3
> +kernel:           C:BOOT1:vmlinuz
> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 console=tty0 console=ttyS0,115200 rootwait earlyprintk rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           2 (TESTING)
> +```
> +
> +if Partition #1 usate is 2 (TESTING) then execute below command to confirm swupdate and the command will set ustate to "OK"
> +```
> +root@demo:~# bg_setenv -c
> +```
> +
> +# swupdate rollback example
> +
> +Build the image for swupdate with service which causes kernel panic during system boot using below command.
> +
> +```
> +host$ ./kas-container build kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml:kas/opt/kernel-panic.yml
> +```
> +- save the generated swu build/tmp/deploy/images/qemu-amd64/cip-core-image-cip-core-buster-qemu-amd64.swu in a separate folder (ex: tmp)
> +- build the image again without `kernel-panic.yml` recipe using below command
> +```
> +host$ ./kas-container build kas-cip.yml:kas/board/qemu-amd64.yml:kas/opt/ebg-swu.yml
> +```
> +
> +Start the target on QEMU
> +```
> +host$ SWUPDATE_BOOT=y ./start-qemu.sh amd64
> +```
> +
> +Copy `cip-core-image-cip-core-buster-qemu-amd64.swu` file from `tmp` folder to the running system
> +
> +```
> +root@demo:~# scp <host-user>@10.0.2.2:<path-to-swu-file>/tmp/cip-core-image-cip-core-buster-qemu-amd64.swu .
> +```
> +
> +Check which partition is booted, e.g. with lsblk:
> +
> +```
> +root@demo:~# lsblk
> +NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
> +sda      8:0    0    2G  0 disk
> +├─sda1   8:1    0 16.4M  0 part
> +├─sda2   8:2    0   32M  0 part
> +├─sda3   8:3    0   32M  0 part
> +├─sda4   8:4    0 1000M  0 part /
> +└─sda5   8:5    0 1000M  0 part
> +```
> +
> +Check bootloader ustate before swupdate and should be as below
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> +Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +----------------------------
> +Config Partition #1 Values:
> +in_progress:      no
> +revision:         1
> +kernel:           C:BOOT1:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +```
> +
> +Apply swupdate as below
> +```
> +root@demo:~# swupdate -i cip-core-image-cip-core-buster-qemu-amd64.swu
> +```
> +
> +check bootloader ustate after swupdate. if the swupdate is successful then **revision number** should increase to **3** and status should be changed to **INSTALLED** for Partition #1.
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> +Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +----------------------------
> +Config Partition #1 Values:
> +in_progress:      no
> +revision:         3
> +kernel:           C:BOOT1:vmlinuz
> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 console=tty0 console=ttyS0,115200 rootwait earlyprintk rw initrd=cip-core-image-cip-core-buster-qemu-amd64-initrd.img
> +watchdog timeout: 60 seconds
> +ustate:           1 (INSTALLED)
> +```
> +
> +Execute reboot command
> +- reboot command should cause kernel panic error.
> +- watchdog timer should expire and restart the qemu. bootloader should select previous partition to boot.
> +```
> +root@demo:~# reboot
> +```
> +
> +Once the system is restarted, check the bootloader ustate
> +- if update is failed then **revision number** should reduce to **0** and status should change to **FAILED** for Partition #1.
> +```
> +root@demo:~# bg_printenv
> +----------------------------
> + Config Partition #0 Values:
> +in_progress:      no
> +revision:         2
> +kernel:           C:BOOT0:cip-core-image-cip-core-buster-qemu-amd64-vmlinuz
> +kernelargs:       console=tty0 console=ttyS0,115200 rootwait earlyprintk root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000001 rw initrd=cip-core-image-cip-corg
> +watchdog timeout: 60 seconds
> +ustate:           0 (OK)
> +
> +user variables:
> +----------------------------
> + Config Partition #1 Values:
> +in_progress:      no
> +revision:         0
> +kernel:           C:BOOT1:vmlinuz
> +kernelargs:       root=PARTUUID=fedcba98-7654-3210-cafe-5e0710000002 console=tty0 console=ttyS0,115200 rootwait earlyprintk rw initrd=cip-core-image-cip-corg
> +watchdog timeout: 60 seconds
> +ustate:           3 (FAILED)
> +```

Thanks, applied.

Jan
diff mbox series

Patch

diff --git a/kas/opt/swupdate-rollback.yml b/kas/opt/swupdate-rollback.yml
new file mode 100644
index 0000000..a3b0e28
--- /dev/null
+++ b/kas/opt/swupdate-rollback.yml
@@ -0,0 +1,19 @@ 
+#
+# CIP Core, generic profile
+#
+# Copyright (c) Toshiba Corporation, 2022
+#
+# Authors:
+#  Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
+#
+# SPDX-License-Identifier: MIT
+#
+# This kas file adds necessary scripts to cause kernel panic during system boot
+# which are required to test swupdate rollback feature
+
+header:
+  version: 10
+
+local_conf_header:
+  swupdate: |
+    IMAGE_INSTALL_append = " swupdate-rollback"
diff --git a/recipes-core/swupdate-rollback/files/sysrq-panic.service b/recipes-core/swupdate-rollback/files/sysrq-panic.service
new file mode 100644
index 0000000..ae868f9
--- /dev/null
+++ b/recipes-core/swupdate-rollback/files/sysrq-panic.service
@@ -0,0 +1,10 @@ 
+[Unit]
+Description=sysrq panic
+
+[Service]
+Type=oneshot
+ExecStart=/root/sysrq-panic.sh
+
+[Install]
+WantedBy=default.target
+
diff --git a/recipes-core/swupdate-rollback/files/sysrq-panic.sh b/recipes-core/swupdate-rollback/files/sysrq-panic.sh
new file mode 100644
index 0000000..a3c1bb7
--- /dev/null
+++ b/recipes-core/swupdate-rollback/files/sysrq-panic.sh
@@ -0,0 +1,4 @@ 
+#!/bin/sh
+
+echo c > /proc/sysrq-trigger
+
diff --git a/recipes-core/swupdate-rollback/swupdate-rollback.bb b/recipes-core/swupdate-rollback/swupdate-rollback.bb
new file mode 100644
index 0000000..5c93bb5
--- /dev/null
+++ b/recipes-core/swupdate-rollback/swupdate-rollback.bb
@@ -0,0 +1,27 @@ 
+#
+# CIP Core, generic profile
+#
+# Copyright (c) Toshiba Corporation, 2022
+#
+# Authors:
+#  Shivanand Kunijadar <Shivanand.Kunijadar@toshiba-tsip.com>
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit dpkg-raw
+
+DESCRIPTION = "Script and service files to cause kernel panic"
+
+SRC_URI = " \
+    file://sysrq-panic.sh \
+    file://sysrq-panic.service"
+
+do_install() {
+	install -v -d ${D}/root
+	install -v -m 0755 ${WORKDIR}/sysrq-panic.sh ${D}/root/
+	install -v -d ${D}/lib/systemd/system
+	install -v -m 0644 ${WORKDIR}/sysrq-panic.service ${D}/lib/systemd/system/
+	install -v -d ${D}/etc/systemd/system/default.target.wants
+	ln -s /lib/systemd/system/sysrq-panic.service ${D}/etc/systemd/system/default.target.wants/
+}