summaryrefslogtreecommitdiff
path: root/tools/Z99-cloud-locale-test.sh
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2012-04-04 13:22:06 -0400
committerScott Moser <smoser@ubuntu.com>2012-04-04 13:22:06 -0400
commit969aac2e95d4cb202450726cf0b7d4b16fba4211 (patch)
tree8dc658a29a90164380c3021a43729427e2305d96 /tools/Z99-cloud-locale-test.sh
parentb47e48251878e92931d06288c5e964041699f7e0 (diff)
downloadvyos-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/Z99-cloud-locale-test.sh')
-rwxr-xr-xtools/Z99-cloud-locale-test.sh82
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