f0cfa1b168
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.
544 lines
13 KiB
Bash
Executable File
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
|
|
|
|
};
|