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