aboutsummaryrefslogtreecommitdiff
path: root/release/Makefile.firecracker
blob: dc5506f364d2f310856b198e89bcc50e5e3bc6da (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#
# Makefile for creating FreeBSD/Firecracker artifacts
#

CLEANDIRS+=	${TARGET}/firecracker-kern ${TARGET}/firecracker-world

# Bits related to hardware which won't exist in a VM.
WITHOUT_VM_ENOENT=WITHOUT_APM=YES WITHOUT_BLUETOOTH=YES WITHOUT_CXGBETOOL=YES \
    WITHOUT_FLOPPY=YES WITHOUT_GPIO=YES WITHOUT_MLX5TOOL=YES WITHOUT_USB=YES \
    WITHOUT_USB_GADGET_EXAMPLES=YES WITHOUT_VT=YES WITHOUT_WIRELESS=YES
# Bits related to software which doesn't exist in Firecracker specifically.
WITHOUT_FC_ENOENT=WITHOUT_ACPI=YES WITHOUT_BOOT=YES WITHOUT_BHYVE=YES \
    WITHOUT_EFI=YES WITHOUT_FDT=YES WITHOUT_HYPERV=YES \
    WITHOUT_LEGACY_CONSOLE=YES WITHOUT_SYSCONS=YES
# Bits which take up a lot of space and probably won't be wanted inside a
# Firecracker VM.
WITHOUT_FC_FEATURES=WITHOUT_DEBUG_FILES=YES WITHOUT_INCLUDES=YES \
    WITHOUT_INSTALLLIB=YES WITHOUT_TESTS=YES WITHOUT_TOOLCHAIN=YES
# All the excluded bits
WITHOUTS?=${WITHOUT_VM_ENOENT} ${WITHOUT_FC_ENOENT} ${WITHOUT_FC_FEATURES}

firecracker:	firecracker-freebsd-kern.bin firecracker-freebsd-rootfs.bin

FCKDIR=	${.OBJDIR}/${TARGET}/firecracker-kern
firecracker-freebsd-kern.bin:
.if !defined(DESTDIR) || !exists(${DESTDIR})
	@echo "--------------------------------------------------------------"
	@echo ">>> DESTDIR must point to destination for Firecracker binaries"
	@echo "--------------------------------------------------------------"
	@false
.endif
	mkdir -p ${FCKDIR}
	${MAKE} -C ${WORLDDIR} DESTDIR=${FCKDIR} \
	    KERNCONF=FIRECRACKER TARGET=${TARGET} installkernel
	cp ${FCKDIR}/boot/kernel/kernel ${DESTDIR}/freebsd-kern.bin

FCWDIR=	${.OBJDIR}/${TARGET}/firecracker-world
FCROOTFSSZ?=	1g
firecracker-freebsd-rootfs.bin:
	mkdir -p ${FCWDIR}
	${MAKE} -C ${WORLDDIR} DESTDIR=${FCWDIR} \
	    ${WITHOUTS} TARGET=${TARGET} installworld distribution distrib-dirs
	echo '/dev/ufs/rootfs / ufs rw 1 1' > ${FCWDIR}/etc/fstab
	echo 'hostname="freebsd"' >> ${FCWDIR}/etc/rc.conf
	echo 'ifconfig_vtnet0="inet 10.0.0.2 netmask 255.255.0.0"' >> ${FCWDIR}/etc/rc.conf
	echo 'defaultrouter="10.0.0.1"' >> ${FCWDIR}/etc/rc.conf
	echo 'sshd_enable="YES"' >> ${FCWDIR}/etc/rc.conf
	echo 'sshd_rsa_enable="NO"' >> ${FCWDIR}/etc/rc.conf
	echo 'growfs_enable="YES"' >> ${FCWDIR}/etc/rc.conf
	echo 'nameserver 8.8.8.8' >> ${FCWDIR}/etc/resolv.conf
	sed -i '' -e '/periodic/s/^/#/' ${FCWDIR}/etc/crontab
	pw -R ${FCWDIR} groupadd freebsd -g 1001
	mkdir -p ${FCWDIR}/home/freebsd
	pw -R ${FCWDIR} useradd freebsd -m -M 0755 -w yes -n freebsd \
	    -u 1001 -g 1001 -G 0 -c "FreeBSD User" -d /home/freebsd -s /bin/sh
	pw -R ${FCWDIR} usermod root -w yes
	touch ${FCWDIR}/firstboot
	makefs -s ${FCROOTFSSZ} -o label=rootfs -o version=2 -o softupdates=1 \
	    ${DESTDIR}/freebsd-rootfs.bin ${FCWDIR}