#! /bin/bash ##--from fai-doc package version: 5.7 (original: 7167 Mar 10 20:02) ##--edited by mk.maddin@gmail.com: 2018-06-04 # mk-basefile, create basefiles for some distributions # # Thomas Lange, Uni Koeln, 2011-2018 # based on the Makefile implementation of Michael Goetze # # Usage example: mk-basefile -J STRETCH64 # This will create a STRETCH64.tar.xz basefile. # 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://deb.debian.org/debian/ MIRROR_UBUNTU=http://mirror.netcologne.de/ubuntu/ MIRROR_CENTOS=http://mirror.netcologne.de/ #added by Martin Kraemer, mk.madddin@gmail.com MIRROR_RASPBIAN=http://mirrordirector.raspbian.org/raspbian/ KEYRING_RASPBIAN=http://archive.raspbian.org/raspbian.public.key EXCLUDE_SQUEEZE=isc-dhcp-client,isc-dhcp-common,info EXCLUDE_WHEEZY=info EXCLUDE_JESSIE=info EXCLUDE_STRETCH=info EXCLUDE_BUSTER= EXCLUDE_SID= EXCLUDE_TRUSTY=dhcp3-client,dhcp3-common,info EXCLUDE_XENIAL=udhcpc,dibbler-client,info EXCLUDE_BIONIC=udhcpc,dibbler-client,info # here you can add packages, that are needed very early INCLUDE_DEBIAN= 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() { # set local mirror for rinse post script [ -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() { # set local mirror for rinse post script 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 apt-get clean rm -f $xtmp/etc/hostname $xtmp/etc/resolv.conf \ $xtmp/var/lib/apt/lists/*_* $xtmp/usr/bin/qemu-*-static \ $xtmp/etc/udev/rules.d/70-persistent-net.rules > $xtmp/etc/machine-id } 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 shift local arch=$1 dist=${DIST%%[0-9][0-9]}; dist=${dist#"PI_"} local exc="EXCLUDE_$dist" [ -n "${!exc}" ] && exc="--exclude=${!exc}" || unset exc dist=${dist,,} #added by Martin Kraemer, mk.madddin@gmail.com key="";if [[ "${DIST}" =~ ^PI_ ]];then key_f=$(mktemp -u --tmpdir --suffix=.gpg) && wget -qO - "${KEYRING_RASPBIAN}" | gpg --import --no-default-keyring --keyring "${key_f}" - && key="--keyring=${key_f} ";fi check if [ -n "$INCLUDE_DEBIAN" ]; then local inc="--include=$INCLUDE_DEBIAN" fi if [ -n "$arch" ]; then qemu-debootstrap --arch $arch ${key}${exc} $inc $dist $xtmp $mirror target="${target}_${arch^^}" else if [[ $DIST =~ 64 ]]; then arch=amd64 else arch=i386 fi debootstrap --arch $arch ${key}${exc} $inc $dist $xtmp $mirror fi [ -f "${key_f}" ] && rm -f "${key_f}" cleanup-deb tarit } prtdists() { #added PI_ by Martin Kraemer, mk.madddin@gmail.com 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 BIONIC64 SQUEEZE32 SQUEEZE64 WHEEZY32 WHEEZY64 JESSIE32 JESSIE64 STRETCH32 STRETCH64 BUSTER32 BUSTER64 SID32 SID64 PI_WHEEZY PI_JESSIE PI_STRETCH PI_BUSTER " } usage() { cat <