1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#!/bin/sh
trap 'poweroff -f' EXIT
set -e
# populate TEST_FSTYPE
. /env
if [ "$TEST_FSTYPE" = "zfs" ]; then
zpool create dracut mirror /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
zfs create dracut/root
elif [ "$TEST_FSTYPE" = "btrfs" ]; then
mkfs.btrfs -q -draid1 -mraid1 -L dracut /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
udevadm settle
btrfs device scan
else
# storage layers (if available)
# mdadm (optional) --> crypt (optional) --> lvm --> TEST_FSTYPE (e.g. ext4)
if ! grep -qF 'rd.md=0' /proc/cmdline && command -v mdadm > /dev/null; then
mdadm --create /dev/md0 --run --level=1 --metadata=0.90 --raid-devices=2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
# wait for the array to finish initializing, otherwise this sometimes fails randomly.
mdadm -W /dev/md0 || :
fi
if ! grep -qF 'rd.luks=0' /proc/cmdline && command -v cryptsetup > /dev/null; then
printf test > keyfile
cryptsetup --pbkdf pbkdf2 -q luksFormat /dev/md0 /keyfile
echo "The passphrase is test"
cryptsetup luksOpen /dev/md0 dracut_crypt_test < /keyfile
lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test
lvm vgcreate dracut /dev/mapper/dracut_crypt_test
else
if [ -e /dev/md0 ]; then
lvm pvcreate -ff -y /dev/md0
lvm vgcreate dracut /dev/md0
else
for dev in /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]; do
lvm pvcreate -ff -y "$dev"
done
lvm vgcreate dracut /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk[12]
fi
fi
if grep -qF 'test.thin' /proc/cmdline; then
modprobe dm_thin_pool
lvm lvcreate --yes --ignoremonitoring --extents 100%FREE --thin dracut/mythinpool
lvm lvcreate --yes --ignoremonitoring --virtualsize 400M --thin dracut/mythinpool --name root
else
lvm lvcreate --yes --ignoremonitoring --extents 100%FREE --name root dracut
fi
lvm vgchange --ignoremonitoring -ay
eval "mkfs.${TEST_FSTYPE} -q -L dracut /dev/dracut/root"
fi
udevadm settle
mkdir -p /sysroot
if [ "$TEST_FSTYPE" = "zfs" ]; then
zfs set mountpoint=/sysroot dracut/root
zfs get mounted dracut/root
elif [ "$TEST_FSTYPE" = "btrfs" ]; then
mount -t "$TEST_FSTYPE" /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_disk1 /sysroot
else
mount -t "$TEST_FSTYPE" /dev/dracut/root /sysroot
fi
cp -a -t /sysroot /source/*
umount /sysroot
if [ -e /dev/md0 ]; then
lvm lvchange -a n /dev/dracut/root
udevadm settle
mdadm -W /dev/md0 || :
udevadm settle
mdadm --detail --export /dev/md0 | grep -F MD_UUID > /tmp/mduuid
. /tmp/mduuid
udevadm settle
eval "$(udevadm info --query=property --name=/dev/md0 | while read -r line || [ -n "$line" ]; do [ "$line" != "${line#*ID_FS_UUID*}" ] && echo "$line"; done)"
fi
{
echo "dracut-root-block-created"
echo "MD_UUID=$MD_UUID"
echo "ID_FS_UUID=$ID_FS_UUID"
} | dd oflag=direct of=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_marker status=none
sync
poweroff -f
|