diff options
author | Scott Moser <smoser@ubuntu.com> | 2012-04-04 13:22:06 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2012-04-04 13:22:06 -0400 |
commit | 969aac2e95d4cb202450726cf0b7d4b16fba4211 (patch) | |
tree | 8dc658a29a90164380c3021a43729427e2305d96 /tools | |
parent | b47e48251878e92931d06288c5e964041699f7e0 (diff) | |
download | vyos-cloud-init-969aac2e95d4cb202450726cf0b7d4b16fba4211.tar.gz vyos-cloud-init-969aac2e95d4cb202450726cf0b7d4b16fba4211.zip |
move Z99-cloud-locale-test.sh out of profile.d to tools
Just to avoid an entry in top level directory, get rid of profile.d there
and instead move Z99-cloud-locale-test.sh -> tools/Z99-cloud-locale-test.sh
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/Z99-cloud-locale-test.sh | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/tools/Z99-cloud-locale-test.sh b/tools/Z99-cloud-locale-test.sh new file mode 100755 index 00000000..bbd2ca7a --- /dev/null +++ b/tools/Z99-cloud-locale-test.sh @@ -0,0 +1,82 @@ +#!/bin/sh +# vi: ts=4 noexpandtab +# +# Author: Ben Howard <ben.howard@canonical.com> +# Author: Scott Moser <scott.moser@ubuntu.com> +# (c) 2012, Canonical Group, Ltd. +# +# Purpose: Detect invalid locale settings and inform the user +# of how to fix them. +# + +locale_warn() { + local cr=" +" + local line bad_names="" bad_lcs="" key="" value="" var="" + local w1 w2 w3 w4 remain + # locale is expected to output either: + # VARIABLE= + # VARIABLE="value" + # locale: Cannot set LC_SOMETHING to default locale + while read -r w1 w2 w3 w4 remain; do + case "$w1" in + locale:) bad_names="${bad_names} ${w4}";; + *) + key=${w1%%=*} + val=${w1#*=} + val=${val#\"} + val=${val%\"} + vars="${vars} $key=$val";; + esac + done + for bad in $bad_names; do + for var in ${vars}; do + [ "${bad}" = "${var%=*}" ] && + bad_lcs="${bad_lcs} ${var#*=}" && break 2 + done + done + bad_lcs=${bad_lcs# } + [ -n "$bad_lcs" ] || return 0 + + printf "_____________________________________________________________________\n" + printf "WARNING! Your environment specifies an invalid locale.\n" + printf " This can affect your user experience significantly, including the\n" + printf " ability to manage packages. You may install the locales by running\n" + printf " the following command(s):\n\n" + + local bad invalid="" to_gen="" sfile="/usr/share/i18n/SUPPORTED" + if [ ! -e "$sfile" ]; then + printf " sudo apt-get install locales\n" + fi + if [ -e "$sfile" ]; then + for bad in ${bad_lcs}; do + grep -q -i "${bad}" "$sfile" && + to_gen="${to_gen} ${bad}" || + invalid="${invalid} ${bad}" + done + else + to_gen=$bad_lcs + fi + + for bad in ${to_gen}; do + printf " sudo apt-get install language-pack-${bad%%_*}\n" + printf " sudo locale-gen ${bad}\n" + done + printf "\n" + for bad in ${invalid}; do + printf "WARNING: '${bad}' is an invalid locale\n" + done + + printf "To see all available language packs, run:\n" + printf " apt-cache search \"^language-pack-[a-z][a-z]$\"\n" + printf "To disable for all users, run:\n" + printf " sudo touch /var/lib/cloud/instance/locale-check.skip\n" + printf "To disable this check for this user only, run: \n" + printf " touch ~/.locale-test.skip \n" + printf "_____________________________________________________________________\n\n" +} + +[ -f /home/${USER}/.locale-test.skip -o -f /var/lib/cloud/instance/locale-check.skip ] || + locale 2>&1 | locale_warn + +unset locale_warn |