diff --git a/mkinitrd b/mkinitrd index 00b5992..c730221 100755 --- a/mkinitrd +++ b/mkinitrd @@ -1469,8 +1469,73 @@ if [ -z "$nolvm" -a -n "$vg_list" ]; then fi fi +findkeymap () { + local MAP=$1 + local list= + + if [ ! -f "$MAP" ]; then + MAP=$(find /lib/kbd/keymaps -type f -name $MAP -o -name $MAP.\* | head -n1) + fi + + list="$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 + echo $list | grep -q "$FN " && continue + list="$list $(findkeymap $FN)" + done + done + + echo $list +} + 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" + + for FN in $(findkeymap $KEYMAP); 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 +1704,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"