]> TLD Linux GIT Repositories - TLD.git/blob - pld-builder.new/admin/install-chroot.sh
937b877a6da6682403dcc2db5651328f8434cf21
[TLD.git] / pld-builder.new / admin / install-chroot.sh
1 #!/bin/sh
2
3 DIST="th"
4 DISTTAG="PLD 3.0 (Th)"
5
6 die () {
7   echo "$0: $*" 1>&2
8   cat 1>&2 <<EOF
9 USAGE: $0 name1=val2 name2=val2 ...
10
11 Variables:
12   chroot_type=src or chroot_type=bin     (required)
13   chroot_dir=/path/to/chroot             (required)
14   arch=i386                              (required)
15   git_server=git://<host>/<project>      (required in src builder)
16   git_user=<name>                        (required in src builder)
17   builder_uid=2000                       (optional, uid of builder user 
18                                           in chroot; defaults to current uid)
19 EOF
20   exit 1
21 }
22
23 default_config () {
24   builder_pkgs="rpm-build poldek pwdutils net-tools which rpm-perlprov rpm-php-pearprov rpm-pythonprov bash vim"
25   builder_uid=`id -u`
26   dist_url="ftp://ftp.$DIST.pld-linux.org"
27
28   case "$chroot_type" in
29   src )
30     builder_arch_pkgs="wget gawk git-core"
31     ;;
32   bin )
33     builder_arch_pkgs="mount"
34     ;;
35   esac
36 }
37
38 check_conf () {
39   test "$chroot_dir" || die "no chroot_dir"
40   test "$arch" || die "no arch"
41   test "$dist_url" || die "no dist_url"
42   
43   case "$chroot_type" in
44   src )
45     test "$git_server" || die "no git_server"
46     test "$git_user" || die "no git_user"
47     ;;
48   bin )
49     ;;
50   * )
51     die "evil chroot_type: $chroot_type"
52     ;;
53   esac
54 }
55
56 poldek_src () {
57   if test "$1" ; then
58       cat <<EOF
59 [source]
60 name=local
61 type=pndir
62 path=/spools/ready
63 pri=1
64 EOF
65   fi
66   cat <<EOF
67 [source]
68 name=main
69 type=pndir
70 path=$dist_url/dists/$DIST/PLD/$arch/RPMS/
71 pri=6
72
73 [source]
74 name=main
75 type=pndir
76 path=$dist_url/dists/$DIST/PLD/noarch/RPMS/
77 pri=6
78
79 EOF
80 }
81
82 common_poldek_opt () {
83   cat <<EOF
84 [global]
85 particle_install = no
86 greedy = yes
87 rpmdef = _excludedocs 1
88 EOF
89 }
90
91 chr() {
92   sudo chroot $chroot_dir su - root -c "$*"
93 }
94
95 chb() {
96   sudo chroot $chroot_dir su - builder -c "$*"
97 }
98
99 install_SPECS_builder () {
100   chr "mknod /dev/random -m 644 c 1 8"
101   chr "mknod /dev/urandom -m 644 c 1 9"
102   cat >install-specs <<EOF
103 set -x
104 rm -rf rpm
105 mkdir rpm
106 cd rpm
107 git clone $git_server/rpm-build-tools rpm-build-tools
108 ./rpm-build-tools/builder.sh --init-rpm-dir
109 echo "%packager       PLD bug tracking system ( http://bugs.pld-linux.org/ )">~/.rpmmacros
110 echo "%vendor         PLD">>~/.rpmmacros
111 echo "%distribution   $DISTTAG">>~/.rpmmacros
112 git config --global user.name $git_user
113 git config --global user.email ${git_user}@pld-linux.org
114 EOF
115   chb "sh" < install-specs
116   rm install-specs
117   echo "WARNING: Do not forget to install ssh keys to access git repo"
118 }
119
120 install_build_tree () {
121   cat >install-bt <<EOF
122 set -x
123 rm -rf rpm
124 mkdir rpm
125 cd rpm
126 mkdir SPECS SOURCES SRPMS RPMS BUILD
127 echo "%packager       PLD bug tracking system ( http://bugs.pld-linux.org/ )">~/.rpmmacros
128 echo "%vendor         PLD">>~/.rpmmacros
129 echo "%distribution   $DISTTAG">>~/.rpmmacros
130 EOF
131   chb "sh" < install-bt
132   rm install-bt
133 }
134
135
136
137
138 eval "$*" || usage
139 default_config
140 eval "$*"
141 check_conf
142
143 rm -rf tmp-chroot
144 mkdir tmp-chroot
145 cd tmp-chroot
146
147 cat >poldek.conf <<EOF
148 $(poldek_src)
149 $(common_poldek_opt)
150 cachedir = $chroot_dir/spools/poldek
151 keep_downloads = no
152 EOF
153
154 cat > install-$chroot_name.sh <<EOF
155 #!/bin/sh
156 set -x
157 cd $PWD
158 rm -rf $chroot_dir
159 mkdir -p $chroot_dir/spools/poldek
160 mkdir $chroot_dir/dev
161 mknod $chroot_dir/dev/null -m 666 c 1 3
162 rpm --root $chroot_dir --initdb
163 poldek --conf poldek.conf --root $chroot_dir -i\
164         $builder_pkgs $builder_arch_pkgs
165 EOF
166 chmod 755 install-$chroot_name.sh
167
168 echo "About to remove '$chroot_dir' and install it again, using"
169 echo "install-$chroot_name.sh:"
170 echo 
171 cat install-$chroot_name.sh
172 echo 
173 cat <<EOF
174 what to do?
175   r) the script was already ran; continue,
176   s) run it using sudo, 
177   a) abort"
178 EOF
179 echo -n "[r/s/a]: "
180 read ans
181 case "$ans" in
182   r )
183     ;;
184   s )
185     sudo ./install-$chroot_name.sh
186     ;;
187   * )
188     echo "bye"
189     exit 1
190 esac
191
192 chr "ldconfig"
193
194 echo "OK"
195 echo "installing conf..."
196 cat >poldek.conf <<EOF
197 $(poldek_src local)
198 $(common_poldek_opt)
199 cachedir = /spools/poldek
200 keep_downloads = no
201 EOF
202
203 chr "useradd -u "$builder_uid" -c 'PLD $chroot_name builder' -d /home/users/builder -m -g users -s /bin/sh builder"
204 chr "cat > /etc/resolv.conf" < /etc/resolv.conf
205 chr "cat > /etc/mtab" < /dev/null
206 chr "mkdir -p /spools/ready/" < /dev/null
207 chr "mkdir -p /spools/poldek/" < /dev/null
208 chr "sed -e 's,^\(root:.*\)/bin/sh$,\1/bin/bash,' -i~ /etc/passwd"
209
210
211 case $chroot_type in
212   src )
213     install_SPECS_builder
214     ;;
215   bin )
216     install_build_tree
217     ;;
218 esac