** Description changed: ==== Begin SRU Template ==== [Impact] Overlayfs allows a user to mount the root filesystem read-only and put an overlay over it. It handles mounting of the root filesystem in the initramfs, and updates /etc/fstab to account for non-root filesystems and generally make /etc/fstab "correct". systemd can get confused by a /etc/fstab that looks like this: LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 /media/root-ro/ / overlay lowerdir=... It would not recognize that the LABEL=cloudimg-rootfs image *was* mounted. This would lead to boot ordering cycles. The fix that was ultimately applied was just to comment out the line for /media/root-ro. That way systemd wouldnt try to ensure that /media/root-ro got mounted. The fix that was put in place was just to comment out the '/' (/media/root-ro) line in /etc/fstab. So essentially: - LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 + #LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 Since that happens in the initramfs before systemd ever generates mount options, it has the desired affect. And /media/root-ro is already mounted before systemd starts. [Test Case] - TBD + ## setup system to build maas images + $ sudo apt-get install -qy --no-install-recommends bzr + $ bzr branch lp:maas-images + $ cd maas-images + $ ./system-setup + + ## download the reference squashfs images. + $ arch=amd64 + $ burl=http://cloud-images.ubuntu.com/ + # download reference squashfs images + $ for rel in xenial zesty artful; do + file=../$rel-server-cloudimg-$arch.squashfs + [ -f "$file" ] && continue + wget "$burl/$rel/current/$file" -O "$file.tmp" && mv "$file.tmp" "$file"; + done + + ## build maas image output. This creates a squashfs image and kernel/initramfs + ## files that have the updated packages inside. + ## It does take a while to run, and lots of cpu and IO. + ## You can reduce the kernels built by commenting out 'lowlatency' and 'edge' + ## kernels: + ## sed -i -e '/^[ ].*\(lowlatency\|edge\)/s/^/#/' conf/meph-v3.yaml + # either set 'proposed' or add the repo via M2E_ADD_REPOS + $ proposed="--proposed" + $ export M2E_ADD_REPOS=ppa:smoser/cloud-initramfs-tools + $ for rel in xenial zesty artful; do + img=../$rel-server-cloudimg-$arch.squashfs + PATH=$PWD/bin:$PATH ./bin/meph2-build $proposed --config=conf/meph-v3.yaml \ + $arch $rel $(date +"%Y%m%d") $img ../$rel.d/ 2>&1 | + tee ../$rel.log + done + + ## After running, you will have files like: + $ find xenial.d/xenial -type f | sort + xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-initrd + xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-kernel + xenial.d/xenial/amd64/20171221/hwe-16.04/generic/boot-initrd + xenial.d/xenial/amd64/20171221/hwe-16.04/generic/boot-kernel + xenial.d/xenial/amd64/20171221/squashfs + xenial.d/xenial/amd64/20171221/squashfs.manifest + + ## You can verify in the $rel.log files you have 'Setting up cloud-initramfs-' + $ grep '^Setting up overlayroot' xenial.log + Setting up overlayroot (0.27ubuntu1.5~ppa16.04.1) ... + + + ## Now download the test-boot script, provide it a directory and + ## the squashfs, kernel, initramfs + + $ ./test-boot test-x xenial.d/xenial/amd64/20171221/squashfs \ + xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-kernel \ + xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-initrd + + $ r=zesty; ./test-boot work.d $r.d/*/amd64/*/squashfs $r.d/*/amd64/*/ga-*/generic/boot-kernel $r.d/*/amd64/*/ga-*/generic/boot-initrd + Now, do: + cd work.d + ./boot + + ## Running ./boot will serve the squashfs image over http, and then + ## boot the kernel and initrd with a kernel command line of + ## root=http://<url>/squashfs + ## and + ## ds=nocloud-net;seedfrom=http://10.0.2.2:9999/ + ## which will the read the 'user-data' and 'meta-data' files in that dir. + ## + ## The result is that you can log in with 'ubuntu' and 'passw0rd' + + ## Then collect some information + # you'll see the 'LABEL=' entry is commented out. + $ cat /etc/fstab + # local-fs.target should be fine + $ systemctl status local-fs.target --no-pager + # just for record + $ cat /proc/cmdline [Regression Potential] Not to omany things would depend on the /etc/fstab that exists in an system booted with overlayroot. Something that was reading /etc/fstab could be confused by this change. [Other Info] This change is believed to fix bug 1680197 as well, but due to the sporadic nature, we are not certain. ==== End SRU Template ==== I had reported this once before in bug 1666573. I thought it was fixed there, but apparently not. The failure shows itself as (controls removed): [ 80.089654] systemd[1]: media-root\x2dro.mount: Found ordering cycle on media-root\x2dro.mount/start [ 80.099474] systemd[1]: media-root\x2dro.mount: Found dependency on -.mount/start [ 80.108348] systemd[1]: media-root\x2dro.mount: Found dependency on media-root\x2dro.mount/start [ 80.117231] systemd[1]: Unable to break cycle [ 80.132286] systemd[1]: Requested transaction contains an unfixable cyclic ordering dependency: Resource deadlock avoided [ 80.180707] systemd[1]: Unnecessary job for VIRTUAL-DISK cloudimg-rootfs was removed. ... [ TIME ] Timed out waiting for device dev-disk-by\x2dlabel-UEFI.device. [DEPEND] Dependency failed for /boot/efi. [DEPEND] Dependency failed for Local File Systems. The /etc/fstab as read from / once we've left the initramfs looks like: # # This fstab is in an overlay. The real one can be found at # /media/root-ro/etc/fstab # The original entry for '/' and other mounts have been updated to be placed # under /media/root-ro. # To permanently modify this (or any other file), you should change-root into # a writable view of the underlying filesystem using: # sudo overlayroot-chroot # LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 /media/root-ro/ / overlay lowerdir=/media/root-ro/,upperdir=/media/root-rw/overlay/,workdir=/media/root-rw/overlay-workdir/_ 0 0 LABEL=UEFI /boot/efi vfat defaults 0 0 # overlayroot:fs-unsupported Notes: * I do not believe this is strictly tied to open-iscsi, but the test that we see it failing in is the open-iscsi test. Related bugs: * bug 1666573: transient systemd ordering cycle in boot with overlayroot ver read-only open-iscsi root * bug 1680197: Zesty deployments failing sporadically
** Attachment added: "test-squashfs-boot: script to boot a squashfs, kernel and initrd with overlayroot" https://bugs.launchpad.net/cloud-initramfs-tools/+bug/1723183/+attachment/5025775/+files/test-squashfs-boot ** Changed in: cloud-initramfs-tools (Ubuntu Xenial) Status: Confirmed => In Progress ** Changed in: cloud-initramfs-tools (Ubuntu Zesty) Status: Confirmed => In Progress ** Changed in: cloud-initramfs-tools (Ubuntu Artful) Status: Confirmed => In Progress ** Description changed: ==== Begin SRU Template ==== [Impact] Overlayfs allows a user to mount the root filesystem read-only and put an overlay over it. It handles mounting of the root filesystem in the initramfs, and updates /etc/fstab to account for non-root filesystems and generally make /etc/fstab "correct". systemd can get confused by a /etc/fstab that looks like this: LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 /media/root-ro/ / overlay lowerdir=... It would not recognize that the LABEL=cloudimg-rootfs image *was* mounted. This would lead to boot ordering cycles. The fix that was ultimately applied was just to comment out the line for /media/root-ro. That way systemd wouldnt try to ensure that /media/root-ro got mounted. The fix that was put in place was just to comment out the '/' (/media/root-ro) line in /etc/fstab. So essentially: - LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 + #LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 Since that happens in the initramfs before systemd ever generates mount options, it has the desired affect. And /media/root-ro is already mounted before systemd starts. [Test Case] ## setup system to build maas images $ sudo apt-get install -qy --no-install-recommends bzr $ bzr branch lp:maas-images $ cd maas-images $ ./system-setup ## download the reference squashfs images. $ arch=amd64 $ burl=http://cloud-images.ubuntu.com/ # download reference squashfs images $ for rel in xenial zesty artful; do - file=../$rel-server-cloudimg-$arch.squashfs - [ -f "$file" ] && continue - wget "$burl/$rel/current/$file" -O "$file.tmp" && mv "$file.tmp" "$file"; - done + file=../$rel-server-cloudimg-$arch.squashfs + [ -f "$file" ] && continue + wget "$burl/$rel/current/$file" -O "$file.tmp" && mv "$file.tmp" "$file"; + done ## build maas image output. This creates a squashfs image and kernel/initramfs ## files that have the updated packages inside. ## It does take a while to run, and lots of cpu and IO. ## You can reduce the kernels built by commenting out 'lowlatency' and 'edge' ## kernels: ## sed -i -e '/^[ ].*\(lowlatency\|edge\)/s/^/#/' conf/meph-v3.yaml # either set 'proposed' or add the repo via M2E_ADD_REPOS $ proposed="--proposed" $ export M2E_ADD_REPOS=ppa:smoser/cloud-initramfs-tools $ for rel in xenial zesty artful; do - img=../$rel-server-cloudimg-$arch.squashfs - PATH=$PWD/bin:$PATH ./bin/meph2-build $proposed --config=conf/meph-v3.yaml \ - $arch $rel $(date +"%Y%m%d") $img ../$rel.d/ 2>&1 | - tee ../$rel.log - done + img=../$rel-server-cloudimg-$arch.squashfs + PATH=$PWD/bin:$PATH ./bin/meph2-build $proposed --config=conf/meph-v3.yaml \ + $arch $rel $(date +"%Y%m%d") $img ../$rel.d/ 2>&1 | + tee ../$rel.log + done ## After running, you will have files like: $ find xenial.d/xenial -type f | sort xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-initrd xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-kernel xenial.d/xenial/amd64/20171221/hwe-16.04/generic/boot-initrd xenial.d/xenial/amd64/20171221/hwe-16.04/generic/boot-kernel xenial.d/xenial/amd64/20171221/squashfs xenial.d/xenial/amd64/20171221/squashfs.manifest ## You can verify in the $rel.log files you have 'Setting up cloud-initramfs-' $ grep '^Setting up overlayroot' xenial.log Setting up overlayroot (0.27ubuntu1.5~ppa16.04.1) ... - ## Now download the test-boot script, provide it a directory and ## the squashfs, kernel, initramfs $ ./test-boot test-x xenial.d/xenial/amd64/20171221/squashfs \ - xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-kernel \ - xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-initrd + xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-kernel \ + xenial.d/xenial/amd64/20171221/ga-16.04/generic/boot-initrd $ r=zesty; ./test-boot work.d $r.d/*/amd64/*/squashfs $r.d/*/amd64/*/ga-*/generic/boot-kernel $r.d/*/amd64/*/ga-*/generic/boot-initrd Now, do: - cd work.d - ./boot + cd work.d + ./boot ## Running ./boot will serve the squashfs image over http, and then ## boot the kernel and initrd with a kernel command line of ## root=http://<url>/squashfs ## and ## ds=nocloud-net;seedfrom=http://10.0.2.2:9999/ ## which will the read the 'user-data' and 'meta-data' files in that dir. ## ## The result is that you can log in with 'ubuntu' and 'passw0rd' ## Then collect some information # you'll see the 'LABEL=' entry is commented out. $ cat /etc/fstab # local-fs.target should be fine $ systemctl status local-fs.target --no-pager # just for record $ cat /proc/cmdline [Regression Potential] Not to omany things would depend on the /etc/fstab that exists in an system booted with overlayroot. Something that was reading /etc/fstab could be confused by this change. [Other Info] This change is believed to fix bug 1680197 as well, but due to the sporadic nature, we are not certain. + + The fix applied here is a backport what is currently in bionic to + each release. in xenial, that means a new binary package + (cloud-initramfs-updateroot). ==== End SRU Template ==== I had reported this once before in bug 1666573. I thought it was fixed there, but apparently not. The failure shows itself as (controls removed): [ 80.089654] systemd[1]: media-root\x2dro.mount: Found ordering cycle on media-root\x2dro.mount/start [ 80.099474] systemd[1]: media-root\x2dro.mount: Found dependency on -.mount/start [ 80.108348] systemd[1]: media-root\x2dro.mount: Found dependency on media-root\x2dro.mount/start [ 80.117231] systemd[1]: Unable to break cycle [ 80.132286] systemd[1]: Requested transaction contains an unfixable cyclic ordering dependency: Resource deadlock avoided [ 80.180707] systemd[1]: Unnecessary job for VIRTUAL-DISK cloudimg-rootfs was removed. ... [ TIME ] Timed out waiting for device dev-disk-by\x2dlabel-UEFI.device. [DEPEND] Dependency failed for /boot/efi. [DEPEND] Dependency failed for Local File Systems. The /etc/fstab as read from / once we've left the initramfs looks like: # # This fstab is in an overlay. The real one can be found at # /media/root-ro/etc/fstab # The original entry for '/' and other mounts have been updated to be placed # under /media/root-ro. # To permanently modify this (or any other file), you should change-root into # a writable view of the underlying filesystem using: # sudo overlayroot-chroot # LABEL=cloudimg-rootfs /media/root-ro/ ext4 ro,defaults,noauto 0 0 /media/root-ro/ / overlay lowerdir=/media/root-ro/,upperdir=/media/root-rw/overlay/,workdir=/media/root-rw/overlay-workdir/_ 0 0 LABEL=UEFI /boot/efi vfat defaults 0 0 # overlayroot:fs-unsupported Notes: * I do not believe this is strictly tied to open-iscsi, but the test that we see it failing in is the open-iscsi test. Related bugs: * bug 1666573: transient systemd ordering cycle in boot with overlayroot ver read-only open-iscsi root * bug 1680197: Zesty deployments failing sporadically -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1723183 Title: transient systemd ordering issue when using overlayroot To manage notifications about this bug go to: https://bugs.launchpad.net/cloud-initramfs-tools/+bug/1723183/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
