+ed
[nethome.git] / src / rawhide-bootstrap
1 #! /bin/bash
2 # Bootstrap for: RawHide
3 # $Id$
4 # Latest:
5 #       http://cvs.jankratochvil.net/viewcvs/nethome/src/rawhide-bootstrap?rev=HEAD
6
7
8 uname_i=`uname -i|sed 's/^ppc64$/ppc/'`
9 RPMS_URL_BASE=http://armstrong.rhts.boston.redhat.com/distros/rawhide-$uname_i
10 wget -q -O - $RPMS_URL_BASE/GPL >/dev/null || \
11 RPMS_URL_BASE=http://sunsite.mff.cuni.cz/pub/fedora/development/$uname_i/os
12
13
14 if test $# != 1;then echo >&2 "Syntax: $0 <target-root-directory(DELETED!)>";exit 1;fi
15 ROOT="$1"
16 if test "${ROOT#/}" = "$ROOT";then echo >&2 "Absolute pathname required: $ROOT";exit 1;fi
17
18 cd /
19 umount $ROOT/proc
20 umount $ROOT/selinux
21 umount $ROOT/sys
22 set -ex
23
24 set +x;pkgs="`set -x;wget -q -O - $RPMS_URL_BASE/Fedora/RPMS/ | sed -n 's/^.*<a href="\([^/?][^/]*\)">.*$/\1/p'`";set -x
25 function pkg
26 {
27         for arch in `uname -m` $uname_i noarch;do
28                 r="`set +x;echo "$pkgs"|(set +e;grep -P '^\Q'"$1"'\E-[^-]+-[^-]+'".$arch.rpm"'$')`"
29                 if [ `echo "$r"|wc -l` -ge 2 ];then break;fi
30                 if [ -n "$r" ];then
31                         echo "$RPMS_URL_BASE/Fedora/RPMS/$r"
32                         if [ "$arch" != ppc64 ];then
33                                 return
34                         fi
35                 fi
36         done
37         echo >&2 "ERROR: $1"
38         echo >&2 "$r"
39         kill $$
40 }
41
42 KEY=/tmp/fedora-bootstrap-$$-key
43 rm -rf $KEY
44 trap 'rm -rf $KEY' EXIT
45 mkdir $KEY
46 cd $KEY
47 # wget(1) due to: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=167483
48 wget -q -O - `pkg fedora-release` >/dev/null
49 wget -q -O - `pkg fedora-release` | rpm2cpio | cpio -id
50
51 rm -rf $ROOT
52 mkdir -p $ROOT/{etc,dev,var/log,sys}
53 cp -p /etc/resolv.conf $ROOT/etc
54 awk '/^[ \t]*[^#]/ { if ($2 == "/" || $2 == "/sys" || $2 == "/proc") { print; }}' </etc/fstab >$ROOT/etc/fstab
55 if grep -q '^LABEL=' $ROOT/etc/fstab;then
56         awk <$ROOT/etc/fstab >$ROOT/etc/fstab2 '{ if ($2 == "/") $1="/dev/root"; }{ print; }'
57         mv -f $ROOT/etc/fstab2 $ROOT/etc/fstab
58 fi
59 echo 'none /selinux selinuxfs defaults 0 0' >>$ROOT/etc/fstab
60 cp -a /dev/{null,urandom,random} `awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' <$ROOT/etc/fstab` $ROOT/dev/
61 touch $ROOT/{etc/mtab,var/log/lastlog}
62 mount -tsysfs sysfs $ROOT/sys
63 rpm --root=$ROOT --initdb
64 rpm --root=$ROOT --import $KEY/etc/pki/rpm-gpg/RPM-GPG-KEY*
65 rm -rf $KEY
66 cd $RPMS
67 # For rpm(1) http:// downloads:
68 mkdir -p $ROOT/var/tmp
69 RPM=rpm
70 while read -r key val;do
71         if test -n "$val";then RPM="$RPM $key $val";fi
72         done <<EOH
73 --httpproxy `echo $http_proxy|sed -n 's#^[^/]*//\([^:/]*\).*$#\1#p'`
74 --httpport  `echo $http_proxy|sed -n 's#^[^/]*//[^:/]*:\([^/]*\).*$#\1#p'`
75  --ftpproxy `echo  $ftp_proxy|sed -n 's#^[^/]*//\([^:/]*\).*$#\1#p'`
76  --ftpport  `echo  $ftp_proxy|sed -n 's#^[^/]*//[^:/]*:\([^/]*\).*$#\1#p'`
77 EOH
78
79 # Workaround coreutils: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=199840
80 mkdir -p $ROOT/{bin,etc/rpm}
81 cp -p /bin/{cat,rm} $ROOT/bin/
82 cp -p /etc/rpm/platform $ROOT/etc/rpm/
83 cp -p /etc/rpm/macros $ROOT/etc/rpm/ || echo May be missing
84
85 # Prevent:
86 # matchpathcon(/var/log/lastlog) failed: No such file or directory
87 # error: %post(util-linux-2.13-0.33.x86_64) scriptlet failed, exit status 1
88 ln -s true $ROOT/bin/chcon
89
90 # update package: V:!grep ^`sed 's/-[^-]*-[^-]*$//'`'-[^-]*-[^-]*$' /tmp/43<cr>j
91
92 # rpm(8)
93 DOWNLOAD=/tmp/fedora-bootstrap-$$-download
94 rm -rf $DOWNLOAD
95 trap 'rm -rf $DOWNLOAD $KEY' EXIT
96 mkdir $DOWNLOAD
97 cd $DOWNLOAD
98 wget `set +x;while read -r line;do if [ -n "$line" ];then pkg $line;fi;done <<EOH
99 coreutils
100 rpm
101 bash
102 glibc
103 beecrypt
104 mktemp
105 libgcc
106 basesystem
107 filesystem
108 setup
109 glibc-common
110 popt
111 shadow-utils
112 pam
113 libselinux
114 sed
115 cracklib
116 db4
117 initscripts
118 kernel
119 sysklogd
120 util-linux
121 grep
122 gawk
123 libstdc++
124 glib2
125 module-init-tools
126 mkinitrd
127 net-tools
128 e2fsprogs
129 findutils
130 ncurses
131 ethtool
132 tzdata
133 pcre
134 gzip
135 lvm2
136 less
137 chkconfig
138 cpio
139 device-mapper
140 tar
141 readline
142 info
143 zlib
144 fedora-release
145 fedora-release-notes
146 cracklib-dicts
147 mingetty
148 iputils
149 rpm-libs
150 bzip2-libs
151 libacl
152 libtermcap
153 libattr
154 termcap
155 elfutils-libelf
156 psmisc
157 iproute
158 procps
159 SysVinit
160 libsepol
161 udev
162 MAKEDEV
163 usbutils
164 hwdata
165 wget
166 openssl
167 krb5-libs
168 audit-libs
169 audit
170 python
171 e2fsprogs-libs
172 dmraid
173 expat
174 neon
175 sqlite
176 libusb
177 gdbm
178 mcstrans
179 libcap
180 kpartx
181 $(if [ $uname_i = ppc ];then echo ppc64-utils;fi)
182 $(if [ $uname_i = ppc ];then echo yaboot     ;fi)
183 perl
184 binutils
185 hfsutils
186 tcl
187 nash
188 EOH
189 `
190 mkdir -p $ROOT/var/lock/rpm
191 mkdir -p $ROOT/{proc,selinux}
192 mount -n -t proc      none $ROOT/proc
193 mount -n -t selinuxfs none $ROOT/selinux
194 $RPM --root=$ROOT -i * 
195 rm -f *
196 cd
197 rm -rf $DOWNLOAD
198
199 # Do not install yum(8) just by 'rpm --root', later --rebuilddb would:
200 #       rpmdb: Program version 4.2 doesn't match environment version
201 # FIXME: Analyse and bugreport:
202 # On "http" installation AND using --httpproxy: CentOS-4.1 rpm-4.3.3-9_nonptl would crash:
203 #       warning: package yum = 2.2.1-1.centos4 was already added, replacing with yum <= 2.2.1-1.centos4
204 #       ...
205 #       error: Failed dependencies:
206 #               /usr/bin/python is needed by yum-2.2.1-1.centos4.noarch
207 #               ...
208 # while with FC4 rpm-4.4.1-22 it would work fine (it would just corrupt 'rpmdb' here).
209 # yum(8)
210 lines="`cat <<EOH
211 yum
212 rpm-python
213 libxml2-python
214 gmp
215 libxml2
216 elfutils
217 elfutils-libs
218 python-elementtree
219 python-sqlite
220 python-urlgrabber
221 yum-metadata-parser
222 EOH
223 `"
224 chroot $ROOT /usr/bin/wget `set +x;for line in $lines;do pkg $line;done`
225 $RPM --root=$ROOT -i `set +x;for line in $lines;do for i in $(pkg $line|xargs -n1 basename);do echo $ROOT/$i;done;done`
226 chroot $ROOT /bin/rm -f `set +x;for line in $lines;do pkg $line|xargs -n1 basename;done`
227
228 # Reported as Bug 206524, occurs on ppc, possibly not a bug:
229 rm -f $ROOT/var/lib/rpm/__db.*
230
231 chroot $ROOT /bin/rpm --rebuilddb
232
233 for repo in $ROOT/etc/yum.repos.d/*.repo;do
234         mv -f $repo $repo-orig
235         sed -e 's/^mirrorlist=/#&/' -e 's/^#\(baseurl=\)/\1/' \
236                 -e 's#^\(baseurl=\)http://download.fedora.redhat.com/pub/fedora/linux/core/development/$basearch/os/$#\1'"$RPMS_URL_BASE"'#' \
237                 <$repo-orig >$repo
238 done
239
240 chroot $ROOT /usr/bin/yum -y update
241
242 # For: kernel-2.6.9-11.EL.src.rpm
243 chroot $ROOT /usr/bin/yum -y install `cat <<EOH
244 rpm-build
245 bzip2
246 m4
247 make
248 gnupg
249 kernel-utils
250 gcc
251 redhat-rpm-config
252 diffutils
253 gdb
254 EOH
255 `
256
257 umount $ROOT/proc
258 umount $ROOT/selinux
259 umount $ROOT/sys
260
261 echo OK