-#!/bin/sh
-# Filename: /etc/grml/fai/config/scripts/GRMLBASE/25-locales
+#!/bin/bash
+# Filename: ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/25-locales
# Purpose: locales (language) configuration of the live system
# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2 or any later version.
################################################################################
+set -u
set -e
-if [ -z "$ROOTCMD" ] ; then
- echo "variable \$ROOTCMD not set, exiting to avoid any possible damage">&2
- exit 1
-fi
+# set up /etc/locale.gen, only GRML_FULL and LOCALES have
+# the full setup, GRMLBASE installs a minimal configuration
+fcopy -v /etc/locale.gen
-# use full locales setup only in classes GRML_FULL and LOCALES
-if ifclass GRML_FULL || ifclass LOCALES ; then
- echo 'Using /etc/locale.gen.grml for locales generation'
- cp $target/etc/locale.gen.grml $target/etc/locale.gen
-else
- echo 'Using /etc/locale.gen.minimal for locales generation'
- cp $target/etc/locale.gen.minimal $target/etc/locale.gen
+# get rid of locales unless using class LOCALES
+set +u
+if ! ifclass LOCALES ; then
+set -u
+ echo 'Removing /usr/share/locale'
+
+ # get rid of the original
+ rm -rf $target/usr/share/locale
+
+ # restore *empty* directories because otherwise installation/upgrade of packages might fail
+ [ -d "$target"/usr/share/locale ] || mkdir "$target"/usr/share/locale
+ $ROOTCMD ln -s /etc/locale.alias /usr/share/locale/locale.alias
+
+ # make sure the directories of removed locales exist; ugly hack but no other solution present :(
+ echo 'Creating empty /usr/share/locale/*/LC_MESSAGES directories'
+ for f in $($ROOTCMD dpkg -S LC_MESSAGES | awk '{print $2}' | grep '/usr/share/locale/' | sed 's#LC_MESSAGES.*##' | sort -u) ; do
+ if ! [ -d "$target/$f"/LC_MESSAGES ] ; then
+ $ROOTCMD mkdir -p "$f"/LC_MESSAGES
+ fi
+ done
fi
# make sure:
# localepurge localepurge/nopurge multiselect ....
# is set so localepurge works as expected
-if [ -x $target/usr/sbin/localepurge ] ; then
+if $ROOTCMD dpkg --list localepurge >/dev/null 2>&1 ; then
$ROOTCMD dpkg-reconfigure -f noninteractive localepurge
fi
-if [ -x $target/usr/sbin/locale-gen ] ; then
- $ROOTCMD locale-gen
+if ! [ -x $target/usr/sbin/locale-gen ] ; then
+ echo 'Warning: locale-gen [package locales] not installed'
else
- echo 'Warning: locale-gen [package locales] not available'
-fi
-
-if [ -x $target/usr/sbin/localepurge ] ; then
- $ROOTCMD localepurge
+ echo "Running locale-gen"
+ $ROOTCMD locale-gen
fi
-# get rid of LC_MESSAGES unless using class LOCALES
-if ! ifclass LOCALES ; then
- echo 'Removing /usr/share/locale'
- $ROOTCMD rm -rf /usr/share/locale
- $ROOTCMD mkdir /usr/share/locale
- # TODO: /usr/share/i18n/locales
+if ! [ -x $target/usr/sbin/localepurge ] ; then
+ echo "Warning: localepurge not installed"
+else
+ echo "Running localepurge."
+ $ROOTCMD localepurge
fi
## END OF FILE #################################################################
-# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=3
+# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=2