labsync/Makefile

133 lines
4.3 KiB
Makefile

PACKER_VERSION ?= 1.2.0
ANNOUNCE ?= http://10.2.2.1:6969/announce
WEBSEED ?= http://10.2.2.1
PACKER_DOCKER_IMAGE ?= labsync-packer
MKTORRENT_DOCKER_IMAGE ?= labsync-mktorrent
CWD=$(abspath $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST))))))
qemu_ifname_br = brlabsync
qemu_ifname_tap = taplabsync
qemu_hostname = qemumachine
qemu_host_ip = 10.2.2.1
qemu_netmask = 24
qemu_vm_ip = 10.2.2.10
qemu_disk = tmp/qemu-disk.img
qemu_target ?= debian-stretch
qemu_kernel = $(qemu_target).linux
qemu_initramfs = $(qemu_target).initramfs.dev
qemu_torrent = $(qemu_target).torrent
.PHONY: default
default: dockerimg images/debian-stretch.squashfs images/debian-stretch.torrent
.PHONY: clean
clean:
rm -f images/*
rm -rf tmp
.PHONY: dockerimg
dockerimg:
docker build -t "$(PACKER_DOCKER_IMAGE)" --build-arg "PACKER_VERSION=$(PACKER_VERSION)" packer/docker
docker build -t "$(MKTORRENT_DOCKER_IMAGE)" mktorrent
images:
[ ! -d "$@" ] && mkdir "$@"
touch "$@"
images/debian-stretch.squashfs: images
docker run \
--rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "${PWD}/packer:/workdir" \
-v "${PWD}/images:/images" \
-e "user=`id -u`" \
-e "group=`id -g`" \
"$(PACKER_DOCKER_IMAGE)" \
debian-stretch
images/debian-stretch.torrent: images
docker run \
--rm \
-v "${PWD}/images:/workdir" \
-e "user=`id -u`" \
-e "group=`id -g`" \
-e "ANNOUNCE=$(ANNOUNCE)" \
-e "WEBSEED=$(WEBSEED)" \
"$(MKTORRENT_DOCKER_IMAGE)" \
debian-stretch.squashfs
# updates the initramfs
# only used for development
images/debian-stretch.initramfs.dev: tmp/initramfs-extracted/debian-stretch packer/initramfs/labsync
cp packer/initramfs/labsync tmp/initramfs-extracted/debian-stretch/scripts/labsync
(cd tmp/initramfs-extracted/debian-stretch && find . | cpio -H newc -o | gzip > $(CWD)/images/debian-stretch.initramfs.dev)
tmp:
[ ! -d "$@" ] && mkdir "$@" || true
tmp/initramfs-extracted/debian-stretch: images/debian-stretch.initramfs
rm -rf tmp/initramfs-extracted/debian-stretch
mkdir -p tmp/initramfs-extracted/debian-stretch
(cd tmp/initramfs-extracted/debian-stretch && zcat "$(CWD)/images/debian-stretch.initramfs" | cpio -i)
touch tmp/initramfs-extracted/debian-stretch
$(qemu_disk): tmp
qemu-img create "$@" 4G
tmp/netboot.tar.gz: tmp
wget -O "$@" https://cdn-aws.deb.debian.org/debian/dists/stretch/main/installer-amd64/current/images/netboot/netboot.tar.gz
touch "$@"
tmp/tftproot: tmp/netboot.tar.gz
[ ! -d tmp/tftproot ] && mkdir tmp/tftproot || true
tar -xzf "$<" -C "$@"
rm tmp/tftproot/debian-installer/amd64/boot-screens/txt.cfg
tmp/tftproot/images: tmp/tftproot
ln -s ../../images tmp/tftproot/images
tmp/tftproot/debian-installer/amd64/boot-screens/txt.cfg: txt.cfg
ln -s ../../../../../txt.cfg "$@"
/sys/devices/virtual/net/$(qemu_ifname_tap):
sudo ip tuntap add dev $(qemu_ifname_tap) mode tap user $(USER)
/sys/devices/virtual/net/$(qemu_ifname_br):
sudo brctl addbr $(qemu_ifname_br)
/sys/devices/virtual/net/$(qemu_ifname_br)/brif/$(qemu_ifname_tap): /sys/devices/virtual/net/$(qemu_ifname_tap) /sys/devices/virtual/net/$(qemu_ifname_br)
sudo brctl addif $(qemu_ifname_br) $(qemu_ifname_tap)
.PHONY: qemu-network
qemu-network: /sys/devices/virtual/net/$(qemu_ifname_br)/brif/$(qemu_ifname_tap)
if ! ip addr show dev $(qemu_ifname_br) | grep -F "$(qemu_host_ip)/$(qemu_netmask)"; then \
sudo ip addr add $(qemu_host_ip)/$(qemu_netmask) dev $(qemu_ifname_br); \
fi
sudo ip link set $(qemu_ifname_tap) up
sudo ip link set $(qemu_ifname_br) up
.PHONY: qemu
qemu: qemu-network $(qemu_disk)
qemu-system-x86_64 \
-kernel "images/$(qemu_kernel)" \
-initrd "images/$(qemu_initramfs)" \
-drive format=raw,file="$(qemu_disk)" \
-append "boot=labsync labsync_disk=/dev/sda labsync_partsize_boot=512 labsync_torrent=http://10.2.2.1/$(qemu_torrent) quiet vga=792 ip=$(qemu_vm_ip):::255.255.255.0:$(qemu_hostname):ens3:off labsync_wait=pause" \
-enable-kvm \
-m 1G \
-net nic \
-net tap,ifname=$(qemu_ifname_tap),script=no,downscript=no
.PHONY: qemu-tftp
qemu-tftp: tmp/tftproot tmp/tftproot/images tmp/tftproot/debian-installer/amd64/boot-screens/txt.cfg qemu-network $(qemu_disk)
qemu-system-x86_64 \
-net nic -net tap,ifname=$(qemu_ifname_tap),script=no,downscript=no \
-net nic -net user,tftp=.,bootfile=/tmp/tftproot/pxelinux.0 \
-enable-kvm \
-m 1G \
-drive format=raw,file="$(qemu_disk)" \
-boot n