From 49e40fc0bc3d22f247c4e71756ae1d9e00e9ff64 Mon Sep 17 00:00:00 2001 From: asmeron Date: Sun, 16 Nov 2025 22:21:47 +0600 Subject: [PATCH] Fix setting locale --- ublinux/rc.halt.pre/20-grub | 58 +++++----- ublinux/rc.halt.pre/71-kernel | 10 +- ublinux/rc.local.d/52-consolesetup | 4 +- ublinux/rc.preinit.d/53-language | 174 +++++++++++++++-------------- 4 files changed, 124 insertions(+), 122 deletions(-) diff --git a/ublinux/rc.halt.pre/20-grub b/ublinux/rc.halt.pre/20-grub index ead0e30..6aa0121 100755 --- a/ublinux/rc.halt.pre/20-grub +++ b/ublinux/rc.halt.pre/20-grub @@ -26,6 +26,9 @@ get_path_grub2(){ [[ -w ${PATH_GRUB} ]] && PATH_GRUB="${PATH_GRUB%/*}" || return 1 } control_grub_var_cfg(){ + local STR_SET=${1} + local STR_SET_VALUE=${2} + local STR_EXPORT=${3} if [[ -n ${STR_SET_VALUE} ]]; then grep -q "${STR_EXPORT}" ${FILE_GRUB_VAR_USER} 2>/dev/null || echo -e "${STR_EXPORT}" >> ${FILE_GRUB_VAR_USER} if ! grep -q "^\s*${STR_SET}${STR_SET_VALUE}\s*$" ${FILE_GRUB_VAR_USER} 2>/dev/null; then @@ -42,16 +45,14 @@ control_grub_var_cfg(){ fi } exec_grub_lang(){ + local STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="${@%%_*}" || STR_SET_VALUE="${LANG%%_*}" - STR_SET="set lang=" - STR_EXPORT="export lang" - [[ -n $(cmdline_value lang) ]] || control_grub_var_cfg + [[ -n $(cmdline_value lang) || ${STR_SET_VALUE} == @("C"|"C.UTF-8"|"POSIX") ]] || control_grub_var_cfg "set LANG=" "${STR_SET_VALUE}" "export LANG" } exec_grub_timeout(){ + local STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_TIMEOUT}" - STR_SET="set timeout=" - STR_EXPORT="export timeout" - control_grub_var_cfg + control_grub_var_cfg "set timeout=" "${STR_SET_VALUE}" "export timeout" } exec_grub_default(){ [[ -n $@ ]] && GRUB_DEFAULT="$@" @@ -68,14 +69,14 @@ EOF fi } exec_grub_superusers(){ + local STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_SUPERUSERS}" - STR_SET="set superusers=" - STR_EXPORT="export superusers" - control_grub_var_cfg + control_grub_var_cfg "set superusers=" "${STR_SET_VALUE}" "export superusers" } exec_grub_password(){ + local STR_SET STR_SET_VALUE [[ -n $@ ]] && GRUB_PASSWORD="$@" - if [[ -n ${GRUB_PASSWORD[0]} ]]; then + if [[ -n ${GRUB_PASSWORD[0]} ]]; then [[ -n ${GRUB_SUPERUSERS} ]] || return 1 FIRST_SUPERUSER=${GRUB_SUPERUSERS//\"/}; FIRST_SUPERUSER=${FIRST_SUPERUSER%%,*}; FIRST_SUPERUSER=${FIRST_SUPERUSER%% *} local -A GRUB_PASSWORD=( [${FIRST_SUPERUSER}]="${GRUB_PASSWORD}" ) @@ -84,7 +85,7 @@ exec_grub_password(){ for NAME_USER in "${!GRUB_PASSWORD[@]}"; do STR_SET="password_pbkdf2 ${NAME_USER} " STR_SET_VALUE=${GRUB_PASSWORD[${NAME_USER}]} - if [[ ! ${STR_SET_VALUE} =~ ^grub.pbkdf2 ]]; then + if [[ ! ${STR_SET_VALUE} =~ ^grub.pbkdf2 ]]; then STR_SET_VALUE=$(echo -e "${STR_SET_VALUE}\n${STR_SET_VALUE}" | grub-mkpasswd-pbkdf2 | awk '/grub.pbkdf/{print$NF}') ubconfig --noexecute set boot GRUB_PASSWORD[${NAME_USER}]=${STR_SET_VALUE} fi @@ -105,12 +106,12 @@ exec_grub_password(){ fi } exec_grub_boot_silent(){ + local STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_BOOT_SILENT}" - STR_SET="set BOOT_SILENT=" - STR_EXPORT="export BOOT_SILENT" - control_grub_var_cfg + control_grub_var_cfg "set BOOT_SILENT=" "${STR_SET_VALUE}" "export BOOT_SILENT" } exec_grub_terminal_input(){ + local STR_SET STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_TERMINAL_INPUT}" STR_SET="terminal_input " if [[ -n ${STR_SET_VALUE} ]]; then @@ -131,6 +132,7 @@ exec_grub_terminal_input(){ fi } exec_grub_terminal_output(){ + local STR_SET STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_TERMINAL_OUTPUT}" STR_SET="terminal_output " if [[ -n ${STR_SET_VALUE} ]]; then @@ -146,6 +148,7 @@ exec_grub_terminal_output(){ fi } exec_grub_play(){ + local STR_SET STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_PLAY}" STR_SET="play " if [[ -n ${STR_SET_VALUE} ]]; then @@ -161,34 +164,31 @@ exec_grub_play(){ fi } exec_grub_cmdline_linux(){ + local STR_SET_VALUE [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_CMDLINE_LINUX}" - STR_SET="set CMDLINE_LINUX=" - STR_EXPORT="export CMDLINE_LINUX" - control_grub_var_cfg + control_grub_var_cfg "set CMDLINE_LINUX=" "${STR_SET_VALUE}" "export CMDLINE_LINUX" } exec_grub_vmlinuz_file(){ + local STR_SET_VALUE [[ -z ${KERNEL_BOOT} ]] || return 0 [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_VMLINUZ_FILE}" - STR_SET="set VMLINUZ_FILE=" - STR_EXPORT="export VMLINUZ_FILE" - control_grub_var_cfg + control_grub_var_cfg "set VMLINUZ_FILE=" "${STR_SET_VALUE}" "export VMLINUZ_FILE" } exec_grub_ublinux_file(){ + local STR_SET_VALUE [[ -z ${KERNEL_BOOT} ]] || return 0 [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_UBLINUX_FILE}" - STR_SET="set UBLINUX_FILE=" - STR_EXPORT="export UBLINUX_FILE" - control_grub_var_cfg + control_grub_var_cfg "set UBLINUX_FILE=" "${STR_SET_VALUE}" "export UBLINUX_FILE" } exec_grub_addon_file(){ + local STR_SET_VALUE [[ -z ${KERNEL_BOOT} ]] || return 0 [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_ADDON_FILE}" - STR_SET="set ADDON_FILE=" - STR_EXPORT="export ADDON_FILE" - control_grub_var_cfg + control_grub_var_cfg "set ADDON_FILE=" "${STR_SET_VALUE}" "export ADDON_FILE" } exec_grub_kernel_boot(){ # По указанному имени пакета в параметре KERNEL_BOOT= находим каталог с ядром и устаналиваем переменные в GRUB + local STR_SET_VALUE [[ -n $@ ]] && PKG_KERNEL_NAME="$@" || PKG_KERNEL_NAME="${KERNEL_BOOT}" PATH_KERNEL="/usr/lib/modules" PKG_KERNEL_PATH=$(grep -Rlx ${PATH_KERNEL}/*/pkgbase -e "${PKG_KERNEL_NAME}") @@ -202,9 +202,9 @@ exec_grub_kernel_boot(){ STR_SET_VALUE_UBLINUX="" STR_SET_VALUE_ADDOD="" fi - STR_SET_VALUE="${STR_SET_VALUE_VMLINUZ}"; STR_SET="set VMLINUZ_FILE="; STR_EXPORT="export VMLINUZ_FILE"; control_grub_var_cfg - STR_SET_VALUE="${STR_SET_VALUE_UBLINUX}"; STR_SET="set UBLINUX_FILE="; STR_EXPORT="export UBLINUX_FILE"; control_grub_var_cfg - STR_SET_VALUE="${STR_SET_VALUE_ADDOD}"; STR_SET="set ADDON_FILE="; STR_EXPORT="export ADDON_FILE"; control_grub_var_cfg + STR_SET_VALUE="${STR_SET_VALUE_VMLINUZ}"; control_grub_var_cfg "set VMLINUZ_FILE=" "${STR_SET_VALUE}" "export VMLINUZ_FILE" + STR_SET_VALUE="${STR_SET_VALUE_UBLINUX}"; control_grub_var_cfg "set UBLINUX_FILE=" "${STR_SET_VALUE}" "export UBLINUX_FILE" + STR_SET_VALUE="${STR_SET_VALUE_ADDOD}"; control_grub_var_cfg "set ADDON_FILE=" "${STR_SET_VALUE}" "export ADDON_FILE" } ################ diff --git a/ublinux/rc.halt.pre/71-kernel b/ublinux/rc.halt.pre/71-kernel index 045888e..d0e6d3b 100755 --- a/ublinux/rc.halt.pre/71-kernel +++ b/ublinux/rc.halt.pre/71-kernel @@ -14,7 +14,7 @@ copy_newkernel_to_boot(){ # Найти все файлы ядра и initramfs. Еслии новее по дате модификации в системе, то заменить загрузочные mountpoint --quiet "${PATH_BOOT}" || return 0 find ${PATH_KERNEL} -maxdepth 2 \( -name "vmlinuz-*.*.*-*" -o -name "ublinux-*.*.*-*" -o -name "addon-*.*.*-*" \) -print | while read FIND_FILE; do - local DTIME_FIND_FILE=$(stat -c'%Y' $(readlink -e ${FIND_FILE} 2>/dev/null)) + local DTIME_FIND_FILE=$(stat -c'%Y' $(readlink -e ${FIND_FILE} 2>/dev/null)) [[ -e ${PATH_BOOT}/${FIND_FILE##*/} ]] && local DTIME_BOOT_FILE=$(stat -c'%Y' ${PATH_BOOT}/${FIND_FILE##*/} 2>/dev/null) || local DTIME_BOOT_FILE=0 [[ ${DTIME_FIND_FILE} =~ ^[0-9]+$ && ${DTIME_BOOT_FILE} =~ ^[0-9]+$ ]] && [[ ${DTIME_FIND_FILE} -gt ${DTIME_BOOT_FILE} ]] \ && cp -aL "${FIND_FILE}" "${PATH_BOOT}/" && chown root:root "${PATH_BOOT}/${FIND_FILE##*/}" && chmod 400 "${PATH_BOOT}/${FIND_FILE##*/}" @@ -41,7 +41,7 @@ exec_prepare_menu_kernel(){ VMLINUZ_FILE="vmlinuz-\${VMLINUZ_VER}" UBLINUX_FILE="ublinux-\${VMLINUZ_VER}" [[ -f ${PATH_BOOT}/addon-${VMLINUZ_VER} ]] && ADDON_FILE="addon-\${VMLINUZ_VER}" || ADDON_FILE="" - DATA_BOOTMENU_KERNEL+=\ + DATA_BOOTMENU_KERNEL+=\ " menuentry \$\"Change the kernel version\"\": ${VMLINUZ_VER}\" --unrestricted { VMLINUZ_VER=\"${VMLINUZ_VER}\" VMLINUZ_FILE=\"${VMLINUZ_FILE}\" @@ -51,16 +51,16 @@ exec_prepare_menu_kernel(){ export VMLINUZ_FILE export UBLINUX_FILE export ADDON_FILE - configfile \${prefix}/ublinux/grub_main.cfg + configfile \${PATH_DISTR_GRUB}/grub_main.cfg } " fi done if [[ -n ${DATA_BOOTMENU_KERNEL} ]]; then DATA_BOOTMENU_KERNEL+=\ -" if [ -f \${prefix}/ublinux/grub_main.cfg ]; then +" if [ -f \${PATH_DISTR_GRUB}/grub_main.cfg ]; then menuentry \$\"Return\" --unrestricted { - configfile \${prefix}/ublinux/grub_main.cfg + configfile \${PATH_DISTR_GRUB}/grub_main.cfg } fi" [[ -f ${FILE_BOOTMENU_KERNEL} ]] && [[ "$(< ${FILE_BOOTMENU_KERNEL})" == "${DATA_BOOTMENU_KERNEL}" ]] || echo "${DATA_BOOTMENU_KERNEL}" > "${FILE_BOOTMENU_KERNEL}" diff --git a/ublinux/rc.local.d/52-consolesetup b/ublinux/rc.local.d/52-consolesetup index f162315..16989dd 100755 --- a/ublinux/rc.local.d/52-consolesetup +++ b/ublinux/rc.local.d/52-consolesetup @@ -23,9 +23,9 @@ debug_mode "$0" "$@" # kill -RTMIN+21 1 || busybox kill -RTMIN+21 1 [[ -x /usr/bin/plymouth ]] && /usr/bin/plymouth --wait quit - + # Настроить шрифт и раскладку клавиатуры виртуальной консоли из /etc/vconsole.conf использует loadkeys setfont [[ -x /usr/lib/systemd/systemd-vconsole-setup ]] && /usr/lib/systemd/systemd-vconsole-setup - + # Если запускается multi-user.target то терминал переключить на tty 2 readlink -f /etc/systemd/system/default.target 2>/dev/null | grep -q multi-user.target && chvt 2 diff --git a/ublinux/rc.preinit.d/53-language b/ublinux/rc.preinit.d/53-language index ac7cd0e..ed12070 100755 --- a/ublinux/rc.preinit.d/53-language +++ b/ublinux/rc.preinit.d/53-language @@ -28,37 +28,39 @@ shopt -s extglob # По сокращённому имени, вернуть полное имя, пример 'get_fullname_lang en' : en_US.UTF-8 get_fullname_lang(){ - local NEWLANG=$1 + local LANG_NEW=$1 [[ -r ${ROOTFS}/usr/share/i18n/SUPPORTED ]] && local SUPPORTED=$(< ${ROOTFS}/usr/share/i18n/SUPPORTED) # Из за того, что нет en_EN, а через груб прилетает просто en, то выбираем en_US.UTF-8 - [[ ${NEWLANG} == "en" ]] && NEWLANG="en_US.UTF-8" - if [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG} ".*($'\n'|$) ]]; then - echo "${NEWLANG}" - elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG,,}_${NEWLANG^^}.UTF-8 ".*($'\n'|$) ]]; then - echo "${NEWLANG,,}_${NEWLANG^^}.UTF-8" - elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG,,}_${NEWLANG^^} ".*($'\n'|$) ]]; then - echo "${NEWLANG,,}_${NEWLANG^^}" - elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG}.UTF-8 ".*($'\n'|$) ]]; then - echo "${NEWLANG}.UTF-8" - elif [[ ${SUPPORTED} =~ ($'\n'|^)("${NEWLANG,,}_"[:A-Z:]+".UTF-8")" ".*($'\n'|$) ]]; then - echo "${BASH_REMATCH[2]}" - elif [[ ${SUPPORTED} =~ ($'\n'|^)("${NEWLANG,,}_"[:A-Z:]+)" ".*($'\n'|$) ]]; then - echo "${BASH_REMATCH[2]}" - else - echo "en_US.UTF-8" + if [[ ${LANG_NEW} == @("en"|"") ]]; then + echo "en_US.UTF-8" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${LANG_NEW} ".*($'\n'|$) ]]; then + echo "${LANG_NEW}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${LANG_NEW,,}_${LANG_NEW^^}.UTF-8 ".*($'\n'|$) ]]; then + echo "${LANG_NEW,,}_${LANG_NEW^^}.UTF-8" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${LANG_NEW,,}_${LANG_NEW^^} ".*($'\n'|$) ]]; then + echo "${LANG_NEW,,}_${LANG_NEW^^}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${LANG_NEW}.UTF-8 ".*($'\n'|$) ]]; then + echo "${LANG_NEW}.UTF-8" + elif [[ ${SUPPORTED} =~ ($'\n'|^)("${LANG_NEW,,}_"[:A-Z:]+".UTF-8")" ".*($'\n'|$) ]]; then + echo "${BASH_REMATCH[2]}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)("${LANG_NEW,,}_"[:A-Z:]+)" ".*($'\n'|$) ]]; then + echo "${BASH_REMATCH[2]}" + else + echo "en_US.UTF-8" fi } exec_01_set_locale(){ - local NEWLANG=$(cmdline_value lang) - if [[ -n ${NEWLANG} && -n ${ROOTFS} ]]; then - LANG="$(get_fullname_lang ${NEWLANG})" - [[ ${LOCALE} =~ (^|,)${LANG}(,|$) ]] || LOCALE+=",${LANG}" - [[ -f ${SYSCONF}/locale ]] && sed "/^LOCALE=/d" -i "${SYSCONF}/locale" - echo "LOCALE=${LOCALE}" >> "${SYSCONF}/locale" - else - LANG=$(get_fullname_lang ${LANG}) - [[ ${LOCALE} =~ (^|,)${LANG}(,|$) ]] || LOCALE+=",${LANG}" + # Не учитываем нстройку LOCALE из env ядра, при отсутствии в конфигурации + [[ -f ${SYSCONF}/locale && $(< ${SYSCONF}/locale) =~ (^|$'\n')LOCALE=\"?\'?([^$'\n'\"\']+)\"?\'?($'\n'|$) ]] && LOCALE=${BASH_REMATCH[2]} || LOCALE= + local LANG_NEW=$(cmdline_value lang) + # Если работает в initramf при загрузке и параметр ядра задан, то используем заданный параметр. Иначе из текущего окружения ${LANG} + [[ -n ${LANG_NEW} && -n ${ROOTFS} ]] && LANG_NEW="$(get_fullname_lang ${LANG_NEW})" || LANG_NEW=$(get_fullname_lang ${LANG}) + if [[ ! -f ${SYSCONF}/locale ]] || [[ ! "${LOCALE}" =~ (^|,)${LANG_NEW}(,|$) ]]; then + LOCALE=${LOCALE:-en_US.UTF-8} + [[ ${LANG_NEW} == @("C.UTF-8"|"POSIX"|"C") ]] || LOCALE="${LOCALE:+${LOCALE},}${LANG_NEW}" + [[ -f ${SYSCONF}/locale ]] && sed "/^LOCALE=/d" -i "${SYSCONF}/locale" + echo "LOCALE=\"${LOCALE}\"" >> "${SYSCONF}/locale" fi # Проверка локалий в системе, и если не совпадают, то генерация [[ -n ${FORCE_LOCARCHIVE} ]] && FORCEGEN=1 @@ -66,48 +68,48 @@ exec_01_set_locale(){ LOCALE_CONF=${LOCALE//-/}; LOCALE_CONF=${LOCALE_CONF,,}; LOCALE_CONF=${LOCALE_CONF//,/$'\n'}; LOCALE_CONF=$(sort -fu <<< ${LOCALE_CONF}) LOCALE_SYSTEM=$(${CMD_CHROOT} localedef --list-archive | sort -fu); LOCALE_SYSTEM=${LOCALE_SYSTEM,,} [[ "${LOCALE_CONF}" == "${LOCALE_SYSTEM}" ]] || FORCEGEN=1 - if [[ -n ${FORCEGEN} ]]; then - # Комментируем все локализации - sed -E "s/^([^#]+)/#\1/g" -i ${ROOTFS}/etc/locale.gen - # Открываем комменарии нужных локалий - for SELECT_LOCALE in ${LOCALE//@(,|;)/ }; do - [[ -n ${SELECT_LOCALE} ]] || continue - sed -E "s/^#${SELECT_LOCALE} /${SELECT_LOCALE} /g" -i ${ROOTFS}/etc/locale.gen - done - # Генерируем локаль - ${CMD_CHROOT} locale-gen &>/dev/null + if [[ -n ${FORCEGEN} ]]; then + # Комментируем все локализации + sed -E "s/^([^#]+)/#\1/g" -i ${ROOTFS}/etc/locale.gen + # Открываем комменарии нужных локалий + for SELECT_LOCALE in ${LOCALE//@(,|;)/ }; do + [[ -n ${SELECT_LOCALE} ]] || continue + sed -E "s/^#${SELECT_LOCALE} /${SELECT_LOCALE} /g" -i ${ROOTFS}/etc/locale.gen + done + # Генерируем локаль + ${CMD_CHROOT} locale-gen &>/dev/null fi } exec_02_set_lang(){ - SOURCE=${SYSCONF}/locale; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - local NEWLANG=$(cmdline_value lang) - if [[ -n ${NEWLANG} && -n ${ROOTFS} ]]; then - LANG="$(get_fullname_lang ${NEWLANG})" - [[ -f ${SYSCONF}/locale ]] && sed "/^LANG=/d" -i "${SYSCONF}/locale" - echo "LANG=${LANG}" >> "${SYSCONF}/locale" - else - LANG=$(get_fullname_lang ${LANG}) + # Не учитываем нстройку LANG из env + [[ -f ${SYSCONF}/locale && $(< ${SYSCONF}/locale) =~ (^|$'\n')LANG=\"?\'?([^$'\n'\"\']+)\"?\'?($'\n'|$) ]] && LANG=${BASH_REMATCH[2]} || LANG= + local LANG_NEW=$(cmdline_value lang) + [[ -n ${LANG_NEW} && -n ${ROOTFS} ]] && LANG_NEW="$(get_fullname_lang ${LANG_NEW})" || LANG_NEW=$(get_fullname_lang ${LANG}) + [[ ${LANG_NEW} == @("C.UTF-8"|"POSIX"|"C") ]] && LANG_NEW="en_US.UTF-8" + if [[ ! -f ${SYSCONF}/locale ]] || [[ ! "${LANG}" == "${LANG_NEW}" ]]; then + [[ -f ${SYSCONF}/locale ]] && sed "/^LANG=/d" -i "${SYSCONF}/locale" + echo "LANG=\"${LANG_NEW}\"" >> "${SYSCONF}/locale" fi # Проверка выбранного языка в системе, и если не совпадает, то устанавливаем - if [[ -r ${ROOTFS}/etc/locale.conf && ! $(< ${ROOTFS}/etc/locale.conf) =~ (^|$'\n')"LANG=${LANG}"($'\n'|$) ]]; then - # Устанавливаем локаль - ${CMD_CHROOT} env LANG="${LANG}" LANGUAGE="${LANG}" LC_CTYPE="${LANG}" LC_NUMERIC="${LANG}" \ - LC_TIME="${LANG}" LC_COLLATE="${LANG}" LC_MONETARY="${LANG}" LC_MESSAGES="${LANG}" LC_PAPER="${LANG}" \ - LC_NAME="${LANG}" LC_ADDRESS="${LANG}" LC_TELEPHONE="${LANG}" LC_MEASUREMENT="${LANG}" \ - LC_IDENTIFICATION="${LANG}" locale > ${ROOTFS}/etc/locale.conf 2>/dev/null + if [[ -w ${ROOTFS}/etc/locale.conf && ! $(< ${ROOTFS}/etc/locale.conf) =~ (^|$'\n')"LANG=${LANG_NEW}"($'\n'|$) ]] || [[ ! -f ${ROOTFS}/etc/locale.conf ]]; then + # Устанавливаем локаль + ${CMD_CHROOT} env LANG="${LANG_NEW}" LANGUAGE="${LANG_NEW}" LC_CTYPE="${LANG_NEW}" LC_NUMERIC="${LANG_NEW}" \ + LC_TIME="${LANG_NEW}" LC_COLLATE="${LANG_NEW}" LC_MONETARY="${LANG_NEW}" LC_MESSAGES="${LANG_NEW}" LC_PAPER="${LANG_NEW}" \ + LC_NAME="${LANG_NEW}" LC_ADDRESS="${LANG_NEW}" LC_TELEPHONE="${LANG_NEW}" LC_MEASUREMENT="${LANG_NEW}" \ + LC_IDENTIFICATION="${LANG_NEW}" locale > ${ROOTFS}/etc/locale.conf 2>/dev/null - [[ -n ${ROOTFS} ]] || set_lang_live + [[ -n ${ROOTFS} ]] || set_lang_live fi #; unset LANG; source /etc/profile.d/locale.sh" # Если имеются языкозависимые файлы, то копируем в корень - [[ -d ${ROOTFS}/usr/share/ublinux/langs/${LANG} ]] && cp -pfr ${ROOTFS}/usr/share/ublinux/langs/${LANG}/* ${ROOTFS}/ + [[ -d ${ROOTFS}/usr/share/ublinux/langs/${LANG_NEW} ]] && cp -pfr ${ROOTFS}/usr/share/ublinux/langs/${LANG_NEW}/* ${ROOTFS}/ } set_lang_live(){ if [[ $(readlink -fq /usr/bin/init 2>/dev/null) =~ "lib/systemd/systemd"$ ]]; then - systemctl daemon-reexec + systemctl daemon-reexec fi } @@ -126,65 +128,65 @@ exec_03_set_vconsole(){ " local VCONSOLE_FILE="${ROOTFS}/etc/vconsole.conf" if [[ -n ${CONSOLE_FONT} ]]; then - SET_VCONSOLE+="FONT=${CONSOLE_FONT}"$'\n' + SET_VCONSOLE+="FONT=${CONSOLE_FONT}"$'\n' elif [[ -n ${CONSOLE_FONT[${LANG%%_*}]} ]]; then - SET_VCONSOLE+="FONT=${CONSOLE_FONT[${LANG%%_*}]}"$'\n' - [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT=/d" -i "${SYSCONF}/keyboard" - echo "CONSOLE_FONT=${CONSOLE_FONT[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + SET_VCONSOLE+="FONT=${CONSOLE_FONT[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_FONT=${CONSOLE_FONT[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" fi if [[ -n ${CONSOLE_FONT_MAP} ]]; then - SET_VCONSOLE+="FONT_MAP=${CONSOLE_FONT_MAP}"$'\n' + SET_VCONSOLE+="FONT_MAP=${CONSOLE_FONT_MAP}"$'\n' elif [[ -n ${CONSOLE_FONT_MAP[${LANG%%_*}]} ]]; then - SET_VCONSOLE+="FONT_MAP=${CONSOLE_FONT_MAP[${LANG%%_*}]}"$'\n' - [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT_MAP=/d" -i "${SYSCONF}/keyboard" - echo "CONSOLE_FONT_MAP=${CONSOLE_FONT_MAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + SET_VCONSOLE+="FONT_MAP=${CONSOLE_FONT_MAP[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT_MAP=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_FONT_MAP=${CONSOLE_FONT_MAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" fi if [[ -n ${CONSOLE_FONT_UNIMAP} ]]; then - SET_VCONSOLE+="FONT_UNIMAP=${CONSOLE_FONT_UNIMAP}"$'\n' + SET_VCONSOLE+="FONT_UNIMAP=${CONSOLE_FONT_UNIMAP}"$'\n' elif [[ -n ${CONSOLE_FONT_UNIMAP[${LANG%%_*}]} ]]; then - SET_VCONSOLE+="FONT_UNIMAP=${CONSOLE_FONT_UNIMAP[${LANG%%_*}]}"$'\n' - [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT_UNIMAP=/d" -i "${SYSCONF}/keyboard" - echo "CONSOLE_FONT_UNIMAP=${CONSOLE_FONT_UNIMAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + SET_VCONSOLE+="FONT_UNIMAP=${CONSOLE_FONT_UNIMAP[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT_UNIMAP=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_FONT_UNIMAP=${CONSOLE_FONT_UNIMAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" fi if [[ -n ${CONSOLE_KEYMAP} ]]; then - SET_VCONSOLE+="KEYMAP=${CONSOLE_KEYMAP}"$'\n' + SET_VCONSOLE+="KEYMAP=${CONSOLE_KEYMAP}"$'\n' elif [[ -n ${CONSOLE_KEYMAP[${LANG%%_*}]} ]]; then - SET_VCONSOLE+="KEYMAP=${CONSOLE_KEYMAP[${LANG%%_*}]}"$'\n' - [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_KEYMAP=/d" -i "${SYSCONF}/keyboard" - echo "CONSOLE_KEYMAP=${CONSOLE_KEYMAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + SET_VCONSOLE+="KEYMAP=${CONSOLE_KEYMAP[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_KEYMAP=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_KEYMAP=${CONSOLE_KEYMAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" fi if [[ -n ${CONSOLE_KEYMAP_TOGGLE} ]]; then - SET_VCONSOLE+="KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE}"$'\n' + SET_VCONSOLE+="KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE}"$'\n' elif [[ -n ${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]} ]]; then - SET_VCONSOLE+="KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]}"$'\n' - [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_KEYMAP_TOGGLE=/d" -i "${SYSCONF}/keyboard" - echo "CONSOLE_KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + SET_VCONSOLE+="KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_KEYMAP_TOGGLE=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" fi [[ -z ${XKBLAYOUT} ]] || SET_VCONSOLE+="XKBLAYOUT=${XKBLAYOUT}"$'\n' [[ -z ${XKBMODEL} ]] || SET_VCONSOLE+="XKBMODEL=${XKBMODEL}"$'\n' [[ -z ${XKBVARIANT} ]] || SET_VCONSOLE+="XKBVARIANT=${XKBVARIANT}"$'\n' [[ -z ${XKBOPTIONS} ]] || SET_VCONSOLE+="XKBOPTIONS=${XKBOPTIONS}"$'\n' if [[ -n "${CONSOLE_FONT}${CONSOLE_KEYMAP}${CONSOLE_KEYMAP_TOGGLE}" ]]; then - if [[ -f "${VCONSOLE_FILE}" ]]; then - if [[ ! "$(< ${VCONSOLE_FILE})" == "${SET_VCONSOLE}" ]]; then - echo -n "${SET_VCONSOLE}" > "${VCONSOLE_FILE}" - [[ -n ${ROOTFS} ]] || set_vconsole_live - fi - else - echo -n "${SET_VCONSOLE}" > "${VCONSOLE_FILE}" - [[ -n ${ROOTFS} ]] || set_vconsole_live - fi + if [[ -f "${VCONSOLE_FILE}" ]]; then + if [[ ! "$(< ${VCONSOLE_FILE})" == "${SET_VCONSOLE}" ]]; then + echo -n "${SET_VCONSOLE}" > "${VCONSOLE_FILE}" + [[ -n ${ROOTFS} ]] || set_vconsole_live + fi + else + echo -n "${SET_VCONSOLE}" > "${VCONSOLE_FILE}" + [[ -n ${ROOTFS} ]] || set_vconsole_live + fi fi } set_vconsole_live(){ if [[ $(readlink -fq /usr/bin/init 2>/dev/null) =~ "lib/systemd/systemd"$ ]]; then - #systemctl --quiet start systemd-vconsole-setup.service - /usr/lib/systemd/systemd-vconsole-setup + #systemctl --quiet start systemd-vconsole-setup.service + /usr/lib/systemd/systemd-vconsole-setup else - #setfont ? - #loadkeys ? - true + #setfont ? + #loadkeys ? + true fi }