install all /lib/kbd to initramfs, if not host only
authorHarald Hoyer <harald@redhat.com>
Wed, 15 Jul 2009 07:09:26 +0000 (09:09 +0200)
committerHarald Hoyer <harald@redhat.com>
Wed, 15 Jul 2009 16:37:44 +0000 (18:37 +0200)
KEYBOARDTYPE=sun|pc
   will be written to /etc/sysconfig/keyboard in the initramfs

KEYTABLE=<keytable file>
   will be written to /etc/sysconfig/keyboard in the initramfs

SYSFONT= Console font
   will be written to /etc/sysconfig/i18n in the initramfs

SYSFONTACM= Console map.
   will be written to /etc/sysconfig/i18n in the initramfs

UNIMAP= Unicode font map.
   will be written to /etc/sysconfig/i18n in the initramfs

LANG=<locale>
   will be written to /etc/sysconfig/i18n in the initramfs
   LANG= set locale for all categories, can be any two letter ISO
   language code

dracut.8
modules.d/10redhat-i18n/install
modules.d/10redhat-i18n/parse-i18n.sh [new file with mode: 0644]

index e121bf5..bcf603f 100644 (file)
--- a/dracut.8
+++ b/dracut.8
@@ -78,6 +78,27 @@ root filesystem.
 specify e.g. \fI/dev/sda1\fR or
 \fI/dev/disk/by-path/pci-0000:00:1f.1-scsi-0:0:1:0-part1\fR
 
+.SH I18N
+e.g. LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=de-latin1-nodeadkeys
+.TP
+.B KEYBOARDTYPE=sun|pc
+will be written to /etc/sysconfig/keyboard in the initramfs
+.TP
+.B KEYTABLE=<keytable filename>
+will be written to /etc/sysconfig/keyboard in the initramfs
+.TP
+.B SYSFONT= Console font
+will be written to /etc/sysconfig/i18n in the initramfs
+.TP
+.B SYSFONTACM= Unicode font map
+will be written to /etc/sysconfig/i18n in the initramfs
+.TP
+.B UNIMAP= Unicode font map
+will be written to /etc/sysconfig/i18n in the initramfs
+.TP
+.B LANG=<locale>
+will be written to /etc/sysconfig/i18n in the initramfs
+
 .SH LVM
 .TP
 .B rd_NO_LVM
index a6dbc07..cc7608b 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/bash
+
 findkeymap () {
     local MAP=$1
     [[ ! -f $MAP ]] && \
@@ -18,54 +19,67 @@ findkeymap () {
     done
 }
 
+install_local()
+{
 # FIXME: i18n stuff isn't really distro-independent :/
-if [[ -f /etc/sysconfig/keyboard || -f /etc/sysconfig/console/default.kmap ]]; then
-    if [ -f /etc/sysconfig/console/default.kmap ]; then
-        KEYMAP=/etc/sysconfig/console/default.kmap
-    else
-        . /etc/sysconfig/keyboard
-        [[ $KEYTABLE && -d /lib/kbd/keymaps ]] && KEYMAP="$KEYTABLE.map"
+    if [[ -f /etc/sysconfig/keyboard || -f /etc/sysconfig/console/default.kmap ]]; then
+       if [ -f /etc/sysconfig/console/default.kmap ]; then
+            KEYMAP=/etc/sysconfig/console/default.kmap
+       else
+            . /etc/sysconfig/keyboard
+            [[ $KEYTABLE && -d /lib/kbd/keymaps ]] && KEYMAP="$KEYTABLE.map"
+       fi
+       if [[ $KEYMAP ]]; then
+            [ -f /etc/sysconfig/keyboard ] && inst /etc/sysconfig/keyboard
+            inst loadkeys
+            findkeymap $KEYMAP
+
+            for FN in $KEYMAPS; do
+               if [ -L $FN ]; then
+                   TARGET=$(readlink -f $FN)
+                   TG=$(echo $TARGET | sed -e 's/\.gz$//' -e 's/\.bz2$//')
+                   LN=$(echo $FN | sed -e 's/\.gz$//' -e 's/\.bz2$//')
+                    mkdir -p "$initdir/$(dirname $LN)"
+                    ln -s "$TG" "$initdir/$LN"
+                    FN=$TARGET
+               fi
+               inst $FN
+               case $FN in
+                    *.gz) gzip -d "$initdir$FN" ;;
+                    *.bz2) bzip2 -d "$initdir$FN" ;;
+               esac
+            done
+       fi
     fi
-    if [[ $KEYMAP ]]; then
-        [ -f /etc/sysconfig/keyboard ] && inst /etc/sysconfig/keyboard
-        inst loadkeys
-        findkeymap $KEYMAP
 
-        for FN in $KEYMAPS; do
-            if [ -L $FN ]; then
-               TARGET=$(readlink -f $FN)
-               TG=$(echo $TARGET | sed -e 's/\.gz$//' -e 's/\.bz2$//')
-               LN=$(echo $FN | sed -e 's/\.gz$//' -e 's/\.bz2$//')
-                mkdir -p "$initdir/$(dirname $LN)"
-                ln -s "$TG" "$initdir/$LN"
-                FN=$TARGET
-            fi
-            inst $FN
+    if [ -f /etc/sysconfig/i18n ]; then
+       . /etc/sysconfig/i18n
+       inst /etc/sysconfig/i18n
+       [[ $SYSFONT ]] || SYSFONT=latarcyrheb-sun16
+       inst setfont
+
+       for FN in /lib/kbd/consolefonts/$SYSFONT.* ; do
+            inst "$FN"
             case $FN in
-                *.gz) gzip -d "$initdir$FN" ;;
-                *.bz2) bzip2 -d "$initdir$FN" ;;
+               *.gz) gzip -d "$initdir$FN" ;;
+               *.bz2) bzip2 -d "$initdir$FN" ;;
             esac
-        done
+       done
+       [[ $SYSFONTACM ]] && inst /lib/kbd/consoletrans/$SYSFONTACM
+       [[ $UNIMAP ]] && inst /lib/kbd/unimaps/$UNIMAP
     fi
-fi
-
-if [ -f /etc/sysconfig/i18n ]; then
-    . /etc/sysconfig/i18n
-    inst /etc/sysconfig/i18n
-    [[ $SYSFONT ]] || SYSFONT=latarcyrheb-sun16
-    inst setfont
+}
 
-    for FN in /lib/kbd/consolefonts/$SYSFONT.* ; do
-        inst "$FN"
-        case $FN in
-            *.gz) gzip -d "$initdir$FN" ;;
-            *.bz2) bzip2 -d "$initdir$FN" ;;
-        esac
+if [[ $hostonly ]]; then 
+    install_local
+else
+    for i in $(find /lib/kbd -type f -print); do
+       dracut_install $i
     done
-    [[ $SYSFONTACM ]] && inst /lib/kbd/consoletrans/$SYSFONTACM
-    [[ $UNIMAP ]] && inst /lib/kbd/unimaps/$UNIMAP
+    dracut_install gzip bzip2
 fi
 
-dracut_install /lib/udev/console_*
+dracut_install /lib/udev/console_* 
+dracut_install setfont loadkeys
 inst_rules 10-console.rules
-
+inst_hook cmdline 20 "$moddir/parse-i18n.sh"
diff --git a/modules.d/10redhat-i18n/parse-i18n.sh b/modules.d/10redhat-i18n/parse-i18n.sh
new file mode 100644 (file)
index 0000000..1bf88d6
--- /dev/null
@@ -0,0 +1,14 @@
+inst_key_val()
+{
+    local value
+    value=$(getarg $1)
+    [ -n "$value" ] && printf '%s="%s"\n' $1 $value >> $2
+    initrdargs="$initrdargs $1" 
+}
+mkdir -p /etc/sysconfig
+inst_key_val KEYBOARDTYPE /etc/sysconfig/keyboard
+inst_key_val KEYTABLE /etc/sysconfig/keyboard
+inst_key_val SYSFONT /etc/sysconfig/i18n
+inst_key_val SYSFONTACM /etc/sysconfig/i18n
+inst_key_val UNIMAP /etc/sysconfig/i18n
+inst_key_val LANG /etc/sysconfig/i18n