diff --git a/mkinitrd b/mkinitrd index 00b5992..98d0b50 100755 --- a/mkinitrd +++ b/mkinitrd @@ -1469,8 +1469,76 @@ if [ -z "$nolvm" -a -n "$vg_list" ]; then fi fi +findkeymap () { + local MAP=$1 + + if [ ! -f "$MAP" ]; then + MAP=$(find /lib/kbd/keymaps -type f -name $MAP -o -name $MAP.\* | head -n1) + fi + + case " $KEYMAPS " in + *" $MAP "*) + return + esac + + KEYMAPS="$KEYMAPS $MAP" + + case $MAP in + *.gz) + cmd=zgrep + ;; + *.bz2) + cmd=bzgrep + ;; + *) + cmd=grep + ;; + esac + + for INCL in $($cmd "^include " $MAP | cut -d' ' -f2 | tr -d '"'); do + for FN in $(find /lib/kbd/keymaps -type f -name $INCL\*); do + findkeymap $FN + done + done +} + if [ $ncryptodevs -ne 0 ]; then inst /sbin/cryptsetup "$MNTIMAGE" + + KEYTABLE= + KEYMAP= + if [ -f /etc/sysconfig/console/default.kmap ]; then + KEYMAP=/etc/sysconfig/console/default.kmap + else + if [ -f /etc/sysconfig/keyboard ]; then + . /etc/sysconfig/keyboard + fi + if [ -n "$KEYTABLE" -a -d "/lib/kbd/keymaps" ]; then + KEYMAP="$KEYTABLE.map" + fi + fi + + if [ -n "$KEYMAP" ]; then + LOADKEYS=loadkeys + if [ "${LANG}" != "${LANG%%.UTF-8}" -o "${LANG}" != "${LANG%%.utf8}" ]; then + LOADKEYS="loadkeys -u" + fi + + inst /bin/loadkeys "$MNTIMAGE" + findkeymap $KEYMAP + + for FN in $KEYMAPS; do + inst $FN "$MNTIMAGE" + case "$FN" in + *.gz) + gzip -d "$MNTIMAGE$FN" + ;; + *.bz2) + bzip2 -d "$MNTIMAGE$FN" + ;; + esac + done + fi fi echo -n >| $RCFILE @@ -1639,6 +1707,11 @@ if [ -n "$raiddevices" ]; then done fi +if [ -n "$KEYMAP" ]; then + emit "echo Loading keymap." + emit "$LOADKEYS $KEYMAP" +fi + emitcrypto() { emit "echo Setting up disk encryption: $1"