SPS · log · files · refs · tags · releases · people · languages · GitHub · commit
4bed32e
mkiso: put lsblk and partition tools on every live image
Parents
Stat
bin/mkiso | 22 ++++++++++++++++++++++ lib/mkiso/live-bins | 26 ++++++++++++++++++++++++++ lib/mkiso/live-rc | 3 ++- lib/mkiso/seed-bins | 3 +++ lib/setup/partition.sh | 4 ++-- tests/test_mkiso.sh | 9 +++++++++ 6 files changed, 64 insertions(+), 3 deletions(-)
Diff
diff --git a/bin/mkiso b/bin/mkiso
index 87a7e7e..49056cb 100755
--- a/bin/mkiso
+++ b/bin/mkiso
@@ -285,6 +285,22 @@ mkiso_copy_libs()
done
}
+# Copy a host command by name. live-bins lists common paths, but util-linux
+# puts lsblk in /bin on this builder and /usr/bin on others. Silent skips
+# of a missing path are why live setup printed "no disks found".
+mkiso_copy_host_cmd()
+{
+ mkiso_cmd=$1
+ mkiso_old_path=$PATH
+ PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH
+ mkiso_found=$(command -v "$mkiso_cmd" 2>/dev/null) || mkiso_found=
+ PATH=$mkiso_old_path
+ [ -n "$mkiso_found" ] && [ -e "$mkiso_found" ] || return 1
+ mkiso_copy_path "$mkiso_found"
+ mkiso_copy_libs "$mkiso_found"
+ return 0
+}
+
# glibc, libtinfo, and the loader. Seed and Plasma both need these; a
# missing libtinfo.so.6 (the real file behind the soname symlink) is what
# made getty respawn `/bin/sh` forever on the Plasma ISO.
@@ -699,6 +715,12 @@ if [ -f "$mkiso_libdir/live-bins" ]; then
mkiso_copy_libs "$mkiso_bin"
done <"$mkiso_libdir/live-bins"
fi
+printf '%s: copying disk tools for setup\n' "$sps_prog" >&2
+for mkiso_cmd in lsblk blkid sfdisk cfdisk fdisk wipefs mkfs.ext4 mke2fs \
+ mkfs.vfat mkswap partprobe udevadm udevd
+do
+ mkiso_copy_host_cmd "$mkiso_cmd" || :
+done
mkiso_copy_runtime_libs
mkiso_force_busybox_sh
diff --git a/lib/mkiso/live-bins b/lib/mkiso/live-bins
index d1c6d20..598b953 100644
--- a/lib/mkiso/live-bins
+++ b/lib/mkiso/live-bins
@@ -1,6 +1,32 @@
# Copied into every live image, including --no-seed. Busybox covers most
# applets; these are the host tools setup(1) still needs on a slim disc.
+# lsblk lives in /bin on this builder; /usr/bin/lsblk is often absent, so
+# mkiso also copies partition tools by command name (see mkiso_copy_host_cmd).
/usr/bin/dialog
/sbin/ldconfig
/usr/sbin/ldconfig
/usr/bin/ldd
+/bin/lsblk
+/usr/bin/lsblk
+/sbin/lsblk
+/usr/sbin/lsblk
+/bin/blkid
+/sbin/blkid
+/usr/sbin/blkid
+/sbin/sfdisk
+/usr/sbin/sfdisk
+/sbin/cfdisk
+/usr/sbin/cfdisk
+/sbin/fdisk
+/usr/sbin/fdisk
+/sbin/wipefs
+/usr/sbin/wipefs
+/sbin/mkfs.ext4
+/usr/sbin/mkfs.ext4
+/sbin/mke2fs
+/sbin/mkfs.vfat
+/usr/sbin/mkfs.vfat
+/sbin/mkswap
+/usr/sbin/mkswap
+/sbin/partprobe
+/usr/sbin/partprobe
diff --git a/lib/mkiso/live-rc b/lib/mkiso/live-rc
index 834b5cc..6199c2c 100644
--- a/lib/mkiso/live-rc
+++ b/lib/mkiso/live-rc
@@ -61,7 +61,8 @@ fi
if [ -d /lib/modules ] && command -v depmod >/dev/null 2>&1; then
depmod -a 2>/dev/null || :
fi
-for mod in e1000 e1000e r8169 virtio_net usbnet hid-generic usbhid atkbd \
+for mod in e1000 e1000e r8169 virtio_net virtio_blk virtio_pci virtio_scsi \
+ usbnet hid-generic usbhid atkbd \
nouveau bochs drm_kms_helper
do
modprobe "$mod" 2>/dev/null || :
diff --git a/lib/mkiso/seed-bins b/lib/mkiso/seed-bins
index 57f8231..fbdd9db 100644
--- a/lib/mkiso/seed-bins
+++ b/lib/mkiso/seed-bins
@@ -50,6 +50,9 @@
/sbin/depmod
/sbin/insmod
/usr/bin/lsblk
+/bin/lsblk
+/sbin/lsblk
+/usr/sbin/lsblk
/usr/bin/blkid
/usr/sbin/blkid
/usr/sbin/fdisk
diff --git a/lib/setup/partition.sh b/lib/setup/partition.sh
index 23e2f5f..e139fdf 100644
--- a/lib/setup/partition.sh
+++ b/lib/setup/partition.sh
@@ -30,8 +30,8 @@ setup_partname()
setup_lsblk()
{
- setup_part_path lsblk >/dev/null || return 1
- lsblk "$@"
+ setup_lsblk_bin=$(setup_part_path lsblk) || return 1
+ "$setup_lsblk_bin" "$@"
}
setup_disk_menu_lines()
diff --git a/tests/test_mkiso.sh b/tests/test_mkiso.sh
index d665c79..daea353 100755
--- a/tests/test_mkiso.sh
+++ b/tests/test_mkiso.sh
@@ -110,6 +110,15 @@ grep -q 'mounting live filesystem' "$project_dir/lib/mkiso/initrd-init" ||
if [ -x /usr/bin/dialog ]; then
[ -e "$layout/usr/bin/dialog" ] || fail 'dialog missing from slim layout'
fi
+if command -v lsblk >/dev/null 2>&1; then
+ if [ ! -e "$layout/bin/lsblk" ] && [ ! -e "$layout/usr/bin/lsblk" ] &&
+ [ ! -e "$layout/sbin/lsblk" ] && [ ! -e "$layout/usr/sbin/lsblk" ]
+ then
+ fail 'lsblk missing from live layout (setup disk menu needs it)'
+ fi
+fi
+grep -q 'copying disk tools for setup' "$mkiso" ||
+ fail 'mkiso must copy partition tools by command name'
if [ -e "$layout/lib64/libtinfo.so.6" ] || [ -e "$layout/usr/lib64/libtinfo.so.6" ]
then
for tinfo in "$layout/lib64/libtinfo.so.6" "$layout/usr/lib64/libtinfo.so.6"