Skip to content

Commit

Permalink
dracut/ignition-ostree: Regenerate UUIDs for /boot and /
Browse files Browse the repository at this point in the history
This is a general best practice; the intention of filesystem
UUIDs is that they're unique.  It helps backup systems and the like
if we change this.

But in the future, we may also switch to using these UUIDs for subsequent
boots; see: coreos/fedora-coreos-tracker#465
  • Loading branch information
cgwalters committed Apr 17, 2020
1 parent 49de0c7 commit c855ae4
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash
set -euo pipefail
# https://github.com/coreos/fedora-coreos-tracker/issues/465
# coreos-assembler generates disk images which are installed bit-for-bit
# or booted directly in the cloud.
# Generate new UUID on firstboot; this is general best practice, but in the future
# we may use this for mounting by e.g. adding a boot=<uuid> and root=<uuid> kernel args.
# Note this code should be changed when we land https://github.com/coreos/fedora-coreos-tracker/issues/94
# so that we only generate a new UUID if we're using the default one.

regenerate_uuid() {
local path=$1
shift
if ! [ -b "${path}" ]; then
echo "$0: Failed to find block device ${path}" 1>&2
exit 1
fi
eval $(blkid -o export ${path})
case "${TYPE}" in
ext4) tune2fs -U random "${path}" ;;
xfs) xfs_admin -U generate "${path}" ;;
*) echo "warning: Don't know how to generate uuid for filesystem ${TYPE} at ${path}" 1>&2 ;;
esac
}

regenerate_uuid /dev/disk/by-label/$1
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,11 @@ eval $(blkid -o export ${rootpath})
mountflags=
if [ "${TYPE}" == "xfs" ]; then
mountflags=prjquota
# Generate a new UUID; this is general best practice, but in the future
# we may use this for mounting.
# https://github.com/coreos/fedora-coreos-tracker/issues/465
# Note this code should be changed when we land https://github.com/coreos/fedora-coreos-tracker/issues/94
# so that we only generate a new UUID if we're using the default one.
xfs_admin -U generate "${rootpath}"
fi
mount -o "${mountflags}" "${rootpath}" /sysroot
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[Unit]
Description=Ignition OSTree: Regenerate filesystem UUID (boot)
DefaultDependencies=false
ConditionPathExists=/usr/lib/initrd-release
ConditionKernelCommandLine=ostree
ConditionPathExists=!/run/ostree-live
# We run pretty early
Before=coreos-copy-firstboot-network.service
Before=ignition-fetch.service
Before=ignition-setup-base.service
Before=ignition-setup-user.service

Requires=dev-disk-by\x2dlabel-boot.device
After=dev-disk-by\x2dlabel-boot.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/ignition-ostree-firstboot-uuid boot
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[Unit]
Description=Ignition OSTree: Regenerate filesystem UUID (root)
# These conditions match mount-firstboot-sysroot.service
DefaultDependencies=false
ConditionKernelCommandLine=!root
ConditionKernelCommandLine=ostree
ConditionPathExists=!/run/ostree-live
Before=initrd-root-fs.target
After=ignition-disks.service
# Note we don't have a Requires: /dev/disk/by-label/root here like
# the -subsequent service does because ignition-disks may have
# regenerated it.
Before=ignition-ostree-mount-firstboot-sysroot.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/ignition-ostree-firstboot-uuid root
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ install() {
findmnt \
growpart \
realpath \
tune2fs \
resize2fs \
tail \
touch \
xfs_admin \
xfs_growfs

# growpart deps
Expand All @@ -60,6 +62,11 @@ install() {
done

install_ignition_unit ignition-ostree-mount-firstboot-sysroot.service diskful
for p in boot root; do
install_ignition_unit ignition-ostree-uuid-${p}.service diskful
done
inst_script "$moddir/ignition-ostree-firstboot-uuid" \
"/usr/sbin/ignition-ostree-firstboot-uuid"
install_ignition_unit ignition-ostree-mount-subsequent-sysroot.service diskful-subsequent
inst_script "$moddir/ignition-ostree-mount-sysroot.sh" \
"/usr/sbin/ignition-ostree-mount-sysroot"
Expand Down

0 comments on commit c855ae4

Please sign in to comment.