#! /bin/bash # mk-basefile, create basefiles for some distributions # # Thomas Lange, Uni Koeln, 2011-2016 # based on the Makefile implementation of Michael Goetze # Supported distributions (each i386/amd64): # Debian GNU/Linux # Ubuntu 14.04/16.04 # CentOS 5/6/7 # Scientific Linux Cern 5/6 # # Packages you might want to install to use this command: # debootstrap, rinse, xz-utils # Define your local mirros here # For the first stage, set the CentOS/SLC mirror in /etc/rinse/rinse.conf MIRROR_DEBIAN=http://http.us.debian.org/debian MIRROR_UBUNTU=http://mirror.netcologne.de/ubuntu/ MIRROR_TRISQUEL=http://mirror.fsf.org/trisquel/ MIRROR_CENTOS=http://mirror.netcologne.de/ EXCLUDE_SQUEEZE=isc-dhcp-client,isc-dhcp-common,info,tasksel,tasksel-data EXCLUDE_WHEEZY=info,tasksel,tasksel-data EXCLUDE_JESSIE=tasksel,tasksel-data EXCLUDE_STRETCH=tasksel,tasksel-data EXCLUDE_BELENOS=dhcp3-client,dhcp3-common,info EXCLUDE_TRUSTY=dhcp3-client,dhcp3-common,info EXCLUDE_XENIAL=tasksel,tasksel-data INCLUDE_DEBIAN=aptitude setarch() { l32= if [ X$1 = Xi386 ]; then l32=linux32 fi } check() { if [ `id -u` != 0 ]; then echo "You must be root to create chroots." exit 1 fi mknod $xtmp/test-dev-null c 1 3 if [ $? -eq 1 ]; then echo "Cannot create device files on $xtmp, aborting." echo "Perhaps this directory is mounted with option nodev." rm -rf $xtmp exit 1 fi echo test > $xtmp/test-dev-null if [ $? -eq 1 ]; then echo "Cannot create device files on $xtmp, aborting." echo "Perhaps this directory is mounted with option nodev." rm -rf $xtmp exit 1 fi rm -f $xtmp/test-dev-null } mkpost-centos() { [ -z "$MIRROR_CENTOS" ] && return cat < $xtmp/post #! /bin/sh mkdir -p $xtmp/etc/yum.repos.d/orig cp -p $xtmp/etc/yum.repos.d/*.repo $xtmp/etc/yum.repos.d/orig perl -pi -e 's,mirrorlist=,#mirrorlist=,; s,#baseurl=http://mirror.centos.org,baseurl=$MIRROR_CENTOS,;' $xtmp/etc/yum.repos.d/CentOS-Base.repo EOM chmod 555 $xtmp/post } mkpost-slc() { ver=$1 [ -z "$MIRROR_SLC" ] && return cat < $xtmp/post #! /bin/sh mkdir -p $xtmp/etc/yum.repos.d/orig cp -p $xtmp/etc/yum.repos.d/*.repo $xtmp/etc/yum.repos.d/orig perl -pi -e 's,baseurl=http://linuxsoft.cern.ch,baseurl=$MIRROR_SLC,;' $xtmp/etc/yum.repos.d/slc$ver-os.repo perl -pi -e 's,baseurl=http://linuxsoft.cern.ch,baseurl=$MIRROR_SLC,;' $xtmp/etc/yum.repos.d/slc$ver-updates.repo EOM chmod 555 $xtmp/post } cleanup-deb() { chroot $xtmp aptitude clean rm -f $xtmp/etc/hostname $xtmp/etc/resolv.conf $xtmp/etc/machine-id rm $xtmp/var/lib/apt/lists/*_* rm -f $xtmp/etc/udev/rules.d/70-persistent-net.rules } cleanup-rinse() { # check if chroot works echo "Installed packages in chroot:" chroot $xtmp rpm -qa|sort echo -n "CHROOT rpm -qa: " chroot $xtmp rpm -qa|wc -l rm -f $xtmp/etc/resolv.conf $xtmp/post if [ -d $xtmp/etc/yum.repos.d/orig ]; then mv $xtmp/etc/yum.repos.d/orig/* $xtmp/etc/yum.repos.d/ rm -rf $xtmp/etc/yum.repos.d/orig fi } tarit() { tar $attributes --one-file-system -C $xtmp -cf - . | $zip > $target.$ext } centos() { local arch=$1 local vers=$2 local domain=$(domainname) check setarch $arch mkpost-centos $l32 rinse --directory $xtmp --distribution centos-$vers --arch $arch --before-post-install $xtmp/post domainname $domain # workaround for #613377 cleanup-rinse tarit } slc() { local arch=$1 local vers=$2 check setarch $arch mkpost-slc $vers $l32 rinse --directory $xtmp --distribution slc-$vers --arch $arch --before-post-install $xtmp/post cleanup-rinse tarit } debgeneric() { local DIST=$1 shift local mirror=$1 if [[ $DIST =~ 64 ]]; then arch=amd64 else arch=i386 fi DIST=${DIST%%??} dist=${DIST,,} local exc="EXCLUDE_$DIST" check debootstrap --arch $arch --exclude=${!exc} --include=${INCLUDE_DEBIAN} $dist $xtmp $mirror cleanup-deb tarit } prtdists() { echo "Available: CENTOS5_32 CENTOS5_64 CENTOS6_32 CENTOS6_64 CENTOS7_32 CENTOS7_64 SLC5_32 SLC5_64 SLC6_32 SLC6_64 SLC7_64 TRUSTY32 TRUSTY64 XENIAL32 XENIAL64 SQUEEZE32 SQUEEZE64 WHEEZY32 WHEEZY64 JESSIE32 JESSIE64 STRETCH32 STRETCH64 " } usage() { cat <