commit 43d2f37d89034a2e409bb4f66cca1a64b12130b8 Author: Arkadiusz Miśkiewicz Date: Mon Nov 25 20:15:24 2019 +0100 Accept d/D symbols, too (ffffffff825ca52c D __initramfs_start) as noticed in recent 4.19.85-1 kernel. diff --git a/geninitrd b/geninitrd index 05e290a..052f553 100755 --- a/geninitrd +++ b/geninitrd @@ -1097,7 +1097,7 @@ sym_exists() { return 1 fi - awk -vc=1 -vsymbol="$symbol" '($2 == "T" || $2 == "t") && $3 == symbol {c = 0} END {exit c}' $mapfile + awk -vc=1 -vsymbol="$symbol" '(tolower($2) == "t" || tolower($2) == "d") && $3 == symbol {c = 0} END {exit c}' $mapfile } # find best compressor (or forced one) for initrd commit 04b32086569a126d5d6f9bd0ad1b0db9f142f50e Author: Arkadiusz Miśkiewicz Date: Sun Jul 21 21:04:05 2019 +0200 Try to detect a need for nvme driver. If you know better method then share with us. diff --git a/geninitrd b/geninitrd index b5d405a..05e290a 100755 --- a/geninitrd +++ b/geninitrd @@ -673,6 +673,11 @@ find_modules_for_devpath() { return fi + if [[ "$devpath" == /dev/nvme* ]]; then + find_module "nvme" + return + fi + if [[ "$devpath" == /dev/bcache* ]]; then find_modules_bcache "$devpath" return commit 4de5a3333e772ad198381f157c014e452e42c129 Author: Elan Ruusamäe Date: Mon Jul 15 23:56:58 2019 +0300 fix indent diff --git a/mod-usbkbd.sh b/mod-usbkbd.sh index ff8f442..35543b7 100644 --- a/mod-usbkbd.sh +++ b/mod-usbkbd.sh @@ -10,22 +10,22 @@ find_modules_usbkbd() { local modules i module bInterfaceClass bInterfaceProtocol - for i in /sys/bus/usb/devices/*-*:*; do - # standard usb keyboards - if [ -f $i/bInterfaceClass -a -f $i/bInterfaceProtocol ]; then - bInterfaceClass=$(cat $i/bInterfaceClass) - bInterfaceProtocol=$(cat $i/bInterfaceProtocol) - if [ "$bInterfaceClass" = "03" -a "$bInterfaceProtocol" = "01" ]; then - module=$(readlink $i/driver/module) - module=$(basename $module) + for i in /sys/bus/usb/devices/*-*:*; do + # standard usb keyboards + if [ -f $i/bInterfaceClass -a -f $i/bInterfaceProtocol ]; then + bInterfaceClass=$(cat $i/bInterfaceClass) + bInterfaceProtocol=$(cat $i/bInterfaceProtocol) + if [ "$bInterfaceClass" = "03" -a "$bInterfaceProtocol" = "01" ]; then + module=$(readlink $i/driver/module) + module=$(basename $module) - if [ -n "$module" ]; then - verbose "Found USB Keyboard driver: $module" - modules="$modules $module" - fi - fi - fi - done + if [ -n "$module" ]; then + verbose "Found USB Keyboard driver: $module" + modules="$modules $module" + fi + fi + fi + done for i in /sys/class/input/input*; do # standard usb keyboards commit 662fd5a3adac2080640fa4eacd34d72504526175 Author: Arkadiusz Miśkiewicz Date: Mon Jul 15 19:59:46 2019 +0200 Another way for findings usb keyboard drivers that works on newer kernels. diff --git a/mod-usbkbd.sh b/mod-usbkbd.sh index 0dd0d20..ff8f442 100644 --- a/mod-usbkbd.sh +++ b/mod-usbkbd.sh @@ -10,6 +10,23 @@ find_modules_usbkbd() { local modules i module bInterfaceClass bInterfaceProtocol + for i in /sys/bus/usb/devices/*-*:*; do + # standard usb keyboards + if [ -f $i/bInterfaceClass -a -f $i/bInterfaceProtocol ]; then + bInterfaceClass=$(cat $i/bInterfaceClass) + bInterfaceProtocol=$(cat $i/bInterfaceProtocol) + if [ "$bInterfaceClass" = "03" -a "$bInterfaceProtocol" = "01" ]; then + module=$(readlink $i/driver/module) + module=$(basename $module) + + if [ -n "$module" ]; then + verbose "Found USB Keyboard driver: $module" + modules="$modules $module" + fi + fi + fi + done + for i in /sys/class/input/input*; do # standard usb keyboards if [ -f $i/device/bInterfaceClass -a -f $i/device/bInterfaceProtocol ]; then commit b565e95c147bea4e68e4ccf5ad19906d51d2375b Author: Arkadiusz Miśkiewicz Date: Wed May 15 21:04:45 2019 +0200 Prepend cpu microcode to initrd image, so kernel will pick it up when LILO is in use. diff --git a/geninitrd b/geninitrd index 118333c..b5d405a 100755 --- a/geninitrd +++ b/geninitrd @@ -17,6 +17,7 @@ PROGRAM=${0##*/} # list of geninitrd modules which need setup routine after commandline args parsing GENINITRD_MODS="" COMPRESS=yes +LILO_MICROCODE=yes STRIP=/usr/bin/strip target="" kernel="" @@ -1186,6 +1187,16 @@ compress_image() { mv -f "$tmp" "$target" } +# prepend file to image +prepend_file_to_image() { + local file="$1" target="$2" tmp + tmp=$(mktemp "$target".XXXXXX) || die "mktemp failed" + + cat "$file" "$target" > "$tmp" || return $? + + mv -f "$tmp" "$target" +} + if [ -r /etc/sysconfig/geninitrd ]; then . /etc/sysconfig/geninitrd fi @@ -1801,6 +1812,14 @@ else cp -a "$IMAGE" "$target" fi +# microcode support for lilo +if ! is_no "$LILO_MICROCODE"; then + if [ -x /sbin/lilo -a -f "/boot/intel-ucode.img" ]; then + verbose "Prepending $target with microcode image /boot/intel-ucode.img for LILO" + prepend_file_to_image "/boot/intel-ucode.img" "$target" + fi +fi + # XXX. check if bootsplash can output data to tmp dir not directly to initramfs image. initrd_gen_bootsplash "$target" diff --git a/geninitrd.sysconfig b/geninitrd.sysconfig index ccf177c..1268324 100644 --- a/geninitrd.sysconfig +++ b/geninitrd.sysconfig @@ -18,6 +18,9 @@ # Default is to use initramfs for >= 2.5.0. #INITRDFS=initramfs +# Should we prepend cpu microcode when lilo is installed +#LILO_MICROCODE=no + ## Use udev to create /dev? USE_UDEV=yes commit ad5033d7e704edaf52f2be18d4aa98c378179ede Author: Arkadiusz Miśkiewicz Date: Fri Jan 25 20:38:24 2019 +0100 Timeout here is not a good idea. rootfs cannot be mounted and kernel oopses due to that. diff --git a/mod-luks.sh b/mod-luks.sh index ff877f7..ffe87cb 100644 --- a/mod-luks.sh +++ b/mod-luks.sh @@ -162,7 +162,7 @@ luks_crypttab() { done IFS="$old_IFS" - verbose "+ cryptsetup --timeout=120 ${keyfile:+-d $keyfile} open $crypttab_opt '$src' '$dst'" + verbose "+ cryptsetup ${keyfile:+-d $keyfile} open $crypttab_opt '$src' '$dst'" add_linuxrc <<-EOF debugshell @@ -189,7 +189,7 @@ luks_crypttab() { crypt_status=\$(cryptsetup \$cryptsetup_opt status '$dst') if [ "\${crypt_status%%is inactive*}" != "\$crypt_status" ]; then # is inactive - cryptsetup \$cryptsetup_opt ${keyfile:+-d $keyfile} --timeout 120 open $crypttab_opt "\$luksdev" '$dst' <&1 + cryptsetup \$cryptsetup_opt ${keyfile:+-d $keyfile} open $crypttab_opt "\$luksdev" '$dst' <&1 fi fi commit 21ad0f7980ce6a0135e4a3c37a94472ed4f1320c Author: Arkadiusz Miśkiewicz Date: Tue Dec 18 14:43:20 2018 +0100 Use existing mechanism for installing udev apps but install regular variants, too if initrd-variants don't exist. diff --git a/mod-udev.sh b/mod-udev.sh index a2491ee..87f4b68 100644 --- a/mod-udev.sh +++ b/mod-udev.sh @@ -44,8 +44,6 @@ initrd_gen_udev() { inst_d /sbin /etc/udev /lib/udev inst_exec $udevd /sbin/udevd inst_exec $udevadm /sbin/udevadm - inst_exec /lib/udev/ata_id /lib/udev/ata_id - inst_exec /lib/udev/scsi_id /lib/udev/scsi_id inst /etc/udev/udev.conf /etc/udev/udev.conf # standard udev rules inst_rules 50-udev-default.rules 60-persistent-storage.rules 61-persistent-storage-edd.rules 80-drivers.rules 95-udev-late.rules \ @@ -57,6 +55,8 @@ initrd_gen_udev() { for e in ata_id cdrom_id collect firmware scsi_id v4l_id; do if [ -e "$initrd_dir/udev/$e" ]; then inst_exec $initrd_dir/udev/$e /lib/udev/$e + elif [ -e "/lib/udev/$e" ]; then + inst_exec /lib/udev/$e /lib/udev/$e fi done commit 3d81f1cd0bc557ad9a1f157b403f0396866c648c Author: Arkadiusz Miśkiewicz Date: Tue Dec 18 14:38:55 2018 +0100 udevd uses ata_id and scsi_id, so install these. diff --git a/mod-udev.sh b/mod-udev.sh index 422ef3e..a2491ee 100644 --- a/mod-udev.sh +++ b/mod-udev.sh @@ -41,9 +41,11 @@ setup_mod_udev() { initrd_gen_udev() { verbose "Setting up udev..." - inst_d /sbin /etc/udev + inst_d /sbin /etc/udev /lib/udev inst_exec $udevd /sbin/udevd inst_exec $udevadm /sbin/udevadm + inst_exec /lib/udev/ata_id /lib/udev/ata_id + inst_exec /lib/udev/scsi_id /lib/udev/scsi_id inst /etc/udev/udev.conf /etc/udev/udev.conf # standard udev rules inst_rules 50-udev-default.rules 60-persistent-storage.rules 61-persistent-storage-edd.rules 80-drivers.rules 95-udev-late.rules \ commit dc5ca733ed6fe57dfa39d4598a6586069e41d0b0 Author: Arkadiusz Miśkiewicz Date: Tue Dec 18 14:34:38 2018 +0100 Install mdadm in /sbin because udevd expects it to be there. diff --git a/mod-md.sh b/mod-md.sh index 2b6f587..a358517 100644 --- a/mod-md.sh +++ b/mod-md.sh @@ -133,7 +133,7 @@ initrd_gen_md() { fi verbose "Setting up mdadm..." - inst_exec $mdadm /bin/mdadm + inst_exec $mdadm /sbin/mdadm echo "DEVICE partitions containers" >> "$DESTDIR/etc/mdadm.conf" @@ -181,7 +181,7 @@ initrd_gen_md() { echo "wait_for_files $cr_dev_list" | add_linuxrc add_linuxrc <<-'EOF' - mdadm --assemble --scan + /sbin/mdadm --assemble --scan if [ "$DEBUGINITRD" ]; then [ -e /proc/mdstat ] && echo "/proc/mdstat contents:" && cat /proc/mdstat commit 33cc4751b8f80fc3b800928b9ad93866b2569915 Author: Arkadiusz Miśkiewicz Date: Tue Dec 18 14:33:12 2018 +0100 Install blkid in /sbin because udevd expects it to be there. diff --git a/geninitrd b/geninitrd index a79b9c3..118333c 100755 --- a/geninitrd +++ b/geninitrd @@ -1530,7 +1530,7 @@ chmod a+rx "$RCFILE" ln -s linuxrc $DESTDIR/init # create dirs that we really need -inst_d /{lib,bin,etc,dev{,/pts,/shm},loopfs,var,proc,run,sys,tmp} +inst_d /{lib,bin,sbin,etc,dev{,/pts,/shm},loopfs,var,proc,run,sys,tmp} modules_install "$MODULES" diff --git a/mod-blkid.sh b/mod-blkid.sh index 8ee2a48..92df9ae 100644 --- a/mod-blkid.sh +++ b/mod-blkid.sh @@ -22,12 +22,12 @@ initrd_gen_blkid() { fi verbose "Adding BLKID support to initrd" - inst_exec $blkid /bin/blkid + inst_exec $blkid /sbin/blkid initrd_gen_devices add_linuxrc <<-'EOF' # if built with blkid change ROOT=LABEL=something into ROOT=/dev/device parsed by blkid if [ "${ROOT##LABEL=}" != "${ROOT}" -o "${ROOT##UUID=}" != "${ROOT}" ]; then - blkid="$(/bin/blkid -t $ROOT -o device -l)" + blkid="$(/sbin/blkid -t $ROOT -o device -l)" if [ -n "$blkid" ]; then ROOT=$blkid fi