summaryrefslogtreecommitdiffstats
path: root/usr/sbin/pc-sysinstall/backend/functions-localize.sh
diff options
context:
space:
mode:
Diffstat (limited to 'usr/sbin/pc-sysinstall/backend/functions-localize.sh')
-rw-r--r--usr/sbin/pc-sysinstall/backend/functions-localize.sh474
1 files changed, 474 insertions, 0 deletions
diff --git a/usr/sbin/pc-sysinstall/backend/functions-localize.sh b/usr/sbin/pc-sysinstall/backend/functions-localize.sh
new file mode 100644
index 0000000..107a6ae
--- /dev/null
+++ b/usr/sbin/pc-sysinstall/backend/functions-localize.sh
@@ -0,0 +1,474 @@
+#!/bin/sh
+#-
+# Copyright (c) 2010 iXsystems, Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-localize.sh,v 1.2 2010/06/27 16:46:11 imp Exp $
+
+# Functions which runs commands on the system
+
+. ${BACKEND}/functions.sh
+. ${BACKEND}/functions-parse.sh
+
+
+# Function which localizes a FreeBSD install
+localize_freebsd()
+{
+ sed -i.bak "s/lang=en_US/lang=${LOCALE}/g" ${FSMNT}/etc/login.conf
+ rm ${FSMNT}/etc/login.conf.bak
+};
+
+
+# Function which localizes a PC-BSD install
+localize_pcbsd()
+{
+ #Change the skel files
+ ##########################################################################
+ sed -i.bak "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals
+ sed -i.bak "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals
+ sed -i.bak "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals
+ sed -i.bak "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals
+
+ #Change KDM Langs
+ ##########################################################################
+ sed -i.bak "s/Language=en_US/Language=${LOCALE}.UTF-8/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc
+
+ # Check if we have a localized splash screen and copy it
+ if [ -e "${FSMNT}/usr/PCBSD/splash-screens/loading-screen-${SETLANG}.pcx" ]
+ then
+ cp ${FSMNT}/usr/PCBSD/splash-screens/loading-screen-${SETLANG}.pcx ${FSMNT}/boot/loading-screen.pcx
+ fi
+
+};
+
+localize_x_keyboard()
+{
+ KEYMOD="$1"
+ KEYLAY="$2"
+ KEYVAR="$3"
+ COUNTRY="$4"
+ OPTION="grp:alt_shift_toggle"
+ SETXKBMAP=""
+
+ if [ "${COUNTRY}" = "NONE" -o "${COUNTRY}" = "us" -o "${COUNTRY}" = "C" ] ; then
+ #In this case we don't need any additional language
+ COUNTRY=""
+ OPTION=""
+ else
+ COUNTRY=",${COUNTRY}"
+ fi
+
+ if [ "${KEYMOD}" != "NONE" ]
+ then
+ SETXKBMAP="-model ${KEYMOD}"
+ KXMODEL="${KEYMOD}"
+ else
+ KXMODEL="pc104"
+ fi
+
+ if [ "${KEYLAY}" != "NONE" ]
+ then
+ localize_key_layout "$KEYLAY"
+ SETXKBMAP="${SETXKBMAP} -layout ${KEYLAY}"
+ KXLAYOUT="${KEYLAY}"
+ else
+ KXLAYOUT="us"
+ fi
+
+ if [ "${KEYVAR}" != "NONE" ]
+ then
+ SETXKBMAP="${SETXKBMAP} -variant ${KEYVAR}"
+ KXVAR="(${KEYVAR})"
+ else
+ KXVAR=""
+ fi
+
+ # Setup .xprofile with our setxkbmap call now
+ if [ ! -z "${SETXKBMAP}" ]
+ then
+ if [ ! -e "${FSMNT}/usr/share/skel/.xprofile" ]
+ then
+ echo "#!/bin/sh" >${FSMNT}/usr/share/skel/.xprofile
+ fi
+
+ # Save the keyboard layout for user / root X logins
+ echo "setxkbmap ${SETXKBMAP}" >>${FSMNT}/usr/share/skel/.xprofile
+ chmod 755 ${FSMNT}/usr/share/skel/.xprofile
+ cp ${FSMNT}/usr/share/skel/.xprofile ${FSMNT}/root/.xprofile
+
+ # Save it for KDM
+ echo "setxkbmap ${SETXKBMAP}" >>${FSMNT}/usr/local/kde4/share/config/kdm/Xsetup
+ fi
+
+
+ # Create the kxkbrc configuration using these options
+ echo "[Layout]
+DisplayNames=${KXLAYOUT}${COUNTRY}
+IndicatorOnly=false
+LayoutList=${KXLAYOUT}${KXVAR}${COUNTRY}
+Model=${KXMODEL}
+Options=${OPTION}
+ResetOldOptions=true
+ShowFlag=true
+ShowSingle=false
+SwitchMode=WinClass
+Use=true " >${FSMNT}/usr/share/skel/.kde4/share/config/kxkbrc
+
+};
+
+localize_key_layout()
+{
+
+ KEYLAYOUT="$1"
+
+ # Set the keylayout in rc.conf
+ case ${KEYLAYOUT} in
+ am) KEYLAYOUT_CONSOLE="hy.armscii-8" ;;
+ ch) KEYLAYOUT_CONSOLE="swissgerman.iso" ;;
+ cz) KEYLAYOUT_CONSOLE="cz.iso2" ;;
+ de) KEYLAYOUT_CONSOLE="german.iso" ;;
+ dk) KEYLAYOUT_CONSOLE="danish.iso" ;;
+ ee) KEYLAYOUT_CONSOLE="estonian.iso" ;;
+ es) KEYLAYOUT_CONSOLE="spanish.iso" ;;
+ fi) KEYLAYOUT_CONSOLE="finnish.iso" ;;
+ is) KEYLAYOUT_CONSOLE="icelandic.iso" ;;
+ jp) KEYLAYOUT_CONSOLE="jp.106" ;;
+ nl) KEYLAYOUT_CONSOLE="dutch.iso.acc" ;;
+ no) KEYLAYOUT_CONSOLE="norwegian.iso" ;;
+ pl) KEYLAYOUT_CONSOLE="pl_PL.ISO8859-2" ;;
+ ru) KEYLAYOUT_CONSOLE="ru.koi8-r" ;;
+ sk) KEYLAYOUT_CONSOLE="sk.iso2" ;;
+ se) KEYLAYOUT_CONSOLE="swedish.iso" ;;
+ tr) KEYLAYOUT_CONSOLE="tr.iso9.q" ;;
+ gb) KEYLAYOUT_CONSOLE="uk.iso" ;;
+ *) if [ ! -z "${KEYLAYOUT}" ]
+ then
+ KEYLAYOUT_CONSOLE="${KEYLAYOUT}.iso"
+ fi
+ ;;
+ esac
+
+ if [ ! -z "${KEYLAYOUT_CONSOLE}" ]
+ then
+ echo "keymap=\"${KEYLAYOUT_CONSOLE}\"" >>${FSMNT}/etc/rc.conf
+ fi
+
+};
+
+# Function which prunes other l10n files from the KDE install
+localize_prune_langs()
+{
+ get_value_from_cfg localizeLang
+ KEEPLANG="$VAL"
+ if [ -z "$KEEPLANG" ] ; then
+ KEEPLANG="en"
+ fi
+ export KEEPLANG
+
+ echo_log "Pruning other l10n files, keeping ${KEEPLANG}"
+
+ # Create the script to do uninstalls
+ echo '#!/bin/sh
+
+ for i in `pkg_info | grep "kde-l10n" | cut -d " " -f 1`
+ do
+ echo "$i" | grep "${KEEPLANG}-kde"
+ if [ "$?" != "0" ] ; then
+ pkg_delete ${i}
+ fi
+ done
+ ' > ${FSMNT}/.pruneLangs.sh
+
+ chmod 755 ${FSMNT}/.pruneLangs.sh
+ chroot ${FSMNT} /.pruneLangs.sh >/dev/null 2>/dev/null
+ rm ${FSMNT}/.pruneLangs.sh
+
+};
+
+# Function which sets COUNTRY SETLANG and LOCALE based upon $1
+localize_get_codes()
+{
+ TARGETLANG="${1}"
+ # Setup the presets for the specific lang
+ case $TARGETLANG in
+ af) COUNTRY="C"
+ SETLANG="af"
+ LOCALE="af_ZA"
+ ;;
+ ar) COUNTRY="C"
+ SETLANG="ar"
+ LOCALE="en_US"
+ ;;
+ az) COUNTRY="C"
+ SETLANG="az"
+ LOCALE="en_US"
+ ;;
+ ca) COUNTRY="es"
+ SETLANG="es:ca"
+ LOCALE="ca_ES"
+ ;;
+ be) COUNTRY="be"
+ SETLANG="be"
+ LOCALE="be_BY"
+ ;;
+ bn) COUNTRY="bn"
+ SETLANG="bn"
+ LOCALE="en_US"
+ ;;
+ bg) COUNTRY="bg"
+ SETLANG="bg"
+ LOCALE="bg_BG"
+ ;;
+ cs) COUNTRY="cz"
+ SETLANG="cs"
+ LOCALE="cs_CZ"
+ ;;
+ da) COUNTRY="dk"
+ SETLANG="da"
+ LOCALE="da_DK"
+ ;;
+ de) COUNTRY="de"
+ SETLANG="de"
+ LOCALE="de_DE"
+ ;;
+ en_GB) COUNTRY="gb"
+ SETLANG="en_GB:cy"
+ LOCALE="en_GB"
+ ;;
+ el) COUNTRY="gr"
+ SETLANG="el:gr"
+ LOCALE="el_GR"
+ ;;
+ es) COUNTRY="es"
+ SETLANG="es"
+ LOCALE="es_ES"
+ ;;
+ es_LA) COUNTRY="us"
+ SETLANG="es:en_US"
+ LOCALE="es_ES"
+ ;;
+ et) COUNTRY="ee"
+ SETLANG="et"
+ LOCALE="et_EE"
+ ;;
+ fr) COUNTRY="fr"
+ SETLANG="fr"
+ LOCALE="fr_FR"
+ ;;
+ he) COUNTRY="il"
+ SETLANG="he:ar"
+ LOCALE="he_IL"
+ ;;
+ hr) COUNTRY="hr"
+ SETLANG="hr"
+ LOCALE="hr_HR"
+ ;;
+ hu) COUNTRY="hu"
+ SETLANG="hu"
+ LOCALE="hu_HU"
+ ;;
+ it) COUNTRY="it"
+ SETLANG="it"
+ LOCALE="it_IT"
+ ;;
+ ja) COUNTRY="jp"
+ SETLANG="ja"
+ LOCALE="ja_JP"
+ ;;
+ ko) COUNTRY="kr"
+ SETLANG="ko"
+ LOCALE="ko_KR"
+ ;;
+ nl) COUNTRY="nl"
+ SETLANG="nl"
+ LOCALE="nl_NL"
+ ;;
+ nn) COUNTRY="no"
+ SETLANG="nn"
+ LOCALE="en_US"
+ ;;
+ pa) COUNTRY="pa"
+ SETLANG="pa"
+ LOCALE="en_US"
+ ;;
+ pl) COUNTRY="pl"
+ SETLANG="pl"
+ LOCALE="pl_PL"
+ ;;
+ pt) COUNTRY="pt"
+ SETLANG="pt"
+ LOCALE="pt_PT"
+ ;;
+ pt_BR) COUNTRY="br"
+ SETLANG="pt_BR"
+ LOCALE="pt_BR"
+ ;;
+ ru) COUNTRY="ru"
+ SETLANG="ru"
+ LOCALE="ru_RU"
+ ;;
+ sl) COUNTRY="si"
+ SETLANG="sl"
+ LOCALE="sl_SI"
+ ;;
+ sk) COUNTRY="sk"
+ SETLANG="sk"
+ LOCALE="sk_SK"
+ ;;
+ sv) COUNTRY="se"
+ SETLANG="sv"
+ LOCALE="sv_SE"
+ ;;
+ uk) COUNTRY="ua"
+ SETLANG="uk"
+ LOCALE="uk_UA"
+ ;;
+ vi) COUNTRY="vn"
+ SETLANG="vi"
+ LOCALE="en_US"
+ ;;
+ zh_CN) COUNTRY="cn"
+ SETLANG="zh_CN"
+ LOCALE="zh_CN"
+ ;;
+ zh_TW) COUNTRY="tw"
+ SETLANG="zh_TW"
+ LOCALE="zh_TW"
+ ;;
+ *) COUNTRY="C"
+ SETLANG="${TARGETLANG}"
+ LOCALE="en_US"
+ ;;
+ esac
+
+ export COUNTRY SETLANG LOCALE
+
+};
+
+# Function which sets the timezone on the system
+set_timezone()
+{
+ TZONE="$1"
+ cp ${FSMNT}/usr/share/zoneinfo/${TZONE} ${FSMNT}/etc/localtime
+};
+
+# Function which enables / disables NTP
+set_ntp()
+{
+ ENABLED="$1"
+ if [ "$ENABLED" = "yes" -o "${ENABLED}" = "YES" ]
+ then
+ cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep 'ntpd_enable="YES"' >/dev/null 2>/dev/null
+ if [ "$?" != "0" ]
+ then
+ echo 'ntpd_enable="YES"' >>${FSMNT}/etc/rc.conf
+ echo 'ntpd_sync_on_start="YES"' >>${FSMNT}/etc/rc.conf
+ fi
+ else
+ cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep 'ntpd_enable="YES"' >/dev/null 2>/dev/null
+ if [ "$?" != "0" ]
+ then
+ sed -i.bak 's|ntpd_enable="YES"||g' ${FSMNT}/etc/rc.conf
+ fi
+ fi
+};
+
+# Starts checking for localization directives
+run_localize()
+{
+ KEYLAYOUT="NONE"
+ KEYMOD="NONE"
+ KEYVAR="NONE"
+
+ while read line
+ do
+ # Check if we need to do any localization
+ echo $line | grep "^localizeLang=" >/dev/null 2>/dev/null
+ if [ "$?" = "0" ]
+ then
+
+ # Set our country / lang / locale variables
+ get_value_from_string "$line"
+ localize_get_codes ${VAL}
+
+ get_value_from_string "$line"
+ # If we are doing PC-BSD install, localize it as well as FreeBSD base
+ if [ "${INSTALLTYPE}" != "FreeBSD" ]
+ then
+ localize_pcbsd "$VAL"
+ fi
+ localize_freebsd "$VAL"
+ fi
+
+ # Check if we need to do any keylayouts
+ echo $line | grep "^localizeKeyLayout=" >/dev/null 2>/dev/null
+ if [ "$?" = "0" ] ; then
+ get_value_from_string "$line"
+ KEYLAYOUT="$VAL"
+ fi
+
+ # Check if we need to do any key models
+ echo $line | grep "^localizeKeyModel=" >/dev/null 2>/dev/null
+ if [ "$?" = "0" ] ; then
+ get_value_from_string "$line"
+ KEYMOD="$VAL"
+ fi
+
+ # Check if we need to do any key variant
+ echo $line | grep "^localizeKeyVariant=" >/dev/null 2>/dev/null
+ if [ "$?" = "0" ] ; then
+ get_value_from_string "$line"
+ KEYVAR="$VAL"
+ fi
+
+
+ # Check if we need to set a timezone
+ echo $line | grep "^timeZone=" >/dev/null 2>/dev/null
+ if [ "$?" = "0" ] ; then
+ get_value_from_string "$line"
+ set_timezone "$VAL"
+ fi
+
+ # Check if we need to set a timezone
+ echo $line | grep "^enableNTP=" >/dev/null 2>/dev/null
+ if [ "$?" = "0" ] ; then
+ get_value_from_string "$line"
+ set_ntp "$VAL"
+ fi
+ done <${CFGF}
+
+ if [ "${INSTALLTYPE}" != "FreeBSD" ] ; then
+ # Do our X keyboard localization
+ localize_x_keyboard "${KEYMOD}" "${KEYLAYOUT}" "${KEYVAR}" "${COUNTRY}"
+ fi
+
+ # Check if we want to prunt any other KDE lang files to save some disk space
+ get_value_from_cfg localizePrune
+ if [ "${VAL}" = "yes" -o "${VAL}" = "YES" ] ; then
+ localize_prune_langs
+ fi
+
+ # Update the login.conf db, even if we didn't localize, its a good idea to make sure its up2date
+ run_chroot_cmd "/usr/bin/cap_mkdb /etc/login.conf" >/dev/null 2>/dev/null
+
+};
OpenPOWER on IntegriCloud