mirror of
git://slackware.nl/current.git
synced 2024-12-27 09:59:16 +01:00
9a437b0770
a/mkinitrd-1.4.11-x86_64-54.txz: Rebuilt. setup.01.mkinitrd: exit if the KERNEL isn't one. Thanks to Mechanikx. Let the user know that update-grub might take some time. l/PyQt5_sip-12.16.0-x86_64-1.txz: Upgraded. l/SDL2-2.30.10-x86_64-1.txz: Upgraded.
196 lines
7.1 KiB
Bash
196 lines
7.1 KiB
Bash
#!/bin/bash
|
|
#BLURB="Generate an initrd for the kernel"
|
|
|
|
# If KERNEL is defined already, we'll use that.
|
|
# Otherwise we'll use the value for KERNEL in /etc/default/geninitrd, if it
|
|
# is defined there.
|
|
# Otherwise we'll use the newest kernel we find in /boot.
|
|
|
|
# Do we already have a value defined for KERNEL? If so, make sure that we
|
|
# use it:
|
|
if [ ! -z "$KERNEL" ]; then
|
|
KERNEL_OVERRIDE=$KERNEL
|
|
fi
|
|
|
|
# Load defaults:
|
|
if [ -r etc/default/geninitrd ]; then
|
|
. etc/default/geninitrd
|
|
fi
|
|
|
|
# Populate any unset options (when not called from the installer):
|
|
if [ -z "$INSIDE_INSTALLER" ]; then
|
|
KERNEL=${KERNEL:-/boot/vmlinuz-generic}
|
|
GENINITRD_NAMED_SYMLINK=${GENINITRD_NAMED_SYMLINK:-true}
|
|
GENINITRD_INITRD_GZ_SYMLINK=${GENINITRD_INITRD_GZ_SYMLINK:-true}
|
|
GENERATOR=${GENERATOR:-mkinitrd}
|
|
DRACUT_OPTS=${DRACUT_OPTS:-"--force --hostonly"}
|
|
AUTOGENERATE_INITRD=${AUTOGENERATE_INITRD:-true}
|
|
AUTO_REMOVE_ORPHANED_INITRDS=${AUTO_REMOVE_ORPHANED_INITRDS:-true}
|
|
AUTO_UPDATE_GRUB=${AUTO_UPDATE_GRUB:-true}
|
|
GENINITRD_DIALOG=${GENINITRD_DIALOG:-false}
|
|
GENINITRD_COMMAND_OUTPUT=${GENINITRD_COMMAND_OUTPUT:-true}
|
|
else # these are the defaults when called from the installer:
|
|
KERNEL=/boot/vmlinuz-generic
|
|
GENINITRD_NAMED_SYMLINK=true
|
|
GENINITRD_INITRD_GZ_SYMLINK=true
|
|
GENERATOR=mkinitrd
|
|
DRACUT_OPTS="--force --hostonly"
|
|
AUTOGENERATE_INITRD=true
|
|
AUTO_REMOVE_ORPHANED_INITRDS=true
|
|
AUTO_UPDATE_GRUB=true
|
|
GENINITRD_DIALOG=true
|
|
GENINITRD_COMMAND_OUTPUT=false
|
|
fi
|
|
|
|
# If we have a KERNEL_OVERRIDE, set KERNEL to this value:
|
|
if [ ! -z "$KERNEL_OVERRIDE" ]; then
|
|
KERNEL=$KERNEL_OVERRIDE
|
|
fi
|
|
|
|
# If this is disabled, exit:
|
|
if [ "$KERNEL_DOINST" = "true" -a "$AUTOGENERATE_INITRD" = "false" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
if [ -z "$KERNEL" ]; then
|
|
# If we weren't told anything else, then use the newest kernel:
|
|
KERNEL="$(find /boot -name "vmlinuz-*" -type f | xargs ls -t | head -n 1)"
|
|
fi
|
|
|
|
# If we don't see $KERNEL, try looking in /boot:
|
|
if [ ! -r $KERNEL ]; then
|
|
if [ -r boot/$KERNEL ]; then
|
|
KERNEL=boot/$KERNEL
|
|
fi
|
|
fi
|
|
|
|
# In case this is a symlink, get the real file:
|
|
KERNEL="$(readlink -f $KERNEL)"
|
|
|
|
# Find the kernel version:
|
|
if [ -r $KERNEL ]; then
|
|
if file $KERNEL | grep -wq "Linux kernel" ; then
|
|
KERNEL_VERSION=$(strings $KERNEL | grep '([^ ]*@[^ ]*) #' | cut -f1 -d' ')
|
|
else
|
|
echo "error: $KERNEL is not a Linux kernel."
|
|
exit 1
|
|
fi
|
|
else
|
|
if [ -z "$KERNEL" ]; then
|
|
echo "error: was not given a KERNEL to make an initrd."
|
|
exit 1
|
|
else
|
|
echo "error: KERNEL=$KERNEL was not found."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Sometimes mkinitrd_command_generator.sh does not detect LVM properly. Until I
|
|
# get to the bottom of that, it's safer to just always include LVM support.
|
|
LVM_OPTION="-L"
|
|
# Ditto on RAID:
|
|
RAID_OPTION="-R"
|
|
|
|
# If we asked for mkinitrd, but do not have /etc/mkinitrd.conf, then fall
|
|
# back on mkinitrd_command_generator.sh instead:
|
|
if [ "$GENERATOR" = "mkinitrd" -a ! -r etc/mkinitrd.conf ]; then
|
|
GENERATOR=mkinitrd_command_generator.sh
|
|
fi
|
|
|
|
# If the GENERATOR does not exist, this is obviously a fatal error:
|
|
if [ "$GENERATOR" = "mkinitrd_command_generator.sh" -a ! -x /usr/share/mkinitrd/mkinitrd_command_generator.sh ]; then
|
|
echo "error: GENERATOR mkinitrd_command_generator.sh not found."
|
|
exit 1
|
|
elif [ "$GENERATOR" = "mkinitrd" -a ! -x /sbin/mkinitrd ]; then
|
|
echo "error: GENERATOR mkinitrd not found."
|
|
exit 1
|
|
elif [ "$GENERATOR" = "dracut" -a ! -x /usr/bin/dracut ]; then
|
|
echo "error: GENERATOR dracut not found."
|
|
exit 1
|
|
fi
|
|
|
|
# Generate the initrd:
|
|
if [ "$GENINITRD_DIALOG" = "true" ]; then
|
|
dialog --title "GENERATING INITIAL RAMDISK" --infobox \
|
|
"Generating an initial ramdisk for use with the $KERNEL_VERSION kernel (using $GENERATOR). \
|
|
The initial ramdisk contains kernel modules needed to mount the \
|
|
root partition, and must be regenerated whenever the kernel is updated. To \
|
|
regenerate the initrd, select this setup script from within pkgtool, or run \
|
|
'geninitrd' which will produce an initial ramdisk \
|
|
(/boot/initrd-${KERNEL_VERSION}.img) for the installed kernel." 0 0
|
|
elif [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
echo "Generating /boot/initrd-${KERNEL_VERSION}.img for use with"
|
|
echo "the $KERNEL_VERSION kernel (using $GENERATOR):"
|
|
fi
|
|
|
|
if [ "$GENERATOR" = "mkinitrd_command_generator.sh" ]; then
|
|
if [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
chroot . /usr/share/mkinitrd/mkinitrd_command_generator.sh -k $KERNEL_VERSION -a "$LVM_OPTION $RAID_OPTION -o /boot/initrd-${KERNEL_VERSION}.img" | chroot . bash
|
|
else
|
|
chroot . /usr/share/mkinitrd/mkinitrd_command_generator.sh -k $KERNEL_VERSION -a "$LVM_OPTION $RAID_OPTION -o /boot/initrd-${KERNEL_VERSION}.img" | chroot . bash 1> /dev/null 2> /dev/null
|
|
fi
|
|
elif [ "$GENERATOR" = "mkinitrd" ]; then
|
|
if [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
chroot . /sbin/mkinitrd -F /etc/mkinitrd.conf -k $KERNEL_VERSION -o /boot/initrd-${KERNEL_VERSION}.img
|
|
else
|
|
chroot . /sbin/mkinitrd -F /etc/mkinitrd.conf -k $KERNEL_VERSION -o /boot/initrd-${KERNEL_VERSION}.img 1> /dev/null 2> /dev/null
|
|
fi
|
|
elif [ "$GENERATOR" = "dracut" ]; then
|
|
if [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
chroot . /usr/bin/dracut $DRACUT_OPTS /boot/initrd-${KERNEL_VERSION}.img $KERNEL_VERSION
|
|
else
|
|
chroot . /usr/bin/dracut $DRACUT_OPTS /boot/initrd-${KERNEL_VERSION}.img $KERNEL_VERSION 1> /dev/null 2> /dev/null
|
|
fi
|
|
else
|
|
echo "error: no handler for GENERATOR=$GENERATOR"
|
|
echo "Unable to generate /boot/initrd-${KERNEL_VERSION}.img."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$GENINITRD_NAMED_SYMLINK" = "true" ]; then
|
|
# Make initrd symlinks for all matching kernel symlinks:
|
|
( cd boot
|
|
for symlink in $(find . -type l -name "vmlinuz-*") ; do
|
|
SYMLINK_VERSION=$(strings $symlink | grep '([^ ]*@[^ ]*) #' | cut -f1 -d' ')
|
|
if [ "$SYMLINK_VERSION" = "$KERNEL_VERSION" ]; then
|
|
KERNEL_NAME="$(echo $symlink | cut -f 2- -d -)"
|
|
rm -f initrd-${KERNEL_NAME}.img
|
|
ln -sf initrd-${KERNEL_VERSION}.img initrd-${KERNEL_NAME}.img
|
|
if [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
echo "Created named symlink: /boot/initrd-${KERNEL_NAME}.img -> initrd-${KERNEL_VERSION}.img"
|
|
fi
|
|
fi
|
|
done
|
|
)
|
|
fi
|
|
|
|
if [ "$GENINITRD_INITRD_GZ_SYMLINK" = "true" ]; then
|
|
( cd boot
|
|
rm -f initrd.gz
|
|
ln -sf initrd-${KERNEL_VERSION}.img initrd.gz
|
|
if [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
echo "Created initrd.gz symlink: /boot/initrd.gz -> initrd-${KERNEL_VERSION}.img"
|
|
fi
|
|
)
|
|
fi
|
|
|
|
# If enabled in /etc/default/geninitrd, remove any orphaned initrds
|
|
# after generating the initrd:
|
|
if [ "$AUTO_REMOVE_ORPHANED_INITRDS" = "true" ]; then
|
|
if [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
chroot . /usr/sbin/remove-orphaned-initrds
|
|
else
|
|
chroot . /usr/sbin/remove-orphaned-initrds 1> /dev/null 2> /dev/null
|
|
fi
|
|
fi
|
|
|
|
if [ "$AUTO_UPDATE_GRUB" = "true" ]; then
|
|
if [ "$GENINITRD_COMMAND_OUTPUT" = "true" ]; then
|
|
# Filter out bogus warnings from libdevmapper that could be triggered
|
|
# by upgradepkg's use of flock:
|
|
echo "Running /usr/sbin/update-grub (please wait)..."
|
|
chroot . /usr/sbin/update-grub |& grep -v "File descriptor"
|
|
else
|
|
chroot . /usr/sbin/update-grub 1> /dev/null 2> /dev/null
|
|
fi
|
|
fi
|