|
|
|
#!/bin/bash
|
|
|
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
|
|
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
|
|
|
|
|
|
|
check() {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
depends() {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
install() {
|
|
|
|
[ -x /lib/systemd/systemd-vconsole-setup ] && dracut_install /lib/systemd/systemd-vconsole-setup
|
|
|
|
KBDSUBDIRS=consolefonts,consoletrans,keymaps,unimaps
|
|
|
|
DEFAULT_FONT=LatArCyrHeb-16
|
|
|
|
I18N_CONF="/etc/locale.conf"
|
|
|
|
VCONFIG_CONF="/etc/vconsole.conf"
|
|
|
|
|
|
|
|
# This is from 10redhat-i18n.
|
|
|
|
findkeymap () {
|
|
|
|
local MAP=$1
|
|
|
|
[[ ! -f $MAP ]] && \
|
|
|
|
MAP=$(find ${kbddir}/keymaps -type f -name $MAP -o -name $MAP.\* | head -n1)
|
|
|
|
[[ " $KEYMAPS " = *" $MAP "* ]] && return
|
|
|
|
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 ${kbddir}/keymaps -type f -name $INCL\*); do
|
|
|
|
findkeymap $FN
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
# Function gathers variables from distributed files among the tree, maps to
|
|
|
|
# specified names and prints the result in format "new-name=value".
|
|
|
|
#
|
|
|
|
# $@ = list in format specified below (BNF notation)
|
|
|
|
#
|
|
|
|
# <list> ::= <element> | <element> " " <list>
|
|
|
|
# <element> ::= <conf-file-name> ":" <map-list>
|
|
|
|
# <map-list> ::= <mapping> | <mapping> "," <map-list>
|
|
|
|
# <mapping> ::= <src-var> "-" <dst-var> | <src-var>
|
|
|
|
#
|
|
|
|
# We assume no whitespace are allowed between symbols.
|
|
|
|
# <conf-file-name> is a file holding <src-var> in your system.
|
|
|
|
# <src-var> is a variable holding value of meaning the same as <dst-var>.
|
|
|
|
# <dst-var> is a variable which will be set up inside initramfs.
|
|
|
|
# If <dst-var> has the same name as <src-var> we can omit <dst-var>.
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
# /etc/conf.d/keymaps:KEYMAP,extended_keymaps-EXT_KEYMAPS
|
|
|
|
# <list> = /etc/conf.d/keymaps:KEYMAP,extended_keymaps-EXT_KEYMAPS
|
|
|
|
# <element> = /etc/conf.d/keymaps:KEYMAP,extended_keymaps-EXT_KEYMAPS
|
|
|
|
# <conf-file-name> = /etc/conf.d/keymaps
|
|
|
|
# <map-list> = KEYMAP,extended_keymaps-EXT_KEYMAPS
|
|
|
|
# <mapping> = KEYMAP
|
|
|
|
# <src-var> = KEYMAP
|
|
|
|
# <mapping> = extended_keymaps-EXT_KEYMAPS
|
|
|
|
# <src-var> = extended_keymaps
|
|
|
|
# <dst-var> = EXT_KEYMAPS
|
|
|
|
gather_vars() {
|
|
|
|
local item map value
|
|
|
|
|
|
|
|
for item in $@
|
|
|
|
do
|
|
|
|
item=(${item/:/ })
|
|
|
|
for map in ${item[1]//,/ }
|
|
|
|
do
|
|
|
|
map=(${map//-/ })
|
|
|
|
value=$(grep "^${map[0]}=" "${item[0]}")
|
|
|
|
value=${value#*=}
|
|
|
|
echo "${map[1]:-${map[0]}}=${value}"
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
install_base() {
|
|
|
|
dracut_install setfont loadkeys kbd_mode stty
|
|
|
|
|
|
|
|
inst ${moddir}/console_init /lib/udev/console_init
|
|
|
|
inst_rules ${moddir}/10-console.rules
|
|
|
|
inst_hook cmdline 20 "${moddir}/parse-i18n.sh"
|
|
|
|
}
|
|
|
|
|
|
|
|
install_all_kbd() {
|
|
|
|
local rel f
|
|
|
|
|
|
|
|
for f in $(eval find ${kbddir}/{${KBDSUBDIRS}} -type f -print)
|
|
|
|
do
|
|
|
|
inst $f
|
|
|
|
done
|
|
|
|
|
|
|
|
# remove unnecessary files
|
|
|
|
rm -f "${initdir}${kbddir}/consoletrans/utflist"
|
|
|
|
find "${initdir}${kbddir}/" -name README\* -delete
|
|
|
|
|
|
|
|
dracut_install gzip bzip2
|
|
|
|
}
|
|
|
|
|
|
|
|
install_local_i18n() {
|
|
|
|
local map
|
|
|
|
|
|
|
|
eval $(gather_vars ${i18n_vars})
|
|
|
|
[ -f $I18N_CONF ] && . $I18N_CONF
|
|
|
|
[ -f $VCONFIG_CONF ] && . $VCONFIG_CONF
|
|
|
|
|
|
|
|
# Gentoo user may have KEYMAP set to something like "-u pl2",
|
|
|
|
KEYMAP=${KEYMAP#-* }
|
|
|
|
# I'm not sure of the purpose of UNIKEYMAP and GRP_TOGGLE. They were in
|
|
|
|
# original redhat-i18n module. Anyway it won't hurt.
|
|
|
|
EXT_KEYMAPS+=\ ${UNIKEYMAP}\ ${GRP_TOGGLE}
|
|
|
|
|
|
|
|
[[ ${KEYMAP} ]] || {
|
|
|
|
derror 'No KEYMAP.'
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
findkeymap ${KEYMAP}
|
|
|
|
|
|
|
|
for map in ${EXT_KEYMAPS}
|
|
|
|
do
|
|
|
|
ddebug "Adding extra map: ${map}"
|
|
|
|
findkeymap ${map}
|
|
|
|
done
|
|
|
|
|
|
|
|
inst_opt_decompress ${KEYMAPS}
|
|
|
|
|
|
|
|
inst_opt_decompress ${kbddir}/consolefonts/${DEFAULT_FONT}.*
|
|
|
|
|
|
|
|
if [[ ${FONT} ]]
|
|
|
|
then
|
|
|
|
FONT=${FONT%.psf*}
|
|
|
|
inst_opt_decompress ${kbddir}/consolefonts/${FONT}.*
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ ${FONT_MAP} ]]
|
|
|
|
then
|
|
|
|
FONT_MAP=${FONT_MAP%.trans}
|
|
|
|
inst ${kbddir}/consoletrans/${FONT_MAP}.trans
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ ${FONT_UNIMAP} ]]
|
|
|
|
then
|
|
|
|
FONT_UNIMAP=${FONT_UNIMAP%.uni}
|
|
|
|
inst ${kbddir}/unimaps/${FONT_UNIMAP}.uni
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ ${UNICODE} ]]
|
|
|
|
then
|
|
|
|
if [[ ${UNICODE^^} = YES || ${UNICODE} = 1 ]]
|
|
|
|
then
|
|
|
|
UNICODE=1
|
|
|
|
elif [[ ${UNICODE^^} = NO || ${UNICODE} = 0 ]]
|
|
|
|
then
|
|
|
|
UNICODE=0
|
|
|
|
else
|
|
|
|
UNICODE=''
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
if [[ ! ${UNICODE} && ${LANG^^} =~ .*\.UTF-?8 ]]
|
|
|
|
then
|
|
|
|
UNICODE=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
mksubdirs ${initdir}${I18N_CONF}
|
|
|
|
mksubdirs ${initdir}${VCONFIG_CONF}
|
|
|
|
print_vars LC_ALL LANG >> ${initdir}${I18N_CONF}
|
|
|
|
print_vars KEYMAP EXT_KEYMAPS UNICODE FONT FONT_MAP FONT_UNIMAP >> ${initdir}${VCONFIG_CONF}
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
checks() {
|
|
|
|
for kbddir in ${kbddir} /usr/lib/kbd /lib/kbd /usr/share /usr/share/kbd
|
|
|
|
do
|
|
|
|
[[ -d "${kbddir}" ]] && \
|
|
|
|
for dir in ${KBDSUBDIRS//,/ }
|
|
|
|
do
|
|
|
|
[[ -d "${kbddir}/${dir}" ]] && continue
|
|
|
|
false
|
|
|
|
done && break
|
|
|
|
kbddir=''
|
|
|
|
done
|
|
|
|
|
|
|
|
[[ ${kbddir} ]] || {
|
|
|
|
derror "Directories ${KBDSUBDIRS//,/, } not found. Please" \
|
|
|
|
"inform us about the issue including your OS name and version."
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
[[ -f $I18N_CONF && -f $VCONFIG_CONF ]] || \
|
|
|
|
[[ ! ${hostonly} || ${i18n_vars} ]] || {
|
|
|
|
derror 'i18n_vars not set! Please set up i18n_vars in ' \
|
|
|
|
'configuration file.'
|
|
|
|
}
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
if checks
|
|
|
|
then
|
|
|
|
install_base
|
|
|
|
|
|
|
|
if [[ ${hostonly} ]]
|
|
|
|
then
|
|
|
|
install_local_i18n || install_all_kbd
|
|
|
|
else
|
|
|
|
install_all_kbd
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|