diff --git a/elements/yum-minimal/pre-install.d/03-yum-cleanup b/elements/yum-minimal/pre-install.d/03-yum-cleanup index 7c15ec7f..2050d2b8 100755 --- a/elements/yum-minimal/pre-install.d/03-yum-cleanup +++ b/elements/yum-minimal/pre-install.d/03-yum-cleanup @@ -22,8 +22,59 @@ set -eu set -o pipefail # effectively: febootstrap-minimize --keep-zoneinfo --keep-rpmdb --keep-services "$target" -# locales -rm -rf /usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive} + +# Fedora 24 has a much better way to handle just installing some +# languages; see bug. We should support that at the right time. +if [[ $DISTRO_NAME == "fedora" && $DIB_RELEASE -gt 23 ]]; then + echo "Locale support for Fedora 24 is incomplete" + echo " see: https://bugs.launchpad.net/diskimage-builder/+bug/1571488" + die "Cannot cleanup locales on > Fedora 23" +fi + +# Stripping *all* locales is a bad idea. For now, we take the +# suggestion in [1] for reducing this +# [1] https://bugzilla.redhat.com/show_bug.cgi?id=156477 + +if [ ! -f /usr/lib/locale/locale-archive ]; then + die "locale-archive not found? Can not do cleanup." +fi + +# now the archive has everything in it, and is about 100MiB. Strip it +# to just en_US (basically, this is the locale we support if you ssh +# in, other than POSIX) +localedef --delete-from-archive \ + $(localedef --list-archive | grep -v '^en_US' | xargs) + +# This removes the locales from the archive index but doesn't rebuild +# the file, so it is still the same size (maybe it is sparse? +# presumably as it's mmapped you don't want to fiddle with the offsets +# of locales in the archive on a live system. We are not live). + +# build-locale-archive is a tool provided by the RH packaging of +# glibc. Documentation is scarce, but it takes the pre-built locales +# in the tmpl file and creates an archive. It seems originally the +# installer would set some flags to rpm to tell the package what +# languages to pick out of the template, but along the way, this was +# reverted to install them (size considered less important than locale +# support). + +# We hack this by moving the locale-archive we've removed the extra +# locales from to the template, then re-run the build. +mv /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.tmpl + +# rebuild archive from template +/usr/sbin/build-locale-archive + +# leave empty template behind as package does. I think this stops +# upgrades redoing things +echo > /usr/locale/locale-archive.tmpl + +# remove the unnecessary source locale files and iconv files +pushd /usr/share/locale +find . ! -name 'locale.alias' -delete +popd +rm -rf {lib.lib64}/gconv + # docs rm -rf /usr/share/{doc,info,gnome/help} # cracklib