#!/bin/bash # # dmeventd uses a lot of memory reading large locale data. # Since we don't need this extra language support anyways, # just remove extra locales. Works around bug that is fixed # in newer version of device-mapper. # # https://bugzilla.redhat.com/show_bug.cgi?id=541911 prune_locales() { # Phase 1 localedef --list-archive | grep -v -i -E 'en_GB.utf8|en_US.utf8' | xargs localedef --delete-from-archive result=$? if [[ "$result" -ne "0" ]]; then error=1 fi # Phase 2 phase_2=$(ls /usr/share/locale/| grep -v -i -E 'en_GB|en_US|en|locale.alias') for extra_locale in ${phase_2} do rm -rf /usr/share/locale/$extra_locale result=$? if [[ "$result" -ne "0" ]]; then error=1 fi done # Phase 3 phase_3=$(ls /usr/lib/locale/| grep -v -i -E 'en_GB|en_US|en') for extra_locale in ${phase_3} do rm -rf /usr/lib/locale/$extra_locale result=$? if [[ "$result" -ne "0" ]]; then error=1 fi done } rest_dmeventd() { killall -9 dmeventd # Give it time to close so start attempt doesnt think its already running and fail. sleep 4 /sbin/dmeventd } backup_locales() { cp -Rp /usr/lib/locale /usr/lib/locale.lwOrig cp -Rp /usr/share/locale /usr/share/locale.lwOrig result=$? if [[ "$result" -ne "0" ]]; then error=1 fi } rebuild_locales() { /usr/sbin/build-locale-archive result=$? if [[ "$result" -ne "0" ]]; then error=1 fi } if_error() { if [[ "$error" -eq "1" ]]; then echo "Exit status of at least one of the system commands indicates an error. Review scroll back for possible error." else rest_dmeventd echo "Finished pruning non EN locales (and backing up old ones). 'localedef --list-archive' should only be showing EN based locales now. Originals at: /usr/lib/locale.lwOrig /usr/share/locale.lwOrig" fi } backup_locales prune_locales rebuild_locales if_error