X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=febootstrap-minimize.sh;h=efee8445f3289a2156e16634f79312667ddc127b;hb=0a0783983a6e985c171c9d3ab8d50eb2ba541ba4;hp=f39beaa1ad6ac21c0f10e40d8076fba5aa24e755;hpb=1b640fb0bd84f88d378b6c4a74088ac22c8f7d75;p=febootstrap.git diff --git a/febootstrap-minimize.sh b/febootstrap-minimize.sh index f39beaa..efee844 100755 --- a/febootstrap-minimize.sh +++ b/febootstrap-minimize.sh @@ -18,9 +18,11 @@ # # Written by Richard W.M. Jones +unset CDPATH + TEMP=`getopt \ -o '' \ - --long help,all,none,keep-locales,drop-locales,keep-docs,drop-docs,keep-yum-cache,drop-yum-cache,keep-cracklib,drop-cracklib,keep-i18n,drop-i18n,keep-zoneinfo,drop-zoneinfo \ + --long help,all,none,keep-locales,drop-locales,keep-docs,drop-docs,keep-cracklib,drop-cracklib,keep-i18n,drop-i18n,keep-zoneinfo,drop-zoneinfo,keep-rpmdb,drop-rpmdb,keep-yum-cache,drop-yum-cache,keep-services,drop-services,keep-sln,drop-sln,keep-ldconfig,drop-ldconfig,no-pack-executables,pack-executables \ -n febootstrap-minimize -- "$@"` if [ $? != 0 ]; then echo "febootstrap-minimize: problem parsing the command line arguments" @@ -32,23 +34,32 @@ set_all () { keep_locales=no keep_docs=no -keep_yum_cache=no keep_cracklib=no keep_i18n=no keep_zoneinfo=no + keep_rpmdb=no +keep_yum_cache=no + keep_services=no + keep_sln=no + keep_ldconfig=no } set_none () { keep_locales=yes keep_docs=yes -keep_yum_cache=yes keep_cracklib=yes keep_i18n=yes keep_zoneinfo=yes + keep_rpmdb=yes +keep_yum_cache=yes + keep_services=yes + keep_sln=yes + keep_ldconfig=yes } set_all +pack_executables=no usage () { @@ -76,12 +87,6 @@ while true; do --drop-docs) keep_docs=no shift;; - --keep-yum-cache) - keep_yum_cache=yes - shift;; - --drop-yum-cache) - keep_yum_cache=no - shift;; --keep-cracklib) keep_cracklib=yes shift;; @@ -100,6 +105,42 @@ while true; do --drop-zoneinfo) keep_zoneinfo=no shift;; + --keep-rpmdb) + keep_rpmdb=yes + shift;; + --drop-rpmdb) + keep_rpmdb=no + shift;; + --keep-yum-cache) + keep_yum_cache=yes + shift;; + --drop-yum-cache) + keep_yum_cache=no + shift;; + --keep-services) + keep_services=yes + shift;; + --drop-services) + keep_services=no + shift;; + --keep-sln) + keep_sln=yes + shift;; + --drop-sln) + keep_sln=no + shift;; + --keep-ldconfig) + keep_ldconfig=yes + shift;; + --drop-ldconfig) + keep_ldconfig=no + shift;; + --no-pack-executables) + pack_executables=no + shift;; + --pack-executables) + pack_executables=yes + shift;; --help) usage exit 0;; @@ -119,41 +160,142 @@ fi target="$1" -#---------------------------------------------------------------------- - if [ ! -d "$target" ]; then echo "febootstrap-minimize: $target: target directory not found" exit 1 fi -#du -sh "$target" +# Create a temporary directory, make sure it gets cleaned up at the end. +tmpdir=$(mktemp -d) +remove_tmpdir () +{ + status=$? + rm -rf "$tmpdir" && exit $status +} +trap remove_tmpdir EXIT + +#---------------------------------------------------------------------- + +# ***NOTE*** Wildcards cannot be passed to febootstrap-run. if [ "$keep_locales" != "yes" ]; then - rm -f "$target"/usr/lib/locale/* - rm -rf "$target"/usr/share/locale + febootstrap-run "$target" -- rm -rf usr/lib/locale + febootstrap-run "$target" -- rm -rf usr/share/locale + febootstrap-run "$target" -- rm -rf usr/lib/gconv usr/lib64/gconv + febootstrap-run "$target" -- rm -f usr/bin/localedef + febootstrap-run "$target" -- rm -f usr/sbin/build-locale-archive fi if [ "$keep_docs" != "yes" ]; then - rm -rf "$target"/usr/share/man - rm -rf "$target"/usr/share/doc -fi - -if [ "$keep_yum_cache" != "yes" ]; then - rm -rf "$target"/var/cache/yum/* + febootstrap-run "$target" -- rm -rf usr/share/man + febootstrap-run "$target" -- rm -rf usr/share/doc + febootstrap-run "$target" -- rm -rf usr/share/info + febootstrap-run "$target" -- rm -rf usr/share/gnome/help fi if [ "$keep_cracklib" != "yes" ]; then - rm -rf "$target"/usr/share/cracklib + febootstrap-run "$target" -- rm -rf usr/share/cracklib fi if [ "$keep_i18n" != "yes" ]; then - rm -rf "$target"/usr/share/i18n + febootstrap-run "$target" -- rm -rf usr/share/i18n fi if [ "$keep_zoneinfo" != "yes" ]; then mv "$target"/usr/share/zoneinfo/{UCT,UTC,Universal,Zulu,GMT*,*.tab} \ "$target" - rm -rf "$target"/usr/share/zoneinfo/* + febootstrap-run "$target" -- rm -rf usr/share/zoneinfo + febootstrap-run "$target" -- mkdir -p --mode=0755 usr/share/zoneinfo mv "$target"/{UCT,UTC,Universal,Zulu,GMT*,*.tab} \ "$target"/usr/share/zoneinfo/ fi + +if [ "$keep_rpmdb" != "yes" ]; then + febootstrap-run "$target" -- rm -rf var/lib/rpm + febootstrap-run "$target" -- mkdir -p --mode=0755 var/lib/rpm +fi + +if [ "$keep_yum_cache" != "yes" ]; then + febootstrap-run "$target" -- rm -rf var/cache/yum + febootstrap-run "$target" -- mkdir -p --mode=0755 var/cache/yum +fi + +if [ "$keep_services" != "yes" ]; then + # NB: Overwrite the same file so that we have the same inode, + # since fakeroot tracks files by inode number. + cat > "$target"/etc/services <<'__EOF__' +tcpmux 1/tcp +tcpmux 1/udp +echo 7/tcp +echo 7/udp +discard 9/tcp sink null +discard 9/udp sink null +ftp 21/tcp +ftp 21/udp fsp fspd +ssh 22/tcp +ssh 22/udp +telnet 23/tcp +telnet 23/udp +smtp 25/tcp mail +smtp 25/udp mail +time 37/tcp timserver +time 37/udp timserver +nameserver 42/tcp name +nameserver 42/udp name +domain 53/tcp +domain 53/udp +bootps 67/tcp +bootps 67/udp +bootpc 68/tcp dhcpc +bootpc 68/udp dhcpc +tftp 69/tcp +tftp 69/udp +finger 79/tcp +finger 79/udp +http 80/tcp www www-http +http 80/udp www www-http +http 80/sctp +kerberos 88/tcp kerberos5 krb5 +kerberos 88/udp kerberos5 krb5 +pop3 110/tcp pop-3 +pop3 110/udp pop-3 +sunrpc 111/tcp portmapper rpcbind +sunrpc 111/udp portmapper rpcbind +auth 113/tcp authentication tap ident +auth 113/udp authentication tap ident +ntp 123/tcp +ntp 123/udp +imap 143/tcp imap2 +imap 143/udp imap2 +snmp 161/tcp +snmp 161/udp +snmptrap 162/tcp +snmptrap 162/udp snmp-trap +__EOF__ +fi + +if [ "$keep_sln" != "yes" ]; then + febootstrap-run "$target" -- rm -f sbin/sln +fi + +if [ "$keep_ldconfig" != "yes" ]; then + febootstrap-run "$target" -- rm -f sbin/ldconfig + febootstrap-run "$target" -- rm -f etc/ld.so.cache + febootstrap-run "$target" -- rm -rf var/cache/ldconfig + febootstrap-run "$target" -- mkdir -p --mode=0755 var/cache/ldconfig +fi + +if [ "$pack_executables" = "yes" ]; then + # NB. Be careful to keep the same inode number, since fakeroot + # tracks files by inode number. + for path in $(find "$target" -type f -perm /111 | + xargs file | + grep executable | + awk -F: '{print $1}'); do + base=$(basename "$path") + cp "$path" "$tmpdir" + (cd "$tmpdir" && upx -q -q --best "$base") + cat "$tmpdir"/"$base" > "$path" + rm "$tmpdir"/"$base" + done +fi