freebsd-nq/usr.sbin/pc-sysinstall/backend/functions-localize.sh
Pedro F. Giffuni f0cfa1b168 share and pc-sysinstall: adoption of SPDX licensing ID tags.
Mainly focus on files that use BSD 2-Clause license, however the tool I
was using misidentified many licenses so this was mostly a manual - error
prone - task.

The Software Package Data Exchange (SPDX) group provides a specification
to make it easier for automated tools to detect and summarize well known
opensource licenses. We are gradually adopting the specification, noting
that the tags are considered only advisory and do not, in any way,
superceed or replace the license texts.

Commit these apart because compile testing doesn't guarantee I didn't made
some nasty mistake. No functional change intended.
2017-11-27 15:28:26 +00:00

544 lines
13 KiB
Bash
Executable File

#!/bin/sh
#-
# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
#
# 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$
# 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
};
localize_x_desktops() {
# Check for and customize KDE lang
##########################################################################
# Check if we can localize KDE via skel
if [ -e "${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals" ] ; then
sed -i '' "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals
sed -i '' "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals
sed -i '' "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals
fi
# Check if we have a KDE root config
if [ -e "${FSMNT}/root/.kde4/share/config/kdeglobals" ] ; then
sed -i '' "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals
fi
# Check for KDM
if [ -e "${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc" ] ; then
sed -i '' "s/Language=en_US/Language=${LOCALE}.UTF-8/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc
fi
# Check for and customize GNOME / GDM lang
##########################################################################
# See if GDM is enabled and customize its lang
cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep -q "gdm_enable=\"YES\"" 2>/dev/null
if [ "$?" = "0" ] ; then
echo "gdm_lang=\"${LOCALE}.UTF-8\"" >> ${FSMNT}/etc/rc.conf
fi
};
# Function which localizes a PC-BSD install
localize_pcbsd()
{
# Check if we have a localized splash screen and copy it
if [ -e "${FSMNT}/usr/local/share/pcbsd/splash-screens/loading-screen-${SETLANG}.pcx" ]
then
cp ${FSMNT}/usr/local/share/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
if [ -e "${FSMNT}/usr/local/kde4/share/config/kdm/Xsetup" ] ; then
echo "setxkbmap ${SETXKBMAP}" >>${FSMNT}/usr/local/kde4/share/config/kdm/Xsetup
fi
fi
# Create the kxkbrc configuration using these options
if [ -d "${FSMNT}/usr/share/skel/.kde4/share/config" ] ; then
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
fi
};
localize_key_layout()
{
KEYLAYOUT="$1"
# Set the keylayout in rc.conf
case ${KEYLAYOUT} in
am) KEYLAYOUT_CONSOLE="hy.armscii-8" ;;
ca) KEYLAYOUT_CONSOLE="fr_CA.acc.iso" ;;
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 [ -n "${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 -xEI kde-l10n`
do
echo "$i" | grep "${KEEPLANG}-kde"
if [ $? -ne 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 -q 'ntpd_enable="YES"' 2>/dev/null
if [ $? -ne 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 -q 'ntpd_enable="YES"' 2>/dev/null
if [ $? -ne 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 -q "^localizeLang=" 2>/dev/null
if [ $? -eq 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
localize_freebsd "$VAL"
# Localize any X pkgs
localize_x_desktops "$VAL"
fi
# Check if we need to do any keylayouts
echo $line | grep -q "^localizeKeyLayout=" 2>/dev/null
if [ $? -eq 0 ] ; then
get_value_from_string "$line"
KEYLAYOUT="$VAL"
fi
# Check if we need to do any key models
echo $line | grep -q "^localizeKeyModel=" 2>/dev/null
if [ $? -eq 0 ] ; then
get_value_from_string "$line"
KEYMOD="$VAL"
fi
# Check if we need to do any key variant
echo $line | grep -q "^localizeKeyVariant=" 2>/dev/null
if [ $? -eq 0 ] ; then
get_value_from_string "$line"
KEYVAR="$VAL"
fi
# Check if we need to set a timezone
echo $line | grep -q "^timeZone=" 2>/dev/null
if [ $? -eq 0 ] ; then
get_value_from_string "$line"
set_timezone "$VAL"
fi
# Check if we need to set a timezone
echo $line | grep -q "^enableNTP=" 2>/dev/null
if [ $? -eq 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
};