AlpineLinux Firecracker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# download | |
latest=$(basename $(curl -fsSLI -o /dev/null -w %{url_effective} https://github.com/firecracker-microvm/firecracker/releases/latest)) | |
curl -LOJ https://github.com/firecracker-microvm/firecracker/releases/download/${latest}/firecracker-${latest}-$(uname -m) | |
mv firecracker-${latest}-$(uname -m) firecracker | |
chmod +x firecracker | |
# rootfs | |
# ========= | |
# qemu-img create -f raw alpine.rootfs.ext4 1G | |
fallocate -l 1G ubuntu.rootfs.ext4 | |
mkfs.ext4 ./alpine.rootfs.ext4 | |
mkdir /tmp/rootfs | |
sudo mount alpine.rootfs.ext4 /tmp/rootfs | |
curl -OJ https://mirrors.aliyun.com/alpine/v3.12/releases/x86_64/alpine-minirootfs-3.12.0-x86_64.tar.gz | |
sudo tar zxvf alpine-minirootfs-3.12.0-x86_64.tar.gz -C /tmp/rootfs/ | |
# for mirror | |
sudo cp /etc/apk/repositories /tmp/rootfs/etc/apk/repositories | |
sudo cp /etc/resolv.conf /tmp/rootfs/etc | |
sudo chroot /tmp/rootfs/ /bin/sh | |
apk add alpine-base util-linux linux-virt haveged | |
rc-update add haveged | |
echo root:root | chpasswd | |
for svc in devfs procfs sysfs; do ln -fs /etc/init.d/$svc /etc/runlevels/boot; done | |
exit | |
ln -s agetty /etc/init.d/agetty.ttyS0 | |
echo ttyS0 > /etc/securetty | |
rc-update add agetty.ttyS0 default | |
# this initramfs contain required ext4 module | |
sudo cp /tmp/rootfs/boot/initramfs-virt initramfs-virt | |
sudo cp /tmp/rootfs/boot/vmlinuz-virt vmlinuz-virt | |
sudo umount /tmp/rootfs | |
# kernel | |
# ========== | |
curl -LOC- https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux | |
chmod +x extract-vmlinux | |
./extract-vmlinux $PWD/vmlinuz-virt > vmlinux-virt | |
# config & start | |
# ========== | |
cat <<CONF > alpine.json | |
{ | |
"boot-source": { | |
"initrd_path": "initramfs-virt", | |
"kernel_image_path": "vmlinux-virt", | |
"boot_args": "console=ttyS0 reboot=k panic=1 pci=off modules=virtio_mmio,ext4 rootfstype=ext4" | |
}, | |
"drives": [ | |
{ | |
"drive_id": "rootfs", | |
"path_on_host": "alpine.rootfs.ext4", | |
"is_root_device": true, | |
"is_read_only": false | |
} | |
], | |
"machine-config": { | |
"vcpu_count": 1, | |
"mem_size_mib": 1024, | |
"ht_enabled": false | |
} | |
} | |
CONF | |
./firecracker --api-sock /tmp/firecracker.socket --config-file alpine.json | |
# exit | |
# ========== | |
# api request | |
curl --unix-socket /tmp/firecracker.socket -i \ | |
-X PUT "http://localhost/actions" \ | |
-H "accept: application/json" \ | |
-H "Content-Type: application/json" \ | |
-d '{"action_type": "SendCtrlAltDel"}' | |
# in vm | |
reboot |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment