From 97a19552f39491e1cade1011fa96120710935f06 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 25 Dec 2023 14:42:53 -0500 Subject: [PATCH] plymouth-populate-initrd: Handle xkb and fontconfig not being installed Some minimal installs won't have fontconfig or xkb. In those cases, the script should continue to work even if the initramfs will be less featureful. This commit fixes that. --- scripts/plymouth-populate-initrd.in | 97 +++++++++++++++-------------- 1 file changed, 50 insertions(+), 47 deletions(-) diff --git a/scripts/plymouth-populate-initrd.in b/scripts/plymouth-populate-initrd.in index 8ccac22c..a7919ded 100755 --- a/scripts/plymouth-populate-initrd.in +++ b/scripts/plymouth-populate-initrd.in @@ -475,49 +475,51 @@ inst ${PLYMOUTH_POLICYDIR}/plymouthd.defaults $INITRDDIR inst ${PLYMOUTH_CONFDIR}/plymouthd.conf $INITRDDIR # Install xkb info -mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/" -mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/compat/" +if [ -d "${X11_DIRECTORY}" ]; then + mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/" + mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/compat/" -mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/keycodes/" -mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/rules/" -mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/symbols/" -mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/types/" -mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/locale/" -inst ${X11_DIRECTORY}/xkb/compat/accessx $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/basic $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/caps $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/complete $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/iso9995 $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/ledcaps $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/lednum $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/ledscroll $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/level5 $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/misc $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/mousekeys $INITRDDIR -inst ${X11_DIRECTORY}/xkb/compat/xfree86 $INITRDDIR -inst ${X11_DIRECTORY}/xkb/keycodes/aliases $INITRDDIR -inst ${X11_DIRECTORY}/xkb/keycodes/evdev $INITRDDIR -inst ${X11_DIRECTORY}/xkb/rules/evdev $INITRDDIR -find ${X11_DIRECTORY}/xkb/symbols -maxdepth 1 ! -type d | while read file; do - inst $file $INITRDDIR -done -inst ${X11_DIRECTORY}/xkb/types/basic $INITRDDIR -inst ${X11_DIRECTORY}/xkb/types/complete $INITRDDIR -inst ${X11_DIRECTORY}/xkb/types/extra $INITRDDIR -inst ${X11_DIRECTORY}/xkb/types/iso9995 $INITRDDIR -inst ${X11_DIRECTORY}/xkb/types/level5 $INITRDDIR -inst ${X11_DIRECTORY}/xkb/types/mousekeys $INITRDDIR -inst ${X11_DIRECTORY}/xkb/types/numpad $INITRDDIR -inst ${X11_DIRECTORY}/xkb/types/pc $INITRDDIR - -# In the off chance the user uses their compose key when -# typing their password, install compose sequences -inst ${X11_DIRECTORY}/locale/compose.dir $INITRDDIR -grep UTF-8/Compose: ${X11_DIRECTORY}/locale/compose.dir | awk -F: '{ print $1 }' | sort -u | xargs dirname | while read DIR; do - find ${X11_DIRECTORY}/locale/$DIR -maxdepth 1 ! -type d | while read file; do + mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/keycodes/" + mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/rules/" + mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/symbols/" + mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/xkb/types/" + mkdir -p "${INITRDDIR}/${X11_DIRECTORY}/locale/" + inst ${X11_DIRECTORY}/xkb/compat/accessx $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/basic $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/caps $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/complete $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/iso9995 $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/ledcaps $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/lednum $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/ledscroll $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/level5 $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/misc $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/mousekeys $INITRDDIR + inst ${X11_DIRECTORY}/xkb/compat/xfree86 $INITRDDIR + inst ${X11_DIRECTORY}/xkb/keycodes/aliases $INITRDDIR + inst ${X11_DIRECTORY}/xkb/keycodes/evdev $INITRDDIR + inst ${X11_DIRECTORY}/xkb/rules/evdev $INITRDDIR + find ${X11_DIRECTORY}/xkb/symbols -maxdepth 1 ! -type d | while read file; do inst $file $INITRDDIR - done -done + done + inst ${X11_DIRECTORY}/xkb/types/basic $INITRDDIR + inst ${X11_DIRECTORY}/xkb/types/complete $INITRDDIR + inst ${X11_DIRECTORY}/xkb/types/extra $INITRDDIR + inst ${X11_DIRECTORY}/xkb/types/iso9995 $INITRDDIR + inst ${X11_DIRECTORY}/xkb/types/level5 $INITRDDIR + inst ${X11_DIRECTORY}/xkb/types/mousekeys $INITRDDIR + inst ${X11_DIRECTORY}/xkb/types/numpad $INITRDDIR + inst ${X11_DIRECTORY}/xkb/types/pc $INITRDDIR + + # In the off chance the user uses their compose key when + # typing their password, install compose sequences + inst ${X11_DIRECTORY}/locale/compose.dir $INITRDDIR + grep UTF-8/Compose: ${X11_DIRECTORY}/locale/compose.dir | awk -F: '{ print $1 }' | sort -u | xargs dirname | while read DIR; do + find ${X11_DIRECTORY}/locale/$DIR -maxdepth 1 ! -type d | while read file; do + inst $file $INITRDDIR + done + done +fi if [ -z "$PLYMOUTH_THEME_NAME" ]; then echo "No default plymouth plugin is set" >&2 @@ -592,17 +594,18 @@ if [ "${PLYMOUTH_IMAGE_DIR}" != "${PLYMOUTH_THEME_DIR}" -a -d "${PLYMOUTH_SYSROO inst_recur "${PLYMOUTH_IMAGE_DIR}" fi -DefaultFont=$(fc-match -f %{file}) -inst "$DefaultFont" $INITRDDIR -DefaultMonospaceFont=$(fc-match -f %{file} monospace) -inst "$DefaultMonospaceFont" $INITRDDIR +DEFAULT_FONT=$(fc-match -f %{file}) +[ ! -z "$DEFAULT_FONT" ] && inst "$DEFAULT_FONT" $INITRDDIR +DEFAULT_MONOSPACE_FONT=$(fc-match -f %{file} monospace) +[ ! -z "$DEFAULT_MONOSPACE_FONT" ] && inst "$DEFAULT_FONT" $INITRDDIR +inst "$DEFAULT_MONOSPACE_FONT" $INITRDDIR if [ -f "${PLYMOUTH_PLUGIN_PATH}/label-freetype.so" ]; then inst ${PLYMOUTH_PLUGIN_PATH}/label-freetype.so $INITRDDIR # The label-freetype plugin expects it at this location mkdir -p $INITRDDIR/usr/share/fonts - ln -s "$DefaultFont" $INITRDDIR/usr/share/fonts/Plymouth.ttf - ln -s "$DefaultMonospaceFont" $INITRDDIR/usr/share/fonts/Plymouth-monospace.ttf + ln -s "$DEFAULT_FONT" $INITRDDIR/usr/share/fonts/Plymouth.ttf + ln -s "$DEFAULT_MONOSPACE_FONT" $INITRDDIR/usr/share/fonts/Plymouth-monospace.ttf fi if [ -L ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then