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