Skip to content

Instantly share code, notes, and snippets.

@mjudeikis
Created May 3, 2019 07:39
Show Gist options
  • Save mjudeikis/c9ceae279e7f41a68e602226603bad82 to your computer and use it in GitHub Desktop.
Save mjudeikis/c9ceae279e7f41a68e602226603bad82 to your computer and use it in GitHub Desktop.
#!/bin/bash -ex
exec 2>&1
export HOME=/root
cd
echo ,+ | sfdisk --force -u S -N 2 /dev/sda || true
partprobe
xfs_growfs /dev/sda2
yum -y update -x WALinuxAgent # updating WALinuxAgent kills this script
yum -y install git golang libguestfs-tools-c libvirt-daemon-config-network virt-install
rpm --import https://packages.microsoft.com/keys/microsoft.asc
cat >/etc/yum.repos.d/azure-cli.repo <<'EOF'
[azure-cli]
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
EOF
yum -y install azure-cli
systemctl start libvirtd.service
mkdir data
base64 -d <<'EOF' | tar -C data -xz
{{ .Archive | Base64Encode }}
EOF
cat >client-cert.pem <<'EOF'
{{ .Builder.ClientCert | CertAsBytes | String }}
EOF
cat >client-key.pem <<'EOF'
{{ .Builder.ClientKey | PrivateKeyAsBytes | String }}
EOF
go get github.com/jim-minter/tlsproxy
go/bin/tlsproxy -insecure -key client-key.pem -cert client-cert.pem https://cdn.redhat.com/ &
while [[ "$(fuser -n tcp 8080)" == "" ]]; do
sleep 1
done
firewall-cmd --zone=public --add-port=8080/tcp
IMAGE="{{ .Builder.Image }}"
DISKGIB=${DISKGIB:-32}
IP=$(ifconfig eth0 | awk '/inet / { print $2 }')
cat >rhcos.ks <<KICKSTART
bootloader
firstboot --disable
keyboard us
lang en_US.UTF-8
network --activate --device=eth0 --onboot=on
part / --fstype=xfs --size=10240
part /var --fstype=xfs --fsoptions=grpquota --grow
poweroff
rootpw --lock
text
timezone Etc/UTC
url --url=http://$IP:8080/content/dist/rhel/server/7/7.6/x86_64/kickstart
zerombr
%post
set -ex
exec </dev/console &>/dev/console
stty sane
#trap bash EXIT
echo 'add_drivers+="hv_storvsc hv_vmbus"' >/etc/dracut.conf.d/azure-drivers.conf
dracut --force
base64 -d <<'EOF' | cat >/etc/yum.repos.d/kickstart.repo
$(base64 <data/etc/yum.repos.d/kickstart.repo)
EOF
cat >/var/lib/yum/client-cert.pem <<'EOF'
$(cat client-cert.pem)
EOF
cat >/var/lib/yum/client-key.pem <<'EOF'
$(cat client-key.pem)
EOF
yum -y update
yum clean all
base64 -d <<'EOF' | tar -C / -x
$(tar -C data --owner=root --group=root -c . | base64 -w0)
EOF
# not commited with a : so that Windows users can check out the repo
mv /etc/docker/certs.d/docker-registry.default.svc-5000 /etc/docker/certs.d/docker-registry.default.svc:5000
rm /etc/yum.repos.d/kickstart.repo /var/lib/yum/client-cert.pem /var/lib/yum/client-key.pem
mkdir /var/lib/etcd
>/var/tmp/kickstart_completed
%end
KICKSTART
echo 'user = "root"' >> /etc/libvirt/qemu.conf
echo 'group = "root"' >> /etc/libvirt/qemu.conf
systemctl restart libvirtd
curl -J -L -O https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/ootpa/410.8.20190429.0/rhcos-410.8.20190429.0-installer.iso
mkdir -p /mnt/iso
mount -o loop rhcos-410.8.20190429.0-installer.iso /mnt/iso
# virt-install insists it needs a pty, so we give it one
python -c "import pty; pty.spawn([
'virt-install',
'--disk', '/var/lib/libvirt/images/$IMAGE.raw,size=$DISKGIB,format=raw',
'--extra-args', 'console=ttyS0,115200n8 earlyprintk=ttyS0,115200 ks=file:/rhel7.ks',
'--graphics', 'none',
'--initrd-inject', 'rhcos.ks',
'--cdrom $IMAGE_URL,
'--location', 'http://$IP:8080/content/dist/rhel/server/7/7.6/x86_64/kickstart',
'--memory', '1536',
'--name', '$(date +%s)',
'--os-variant', 'rhel7',
'--transient',
])"
virt-install \
--disk /var/lib/libvirt/images/test.raw,size=32,format=raw \
--graphics 'none' \
--initrd-inject 'rhcos.ks' \
--cdrom /root/rhcos.iso \
--memory '1536' \
--name test \
--os-variant 'rhel7' \
--extra-args="ks=file:/root/rhcos.ks console=tty0 console=ttyS0,115200n8"
virt-install \
--name guest1-rhel7 \
--memory 1536 \
--vcpus 2 \
--disk size=32 \
--location 'http://10.0.0.4:8080/content/dist/rhel/server/7/7.6/x86_64/kickstart' \
--os-variant rhel7 \
--initrd-inject /root/rhcos.ks \
--extra-args="ks=file:/root/rhcos.ks console=tty0 console=ttyS0,115200n8"
virt-install \
--name guest3-rhcos \
--memory 2048 \
--vcpus 2 \
--location /var/lib/libvirt/images//rhcos-410.8.20190429.0-installer.iso \
--disk /var/lib/libvirt/images/rhcos3.raw,size=32,format=raw \
--os-variant rhel7 \
--extra-args="console=tty0 console=ttyS0,115200n8" \
--transient
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment