2 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
3 # ex: ts=8 sw=4 sts=4 et filetype=sh
6 [[ "$mount_needs" ]] && return 1
15 [ -x /lib
/systemd
/systemd-vconsole-setup
] && dracut_install
/lib
/systemd
/systemd-vconsole-setup
16 KBDSUBDIRS
=consolefonts
,consoletrans
,keymaps
,unimaps
17 DEFAULT_FONT
=LatArCyrHeb-16
18 I18N_CONF
="/etc/locale.conf"
19 VCONFIG_CONF
="/etc/vconsole.conf"
21 # This is from 10redhat-i18n.
25 MAP
=$
(find ${kbddir}/keymaps
-type f
-name $MAP -o -name $MAP.\
* |
head -n1)
26 [[ " $KEYMAPS " = *" $MAP "* ]] && return
27 KEYMAPS
="$KEYMAPS $MAP"
34 for INCL
in $
($cmd "^include " $MAP | cut
-d' ' -f2 |
tr -d '"'); do
35 for FN
in $
(find ${kbddir}/keymaps
-type f
-name $INCL\
*); do
41 # Function gathers variables from distributed files among the tree, maps to
42 # specified names and prints the result in format "new-name=value".
44 # $@ = list in format specified below (BNF notation)
46 # <list> ::= <element> | <element> " " <list>
47 # <element> ::= <conf-file-name> ":" <map-list>
48 # <map-list> ::= <mapping> | <mapping> "," <map-list>
49 # <mapping> ::= <src-var> "-" <dst-var> | <src-var>
51 # We assume no whitespace are allowed between symbols.
52 # <conf-file-name> is a file holding <src-var> in your system.
53 # <src-var> is a variable holding value of meaning the same as <dst-var>.
54 # <dst-var> is a variable which will be set up inside initramfs.
55 # If <dst-var> has the same name as <src-var> we can omit <dst-var>.
58 # /etc/conf.d/keymaps:KEYMAP,extended_keymaps-EXT_KEYMAPS
59 # <list> = /etc/conf.d/keymaps:KEYMAP,extended_keymaps-EXT_KEYMAPS
60 # <element> = /etc/conf.d/keymaps:KEYMAP,extended_keymaps-EXT_KEYMAPS
61 # <conf-file-name> = /etc/conf.d/keymaps
62 # <map-list> = KEYMAP,extended_keymaps-EXT_KEYMAPS
65 # <mapping> = extended_keymaps-EXT_KEYMAPS
66 # <src-var> = extended_keymaps
67 # <dst-var> = EXT_KEYMAPS
74 for map
in ${item[1]//,/ }
77 value
=$
(grep "^${map[0]}=" "${item[0]}")
79 echo "${map[1]:-${map[0]}}=${value}"
85 dracut_install setfont loadkeys kbd_mode stty
87 inst
${moddir}/console_init.sh
/lib
/udev
/console_init
88 inst_rules
${moddir}/10-console.rules
89 inst_hook cmdline
20 "${moddir}/parse-i18n.sh"
95 for f
in $
(eval find ${kbddir}/{${KBDSUBDIRS}} -type f
-print)
100 # remove unnecessary files
101 rm -f "${initdir}${kbddir}/consoletrans/utflist"
102 find "${initdir}${kbddir}/" -name README\
* -delete
104 dracut_install
gzip bzip2
107 install_local_i18n
() {
110 eval $
(gather_vars
${i18n_vars})
111 [ -f $I18N_CONF ] && .
$I18N_CONF
112 [ -f $VCONFIG_CONF ] && .
$VCONFIG_CONF
114 shopt -q -s nocasematch
117 if [[ ${UNICODE} = YES ||
${UNICODE} = 1 ]]
120 elif [[ ${UNICODE} = NO ||
${UNICODE} = 0 ]]
127 if [[ ! ${UNICODE} && ${LANG} =~ .
*\.UTF-?
8 ]]
131 shopt -q -u nocasematch
133 # Gentoo user may have KEYMAP set to something like "-u pl2",
136 # KEYTABLE is a bit special - it defines base keymap name and UNICODE
137 # determines whether non-UNICODE or UNICODE version is used
139 if [[ ${KEYTABLE} ]]; then
140 if [[ ${UNICODE} == 1 ]]; then
141 [[ ${KEYTABLE} =~ .
*\.uni.
* ]] || KEYTABLE
=${KEYTABLE%.map*}.uni
146 # I'm not sure of the purpose of UNIKEYMAP and GRP_TOGGLE. They were in
147 # original redhat-i18n module. Anyway it won't hurt.
148 EXT_KEYMAPS
+=\
${UNIKEYMAP}\
${GRP_TOGGLE}
156 for map
in ${EXT_KEYMAPS}
158 ddebug
"Adding extra map: ${map}"
162 inst_opt_decompress
${KEYMAPS}
164 inst_opt_decompress
${kbddir}/consolefonts
/${DEFAULT_FONT}.
*
169 inst_opt_decompress
${kbddir}/consolefonts
/${FONT}.
*
174 FONT_MAP
=${FONT_MAP%.trans}
175 inst_simple
${kbddir}/consoletrans
/${FONT_MAP}.trans
178 if [[ ${FONT_UNIMAP} ]]
180 FONT_UNIMAP
=${FONT_UNIMAP%.uni}
181 inst_simple
${kbddir}/unimaps
/${FONT_UNIMAP}.uni
184 mksubdirs
${initdir}${I18N_CONF}
185 mksubdirs
${initdir}${VCONFIG_CONF}
186 print_vars LC_ALL LANG
>> ${initdir}${I18N_CONF}
187 print_vars KEYMAP EXT_KEYMAPS UNICODE FONT FONT_MAP FONT_UNIMAP
>> ${initdir}${VCONFIG_CONF}
192 for kbddir
in ${kbddir} /usr
/lib
/kbd
/lib
/kbd
/usr
/share
/usr
/share
/kbd
194 [[ -d "${kbddir}" ]] && \
195 for dir
in ${KBDSUBDIRS//,/ }
197 [[ -d "${kbddir}/${dir}" ]] && continue
204 derror
"Directories ${KBDSUBDIRS//,/, } not found. Please" \
205 "inform us about the issue including your OS name and version."
209 [[ -f $I18N_CONF && -f $VCONFIG_CONF ]] || \
210 [[ ! ${hostonly} ||
${i18n_vars} ]] ||
{
211 derror
'i18n_vars not set! Please set up i18n_vars in ' \
212 'configuration file.'
223 install_local_i18n || install_all_kbd