Created
June 7, 2024 23:38
-
-
Save danthegoodman1/476cb5a8671fb94d1727ea893c5b485c to your computer and use it in GitHub Desktop.
Updated getting started that enables an interface configured with internet access (works with theirs, and a default `ubuntu` docker image dump).
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
TAP_DEV="tap0" | |
TAP_IP="172.16.0.1" | |
MASK_SHORT="/30" | |
# Setup network interface | |
sudo ip link del "$TAP_DEV" 2> /dev/null || true | |
sudo ip tuntap add dev "$TAP_DEV" mode tap | |
sudo ip addr add "${TAP_IP}${MASK_SHORT}" dev "$TAP_DEV" | |
sudo ip link set dev "$TAP_DEV" up | |
# Enable ip forwarding | |
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" | |
HOST_IFACE="eth0" | |
# Set up microVM internet access | |
sudo iptables -t nat -D POSTROUTING -o "$HOST_IFACE" -j MASQUERADE || true | |
sudo iptables -D FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT \ | |
|| true | |
sudo iptables -D FORWARD -i tap0 -o "$HOST_IFACE" -j ACCEPT || true | |
sudo iptables -t nat -A POSTROUTING -o "$HOST_IFACE" -j MASQUERADE | |
sudo iptables -I FORWARD 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | |
sudo iptables -I FORWARD 1 -i tap0 -o "$HOST_IFACE" -j ACCEPT | |
API_SOCKET="/tmp/firecracker.socket" | |
LOGFILE="./firecracker.log" | |
# Create log file | |
touch $LOGFILE | |
# Set log file | |
sudo curl -X PUT --unix-socket "${API_SOCKET}" \ | |
--data "{ | |
\"log_path\": \"${LOGFILE}\", | |
\"level\": \"Debug\", | |
\"show_level\": true, | |
\"show_log_origin\": true | |
}" \ | |
"http://localhost/logger" | |
KERNEL="./vmlinux-5.10.217" # Dan's modification updated from example | |
KERNEL_BOOT_ARGS="console=ttyS0 reboot=k panic=1 pci=off" | |
# Dan's modifications | |
FC_IP="172.16.0.2" | |
MASK_LONG="255.255.255.0" | |
KERNEL_BOOT_ARGS="${KERNEL_BOOT_ARGS} ip=${FC_IP}::${TAP_IP}:${MASK_LONG}::eth0:off" | |
ARCH=$(uname -m) | |
if [ ${ARCH} = "aarch64" ]; then | |
KERNEL_BOOT_ARGS="keep_bootcon ${KERNEL_BOOT_ARGS}" | |
fi | |
# Set boot source | |
sudo curl -X PUT --unix-socket "${API_SOCKET}" \ | |
--data "{ | |
\"kernel_image_path\": \"${KERNEL}\", | |
\"boot_args\": \"${KERNEL_BOOT_ARGS}\" | |
}" \ | |
"http://localhost/boot-source" | |
# Dan's modification | |
ROOTFS="./rootfs.ext4" | |
# Set rootfs | |
sudo curl -X PUT --unix-socket "${API_SOCKET}" \ | |
--data "{ | |
\"drive_id\": \"rootfs\", | |
\"path_on_host\": \"${ROOTFS}\", | |
\"is_root_device\": true, | |
\"is_read_only\": false | |
}" \ | |
"http://localhost/drives/rootfs" | |
# The IP address of a guest is derived from its MAC address with | |
# `fcnet-setup.sh`, this has been pre-configured in the guest rootfs. It is | |
# important that `TAP_IP` and `FC_MAC` match this. | |
FC_MAC="06:00:AC:10:00:02" | |
# Set network interface | |
sudo curl -X PUT --unix-socket "${API_SOCKET}" \ | |
--data "{ | |
\"iface_id\": \"eth0\", | |
\"guest_mac\": \"$FC_MAC\", | |
\"host_dev_name\": \"$TAP_DEV\" | |
}" \ | |
"http://localhost/network-interfaces/eth0" | |
# API requests are handled asynchronously, it is important the configuration is | |
# set, before `InstanceStart`. | |
sleep 0.015s | |
# Start microVM | |
sudo curl -X PUT --unix-socket "${API_SOCKET}" \ | |
--data "{ | |
\"action_type\": \"InstanceStart\" | |
}" \ | |
"http://localhost/actions" | |
# API requests are handled asynchronously, it is important the microVM has been | |
# started before we attempt to SSH into it. | |
sleep 5s | |
# Setup internet access in the guest | |
ssh -i ./ubuntu-22.04.id_rsa [email protected] "ip route add default via 172.16.0.1 dev eth0" | |
# Setup DNS resolution in the guest | |
ssh -i ./ubuntu-22.04.id_rsa [email protected] "echo 'nameserver 8.8.8.8' > /etc/resolv.conf" | |
# SSH into the microVM | |
ssh -i ./ubuntu-22.04.id_rsa [email protected] | |
# Use `root` for both the login and password. | |
# Run `reboot` to exit. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment