summaryrefslogtreecommitdiff
path: root/mkinitrd
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2022-03-29 23:26:43 +0100
committerdavidovski <david@davidovski.xyz>2022-03-29 23:26:43 +0100
commit33d239ecb3d66db2b005afbe68a7029c3f2d2ee0 (patch)
tree3cd159b1bee621d19c9e228d6171bf8604d86db2 /mkinitrd
parentdffbbe56d3f9f17da0244f75b352b87bc0e244df (diff)
added mkinitrd
Diffstat (limited to 'mkinitrd')
-rw-r--r--mkinitrd/init.in6
-rw-r--r--[-rwxr-xr-x]mkinitrd/mkinitramfs.sh23
-rwxr-xr-xmkinitrd/mkinitramfs.sh-old197
3 files changed, 213 insertions, 13 deletions
diff --git a/mkinitrd/init.in b/mkinitrd/init.in
index 35a0b2a..ab1f6ef 100644
--- a/mkinitrd/init.in
+++ b/mkinitrd/init.in
@@ -95,9 +95,9 @@ else
problem
fi
-${UDEVD} --daemon --resolve-names=never
-udevadm trigger
-udevadm settle
+${UDEVD} -D -d >> udev.log 2>&1
+udevadm trigger >> udev.log 2>&1
+udevadm settle >> udev.log 2>&1
if [ -f /etc/mdadm.conf ] ; then mdadm -As ; fi
if [ -x /sbin/vgchange ] ; then /sbin/vgchange -a y > /dev/null ; fi
diff --git a/mkinitrd/mkinitramfs.sh b/mkinitrd/mkinitramfs.sh
index 3b0fcaf..c8836f4 100755..100644
--- a/mkinitrd/mkinitramfs.sh
+++ b/mkinitrd/mkinitramfs.sh
@@ -2,7 +2,8 @@
# This file based in part on the mkinitramfs script for the LFS LiveCD
# written by Alexander E. Patrakov and Jeremy Huntwork.
-copy() {
+copy()
+{
local file
if [ "$2" == "lib" ]; then
@@ -11,7 +12,7 @@ copy() {
file=$(type -p $1)
fi
- if [ "${#file}" != "0" ]; then
+ if [ "$file" != "" ] ; then
cp $file $WDIR/$2
else
echo "Missing required file: $1 for directory $2"
@@ -34,9 +35,11 @@ fi
printf "Creating $INITRAMFS_FILE... "
-binfiles="bash cat cp dd killall ls mkdir mknod mount "
+binfiles="sh cat cp dd killall ls mkdir mknod mount "
binfiles="$binfiles umount sed sleep ln rm uname"
binfiles="$binfiles readlink basename"
+# debug
+binfiles="$binfiles less bash dmesg xargs"
# Systemd installs udevadm in /bin. Other udev implementations have it in /sbin
if [ -x /bin/udevadm ] ; then binfiles="$binfiles udevadm"; fi
@@ -62,6 +65,7 @@ mkdir -p $WDIR/etc/{modprobe.d,udev/rules.d}
touch $WDIR/etc/modprobe.d/modprobe.conf
ln -s lib $WDIR/lib64
ln -s ../bin $WDIR/usr/bin
+ln -s ../lib $WDIR/usr/lib
# Create necessary device nodes
mknod -m 640 $WDIR/dev/console c 5 1
@@ -77,7 +81,7 @@ for file in $(find /etc/udev/rules.d/ -type f) ; do
done
# Install any firmware present
-[ -e /lib/firmware ] && cp -a /lib/firmware $WDIR/lib
+[ -e /lib/firmware ] && cp /lib/firmware $WDIR/lib
# Copy the RAID configuration file if present
if [ -f /etc/mdadm.conf ] ; then
@@ -103,8 +107,6 @@ for f in $binfiles ; do
copy $d/$f bin
done
-ln -s bash $WDIR/bin/sh
-
# Add lvm if present
if [ -x /sbin/lvm ] ; then sbinfiles="$sbinfiles lvm dmsetup"; fi
@@ -148,7 +150,7 @@ if [ -x /sbin/lvm ] ; then
ln -s lvm $WDIR/sbin/vgrename
ln -s lvm $WDIR/sbin/vgck
# Conf file(s)
- cp -a /etc/lvm $WDIR/etc
+ cp /etc/lvm $WDIR/etc
fi
# Install libraries
@@ -157,14 +159,15 @@ sort $unsorted | uniq | while read library ; do
[ "$library" == "linux-gate.so.1" ]; then
continue
fi
+
copy $library lib
done
if [ -d /lib/udev ]; then
- cp -a /lib/udev $WDIR/lib
+ cp -r /lib/udev $WDIR/lib
fi
if [ -d /lib/systemd ]; then
- cp -a /lib/systemd $WDIR/lib
+ cp -r /lib/systemd $WDIR/lib
fi
# Install the kernel modules if requested
@@ -185,6 +188,6 @@ fi
( cd $WDIR ; find . | cpio -o -H newc --quiet | gzip -9 ) > $INITRAMFS_FILE
# Remove the temporary directory and file
-#rm -rf $WDIR $unsorted
+rm -rf $WDIR $unsorted
printf "done.\n"
diff --git a/mkinitrd/mkinitramfs.sh-old b/mkinitrd/mkinitramfs.sh-old
new file mode 100755
index 0000000..5430659
--- /dev/null
+++ b/mkinitrd/mkinitramfs.sh-old
@@ -0,0 +1,197 @@
+#!/bin/bash
+# This file based in part on the mkinitramfs script for the LFS LiveCD
+# written by Alexander E. Patrakov and Jeremy Huntwork.
+
+copy() {
+ local file
+
+ if [ "$2" == "lib" ]; then
+ file=$(PATH=/lib:/usr/lib type -p $1)
+ else
+ file=$(type -p $1)
+ fi
+
+ if [ "${#file}" != "0" ]; then
+ cp $file $WDIR/$2
+ else
+ echo "Missing required file: $1 for directory $2"
+ #rm -rf $WDIR
+ #exit 1
+ fi
+}
+
+if [ -z $1 ] ; then
+ INITRAMFS_FILE=initrd.img-no-kmods
+else
+ KERNEL_VERSION=$1
+ INITRAMFS_FILE=initrd.img-$KERNEL_VERSION
+fi
+
+if [ -n "$KERNEL_VERSION" ] && [ ! -d "/lib/modules/$1" ] ; then
+ echo "No modules directory named $1"
+ exit 1
+fi
+
+printf "Creating $INITRAMFS_FILE... "
+
+binfiles="bash cat cp dd killall ls mkdir mknod mount "
+binfiles="$binfiles umount sed sleep ln rm uname"
+binfiles="$binfiles readlink basename"
+# debug
+binfiles="$binfiles less blkid lsblk fdisk dmesg ldd"
+
+# Systemd installs udevadm in /bin. Other udev implementations have it in /sbin
+if [ -x /bin/udevadm ] ; then binfiles="$binfiles udevadm"; fi
+
+sbinfiles="modprobe blkid switch_root"
+
+#Optional files and locations
+for f in mdadm mdmon udevd udevadm; do
+ if [ -x /sbin/$f ] ; then sbinfiles="$sbinfiles $f"; fi
+done
+
+unsorted=$(mktemp /tmp/unsorted.XXXXXXXXXX)
+
+DATADIR=/usr/share/mkinitramfs
+INITIN=init.in
+
+# Create a temporary working directory
+WDIR=$(mktemp -d /tmp/initrd-work.XXXXXXXXXX)
+
+# Create base directory structure
+mkdir -p $WDIR/{bin,dev,lib/firmware,run,sbin,sys,proc,usr}
+mkdir -p $WDIR/etc/{modprobe.d,udev/rules.d}
+touch $WDIR/etc/modprobe.d/modprobe.conf
+ln -s lib $WDIR/lib64
+ln -s ../bin $WDIR/usr/bin
+
+# Create necessary device nodes
+mknod -m 640 $WDIR/dev/console c 5 1
+mknod -m 664 $WDIR/dev/null c 1 3
+
+# Install the udev configuration files
+if [ -f /etc/udev/udev.conf ]; then
+ cp /etc/udev/udev.conf $WDIR/etc/udev/udev.conf
+fi
+
+# install hwdb
+if [ -f /etc/udev/hwdb.bin ]; then
+ cp /etc/udev/hwdb.bin $WDIR/etc/udev/hwdb.bin
+fi
+
+for file in $(find /etc/udev/rules.d/ -type f) ; do
+ cp $file $WDIR/etc/udev/rules.d
+done
+
+# Install any firmware present
+[ -e /lib/firmware ] && cp -a /lib/firmware $WDIR/lib
+
+# Copy the RAID configuration file if present
+if [ -f /etc/mdadm.conf ] ; then
+ cp /etc/mdadm.conf $WDIR/etc
+fi
+
+# Install the init file
+install -m0755 $DATADIR/$INITIN $WDIR/init
+
+if [ -n "$KERNEL_VERSION" ] ; then
+ if [ -x /bin/kmod ] ; then
+ binfiles="$binfiles kmod"
+ else
+ binfiles="$binfiles lsmod"
+ sbinfiles="$sbinfiles insmod"
+ fi
+fi
+
+# Install basic binaries
+for f in $binfiles ; do
+ if [ -e /bin/$f ]; then d="/bin"; else d="/usr/bin"; fi
+ ldd $d/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
+ copy $d/$f bin
+done
+
+ln -s bash $WDIR/bin/sh
+
+# Add lvm if present
+if [ -x /sbin/lvm ] ; then sbinfiles="$sbinfiles lvm dmsetup"; fi
+
+for f in $sbinfiles ; do
+ ldd /sbin/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
+ copy $f sbin
+done
+
+# Add udevd libraries if not in /sbin
+if [ -x /lib/udev/udevd ] ; then
+ ldd /lib/udev/udevd | sed "s/\t//" | cut -d " " -f1 >> $unsorted
+elif [ -x /lib/systemd/systemd-udevd ] ; then
+ ldd /lib/systemd/systemd-udevd | sed "s/\t//" | cut -d " " -f1 >> $unsorted
+fi
+
+# Add module symlinks if appropriate
+if [ -n "$KERNEL_VERSION" ] && [ -x /bin/kmod ] ; then
+ ln -s kmod $WDIR/bin/lsmod
+ ln -s kmod $WDIR/bin/insmod
+fi
+
+# Add lvm symlinks if appropriate
+# Also copy the lvm.conf file
+if [ -x /sbin/lvm ] ; then
+ ln -s lvm $WDIR/sbin/lvchange
+ ln -s lvm $WDIR/sbin/lvrename
+ ln -s lvm $WDIR/sbin/lvextend
+ ln -s lvm $WDIR/sbin/lvcreate
+ ln -s lvm $WDIR/sbin/lvdisplay
+ ln -s lvm $WDIR/sbin/lvscan
+
+ ln -s lvm $WDIR/sbin/pvchange
+ ln -s lvm $WDIR/sbin/pvck
+ ln -s lvm $WDIR/sbin/pvcreate
+ ln -s lvm $WDIR/sbin/pvdisplay
+ ln -s lvm $WDIR/sbin/pvscan
+
+ ln -s lvm $WDIR/sbin/vgchange
+ ln -s lvm $WDIR/sbin/vgcreate
+ ln -s lvm $WDIR/sbin/vgscan
+ ln -s lvm $WDIR/sbin/vgrename
+ ln -s lvm $WDIR/sbin/vgck
+ # Conf file(s)
+ cp -a /etc/lvm $WDIR/etc
+fi
+
+# Install libraries
+sort $unsorted | uniq | while read library ; do
+ if [ "$library" == "linux-vdso.so.1" ] ||
+ [ "$library" == "linux-gate.so.1" ]; then
+ continue
+ fi
+ copy $library lib
+done
+
+if [ -d /lib/udev ]; then
+ cp -a /lib/udev $WDIR/lib
+fi
+if [ -d /lib/systemd ]; then
+ cp -a /lib/systemd $WDIR/lib
+fi
+
+# Install the kernel modules if requested
+if [ -n "$KERNEL_VERSION" ]; then
+ find \
+ /lib/modules/$KERNEL_VERSION/kernel/{crypto,fs,lib} \
+ /lib/modules/$KERNEL_VERSION/kernel/drivers/{block,ata,md,firewire} \
+ /lib/modules/$KERNEL_VERSION/kernel/drivers/{scsi,message,pcmcia,virtio} \
+ /lib/modules/$KERNEL_VERSION/kernel/drivers/usb/{host,storage} \
+ -type f 2> /dev/null | cpio --make-directories -p --quiet $WDIR
+
+ cp /lib/modules/$KERNEL_VERSION/modules.{builtin,order} \
+ $WDIR/lib/modules/$KERNEL_VERSION
+
+ depmod -b $WDIR $KERNEL_VERSION
+fi
+
+( cd $WDIR ; find . | cpio -o -H newc --quiet | gzip -9 ) > $INITRAMFS_FILE
+
+# Remove the temporary directory and file
+#rm -rf $WDIR $unsorted
+printf "done.\n"
+