Last active
April 10, 2025 05:44
-
-
Save PauloMigAlmeida/4765013df9e914c72e47609edc4bf1eb to your computer and use it in GitHub Desktop.
Firecracker Setup
This file contains hidden or 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
#!/bin/bash | |
export PATH=$(pwd)/release-v1.11.0-x86_64:$PATH | |
# Configure machine size | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PUT 'http://localhost/machine-config' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ "vcpu_count": 4, "mem_size_mib": 16384}' | |
# configure kernel path at firecracker | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PUT 'http://localhost/boot-source' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ "kernel_image_path": "./vmlinux-5.10.198", "boot_args": "console=ttyS0 reboot=k panic=1 pci=off" }' | |
# configure root fs at firecracker | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PUT 'http://localhost/drives/rootfs' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ "drive_id": "rootfs", "path_on_host": "./rootfs.ext4", "is_root_device": true, "is_read_only": false }' | |
# Configure network | |
sudo ip tuntap add tap0 mode tap | |
sudo ip addr add 172.16.0.1/30 dev tap0 | |
sudo ip link set tap0 up | |
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PUT 'http://localhost/network-interfaces/eth0' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ | |
"iface_id": "eth0", | |
"guest_mac": "06:00:AC:10:00:02", | |
"host_dev_name": "tap0" | |
}' | |
# starting instance | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PUT 'http://localhost/actions' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ "action_type": "InstanceStart" }' |
This file contains hidden or 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
#!/bin/bash | |
dd if=/dev/zero of=rootfs.ext4 bs=1M count=500 | |
mkfs.ext4 rootfs.ext4 | |
mkdir -p /tmp/my-rootfs | |
sudo mount rootfs.ext4 /tmp/my-rootfs | |
docker run -it --rm -v /tmp/my-rootfs:/my-rootfs alpine | |
# inside the container session | |
apk add openrc | |
apk add util-linux | |
apk add openjdk11 | |
# change password for root | |
echo "root:root" | sudo chpasswd | |
# Set up a login terminal on the serial console (ttyS0): | |
ln -s agetty /etc/init.d/agetty.ttyS0 | |
echo ttyS0 > /etc/securetty | |
rc-update add agetty.ttyS0 default | |
# Make sure special file systems are mounted on boot: | |
rc-update add devfs boot | |
rc-update add procfs boot | |
rc-update add sysfs boot | |
# Then, copy the newly configured system to the rootfs image: | |
for d in bin etc lib root sbin usr; do tar c "/$d" | tar x -C /my-rootfs; done | |
# The above command may trigger the following message: | |
# tar: Removing leading "/" from member names | |
# However, this is just a warning, so you should be able to | |
# proceed with the setup process. | |
for dir in dev proc run sys var; do mkdir /my-rootfs/${dir}; done | |
# All done, exit docker shell. | |
exit | |
# umount | |
sudo umount /tmp/my-rootfs |
This file contains hidden or 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
#!/bin/bash | |
# loading snapshot | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PUT 'http://localhost/snapshot/load' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ | |
"snapshot_path": "./snapshot_file", | |
"mem_backend": { | |
"backend_path": "./mem_file", | |
"backend_type": "File" | |
}, | |
"enable_diff_snapshots": true, | |
"resume_vm": true | |
}' |
This file contains hidden or 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
#!/bin/bash | |
sudo setfacl -m u:${USER}:rw /dev/kvm | |
curl -L https://github.com/firecracker-microvm/firecracker/releases/download/v1.11.0/firecracker-v1.11.0-x86_64.tgz --output firecracker-v1.11.0-x86_64.tgz | |
tar zxvf firecracker-v1.11.0-x86_64.tgz | |
export PATH=$(pwd)/release-v1.11.0-x86_64:$PATH | |
# Download docker - needed to build the rootfs image | |
sudo snd install -y docker | |
sudo service docket start | |
sudo usermod -a -G docker ec2-user | |
exit | |
# log back again | |
# Initiate firecracker listener | |
firecracker-v1.11.0-x86_64 --api-sock /tmp/firecracker.sock |
This file contains hidden or 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
#!/bin/bash | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PATCH 'http://localhost/vm' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ | |
"state": "Paused" | |
}' | |
curl --unix-socket /tmp/firecracker.sock -i \ | |
-X PUT 'http://localhost/snapshot/create' \ | |
-H 'Accept: application/json' \ | |
-H 'Content-Type: application/json' \ | |
-d '{ | |
"snapshot_type": "Full", | |
"snapshot_path": "./snapshot_file", | |
"mem_file_path": "./mem_file" | |
}' | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment