Supermin appliance.
[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 unset CDPATH
22
23 TEMP=`getopt \
24         -o '' \
25         --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 \
26         -n febootstrap-minimize -- "$@"`
27 if [ $? != 0 ]; then
28     echo "febootstrap-minimize: problem parsing the command line arguments"
29     exit 1
30 fi
31 eval set -- "$TEMP"
32
33 set_all ()
34 {
35   keep_locales=no
36      keep_docs=no
37  keep_cracklib=no
38      keep_i18n=no
39  keep_zoneinfo=no
40     keep_rpmdb=no
41 keep_yum_cache=no
42  keep_services=no
43       keep_sln=no
44  keep_ldconfig=no
45 }
46
47 set_none ()
48 {
49   keep_locales=yes
50      keep_docs=yes
51  keep_cracklib=yes
52      keep_i18n=yes
53  keep_zoneinfo=yes
54     keep_rpmdb=yes
55 keep_yum_cache=yes
56  keep_services=yes
57       keep_sln=yes
58  keep_ldconfig=yes
59 }
60
61 set_all
62
63 usage ()
64 {
65     echo "Usage: febootstrap-minimize [--options] DIR"
66     echo "Please read febootstrap-minimize(8) man page for more information."
67 }
68
69 while true; do
70     case "$1" in
71         --all)
72             set_all
73             shift;;
74         --none)
75             set_none
76             shift;;
77         --keep-locales)
78             keep_locales=yes
79             shift;;
80         --drop-locales)
81             keep_locales=no
82             shift;;
83         --keep-docs)
84             keep_docs=yes
85             shift;;
86         --drop-docs)
87             keep_docs=no
88             shift;;
89         --keep-cracklib)
90             keep_cracklib=yes
91             shift;;
92         --drop-cracklib)
93             keep_cracklib=no
94             shift;;
95         --keep-i18n)
96             keep_i18n=yes
97             shift;;
98         --drop-i18n)
99             keep_i18n=no
100             shift;;
101         --keep-zoneinfo)
102             keep_zoneinfo=yes
103             shift;;
104         --drop-zoneinfo)
105             keep_zoneinfo=no
106             shift;;
107         --keep-rpmdb)
108             keep_rpmdb=yes
109             shift;;
110         --drop-rpmdb)
111             keep_rpmdb=no
112             shift;;
113         --keep-yum-cache)
114             keep_yum_cache=yes
115             shift;;
116         --drop-yum-cache)
117             keep_yum_cache=no
118             shift;;
119         --keep-services)
120             keep_services=yes
121             shift;;
122         --drop-services)
123             keep_services=no
124             shift;;
125         --keep-sln)
126             keep_sln=yes
127             shift;;
128         --drop-sln)
129             keep_sln=no
130             shift;;
131         --keep-ldconfig)
132             keep_ldconfig=yes
133             shift;;
134         --drop-ldconfig)
135             keep_ldconfig=no
136             shift;;
137         --help)
138             usage
139             exit 0;;
140         --)
141             shift
142             break;;
143         *)
144             echo "Internal error!"
145             exit 1;;
146     esac
147 done
148
149 if [ $# -lt 1 ]; then
150     usage
151     exit 1
152 fi
153
154 target="$1"
155
156 if [ ! -d "$target" ]; then
157     echo "febootstrap-minimize: $target: target directory not found"
158     exit 1
159 fi
160
161 # Create a temporary directory, make sure it gets cleaned up at the end.
162 tmpdir=$(mktemp -d)
163 remove_tmpdir ()
164 {
165   status=$?
166   rm -rf "$tmpdir" && exit $status
167 }
168 trap remove_tmpdir EXIT
169
170 #----------------------------------------------------------------------
171
172 # ***NOTE*** Wildcards cannot be passed to febootstrap-run.
173
174 if [ "$keep_locales" != "yes" ]; then
175     febootstrap-run "$target" -- rm -rf usr/lib/locale
176     febootstrap-run "$target" -- rm -rf usr/share/locale
177     febootstrap-run "$target" -- rm -rf usr/lib/gconv usr/lib64/gconv
178     febootstrap-run "$target" -- rm -f usr/bin/localedef
179     febootstrap-run "$target" -- rm -f usr/sbin/build-locale-archive
180 fi
181
182 if [ "$keep_docs" != "yes" ]; then
183     febootstrap-run "$target" -- rm -rf usr/share/man
184     febootstrap-run "$target" -- rm -rf usr/share/doc
185     febootstrap-run "$target" -- rm -rf usr/share/info
186     febootstrap-run "$target" -- rm -rf usr/share/gnome/help
187 fi
188
189 if [ "$keep_cracklib" != "yes" ]; then
190     febootstrap-run "$target" -- rm -rf usr/share/cracklib
191 fi
192
193 if [ "$keep_i18n" != "yes" ]; then
194     febootstrap-run "$target" -- rm -rf usr/share/i18n
195 fi
196
197 if [ "$keep_zoneinfo" != "yes" ]; then
198     mv "$target"/usr/share/zoneinfo/{UCT,UTC,Universal,Zulu,GMT*,*.tab} \
199       "$target"
200     febootstrap-run "$target" -- rm -rf usr/share/zoneinfo
201     febootstrap-run "$target" -- mkdir -p --mode=0755 usr/share/zoneinfo
202     mv "$target"/{UCT,UTC,Universal,Zulu,GMT*,*.tab} \
203       "$target"/usr/share/zoneinfo/
204 fi
205
206 if [ "$keep_rpmdb" != "yes" ]; then
207     febootstrap-run "$target" -- rm -rf var/lib/rpm
208     febootstrap-run "$target" -- mkdir -p --mode=0755 var/lib/rpm
209     febootstrap-run "$target" -- rm -rf var/lib/yum
210     febootstrap-run "$target" -- mkdir -p --mode=0755 var/lib/yum
211 fi
212
213 if [ "$keep_yum_cache" != "yes" ]; then
214     febootstrap-run "$target" -- rm -rf var/cache/yum
215     febootstrap-run "$target" -- mkdir -p --mode=0755 var/cache/yum
216 fi
217
218 if [ "$keep_services" != "yes" ]; then
219     # NB: Overwrite the same file so that we have the same inode,
220     # since fakeroot tracks files by inode number.
221     cat > "$target"/etc/services <<'__EOF__'
222 tcpmux 1/tcp
223 tcpmux 1/udp
224 echo 7/tcp
225 echo 7/udp
226 discard 9/tcp sink null
227 discard 9/udp sink null
228 ftp 21/tcp
229 ftp 21/udp fsp fspd
230 ssh 22/tcp
231 ssh 22/udp
232 telnet 23/tcp
233 telnet 23/udp
234 smtp 25/tcp mail
235 smtp 25/udp mail
236 time 37/tcp timserver
237 time 37/udp timserver
238 nameserver 42/tcp name
239 nameserver 42/udp name
240 domain 53/tcp
241 domain 53/udp
242 bootps 67/tcp
243 bootps 67/udp
244 bootpc 68/tcp dhcpc
245 bootpc 68/udp dhcpc
246 tftp 69/tcp
247 tftp 69/udp
248 finger 79/tcp
249 finger 79/udp
250 http 80/tcp www www-http
251 http 80/udp www www-http
252 http 80/sctp
253 kerberos 88/tcp kerberos5 krb5
254 kerberos 88/udp kerberos5 krb5
255 pop3 110/tcp pop-3
256 pop3 110/udp pop-3
257 sunrpc 111/tcp portmapper rpcbind
258 sunrpc 111/udp portmapper rpcbind
259 auth 113/tcp authentication tap ident
260 auth 113/udp authentication tap ident
261 ntp 123/tcp
262 ntp 123/udp
263 imap 143/tcp imap2
264 imap 143/udp imap2
265 snmp 161/tcp
266 snmp 161/udp
267 snmptrap 162/tcp
268 snmptrap 162/udp snmp-trap
269 __EOF__
270 fi
271
272 if [ "$keep_sln" != "yes" ]; then
273     febootstrap-run "$target" -- rm -f sbin/sln
274 fi
275
276 if [ "$keep_ldconfig" != "yes" ]; then
277     febootstrap-run "$target" -- rm -f sbin/ldconfig
278     febootstrap-run "$target" -- rm -f etc/ld.so.cache
279     febootstrap-run "$target" -- rm -rf var/cache/ldconfig
280     febootstrap-run "$target" -- mkdir -p --mode=0755 var/cache/ldconfig
281 fi