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