Splux Linux

source-based Linux using SPS

SPS · log · files · refs · tags · releases · people · languages · GitHub · commit

4bed32e


mkiso: put lsblk and partition tools on every live image

Date
Commit4bed32eefe9b10774fc92d813ee9a731fbbcd347
GitHubmirror

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"