Added a logfile from F-10 install
[febootstrap.git] / febootstrap-minimize.sh
1 #!/bin/bash -
2 # febootstrap minimize
3 # (C) Copyright 2009 Red Hat Inc.
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 #
19 # Written by Richard W.M. Jones <rjones@redhat.com>
20
21 TEMP=`getopt \
22         -o '' \
23         --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 \
24         -n febootstrap-minimize -- "$@"`
25 if [ $? != 0 ]; then
26     echo "febootstrap-minimize: problem parsing the command line arguments"
27     exit 1
28 fi
29 eval set -- "$TEMP"
30
31 set_all ()
32 {
33   keep_locales=no
34      keep_docs=no
35  keep_cracklib=no
36      keep_i18n=no
37  keep_zoneinfo=no
38     keep_rpmdb=no
39 keep_yum_cache=no
40  keep_services=no
41       keep_sln=no
42  keep_ldconfig=no
43 }
44
45 set_none ()
46 {
47   keep_locales=yes
48      keep_docs=yes
49  keep_cracklib=yes
50      keep_i18n=yes
51  keep_zoneinfo=yes
52     keep_rpmdb=yes
53 keep_yum_cache=yes
54  keep_services=yes
55       keep_sln=yes
56  keep_ldconfig=yes
57 }
58
59 set_all
60 pack_executables=no
61
62 usage ()
63 {
64     echo "Usage: febootstrap-minimize [--options] DIR"
65     echo "Please read febootstrap-minimize(8) man page for more information."
66 }
67
68 while true; do
69     case "$1" in
70         --all)
71             set_all
72             shift;;
73         --none)
74             set_none
75             shift;;
76         --keep-locales)
77             keep_locales=yes
78             shift;;
79         --drop-locales)
80             keep_locales=no
81             shift;;
82         --keep-docs)
83             keep_docs=yes
84             shift;;
85         --drop-docs)
86             keep_docs=no
87             shift;;
88         --keep-cracklib)
89             keep_cracklib=yes
90             shift;;
91         --drop-cracklib)
92             keep_cracklib=no
93             shift;;
94         --keep-i18n)
95             keep_i18n=yes
96             shift;;
97         --drop-i18n)
98             keep_i18n=no
99             shift;;
100         --keep-zoneinfo)
101             keep_zoneinfo=yes
102             shift;;
103         --drop-zoneinfo)
104             keep_zoneinfo=no
105             shift;;
106         --keep-rpmdb)
107             keep_rpmdb=yes
108             shift;;
109         --drop-rpmdb)
110             keep_rpmdb=no
111             shift;;
112         --keep-yum-cache)
113             keep_yum_cache=yes
114             shift;;
115         --drop-yum-cache)
116             keep_yum_cache=no
117             shift;;
118         --keep-services)
119             keep_services=yes
120             shift;;
121         --drop-services)
122             keep_services=no
123             shift;;
124         --keep-sln)
125             keep_sln=yes
126             shift;;
127         --drop-sln)
128             keep_sln=no
129             shift;;
130         --keep-ldconfig)
131             keep_ldconfig=yes
132             shift;;
133         --drop-ldconfig)
134             keep_ldconfig=no
135             shift;;
136         --no-pack-executables)
137             pack_executables=no
138             shift;;
139         --pack-executables)
140             pack_executables=yes
141             shift;;
142         --help)
143             usage
144             exit 0;;
145         --)
146             shift
147             break;;
148         *)
149             echo "Internal error!"
150             exit 1;;
151     esac
152 done
153
154 if [ $# -lt 1 ]; then
155     usage
156     exit 1
157 fi
158
159 target="$1"
160
161 if [ ! -d "$target" ]; then
162     echo "febootstrap-minimize: $target: target directory not found"
163     exit 1
164 fi
165
166 # Create a temporary directory, make sure it gets cleaned up at the end.
167 tmpdir=$(mktemp -d)
168 remove_tmpdir ()
169 {
170   status=$?
171   rm -rf "$tmpdir" && exit $status
172 }
173 trap remove_tmpdir EXIT
174
175 #----------------------------------------------------------------------
176
177 if [ "$keep_locales" != "yes" ]; then
178     rm -f "$target"/usr/lib/locale/*
179     rm -rf "$target"/usr/share/locale
180     rm -rf "$target"/usr/lib*/gconv
181     rm -f "$target"/usr/bin/localedef
182     rm -f "$target"/usr/sbin/build-locale-archive
183 fi
184
185 if [ "$keep_docs" != "yes" ]; then
186     rm -rf "$target"/usr/share/man
187     rm -rf "$target"/usr/share/doc
188     rm -rf "$target"/usr/share/info
189     rm -rf "$target"/usr/share/gnome/help
190 fi
191
192 if [ "$keep_cracklib" != "yes" ]; then
193     rm -rf "$target"/usr/share/cracklib
194 fi
195
196 if [ "$keep_i18n" != "yes" ]; then
197     rm -rf "$target"/usr/share/i18n
198 fi
199
200 if [ "$keep_zoneinfo" != "yes" ]; then
201     mv "$target"/usr/share/zoneinfo/{UCT,UTC,Universal,Zulu,GMT*,*.tab} \
202       "$target"
203     rm -rf "$target"/usr/share/zoneinfo/*
204     mv "$target"/{UCT,UTC,Universal,Zulu,GMT*,*.tab} \
205       "$target"/usr/share/zoneinfo/
206 fi
207
208 if [ "$keep_rpmdb" != "yes" ]; then
209     rm -rf "$target"/var/lib/rpm/*
210 fi
211
212 if [ "$keep_yum_cache" != "yes" ]; then
213     rm -rf "$target"/var/cache/yum/*
214 fi
215
216 if [ "$keep_services" != "yes" ]; then
217     # NB: Overwrite the same file so that we have the same inode,
218     # since fakeroot tracks files by inode number.
219     cat > "$target"/etc/services <<'__EOF__'
220 tcpmux 1/tcp
221 tcpmux 1/udp
222 echo 7/tcp
223 echo 7/udp
224 discard 9/tcp sink null
225 discard 9/udp sink null
226 ftp 21/tcp
227 ftp 21/udp fsp fspd
228 ssh 22/tcp
229 ssh 22/udp
230 telnet 23/tcp
231 telnet 23/udp
232 smtp 25/tcp mail
233 smtp 25/udp mail
234 time 37/tcp timserver
235 time 37/udp timserver
236 nameserver 42/tcp name
237 nameserver 42/udp name
238 domain 53/tcp
239 domain 53/udp
240 bootps 67/tcp
241 bootps 67/udp
242 bootpc 68/tcp dhcpc
243 bootpc 68/udp dhcpc
244 tftp 69/tcp
245 tftp 69/udp
246 finger 79/tcp
247 finger 79/udp
248 http 80/tcp www www-http
249 http 80/udp www www-http
250 http 80/sctp
251 kerberos 88/tcp kerberos5 krb5
252 kerberos 88/udp kerberos5 krb5
253 pop3 110/tcp pop-3
254 pop3 110/udp pop-3
255 sunrpc 111/tcp portmapper rpcbind
256 sunrpc 111/udp portmapper rpcbind
257 auth 113/tcp authentication tap ident
258 auth 113/udp authentication tap ident
259 ntp 123/tcp
260 ntp 123/udp
261 imap 143/tcp imap2
262 imap 143/udp imap2
263 snmp 161/tcp
264 snmp 161/udp
265 snmptrap 162/tcp
266 snmptrap 162/udp snmp-trap
267 __EOF__
268 fi
269
270 if [ "$keep_sln" != "yes" ]; then
271     rm -f "$target"/sbin/sln
272 fi
273
274 if [ "$keep_ldconfig" != "yes" ]; then
275     rm -f "$target"/sbin/ldconfig
276     rm -f "$target"/etc/ld.so.cache
277     rm -rf "$target"/var/cache/ldconfig/*
278 fi
279
280 if [ "$pack_executables" = "yes" ]; then
281     # NB. Be careful to keep the same inode number, since fakeroot
282     # tracks files by inode number.
283     for path in $(find "$target" -type f -perm /111 |
284                   xargs file |
285                   grep executable |
286                   awk -F: '{print $1}'); do
287         base=$(basename "$path")
288         cp "$path" "$tmpdir"
289         (cd "$tmpdir" && upx -q -q --best "$base")
290         cat "$tmpdir"/"$base" > "$path"
291         rm "$tmpdir"/"$base"
292     done
293 fi