On 2015-12-11, Martin Michlmayr wrote: > Package: flash-kernel > Version: 3.52 > > I noticed these two patches: > > https://lists.debian.org/debian-kernel/2015/12/msg00167.html > https://lists.debian.org/debian-kernel/2015/12/msg00168.html > > flash-kernel probably needs a similar change, or should use the code > from initramfs-tools if possibl.
I didn't use blkid, but added support for PARTUUID in 3.69, and just added support for PARTLABEL in git. I don't think flash-kernel should use blkid in the way that initramfs-tools is using it, as initramfs-tools uses blkid at boot time, and the flash-kernel code is run at initramfs creation time... hard-coding the specific device at that point doesn't seem like the right approach. That said, it was really quite simple to add: # Translate LABEL, UUID, PARTLABEL and PARTUUID entries into a proper # device name. case "$rootdev" in LABEL=* | UUID=* | PARTLABEL=* | PARTUUID=*) rootdev="$(blkid -l -t "$rootdev" -o device)" ;; *=*) echo "/etc/fstab parse error; cannot recognize root $rootdev" >&2 rootdev=/dev/sda2 echo "guessing that the root device is $rootdev" >&2 ;; esac But it ends up hard-coding, for example, ROOT="/dev/sda3" into the initramfs, which isn't really correct. The blkid resolution should be resolved at boot, in initramfs-tools. I think the current code is actually safer, as it doesn't depend on device ordering remaining static at boot: # Translate LABEL, UUID, and PARTUUID entries into a proper device name. if echo "$rootdev" | grep -q "="; then a=$(echo "$rootdev" | cut -d "=" -f 1) b=$(echo "$rootdev" | cut -d "=" -f 2- | sed -e 's/^"\(.*\)"$/\1/') case "$a" in LABEL) c=$(echo "$b" | sed 's#/#\\x2f#g') if [ -e /dev/disk/by-label/$c ]; then rootdev="/dev/disk/by-label/$c" else echo "Label $b not found in /dev/disk/by-label" >&2 fi ;; UUID) rootdev=/dev/disk/by-uuid/$b if [ ! -e $rootdev ]; then echo "UUID $b doesn't exist in /dev/disk/by-uuid" >&2 fi ;; PARTUUID) rootdev=/dev/disk/by-partuuid/$b if [ ! -e $rootdev ]; then echo "PARTUUID $b doesn't exist in /dev/disk/by-partuuid" >&2 fi ;; PARTLABEL) rootdev=/dev/disk/by-partlabel/$b if [ ! -e $rootdev ]; then echo "PARTLABEL $b doesn't exist in /dev/disk/by-partlabel" >&2 fi ;; *) echo "/etc/fstab parse error; cannot recognize root $rootdev" >&2 rootdev=/dev/sda2 echo "guessing that the root device is $rootdev" >&2 ;; esac fi Although, older kernels or older versions of udev may not support the /dev/disk/by-* symlink... It might be worth exploring just passing ROOT="$rootdev" without any modification, and let initramfs-tools resolve it appropriately. live well, vagrant
signature.asc
Description: PGP signature