]> TLD Linux GIT Repositories - TLD.git/blobdiff - pld-builder.new/admin/install-chroot.sh
- from https://github.com/pld-linux/pld-builder.new
[TLD.git] / pld-builder.new / admin / install-chroot.sh
diff --git a/pld-builder.new/admin/install-chroot.sh b/pld-builder.new/admin/install-chroot.sh
new file mode 100755 (executable)
index 0000000..937b877
--- /dev/null
@@ -0,0 +1,218 @@
+#!/bin/sh
+
+DIST="th"
+DISTTAG="PLD 3.0 (Th)"
+
+die () {
+  echo "$0: $*" 1>&2
+  cat 1>&2 <<EOF
+USAGE: $0 name1=val2 name2=val2 ...
+
+Variables:
+  chroot_type=src or chroot_type=bin    (required)
+  chroot_dir=/path/to/chroot            (required)
+  arch=i386                             (required)
+  git_server=git://<host>/<project>      (required in src builder)
+  git_user=<name>                        (required in src builder)
+  builder_uid=2000                      (optional, uid of builder user 
+                                         in chroot; defaults to current uid)
+EOF
+  exit 1
+}
+
+default_config () {
+  builder_pkgs="rpm-build poldek pwdutils net-tools which rpm-perlprov rpm-php-pearprov rpm-pythonprov bash vim"
+  builder_uid=`id -u`
+  dist_url="ftp://ftp.$DIST.pld-linux.org"
+
+  case "$chroot_type" in
+  src )
+    builder_arch_pkgs="wget gawk git-core"
+    ;;
+  bin )
+    builder_arch_pkgs="mount"
+    ;;
+  esac
+}
+
+check_conf () {
+  test "$chroot_dir" || die "no chroot_dir"
+  test "$arch" || die "no arch"
+  test "$dist_url" || die "no dist_url"
+  
+  case "$chroot_type" in
+  src )
+    test "$git_server" || die "no git_server"
+    test "$git_user" || die "no git_user"
+    ;;
+  bin )
+    ;;
+  * )
+    die "evil chroot_type: $chroot_type"
+    ;;
+  esac
+}
+
+poldek_src () {
+  if test "$1" ; then
+      cat <<EOF
+[source]
+name=local
+type=pndir
+path=/spools/ready
+pri=1
+EOF
+  fi
+  cat <<EOF
+[source]
+name=main
+type=pndir
+path=$dist_url/dists/$DIST/PLD/$arch/RPMS/
+pri=6
+
+[source]
+name=main
+type=pndir
+path=$dist_url/dists/$DIST/PLD/noarch/RPMS/
+pri=6
+
+EOF
+}
+
+common_poldek_opt () {
+  cat <<EOF
+[global]
+particle_install = no
+greedy = yes
+rpmdef = _excludedocs 1
+EOF
+}
+
+chr() {
+  sudo chroot $chroot_dir su - root -c "$*"
+}
+
+chb() {
+  sudo chroot $chroot_dir su - builder -c "$*"
+}
+
+install_SPECS_builder () {
+  chr "mknod /dev/random -m 644 c 1 8"
+  chr "mknod /dev/urandom -m 644 c 1 9"
+  cat >install-specs <<EOF
+set -x
+rm -rf rpm
+mkdir rpm
+cd rpm
+git clone $git_server/rpm-build-tools rpm-build-tools
+./rpm-build-tools/builder.sh --init-rpm-dir
+echo "%packager       PLD bug tracking system ( http://bugs.pld-linux.org/ )">~/.rpmmacros
+echo "%vendor         PLD">>~/.rpmmacros
+echo "%distribution   $DISTTAG">>~/.rpmmacros
+git config --global user.name $git_user
+git config --global user.email ${git_user}@pld-linux.org
+EOF
+  chb "sh" < install-specs
+  rm install-specs
+  echo "WARNING: Do not forget to install ssh keys to access git repo"
+}
+
+install_build_tree () {
+  cat >install-bt <<EOF
+set -x
+rm -rf rpm
+mkdir rpm
+cd rpm
+mkdir SPECS SOURCES SRPMS RPMS BUILD
+echo "%packager       PLD bug tracking system ( http://bugs.pld-linux.org/ )">~/.rpmmacros
+echo "%vendor         PLD">>~/.rpmmacros
+echo "%distribution   $DISTTAG">>~/.rpmmacros
+EOF
+  chb "sh" < install-bt
+  rm install-bt
+}
+
+
+
+
+eval "$*" || usage
+default_config
+eval "$*"
+check_conf
+
+rm -rf tmp-chroot
+mkdir tmp-chroot
+cd tmp-chroot
+
+cat >poldek.conf <<EOF
+$(poldek_src)
+$(common_poldek_opt)
+cachedir = $chroot_dir/spools/poldek
+keep_downloads = no
+EOF
+
+cat > install-$chroot_name.sh <<EOF
+#!/bin/sh
+set -x
+cd $PWD
+rm -rf $chroot_dir
+mkdir -p $chroot_dir/spools/poldek
+mkdir $chroot_dir/dev
+mknod $chroot_dir/dev/null -m 666 c 1 3
+rpm --root $chroot_dir --initdb
+poldek --conf poldek.conf --root $chroot_dir -i\
+       $builder_pkgs $builder_arch_pkgs
+EOF
+chmod 755 install-$chroot_name.sh
+
+echo "About to remove '$chroot_dir' and install it again, using"
+echo "install-$chroot_name.sh:"
+echo 
+cat install-$chroot_name.sh
+echo 
+cat <<EOF
+what to do?
+  r) the script was already ran; continue,
+  s) run it using sudo, 
+  a) abort"
+EOF
+echo -n "[r/s/a]: "
+read ans
+case "$ans" in
+  r )
+    ;;
+  s )
+    sudo ./install-$chroot_name.sh
+    ;;
+  * )
+    echo "bye"
+    exit 1
+esac
+
+chr "ldconfig"
+
+echo "OK"
+echo "installing conf..."
+cat >poldek.conf <<EOF
+$(poldek_src local)
+$(common_poldek_opt)
+cachedir = /spools/poldek
+keep_downloads = no
+EOF
+
+chr "useradd -u "$builder_uid" -c 'PLD $chroot_name builder' -d /home/users/builder -m -g users -s /bin/sh builder"
+chr "cat > /etc/resolv.conf" < /etc/resolv.conf
+chr "cat > /etc/mtab" < /dev/null
+chr "mkdir -p /spools/ready/" < /dev/null
+chr "mkdir -p /spools/poldek/" < /dev/null
+chr "sed -e 's,^\(root:.*\)/bin/sh$,\1/bin/bash,' -i~ /etc/passwd"
+
+
+case $chroot_type in
+  src )
+    install_SPECS_builder
+    ;;
+  bin )
+    install_build_tree
+    ;;
+esac