diff --git a/sdk_lib/enter_chroot.sh b/sdk_lib/enter_chroot.sh index 30d80523e8..efdf894ba1 100755 --- a/sdk_lib/enter_chroot.sh +++ b/sdk_lib/enter_chroot.sh @@ -197,6 +197,38 @@ promote_api_keys() { fi } +generate_locales() { + # Make sure user's requested locales are available + # http://crosbug.com/19139 + # And make sure en_US{,.UTF-8} are always available as + # that what buildbot forces internally + local l locales gen_locales=() + + locales=$(printf '%s\n' en_US en_US.UTF-8 ${LANG} \ + $LC_{ADDRESS,ALL,COLLATE,CTYPE,IDENTIFICATION,MEASUREMENT,MESSAGES} \ + $LC_{MONETARY,NAME,NUMERIC,PAPER,TELEPHONE,TIME} | \ + sort -u | sed '/^C$/d') + for l in ${locales}; do + if [[ ${l} == *.* ]]; then + enc=${l#*.} + else + enc="ISO-8859-1" + fi + case $(echo ${enc//-} | tr '[:upper:]' '[:lower:]') in + utf8) enc="UTF-8";; + esac + gen_locales+=("${l} ${enc}") + done + if [[ ${#gen_locales[@]} -gt 0 ]] ; then + # Force LC_ALL=C to workaround slow string parsing in bash + # with long multibyte strings. Newer setups have this fixed, + # but locale-gen doesn't need to be run in any locale in the + # first place, so just go with C to keep it fast. + chroot "${FLAGS_chroot}" env LC_ALL=C locale-gen -q -u \ + -G "$(printf '%s\n' "${gen_locales[@]}")" + fi +} + setup_env() { ( flock 200 @@ -221,6 +253,9 @@ setup_env() { fi fi + # Do this early as it's slow and only needs basic mounts (above). + generate_locales & + setup_mount "${FLAGS_trunk}" "--rbind" "${CHROOT_TRUNK_DIR}" debug "Setting up referenced repositories if required." @@ -402,35 +437,6 @@ setup_env() { done promote_api_keys - # Make sure user's requested locales are available - # http://crosbug.com/19139 - # And make sure en_US{,.UTF-8} are always available as - # that what buildbot forces internally - locales=$(printf '%s\n' en_US en_US.UTF-8 ${LANG} \ - $LC_{ADDRESS,ALL,COLLATE,CTYPE,IDENTIFICATION,MEASUREMENT,MESSAGES} \ - $LC_{MONETARY,NAME,NUMERIC,PAPER,TELEPHONE,TIME} | \ - sort -u | sed '/^C$/d') - gen_locales=() - for l in ${locales}; do - if [[ ${l} == *.* ]]; then - enc=${l#*.} - else - enc="ISO-8859-1" - fi - case $(echo ${enc//-} | tr '[:upper:]' '[:lower:]') in - utf8) enc="UTF-8";; - esac - gen_locales=("${gen_locales[@]}" "${l} ${enc}") - done - if [[ ${#gen_locales[@]} -gt 0 ]] ; then - # Force LC_ALL=C to workaround slow string parsing in bash - # with long multibyte strings. Newer setups have this fixed, - # but locale-gen doesn't need to be run in any locale in the - # first place, so just go with C to keep it fast. - chroot "$FLAGS_chroot" env LC_ALL=C locale-gen -q -u \ - -G "$(printf '%s\n' "${gen_locales[@]}")" - fi - # Fix permissions on shared memory to allow non-root users access to POSIX # semaphores. chmod -R 777 "${FLAGS_chroot}/dev/shm"