Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- DOMNAME="$1"
- STAGE_TBZ="$2"
- KERNEL_PKG="$3"
- if [ -z "${DOMNAME}" ]; then
- echo "usage: ${0##*/} name [stage_tarball [kernel_pkg]]"
- exit 2
- fi
- unset $(env | awk -F= '/^LC_/{print $1}')
- export LC_ALL=C
- set -e
- : ${POOL:=default}
- : ${HOSTNAME:=$(printf ${DOMNAME} | tr '[A-Z]' '[a-z]')}
- : ${BINPKG_DIR:=default-linux/amd64/amdfam10}
- : ${PORTAGE_PROFILE=default/linux/amd64/13.0}
- mountpoint=${TMPDIR:-/tmp}/${HOSTNAME}
- mkdir ${mountpoint}
- virsh vol-create-as ${POOL} ${DOMNAME}.img ${VDISKSIZE:-6G}
- vol_path=$(virsh vol-path ${DOMNAME}.img ${POOL})
- i=$(pgrep -fa ^nbd | sed -r 's/[0-9]+\s+nbd//' | sort -nr | head -n1)
- blkdev=/dev/nbd$((${i:--1} + 1))
- unset i
- echo 'Creating logical volumes and filesystems ...'
- sudo /bin/sh -e <<EOS
- qemu-nbd -c ${blkdev} ${vol_path}
- sgdisk -a 4096 -Z -g \
- -n 1::+1M \
- -t 1:EF02 \
- -c 1:'BIOS boot partition' \
- -n 2::+32M \
- -c 2:'Linux filesystem' \
- -n 3:: \
- -t 3:8E00 \
- -c 3:'Linux LVM' \
- ${blkdev}
- pvscan > /dev/null
- pvcreate ${blkdev}p3
- vgcreate ${HOSTNAME} ${blkdev}p3
- lvcreate -nswap -L1G ${HOSTNAME}
- lvcreate -nroot -L300M ${HOSTNAME}
- lvcreate -nusr -L1200M ${HOSTNAME}
- lvcreate -nvar -L400M ${HOSTNAME}
- lvcreate -nopt -L100M ${HOSTNAME}
- lvcreate -nhome -L100M ${HOSTNAME}
- mkswap -Lswap /dev/${HOSTNAME}/swap
- mkfs.ext4 -q -Lboot ${blkdev}p2
- for v in root usr var opt home; do
- mkfs.xfs -q -L\$v /dev/${HOSTNAME}/\$v
- done
- EOS
- [ -z "${STAGE_TBZ}" ] && exit 0
- echo 'Mounting filesystems ...'
- sudo /bin/sh -e <<EOS
- mount /dev/${HOSTNAME}/root ${mountpoint}
- install -d ${mountpoint}/boot
- mount ${blkdev}p2 ${mountpoint}/boot
- for v in usr var opt home; do
- install -d ${mountpoint}/\$v
- mount /dev/${HOSTNAME}/\$v ${mountpoint}/\$v
- done
- EOS
- echo 'Extracting stage tarball ...'
- sudo tar -xaf "${STAGE_TBZ}" -C ${mountpoint}
- portdir=$(portageq repos_config / | python3 -c '
- import configparser, sys
- c = configparser.ConfigParser()
- c.read_file(sys.stdin)
- s = c["DEFAULT"]["main-repo"]
- print(c[s]["location"])
- ')
- distdir=$(portageq envvar DISTDIR)
- while ! mountpoint -q ${pkgdir:=$(portageq envvar PKGDIR)}; do
- pkgdir=${pkgdir%/*}
- test -n "${pkgdir}"
- done
- echo 'Configuring portage ...'
- sudo /bin/sh -e <<EOS
- cd ${mountpoint}
- rm -rf run/openrc
- mount -t proc proc proc
- mount -t sysfs sysfs sys
- mount -t tmpfs tmpfs tmp
- mount -t tmpfs tmpfs run
- mount -obind /dev dev
- mount -obind /dev/pts dev/pts
- mount -obind /dev/shm dev/shm
- install -d \
- var/cache/portage/tree \
- var/cache/portage/distfiles \
- var/cache/portage/binpkgs
- mount -obind ${portdir} var/cache/portage/tree
- mount -obind ${distdir} var/cache/portage/distfiles
- mount -obind ${pkgdir} var/cache/portage/binpkgs
- cd ${mountpoint}/etc/portage
- rm -rf repos.conf
- mkdir repos.conf
- sed -r -e s@/usr/portage@/var/cache/portage/tree@ \
- < /usr/share/portage/config/repos.conf \
- > repos.conf/gentoo.conf
- rm -rf make.conf
- mkdir make.conf
- cat > make.conf/00_base.conf <<EOF
- CHOST="x86_64-pc-linux-gnu"
- CFLAGS="-O2 -pipe"
- CXXFLAGS="\${CFLAGS}"
- DISTDIR="${distdir}"
- PKGDIR="${pkgdir}"
- EMERGE_DEFAULT_OPTS="--usepkg --jobs --load-average=3 --quiet-fail=y"
- FEATURES=""
- MAKEOPTS="-j9"
- EOF
- cat > make.conf/05_default-use.conf <<EOF
- USE="caps -cups filecaps -gpm"
- EOF
- cat > make.conf/10_cpu-flags.conf <<EOF
- CPU_FLAGS_X86="3dnow 3dnowext mmx mmext sse sse2"
- EOF
- EOS
- echo 'Configuring host ...'
- sudo chroot ${mountpoint} /bin/sh -e <<EOS
- env-update
- eselect profile set ${PORTAGE_PROFILE}
- FEATURES=-news emerge --noreplace --quiet grub xfsprogs
- grub2-install ${blkdev}
- cat > /boot/grub/grub.cfg <<EOF
- timeout=1
- menuentry 'Gentoo Linux' {
- root=hd0,gpt2
- linux /vmlinuz root=/dev/${HOSTNAME}/root dolvm net.ifnames=0 quiet
- initrd /initramfs
- }
- EOF
- sed -i s/localhost/${HOSTNAME}/ /etc/conf.d/hostname
- cat > /etc/fstab <<EOF
- LABEL=swap none swap sw 0 0
- LABEL=boot /boot ext4 noauto,noatime 1 2
- /dev/${HOSTNAME}/root / xfs ro,noatime 0 1
- /dev/${HOSTNAME}/usr /usr xfs ro,noatime 0 2
- /dev/${HOSTNAME}/var /var xfs noatime 0 2
- /dev/${HOSTNAME}/opt /opt xfs ro,noatime 0 2
- /dev/${HOSTNAME}/home /home xfs noatime 0 2
- tmpfs /tmp tmpfs defaults 0 0
- EOF
- ln -snf /proc/self/mounts /etc/mtab
- ln -snf /run/resolv.conf /etc/resolv.conf
- ln -snf /run/ntp.conf /etc/ntp.conf
- passwd -d root
- EOS
- if [ -n "${KERNEL_PKG}" ]; then
- echo 'Extracting kernel package ...'
- sudo tar --no-same-owner --no-same-permissions --strip-components=1 \
- -xaf "${KERNEL_PKG}" -C ${mountpoint}
- fi
- echo 'Cleaning up ...'
- awk '$5~/'${HOSTNAME}'/{print $5}' /proc/self/mountinfo | tac \
- | xargs sudo umount
- sudo vgchange -an ${HOSTNAME}
- sudo qemu-nbd -d ${blkdev}
- virt-install --name ${DOMNAME} \
- --ram ${VRAM:-1024} \
- --vcpus ${VCPUS:-2} \
- --os-type linux \
- --os-variant rhel7 \
- --boot hd \
- --disk ${vol_path} \
- --network bridge=${VNET:-br0} \
- --graphics vnc \
- --video cirrus \
- --memballoon model=virtio \
- --noautoconsole
- rmdir ${mountpoint}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement