<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hi,</div><div><br></div><div>I build an efi based image with Elbe and use dual copy(A/B) approach to always have a running system on the device. The hard disk image (Buster) has 3 partitions (efi,root1,config). The other 2 partitions(root2,data) are created during the first init procedure. As updater client I want to use the SWUpdate (from the official Debian repository) which can do atomic updates. For updating I created swu image file as described in the documentation (<a href="https://sbabic.github.io/swupdate/sw-description.html#software-collections-and-operation-modes">https://sbabic.github.io/swupdate/sw-description.html#software-collections-and-operation-modes</a>). When I update the device, SWupdate says that the installation is successful and does not give an error message. But switching between root partitions does not happen because SWUpdate somehow did not create the environment variables on the grub environment block. That's why the grub bootloader can't read a variable from the environment block and change the default menu entry in the grub configuration file. What I noticed is that the file structure of the Efi partition is different from standard Debian.  The Efi partition that the Elbe created has only the BOOTX64.EFI (boot/efi/EFI/BOOT/BOOTX64.efi) file. Standard Debian has here grubx64.efi and grub.cfg file which contains the partition UUID where the actual grub.cfg file with the menu entries is located. </div><div><br></div><div>For testing I installed standard Debian (Buster) on VM and manually partitioned it using the dual copy approach. (2 scenarios --> Boot|Root1,Root2,Data and Root1|Root2|Data)</div><div>SWUpdate was able to set the environment variables on the environment block here. So the grub can switch between root partitions because it could load the variables.</div><div><br></div><div>My questions are;</div><div>1)Why does SWupdate not write the variables on the grub environment block ?</div><div>2)Is it possible that the path of the environment block file is wrong ? If so, where should the grub directory be installed ? How can I adjust the elbe xml file for it so that the grub bootloader is configured correctly and SWupdate can find the GRUB environment block?</div><div>3) Are there any example update scenarios with Elbe and SWUpdate?</div><div><br></div><div>Can anyone please let me know how I should resolve it?</div><div><br></div><div>Best regards,</div><div>Esad Ergül</div><div><br></div><div><br></div><div><b><u>sw-description</u></b></div><div><br></div><div>software = {</div><div>    version = "0.1.0";</div><div>    hardware-compatibility = ["Test","1.0"];</div><div><br></div><div>    rootfs: {</div><div>        copy1: {</div><div>            images: (</div><div>                {</div><div>                    filename = "root.img.gz.enc";</div><div>                    device = "/dev/sda2";</div><div>                    compressed = "zlib";</div><div>                    encrypted = true;</div><div>                    ivt = "";</div><div>                    installed-directly = true;</div><div>                    type = "raw";</div><div>                    sha256 = "1213213123***";</div><div>                }</div><div>            );</div><div>            bootenv: (</div><div>                {</div><div>                    name = "boot_entry";</div><div>                    value = "0";</div><div>                }</div><div>            );</div><div>            scripts: (</div><div>                {</div><div>                    filename = "update.sh";</div><div>                    type = "shellscript";</div><div>                    sha256 = "1213213123***";</div><div>                }</div><div>            );</div><div>        };</div><div>        copy2: {</div><div>            images: (</div><div>                {</div><div>                    filename = "root.img.gz.enc";</div><div>                    device = "/dev/sda4";</div><div>                    compressed = "zlib";</div><div>                    encrypted = true;</div><div>                    ivt = "";</div><div>                    installed-directly = true;</div><div>                    type = "raw";</div><div>                    sha256 = "1213213123***";</div><div>                }</div><div>            );</div><div>            bootenv: (</div><div>                {</div><div>                    name = "boot_entry";</div><div>                    value = "1";</div><div>                }</div><div>            );</div><div>            scripts: (</div><div>                {</div><div>                    filename = "update.sh";</div><div>                    type = "shellscript";</div><div>                    sha256 = "1213213123***";</div><div>                }</div><div>            );</div><div>        };</div><div>    };</div><div>};</div><div><br></div><div><br></div><div><br></div><div><b><u>elbe-xml</u></b></div><div><br></div><div><ns0:RootFileSystem xmlns:ns0="<a href="https://www.linutronix.de/projects/Elbe">https://www.linutronix.de/projects/Elbe</a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" created="2009-05-20T08:50:56" revision="6" xsi:schemaLocation="<a href="http://www.tglx.de/~bene/.RFS">http://www.tglx.de/~bene/.RFS</a> dbsfed.xsd"></div><div><br></div><div>  <project></div><div>    <name>Test device</name></div><div>    <version>1.0</version></div><div>    <description></div><div>      Test</div><div>    </description></div><div>    <buildtype>amd64</buildtype></div><div>    <mirror></div><div>      <primary_host>IP</primary_host></div><div>      <primary_path>debian_mirror/debian-buster</primary_path></div><div>      <primary_proto>http</primary_proto></div><div>      <url-list></div><div>        -------------</div><div>        <url></div><div>          <binary><a href="http://IP/debian_mirror/debian-buster">http://IP/debian_mirror/debian-buster</a> buster-backports-sloppy main contrib non-free</binary></div><div>          <source><a href="http://IP/debian_mirror/debian-buster">http://IP/debian_mirror/debian-buster</a> buster-backports-sloppy main contrib non-free</source></div><div>        </url>          </div><div><span style="white-space:pre">              </span>-------------</div><div>      </url-list></div><div>    </mirror></div><div><span style="white-space:pre">            </span>-----------</div><div><span style="white-space:pre">           </span><suite>buster</suite></div><div>    <noauth /></div><div><br></div><div><br></div><div><br></div><div>  </project></div><div><br></div><div>  <target></div><div><span style="white-space:pre">          </span>----------------</div><div><br></div><div>    <package></div><div>      <tar></div><div>        <name>nfsroot.tar.gz</name></div><div>      </tar></div><div>    </package></div><div><br></div><div>    <images></div><div>      <gpthd></div><div>        <name>target.img</name></div><div>        <size>6800MiB</size></div><div>        <grub-install /></div><div>        <partition></div><div>          <size>200MB</size></div><div>          <label>EFI</label></div><div><span style="white-space:pre">    </span>        <bootable>true</bootable></div><div>        </partition>                     </div><div>        <partition></div><div>          <size>6200MiB</size></div><div>          <label>ROOT</label></div><div>        </partition></div><div>        <partition></div><div>          <size>300MiB</size></div><div>          <label>CONFIG</label></div><div>        </partition></div><div>      </gpthd></div><div>    </images></div><div><br></div><div>    <fstab></div><div>      <bylabel></div><div>        <label>EFI</label></div><div>        <mountpoint>/boot/efi</mountpoint></div><div>        <fs></div><div>          <type>vfat</type></div><div>        </fs></div><div>      </bylabel></div><div><br></div><div>      <bylabel></div><div>        <label>ROOT</label></div><div>        <mountpoint>/</mountpoint></div><div>        <fs></div><div>          <type>ext4</type></div><div>          <tune2fs /></div><div>          <passno>0</passno></div><div>        </fs></div><div>        <options>ro</options></div><div>      </bylabel></div><div><br></div><div>      <bylabel></div><div>        <label>CONFIG</label></div><div>        <mountpoint>/nand</mountpoint></div><div>        <fs></div><div>          <type>ext4</type></div><div>          <tune2fs /></div><div>          <passno>0</passno></div><div>        </fs></div><div>        <options>discard</options></div><div>      </bylabel></div><div><br></div><div>      <bylabel></div><div>        <label>DATA</label></div><div>        <mountpoint>/data</mountpoint></div><div>        <fs></div><div>          <type>ext4</type></div><div>          <tune2fs /></div><div>          <passno>0</passno></div><div>        </fs></div><div>        <options>nofail,discard</options></div><div>      </bylabel></div><div><br></div><div><span style="white-space:pre">               </span>-----</div><div>    </fstab></div><div><br></div><div>    <finetuning></div><div><span style="white-space:pre">              </span>-------------------</div><div>      <command>find /boot -name "vmlinuz*" |sort -nr |head -1 |xargs -I {} ln -s {} /boot/vmlinuz </command></div><div>      <command>find /boot -name "initrd*" |sort -nr |head -1 |xargs -I {} ln -s {} /boot/initrd.img </command></div><div><br></div><div>    </finetuning></div><div><br></div><div>    <pkg-list></div><div><br></div><div>      <!-- packages --></div><div><span style="white-space:pre">          </span>-------------</div><div>      <!-- GRUB --></div><div>      <pkg>grub-efi-amd64</pkg></div><div>      <pkg>efibootmgr</pkg>      </div><div>      <pkg>shim-signed</pkg></div><div><span style="white-space:pre">            </span>--------------</div><div>    <!-- Linux Kernel --></div><div>      <pkg>linux-image-rt-amd64</pkg> </div><div><span style="white-space:pre">           </span>--------------</div><div>    <!-- Updater Client --></div><div>      <pkg>swupdate</pkg></div><div><br></div><div>    </pkg-list></div><div><br></div><div>  </target></div><div></ns0:RootFileSystem></div><div><br></div><div><b><u>SWUpdate log</u></b></div><div><br></div><div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [network_thread] : Incoming network request: processing...</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [INFO ] : SWUPDATE started :  Software Update started !</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [network_initializer] : Software update started</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_file_to_tmp] : Found file</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_file_to_tmp] :         filename sw-description</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_file_to_tmp] :         size 1946</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_file_to_tmp] : Found file</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_file_to_tmp] :         filename sw-description.sig</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_file_to_tmp] :         size 2088</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [network_thread] : Incoming network request: processing...</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [swupdate_verify_file] : Verified OK</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [get_common_fields] : Version 0.1.0</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [parse_hw_compatibility] : Accepted Hw Revision : Touch-it-XELO</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [parse_hw_compatibility] : Accepted Hw Revision : 1.0</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [_parse_images] : Found compressed Image: root.img.gz.enc in device : /dev/sda4 for handler raw (installed from stream)</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [_parse_scripts] : Found Script: update.sh</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [_parse_bootloader] : Bootloader var: boot_entry = 1</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [check_hw_compatibility] : Hardware Touch-it-XELO Revision: 1.0</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [check_hw_compatibility] : Hardware compatibility verified</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] : Found file</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] :         filename root.img.gz.enc</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] :         size 1354798528 required</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] : Installing STREAM root.img.gz.enc, 1354798528 bytes</div><div>Apr 25 16:25:26 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [install_single_image] : Found installer for stream root.img.gz.enc raw</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: START Software Update started !</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [network_initializer] : Software update started</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_file_to_tmp] : Found file</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_file_to_tmp] :         filename sw-description</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_file_to_tmp] :         size 1946</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_file_to_tmp] : Found file</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_file_to_tmp] :         filename sw-description.sig</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_file_to_tmp] :         size 2088</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [swupdate_verify_file] : Verified OK</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [get_common_fields] : Version 0.1.0</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [parse_hw_compatibility] : Accepted Hw Revision : Touch-it-XELO</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [parse_hw_compatibility] : Accepted Hw Revision : 1.0</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [_parse_images] : Found compressed Image: root.img.gz.enc in device : /dev/sda4 for handler raw (installed from stream)</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [_parse_scripts] : Found Script: update.sh</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [_parse_bootloader] : Bootloader var: boot_entry = 1</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [check_hw_compatibility] : Hardware Touch-it-XELO Revision: 1.0</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [check_hw_compatibility] : Hardware compatibility verified</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_files] : Found file</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_files] :         filename root.img.gz.enc</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_files] :         size 1354798528 required</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [extract_files] : Installing STREAM root.img.gz.enc, 1354798528 bytes</div><div>Apr 25 16:25:26 PanelComputer swupdate[860]: RUN [install_single_image] : Found installer for stream root.img.gz.enc raw</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] : END INSTALLING STREAMING</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] : Found file</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] :         filename update.sh</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_files] :         size 1902 required</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [extract_padding] : Expecting 20 padding bytes at end-of-file</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [network_initializer] : Valid image found: copying to FLASH</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [INFO ] : SWUPDATE running :  Installation in progress</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [extract_files] : END INSTALLING STREAMING</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [extract_files] : Found file</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [extract_files] :         filename update.sh</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [extract_files] :         size 1902 required</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [extract_padding] : Expecting 20 padding bytes at end-of-file</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [network_initializer] : Valid image found: copying to FLASH</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN Installation in progress</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [read_lines_notify] : call do_preinst</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [read_lines_notify] : do_preinst</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [read_lines_notify] : call do_preinst</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [read_lines_notify] : do_preinst</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [run_system_cmd] : /tmp/scripts/update.sh preinst  command returned 0</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [run_system_cmd] : /tmp/scripts/update.sh preinst  command returned 0</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [read_lines_notify] : call do_postinst</div><div>Apr 25 16:27:59 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [read_lines_notify] : do_postinst</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [read_lines_notify] : call do_postinst</div><div>Apr 25 16:27:59 PanelComputer swupdate[860]: RUN [read_lines_notify] : do_postinst</div><div>Apr 25 16:28:00 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [run_system_cmd] : /tmp/scripts/update.sh postinst  command returned 0</div><div>Apr 25 16:28:00 PanelComputer swupdate[860]: RUN [run_system_cmd] : /tmp/scripts/update.sh postinst  command returned 0</div><div>Apr 25 16:28:00 PanelComputer swupdate.sh[860]: [INFO ] : SWUPDATE successful ! SWUPDATE successful !</div><div>Apr 25 16:28:00 PanelComputer swupdate.sh[860]: [TRACE] : SWUPDATE running :  [network_initializer] : Main thread sleep again !</div><div>Apr 25 16:28:00 PanelComputer swupdate.sh[860]: [INFO ] : No SWUPDATE running :  Waiting for requests...</div><div>Apr 25 16:28:00 PanelComputer swupdate[860]: SUCCESS SWUPDATE successful !</div><div>Apr 25 16:28:00 PanelComputer swupdate[860]: RUN [network_initializer] : Main thread sleep again !</div><div>Apr 25 16:28:00 PanelComputer swupdate[860]: IDLE Waiting for requests...</div></div></div></div></div></div>