From: Harald Hoyer <harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: initramfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v9] dracut: add support for custom locale definitions
Date: Wed, 11 Oct 2017 15:17:51 +0200 [thread overview]
Message-ID: <7206831a-5136-5acf-fe29-12d81fd083e9@redhat.com> (raw)
In-Reply-To: <1461430242.2604.15.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
Please file a pull request on https://github.com/dracutdevs/dracut
On 23.04.2016 18:50, Guido Trentalancia wrote:
> Compile and install locale definitions using localedef from GNU libc or,
> if locale definitions cannot be compiled but are available on the system
> as split definitions, just install them.
>
> The resulting locale definitions archive contains at most two different
> locale definitions, therefore its size is relatively small.
>
> Add support for localised messages from core packages (LC_MESSAGES).
>
> Add support for non-latin fonts using Unicode (tested successfully with
> Greek, Hebrew and Cyrillic).
>
> This revised version fixes several issues in the initial patch (including
> the possibility to build locale definitions). Thanks to Andrei Borzenkov
> for reviewing the initial patch and providing useful suggestions.
>
> Thanks for Harald Hoyer for the full style review and other useful
> suggestions.
>
> Signed-off-by: Guido Trentalancia <guido-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
> ---
> NEWS | 4 +
> dracut-bash-completion.sh | 11 +--
> dracut-init.sh | 37 ++++++++++
> dracut.8.asc | 8 ++
> dracut.conf.5.asc | 14 ++-
> dracut.sh | 20 ++++-
> modules.d/10i18n/README | 1
> modules.d/10i18n/console_init.sh | 58 +++++++++++-----
> modules.d/10i18n/module-setup.sh | 123 +++++++++++++++++++++++++++++++++-
> modules.d/10i18n/parse-i18n.sh | 8 +-
> modules.d/90crypt/module-setup.sh | 6 +
> modules.d/91crypt-gpg/module-setup.sh | 6 +
> modules.d/99base/init.sh | 4 -
> modules.d/99base/module-setup.sh | 4 +
> modules.d/99base/profile | 9 ++
> 15 files changed, 275 insertions(+), 38 deletions(-)
>
> diff -pruN dracut-git-orig/dracut.8.asc dracut-git-10i18n-full-support-for-localisation/dracut.8.asc
> --- dracut-git-orig/dracut.8.asc 2016-04-19 02:19:10.650042399 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/dracut.8.asc 2016-04-21 17:13:53.043188284 +0200
> @@ -358,6 +358,14 @@ provide a valid _/etc/fstab_.
> LVM or an encrypted partition.
> [NB --device can be used for compatibility with earlier releases]
>
> +**--msg-localisation**::
> + Include full localisation support for the i18n module (slightly increases
> + the initramfs size).
> +
> +**--no-msg-localisation**::
> + Do not include full localisation support for the i18n module (to save
> + storage space or force the default locale).
> +
> **-i, --include** _<SOURCE>_ _<TARGET>_::
> include the files in the SOURCE directory into the
> TARGET directory in the final initramfs. If SOURCE is a file, it will be
> diff -pruN dracut-git-orig/dracut-bash-completion.sh dracut-git-10i18n-full-support-for-localisation/dracut-bash-completion.sh
> --- dracut-git-orig/dracut-bash-completion.sh 2016-04-19 02:19:10.648042373 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/dracut-bash-completion.sh 2016-04-21 17:16:41.148400079 +0200
> @@ -28,11 +28,12 @@ _dracut() {
> --ro-mnt --force --kernel-only --no-kernel --strip --nostrip
> --hardlink --nohardlink --noprefix --mdadmconf --nomdadmconf
> --lvmconf --nolvmconf --debug --profile --verbose --quiet
> - --local --hostonly --no-hostonly --fstab --help --bzip2 --lzma
> - --xz --no-compress --gzip --list-modules --show-modules --keep
> - --printsize --regenerate-all --noimageifnotneeded --early-microcode
> - --no-early-microcode --print-cmdline --prelink --noprelink --reproducible
> - --uefi
> + --local --hostonly --no-hostonly --fstab --msg-localisation
> + --no-msg-localisation --help --bzip2 --lzma --xz --no-compress
> + --gzip --list-modules --show-modules --keep --printsize
> + --regenerate-all --noimageifnotneeded --early-microcode
> + --no-early-microcode --print-cmdline --prelink --noprelink
> + --reproducible --uefi
> '
>
> [ARG]='-a -m -o -d -I -k -c -L --kver --add --force-add --add-drivers
> diff -pruN dracut-git-orig/dracut.conf.5.asc dracut-git-10i18n-full-support-for-localisation/dracut.conf.5.asc
> --- dracut-git-orig/dracut.conf.5.asc 2016-04-19 02:19:10.650042399 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/dracut.conf.5.asc 2016-04-21 17:21:57.576555027 +0200
> @@ -99,9 +99,6 @@ Configuration files must have the extens
> *hostonly_cmdline=*"__{yes|no}__"::
> If set, store the kernel command line arguments needed in the initramfs
>
> -*i18n_install_all=*"__{yes|no}__"::
> - If set to yes, install all available fonts and keyboard files.
> -
> *persistent_policy=*"__<policy>__"::
> Use _<policy>_ to address disks and partitions.
> _<policy>_ can be any directory name found in /dev/disk.
> @@ -196,7 +193,16 @@ provide a valid _/etc/fstab_.
> Default is "LatArCyrHeb-16".
>
> *i18n_install_all=*"__{yes|no}__"::
> - Install everything regardless of generic or hostonly mode.
> + Install all available fonts and keyboard files regardless of generic
> + or hostonly mode.
> +
> +*msg-localisation=*"__{yes|no}__"::
> + Add full localisation support (includes message-based localisation
> + and non latin font support).
> +
> +*no-msg-localisation=*"__{yes|no}__"::
> + Do not add full localisation support (only keyboard localisation
> + is added): saves some storage space.
>
> *reproducible=*"__{yes|no}__"::
> Create reproducible images.
> diff -pruN dracut-git-orig/dracut-init.sh dracut-git-10i18n-full-support-for-localisation/dracut-init.sh
> --- dracut-git-orig/dracut-init.sh 2016-04-19 02:19:10.649042386 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/dracut-init.sh 2016-04-22 18:05:08.033519479 +0200
> @@ -214,6 +214,43 @@ inst_multiple() {
> return $_ret
> }
>
> +# Install package translations (message-based localisations)
> +inst_i18n() {
> + local _locale_dirs_dup
> + local _locale_dirs
> + local _tmppath
> + [[ $1 ]] || return 1 # no package name
> + [ -f /etc/locale.conf ] && . /etc/locale.conf
> + if [ ${LC_ALL} ]; then
> + read LC_ALL_LOCALE LC_ALL_CHARMAP < <(echo ${LC_ALL//./ })
> + fi
> + if [ ${LANG} ]; then
> + read LANG_LOCALE LANG_CHARMAP < <(echo ${LANG//./ })
> + fi
> + if [ ${LC_MESSAGES} ]; then
> + read LC_MESSAGES_LOCALE LC_MESSAGES_CHARMAP < <(echo ${LC_MESSAGES//./ })
> + fi
> + [[ ${LC_ALL_LOCALE} ]] && read LC_ALL_LOCALE_SHORT LC_ALL_LOCALE_COUNTRY < <(echo ${LC_ALL_LOCALE//_/ })
> + [[ ${LANG_LOCALE} ]] && read LANG_LOCALE_SHORT LANG_LOCALE_COUNTRY < <(echo ${LANG_LOCALE//_/ })
> + [[ ${LC_MESSAGES_LOCALE} ]] && read LC_MESSAGES_LOCALE_SHORT LC_MESSAGES_LOCALE_COUNTRY < <(echo ${LC_MESSAGES_LOCALE//_/ })
> + _locale_dirs_dup="${LC_ALL_LOCALE} ${LANG_LOCALE} ${LC_MESSAGES_LOCALE} ${LC_ALL_LOCALE_SHORT} ${LANG_LOCALE_SHORT} ${LC_MESSAGES_LOCALE_SHORT}"
> + _tmppath=
> + _locale_dirs=
> + for dir in ${_locale_dirs_dup}
> + do
> + case $_tmppath in
> + *\ ${dir}) ;;
> + *) _locale_dirs="${_tmppath} ${dir}";;
> + esac
> + _tmppath=${_locale_dirs}
> + done
> + for dir in ${_locale_dirs}; do
> + [[ -d "/usr/share/locale/${dir}" ]] && for file in `find "/usr/share/locale/${dir}" -type f -name "$1.mo"`; do
> + inst_simple "${file}"
> + done
> + done
> +}
> +
> dracut_install() {
> inst_multiple "$@"
> }
> diff -pruN dracut-git-orig/dracut.sh dracut-git-10i18n-full-support-for-localisation/dracut.sh
> --- dracut-git-orig/dracut.sh 2016-04-19 02:19:10.652042425 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/dracut.sh 2016-04-21 23:06:34.022740183 +0200
> @@ -163,6 +163,10 @@ Creates initial ramdisk images for prelo
> --mount "[MP]" Same as above, but [DEV], [FSTYPE] and [FSOPTS] are
> determined by looking at the current mounts.
> --add-device "[DEV]" Bring up [DEV] in initramfs
> + --msg-localisation Add full localisation support rather than only
> + the minimal keyboard support (default)
> + --no-msg-localisation Do not add full localisation support, but only
> + minimal keyboard support
> -i, --include [SOURCE] [TARGET]
> Include the files in the SOURCE directory into the
> Target directory in the final initramfs.
> @@ -344,6 +348,8 @@ rearrange_params()
> --long no-hostonly-cmdline \
> --long persistent-policy: \
> --long fstab \
> + --long msg-localisation \
> + --long no-msg-localisation \
> --long help \
> --long bzip2 \
> --long lzma \
> @@ -538,6 +544,10 @@ while :; do
> --persistent-policy)
> persistent_policy_l="$2"; PARMS_TO_STORE+=" '$2'"; shift;;
> --fstab) use_fstab_l="yes" ;;
> + --msg-localisation)
> + msg_localisation_l="yes" ;;
> + --no-msg-localisation)
> + msg_localisation_l="no" ;;
> -h|--help) long_usage; exit 1 ;;
> -i|--include) include_src+=("$2"); PARMS_TO_STORE+=" '$2'";
> shift;;
> @@ -730,6 +740,8 @@ stdloglvl=$((stdloglvl + verbosity_mod_l
> [[ $i18n_install_all_l ]] && i18n_install_all=$i18n_install_all_l
> [[ $persistent_policy_l ]] && persistent_policy=$persistent_policy_l
> [[ $use_fstab_l ]] && use_fstab=$use_fstab_l
> +[[ $msg_localisation_l ]] && msg_localisation=$msg_localisation_l
> +[[ $msg_localisation_l ]] || msg_localisation="yes"
> [[ $mdadmconf_l ]] && mdadmconf=$mdadmconf_l
> [[ $lvmconf_l ]] && lvmconf=$lvmconf_l
> [[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut
> @@ -1269,10 +1281,10 @@ export initdir dracutbasedir \
> mods_to_load \
> fw_dir drivers_dir debug no_kernel kernel_only \
> omit_drivers mdadmconf lvmconf root_dev \
> - use_fstab fstab_lines libdirs fscks nofscks ro_mnt \
> - stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
> - debug host_fs_types host_devs swap_devs sshkey add_fstab \
> - DRACUT_VERSION udevdir prefix filesystems drivers \
> + use_fstab fstab_lines msg_localisation libdirs fscks \
> + nofscks ro_mnt stdloglvl sysloglvl fileloglvl kmsgloglvl \
> + logile debug host_fs_types host_devs swap_devs sshkey \
> + add_fstab DRACUT_VERSION udevdir prefix filesystems drivers \
> systemdutildir systemdsystemunitdir systemdsystemconfdir \
> hostonly_cmdline loginstall \
> tmpfilesdir
> diff -pruN dracut-git-orig/modules.d/10i18n/console_init.sh dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/console_init.sh
> --- dracut-git-orig/modules.d/10i18n/console_init.sh 2016-04-20 14:11:02.824944921 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/console_init.sh 2016-04-22 17:54:50.913345284 +0200
> @@ -6,6 +6,7 @@ if [ -x $systemdutildir/systemd-vconsole
> $systemdutildir/systemd-vconsole-setup "$@"
> fi
>
> +[ -e /etc/locale.conf ] && . /etc/locale.conf
> [ -e /etc/vconsole.conf ] && . /etc/vconsole.conf
>
> DEFAULT_FONT=LatArCyrHeb-16
> @@ -19,14 +20,14 @@ set_keyboard() {
> }
>
> set_terminal() {
> - local dev=$1
> -
> if [ "${UNICODE}" = 1 ]; then
> - printf '\033%%G' >&7
> - stty -F ${dev} iutf8
> + if [ "${FONT}" -a ! "${FONT_MAP}" ]; then
> + /usr/bin/unicode_start "${FONT}"
> + elif [ "${FONT}" -a "${FONT_MAP}" ]; then
> + /usr/bin/unicode_start "${FONT}" "${FONT_MAP}"
> + fi
> else
> - printf '\033%%@' >&7
> - stty -F ${dev} -iutf8
> + /usr/bin/unicode_stop
> fi
> }
>
> @@ -44,16 +45,6 @@ set_keymap() {
> loadkeys -q ${utf_switch} ${KEYMAP} ${EXT_KEYMAPS}
> }
>
> -set_font() {
> - local dev=$1; local trans=''; local uni=''
> -
> - [ -z "${FONT}" ] && FONT=${DEFAULT_FONT}
> - [ -n "${FONT_MAP}" ] && trans="-m ${FONT_MAP}"
> - [ -n "${FONT_UNIMAP}" ] && uni="-u ${FONT_UNIMAP}"
> -
> - setfont ${FONT} -C ${dev} ${trans} ${uni}
> -}
> -
> dev_close() {
> exec 6>&-
> exec 7>&-
> @@ -74,6 +65,27 @@ devname=${dev#/dev/}
> exit 1
> }
>
> +if [ "${UNICODE}" ]; then
> + if [ "${UNICODE}" = YES -o "${UNICODE}" = yes -o "${UNICODE}" = 1 ]; then
> + UNICODE=1
> + elif [ "${UNICODE}" = NO -o "${UNICODE}" = no -o "${UNICODE}" = 0 ]; then
> + UNICODE=0
> + else
> + UNICODE=''
> + fi
> +fi
> +if [ ! "${UNICODE}" ]; then
> + IFS=.
> + set -- $LANG
> + tail=$2
> + IFS=-
> + set -- $tail
> + type=$1
> + if [ "${type}" = "UTF" ]; then
> + UNICODE=1
> + fi
> +fi
> +
> dev_open ${dev}
>
> for fd in 6 7; do
> @@ -84,9 +96,19 @@ for fd in 6 7; do
> fi
> done
>
> +# Immediately after booting up, the
> +# display driver needs to settle,
> +# otherwise the Unicode mode cannot
> +# be enabled and the non latin
> +# characters do not render properly.
> +if [ -d /usr/share/locale ]; then
> + if [ ! -e /tmp/dracut-vga-init-complete ]; then
> + sleep 2 && :> /tmp/dracut-vga-init-complete
> + fi
> +fi
> +
> set_keyboard
> -set_terminal ${dev}
> -set_font ${dev}
> +set_terminal
> set_keymap
>
> dev_close
> diff -pruN dracut-git-orig/modules.d/10i18n/module-setup.sh dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/module-setup.sh
> --- dracut-git-orig/modules.d/10i18n/module-setup.sh 2016-04-22 14:25:26.949983919 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/module-setup.sh 2016-04-23 18:23:14.911103135 +0200
> @@ -4,7 +4,11 @@
> check() {
> [[ "$mount_needs" ]] && return 1
>
> - require_binaries setfont loadkeys kbd_mode || return 1
> + require_binaries setfont loadkeys kbd_mode unicode_start unicode_stop
> +
> + if [[ $msg_localisation == "yes" ]]; then
> + require_binaries stty tty tset reset sleep || return 1
> + fi
>
> return 0
> }
> @@ -27,6 +31,11 @@ install() {
> I18N_CONF="/etc/locale.conf"
> VCONFIG_CONF="/etc/vconsole.conf"
>
> + # Core packages: always install the message-based localisation
> + if [[ $msg_localisation == "yes" ]]; then
> + CORE_PACKAGES="libc bash coreutils util-linux e2fsprogs grep sed kbd"
> + fi
> +
> # This is from 10redhat-i18n.
> findkeymap () {
> local MAP=$1
> @@ -93,7 +102,11 @@ install() {
> }
>
> install_base() {
> - inst_multiple setfont loadkeys kbd_mode stty
> + inst_multiple setfont loadkeys kbd_mode unicode_start unicode_stop
> +
> + if [[ $msg_localisation == "yes" ]]; then
> + inst_multiple stty tty tset reset sleep
> + fi
>
> if ! dracut_module_included "systemd"; then
> inst ${moddir}/console_init.sh /lib/udev/console_init
> @@ -212,11 +225,115 @@ install() {
> inst_simple ${kbddir}/unimaps/${FONT_UNIMAP}.uni
> fi
>
> + if [[ $msg_localisation == "yes" ]]; then
> + [[ ${LC_ALL} || ${LANG} || ${LC_MESSAGES} ]] && inst_dir /usr/lib/locale
> +
> + # Check if we can compile locale definitions
> + if command -v localedef > /dev/null; then
> + HAS_LOCALEDEF=true
> + else
> + HAS_LOCALEDEF=false
> + fi
> + if [ ${LC_ALL} ]; then
> + read LC_ALL_LOCALE LC_ALL_CHARMAP < <(echo ${LC_ALL//./ })
> + fi
> + if [ ${LANG} ]; then
> + read LANG_LOCALE LANG_CHARMAP < <(echo ${LANG//./ })
> + fi
> + if [ ${LC_MESSAGES} ]; then
> + read LC_MESSAGES_LOCALE LC_MESSAGES_CHARMAP < <(echo ${LC_MESSAGES//./ })
> + fi
> +
> + # Generate locale definitions for LC_ALL or install compiled split
> + # definitions where available
> + if [[ ${LC_ALL} && ${LC_ALL_LOCALE} && ${LC_ALL_CHARMAP} ]]; then
> + if [[ ${HAS_LOCALEDEF} == true && -e /usr/share/i18n/locales/${LC_ALL_LOCALE} ]]; then
> + localedef --prefix="${initdir}" -i ${LC_ALL_LOCALE} -f ${LC_ALL_CHARMAP} ${LC_ALL}
> + elif [ -d "/usr/lib/locale/${LC_ALL}" ]; then
> + cp -prfL -t "${initdir}/usr/lib/locale/" /usr/lib/locale/${LC_ALL}
> + fi
> + fi
> +
> + # Generate locale definitions for LANG or install compiled split
> + # definitions where available
> + if [[ ${LANG} && ${LANG_LOCALE} && ${LANG_CHARMAP} ]]; then
> + if [[ ${HAS_LOCALEDEF} == true && -e /usr/share/i18n/locales/${LANG_LOCALE} ]]; then
> + localedef --prefix="${initdir}" -i ${LANG_LOCALE} -f ${LANG_CHARMAP} ${LANG}
> + elif [ -d "/usr/lib/locale/${LANG}" ]; then
> + cp -prfL -t "${initdir}/usr/lib/locale/" /usr/lib/locale/${LANG}
> + fi
> + fi
> +
> + # Generate locale definitions for LC_MESSAGES of install compiled split
> + # definitions where available
> + if [[ ${LC_MESSAGES} && ${LC_MESSAGES_LOCALE} && ${LC_MESSAGES_CHARMAP} ]]; then
> + if [[ ${HAS_LOCALEDEF} == true && -e /usr/share/i18n/locales/${LC_MESSAGES_LOCALE} ]]; then
> + localedef --prefix="${initdir}" -i ${LC_MESSAGES_LOCALE} -f ${LC_MESSAGES_CHARMAP} ${LC_MESSAGES}
> + elif [ -d "/usr/lib/locale/${LC_MESSAGES}" ]; then
> + cp -prfL -t "${initdir}/usr/lib/locale/" /usr/lib/locale/${LC_MESSAGES}
> + fi
> + fi
> +
> + # Install individual localisation files for core packages
> + [ -e /usr/share/locale/locale.alias ] && inst_simple /usr/share/locale/locale.alias
> + [[ ${LC_ALL_LOCALE} ]] && inst_dir "/usr/share/locale/${LC_ALL_LOCALE}"
> + [[ ${LANG_LOCALE} ]] && inst_dir "/usr/share/locale/${LANG_LOCALE}"
> + [[ ${LC_MESSAGES_LOCALE} ]] && inst_dir "/usr/share/locale/${LC_MESSAGES_LOCALE}"
> + [[ ${LC_ALL_LOCALE} ]] && read LC_ALL_LOCALE_SHORT LC_ALL_LOCALE_COUNTRY < <(echo ${LC_ALL_LOCALE//_/ })
> + [[ ${LANG_LOCALE} ]] && read LANG_LOCALE_SHORT LANG_LOCALE_COUNTRY < <(echo ${LANG_LOCALE//_/ })
> + [[ ${LC_MESSAGES_LOCALE} ]] && read LC_MESSAGES_LOCALE_SHORT LC_MESSAGES_LOCALE_COUNTRY < <(echo ${LC_MESSAGES_LOCALE//_/ })
> + [[ ${LC_ALL_LOCALE_SHORT} ]] && inst_dir "/usr/share/locale/${LC_ALL_LOCALE_SHORT}"
> + [[ ${LANG_LOCALE_SHORT} ]] && inst_dir "/usr/share/locale/${LANG_LOCALE_SHORT}"
> + [[ ${LC_MESSAGES_LOCALE_SHORT} ]] && inst_dir "/usr/share/locale/${LC_MESSAGES_LOCALE_SHORT}"
> +
> + locale_dirs="${LC_ALL_LOCALE} ${LANG_LOCALE} ${LC_MESSAGES_LOCALE} ${LC_ALL_LOCALE_SHORT} ${LANG_LOCALE_SHORT} {LC_MESSAGES_LOCALE_SHORT}"
> + for dir in ${locale_dirs}; do
> + [ -d "/usr/share/locale/${dir}" ] && for pkg in ${CORE_PACKAGES}; do
> + for file in `find "/usr/share/locale/${dir}" -type f -name "${pkg}.mo"`; do
> + inst_simple "${file}"
> + done
> + done
> + done
> +
> + # Install ISO-8859 and Unicode charmap modules from GNU libc
> + if [ -e "${initdir}/lib/ld-linux.so.*" ]; then
> + LIBDIR=lib
> + else
> + LIBDIR=lib64
> + fi
> + inst_multiple /usr/${LIBDIR}/gconv/ISO8859-*.so
> + if [ ${UNICODE} == 1 ]; then
> + inst_multiple /usr/${LIBDIR}/gconv/UTF-*.so /usr/${LIBDIR}/gconv/UNICODE.so
> + fi
> + if command -v iconvconfig > /dev/null; then
> + if [ -e /usr/${LIBDIR}/gconv/gconv-modules ]; then
> + grep -E "^[[:space:]]*alias[[:space:]]*ISO[-]*8859-" /usr/${LIBDIR}/gconv/gconv-modules > /tmp/gconv-modules
> + if [ ${UNICODE} == 1 ]; then
> + grep -E "^[[:space:]]*alias.*UTF-" /usr/${LIBDIR}/gconv/gconv-modules >> /tmp/gconv-modules
> + grep -E "^[[:space:]]*alias.*UNICODE" /usr/${LIBDIR}/gconv/gconv-modules >> /tmp/gconv-modules
> + fi
> + grep -E "^[[:space:]]*module[[:space:]]*ISO[-]*8859-" /usr/${LIBDIR}/gconv/gconv-modules | grep INTERNAL >> /tmp/gconv-modules
> + if [ ${UNICODE} == 1 ]; then
> + grep -E "^[[:space:]]*module[[:space:]]*UTF-" /usr/${LIBDIR}/gconv/gconv-modules | grep INTERNAL >> /tmp/gconv-modules
> + grep -E "^[[:space:]]*module[[:space:]]*UNICODE" /usr/${LIBDIR}/gconv/gconv-modules | grep INTERNAL >> /tmp/gconv-modules
> + fi
> + if [ -e /tmp/gconv-modules ]; then
> + inst /tmp/gconv-modules /usr/${LIBDIR}/gconv/gconv-modules && rm -f /tmp/gconv-modules
> + fi
> + fi
> + iconvconfig --prefix="${initdir}"
> + else
> + if [ -e /usr/${LIBDIR}/gconv/gconv-modules.cache ]; then
> + inst_simple /usr/${LIBDIR}/gconv/gconv-modules.cache
> + fi
> + fi
> + fi
> +
> if dracut_module_included "systemd" && [[ -f ${I18N_CONF} ]]; then
> inst_simple ${I18N_CONF}
> else
> mksubdirs ${initdir}${I18N_CONF}
> - print_vars LC_ALL LANG >> ${initdir}${I18N_CONF}
> + print_vars LANG LC_ALL LC_MESSAGES >> ${initdir}${I18N_CONF}
> fi
>
> if dracut_module_included "systemd" && [[ -f ${VCONFIG_CONF} ]]; then
> diff -pruN dracut-git-orig/modules.d/10i18n/parse-i18n.sh dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/parse-i18n.sh
> --- dracut-git-orig/modules.d/10i18n/parse-i18n.sh 2016-04-20 14:11:02.825944933 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/parse-i18n.sh 2016-04-19 02:26:46.617644187 +0200
> @@ -23,11 +23,13 @@ inst_key_val /etc/vconsole.conf FONT_UNI
> inst_key_val /etc/vconsole.conf UNICODE 1 rd.vconsole.font.unicode UNICODE vconsole.unicode
> inst_key_val /etc/vconsole.conf EXT_KEYMAP '' rd.vconsole.keymap.ext EXT_KEYMAP
>
> -inst_key_val /etc/locale.conf LANG '' rd.locale.LANG LANG
> -inst_key_val /etc/locale.conf LC_ALL '' rd.locale.LC_ALL LC_ALL
> -
> +inst_key_val /etc/locale.conf LANG '' rd.locale.LANG LANG
> +inst_key_val /etc/locale.conf LC_ALL '' rd.locale.LC_ALL LC_ALL
> +inst_key_val /etc/locale.conf LC_MESSAGES '' rd.locale.LC_MESSAGES LC_MESSAGES
> +
> if [ -f /etc/locale.conf ]; then
> . /etc/locale.conf
> export LANG
> export LC_ALL
> + export LC_MESSAGES
> fi
> diff -pruN dracut-git-orig/modules.d/10i18n/README dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/README
> --- dracut-git-orig/modules.d/10i18n/README 2016-04-20 14:11:02.826944946 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/10i18n/README 2016-04-19 02:26:46.617644187 +0200
> @@ -65,6 +65,7 @@ I'm leaving it in case... The following
>
> LANG
> LC_ALL
> + LC_MESSAGES
>
> If UNICODE variable is not provided, script indicates if UTF-8 should be
> used on the basis of LANG value (if it ends with ".utf8" or similar).
> diff -pruN dracut-git-orig/modules.d/90crypt/module-setup.sh dracut-git-10i18n-full-support-for-localisation/modules.d/90crypt/module-setup.sh
> --- dracut-git-orig/modules.d/90crypt/module-setup.sh 2016-04-19 02:19:10.662042554 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/90crypt/module-setup.sh 2016-04-23 17:09:50.584472072 +0200
> @@ -88,6 +88,12 @@ install() {
>
> inst_simple "$moddir/crypt-lib.sh" "/lib/dracut-crypt-lib.sh"
>
> + if dracut_module_included "i18n"; then
> + if [[ $msg_localisation == "yes" ]]; then
> + inst_i18n cryptsetup
> + fi
> + fi
> +
> if dracut_module_included "systemd"; then
> inst_multiple -o \
> $systemdutildir/system-generators/systemd-cryptsetup-generator \
> diff -pruN dracut-git-orig/modules.d/91crypt-gpg/module-setup.sh dracut-git-10i18n-full-support-for-localisation/modules.d/91crypt-gpg/module-setup.sh
> --- dracut-git-orig/modules.d/91crypt-gpg/module-setup.sh 2016-04-19 02:19:10.667042618 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/91crypt-gpg/module-setup.sh 2016-04-23 17:10:10.783667188 +0200
> @@ -17,4 +17,10 @@ depends() {
> install() {
> inst_multiple gpg
> inst "$moddir/crypt-gpg-lib.sh" "/lib/dracut-crypt-gpg-lib.sh"
> +
> + if dracut_module_included "i18n"; then
> + if [[ $msg_localisation == "yes" ]]; then
> + inst_i18n gnupg
> + fi
> + fi
> }
> diff -pruN dracut-git-orig/modules.d/99base/init.sh dracut-git-10i18n-full-support-for-localisation/modules.d/99base/init.sh
> --- dracut-git-orig/modules.d/99base/init.sh 2016-04-20 14:11:02.826944946 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/99base/init.sh 2016-04-20 14:02:01.578137511 +0200
> @@ -8,6 +8,8 @@
>
> export -p > /tmp/export.orig
>
> +[ -f /etc/locale.conf ] && . /etc/locale.conf
> +
> NEWROOT="/sysroot"
> [ -d $NEWROOT ] || mkdir -p -m 0755 $NEWROOT
>
> @@ -323,7 +325,7 @@ for i in $(export -p); do
> i=${i%%=*}
> [ -z "$i" ] && continue
> case $i in
> - root|PATH|HOME|TERM|PS4|RD_*)
> + root|PATH|HOME|TERM|PS4|RD_*|LANG|LC_*)
> :;;
> *)
> unset "$i";;
> diff -pruN dracut-git-orig/modules.d/99base/module-setup.sh dracut-git-10i18n-full-support-for-localisation/modules.d/99base/module-setup.sh
> --- dracut-git-orig/modules.d/99base/module-setup.sh 2016-04-20 14:11:02.827944958 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/99base/module-setup.sh 2016-04-21 20:01:54.611592039 +0200
> @@ -26,6 +26,10 @@ install() {
> (ln -s bash "${initdir}/bin/sh" || :)
> fi
>
> + if dracut_module_included "i18n"; then
> + inst ${moddir}/profile /etc/profile
> + fi
> +
> #add common users in /etc/passwd, it will be used by nfs/ssh currently
> grep '^root:' "$initdir/etc/passwd" 2>/dev/null || echo 'root:x:0:0::/root:/bin/sh' >> "$initdir/etc/passwd"
> grep '^nobody:' /etc/passwd >> "$initdir/etc/passwd"
> diff -pruN dracut-git-orig/modules.d/99base/profile dracut-git-10i18n-full-support-for-localisation/modules.d/99base/profile
> --- dracut-git-orig/modules.d/99base/profile 1970-01-01 01:00:00.000000000 +0100
> +++ dracut-git-10i18n-full-support-for-localisation/modules.d/99base/profile 2016-04-21 23:43:08.049029619 +0200
> @@ -0,0 +1,9 @@
> +# /etc/profile
> +
> +# Load locale settings
> +if [ -f /etc/locale.conf ]; then
> + . /etc/locale.conf
> + [ -n "${LANG}" ] && export LANG || unset LANG
> + [ -n "${LC_ALL}" ] && export LC_ALL || unset LC_ALL
> + [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES || unset LC_MESSAGES
> +fi
> diff -pruN dracut-git-orig/NEWS dracut-git-10i18n-full-support-for-localisation/NEWS
> --- dracut-git-orig/NEWS 2016-04-19 02:19:10.648042373 +0200
> +++ dracut-git-10i18n-full-support-for-localisation/NEWS 2016-04-21 17:00:46.436792093 +0200
> @@ -6,6 +6,7 @@ dracut now requires libkmod for the drac
> dracut.sh:
> - restorecon final image file
> - fail hard, if we find modules and modules.dep is missing
> +- add an option to disable the new full localisation support
>
> dracut-functions.sh:
> - fix check_vol_slaves() volume group name stripping
> @@ -34,6 +35,9 @@ general initramfs fixes:
> - call dracut-cmdline-ask.service, if /etc/cmdline.d/*.conf exists
> - break at switch_root only for bare rd.break
>
> +i18n:
> +- add full localisation support (includes message-based localisation)
> +
> dmsquash-live:
> - fixed livenet-generator execution flag
> and include only, if systemd is used
> --
> To unsubscribe from this list: send the line "unsubscribe initramfs" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
prev parent reply other threads:[~2017-10-11 13:17 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-15 22:07 [PATCH] dracut: add support for custom locale definitions Guido Trentalancia
[not found] ` <1460758050.3211.2.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-16 6:00 ` Andrei Borzenkov
[not found] ` <5711D4E7.9070705-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-04-16 14:12 ` [PATCH v2] dracut: 10i18n: " Guido Trentalancia
[not found] ` <1460815966.4296.13.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-16 17:52 ` Andrei Borzenkov
[not found] ` <57127BC9.70103-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-04-16 19:32 ` [PATCH v3] " Guido Trentalancia
[not found] ` <1460835143.3201.10.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-16 20:13 ` [PATCH v4] " Guido Trentalancia
[not found] ` <1460837622.3201.14.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-16 20:24 ` [PATCH v5] " Guido Trentalancia
[not found] ` <1460838269.3201.18.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-19 0:36 ` [PATCH v6] dracut: " Guido Trentalancia
[not found] ` <1461026208.2262.1.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-20 13:04 ` [PATCH v7] " Guido Trentalancia
[not found] ` <1461157491.11229.3.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-21 10:24 ` Harald Hoyer
[not found] ` <5718AA77.8090600-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-21 12:30 ` Guido Trentalancia
[not found] ` <1461241841.10934.12.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-21 12:41 ` Andrei Borzenkov
[not found] ` <CAA91j0U0XaJBaWNzBmRE3hs0zV7UKMEvO-6nBx_jaxkwhEHckg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-04-21 12:57 ` Guido Trentalancia
2016-04-21 13:07 ` Harald Hoyer
[not found] ` <5718D074.70507-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-04-21 13:48 ` Guido Trentalancia
2016-04-21 15:03 ` Guido Trentalancia
2016-05-17 10:12 ` Thomas Renninger
2016-05-17 12:36 ` [PATCH v9] " Guido Trentalancia
2016-04-22 16:13 ` [PATCH v8] " Guido Trentalancia
[not found] ` <1461341618.21231.0.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-04-23 7:50 ` Andrei Borzenkov
[not found] ` <571B2950.5060209-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-04-23 16:47 ` Guido Trentalancia
2016-04-23 16:50 ` [PATCH v9] " Guido Trentalancia
[not found] ` <1461430242.2604.15.camel-D1bseh+SzQhuxeB9wqlrNw@public.gmane.org>
2016-05-06 15:01 ` Guido Trentalancia
2017-10-11 13:17 ` Harald Hoyer [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7206831a-5136-5acf-fe29-12d81fd083e9@redhat.com \
--to=harald-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=initramfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).