Browse Source

Add first pass of keyboard/console font setup

First pass of keyboard/console font setup.  This ends up being Fedora/RHEL
specific as everyone specifies these things in a different place
master
Jeremy Katz 16 years ago
parent
commit
aabc0553b5
  1. 4
      TODO
  2. 58
      dracut
  3. 33
      dracut-functions

4
TODO

@ -31,7 +31,9 @@ for us appropriately @@ -31,7 +31,9 @@ for us appropriately
* mdraid
* dmraid
* multipath
* Should SELinux policy be done in the initramfs or from the real rootfs?
* Should SELinux policy be done in the initramfs or from the real
rootfs?
* Keyboard layout/consolefont setup is Fedora/RHEL-specific.


GENERATOR TODO

58
dracut

@ -72,7 +72,7 @@ cryptexe="/sbin/cryptsetup" @@ -72,7 +72,7 @@ cryptexe="/sbin/cryptsetup"
# and some things that are nice for debugging
debugexe="/bin/ls /bin/cat /bin/ln /bin/ps /bin/grep /bin/more"
# udev things we care about
udevexe="/lib/udev/vol_id"
udevexe="/lib/udev/vol_id /lib/udev/console_init"

# install base files
for binary in $exe $debugexe $udevexe $lvmexe $cryptexe ; do
@ -83,13 +83,67 @@ done @@ -83,13 +83,67 @@ done
# ultimately, /lib/initramfs/rules.d or somesuch which includes links/copies
# of the rules we want so that we just copy those in would be best
mkdir -p $initdir/lib/udev/rules.d
for rule in /lib/udev/rules.d/40-redhat* /lib/udev/rules.d/50* /lib/udev/rules.d/60-persistent-storage.rules /lib/udev/rules.d/61*edd* /lib/udev/rules.d/64* /lib/udev/rules.d/80* /lib/udev/rules.d/95* $rulesdir/*.rules ; do
for rule in /lib/udev/rules.d/10-console* /lib/udev/rules.d/40-redhat* /lib/udev/rules.d/50* /lib/udev/rules.d/60-persistent-storage.rules /lib/udev/rules.d/61*edd* /lib/udev/rules.d/64* /lib/udev/rules.d/80* /lib/udev/rules.d/95* $rulesdir/*.rules ; do
cp $rule $initdir/lib/udev/rules.d
done

# terminfo bits make things work better if you fall into interactive mode
for f in $(find /lib/terminfo -type f) ; do cp --parents $f "$initdir" ; done

# 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
if [ -n "$KEYTABLE" -a -d "/lib/kbd/keymaps" ]; then
KEYMAP="$KEYTABLE.map"
fi
fi
if [ -n "$KEYMAP" ]; then
[ -f /etc/sysconfig/keyboard ] && inst /etc/sysconfig/keyboard "$initdir"
inst /bin/loadkeys "$initdir"
findkeymap $KEYMAP

for FN in $KEYMAPS; do
inst $FN "$initdir"
case "$FN" in
*.gz)
gzip -d "$initdir$FN"
;;
*.bz2)
bzip2 -d "$initdir$FN"
;;
esac
done
fi
fi

if [ -f /etc/sysconfig/i18n ]; then
. /etc/sysconfig/i18n
inst /etc/sysconfig/i18n "$initdir"
[ -z "$SYSFONT" ] && SYSFONT=latarcyrheb-sun16
inst /bin/setfont "$initdir"

for FN in /lib/kbd/consolefonts/$SYSFONT.* ; do
inst $FN "$initdir"
case "$FN" in
*.gz)
gzip -d "$MNTIMAGE$FN"
;;
*.bz2)
bzip2 -d "$MNTIMAGE$FN"
;;
esac
done
if [ -n "$SYSFONTACM" ]; then
inst /lib/kbd/consoletrans/$SYSFONTACM "$initdir"
fi
if [ -n "$UNIMAP" ]; then
inst /lib/kbd/unimaps/$UNIMAP "$initdir"
fi
fi

# install our files
cp $initfile $initdir/init
cp $switchroot $initdir/sbin/switch_root

33
dracut-functions

@ -290,6 +290,39 @@ resdeps () { @@ -290,6 +290,39 @@ resdeps () {
resolved="$items"
}

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
}


# vim:ts=8:sw=4:sts=4:et

Loading…
Cancel
Save