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 |
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/ > +}
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
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
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 --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/ +}