enter_chroot: sanity check locale settings
If people have a misconfigured environment, detect & abort early
rather than fail randomly/mysteriously later on. We require a
valid UTF-8 compatible locale in order to work.
BUG=chromium:1052082
TEST=CQ passes
TEST=`LANG=C cros_sdk` aborts
Change-Id: I1f331bfbc4031d4178cadaa6d70a8017e1271cde
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosutils/+/2137986
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
diff --git a/sdk_lib/enter_chroot.sh b/sdk_lib/enter_chroot.sh
index de0cecf..0b93ad8 100755
--- a/sdk_lib/enter_chroot.sh
+++ b/sdk_lib/enter_chroot.sh
@@ -249,6 +249,34 @@
fi
}
+# Sanity check the user's environment locale settings.
+check_locale() {
+ if [[ "$(locale -k charmap)" != 'charmap="UTF-8"' ]]; then
+ error "Your locale appears to not support UTF-8 which is required."
+ error "The output from 'locale':"
+ locale
+ error "The output from 'locale -k LC_CTYPE':"
+ locale -k LC_CTYPE
+ error "The language env vars:"
+ env | grep -E '^(LC_|LANG)'
+ if [[ -n "${LC_ALL}" ]]; then
+ error "Never set LC_ALL (=${LC_ALL}) in your environment; only set LANG."
+ fi
+ die_notrace "Please fix your locale settings by setting LANG to UTF-8" \
+ "compatible locale and removing any LC_ variable settings."
+ fi
+
+ # C.UTF8 is not standard currently unfortunately.
+ local var
+ for var in LANG LC_ALL LC_CTYPE; do
+ if [[ "${!var}" == "C.UTF-8" ]]; then
+ error "Sorry, but C.UTF-8 is not currently supported."
+ locale
+ die_notrace "Please use a different locale when building CrOS."
+ fi
+ done
+}
+
generate_locales() {
# Make sure user's requested locales are available
# http://crosbug.com/19139
@@ -673,6 +701,7 @@
) 200>>"$LOCKFILE" || die "setup_env failed"
}
+check_locale
setup_env
CHROOT_PASSTHRU=(