Prepare, configure, and manage Firecracker microVMs in seconds!
virtualization
linux
microvm
firecracker
1#!/usr/bin/env bash
2
3set -e -o pipefail
4
5readonly MAGENTA="$(tput setaf 5 2>/dev/null || echo '')"
6readonly GREEN="$(tput setaf 2 2>/dev/null || echo '')"
7readonly CYAN="$(tput setaf 6 2>/dev/null || echo '')"
8readonly ORANGE="$(tput setaf 3 2>/dev/null || echo '')"
9readonly NO_COLOR="$(tput sgr0 2>/dev/null || echo '')"
10
11if ! command -v curl >/dev/null 2>&1; then
12 echo "Error: curl is required to install fireup."
13 exit 1
14fi
15
16if ! command -v tar >/dev/null 2>&1; then
17 echo "Error: tar is required to install fireup."
18 exit 1
19fi
20
21export PATH="$HOME/.local/bin:$PATH"
22
23RELEASE_URL="https://api.github.com/repos/firecracker-microvm/firecracker/releases/latest"
24
25function detect_os() {
26 # Determine the operating system
27 OS=$(uname -s)
28 if [ "$OS" = "Linux" ]; then
29 # Determine the CPU architecture
30 ARCH=$(uname -m)
31 if [ "$ARCH" = "aarch64" ]; then
32 ASSET_NAME="-aarch64.tgz"
33 elif [ "$ARCH" = "x86_64" ]; then
34 ASSET_NAME="-x86_64.tgz"
35 else
36 echo "Unsupported architecture: $ARCH"
37 exit 1
38 fi
39 else
40 echo "Unsupported operating system: $OS"
41 echo "This script only supports Linux."
42 exit 1
43 fi;
44}
45
46detect_os
47
48DOWNLOAD_URL=$(curl -sSL "$RELEASE_URL" | grep -o "browser_download_url.*firecracker-.*$ASSET_NAME\"" | cut -d ' ' -f 2)
49
50DOWNLOAD_URL=`echo $DOWNLOAD_URL | tr -d '\"'`
51
52ASSET_NAME=$(basename $DOWNLOAD_URL)
53
54curl -SL $DOWNLOAD_URL -o /tmp/$ASSET_NAME
55
56tar -xzf /tmp/$ASSET_NAME -C /tmp
57
58mkdir -p "$HOME/.firecracker"
59
60VERSION=$(echo $ASSET_NAME | grep -oP 'v\d+\.\d+\.\d+')
61
62ARCH=$(uname -m)
63
64cp -r /tmp/release-${VERSION}-${ARCH} $HOME/.firecracker
65
66rm -rf /tmp/release-${VERSION}-${ARCH}
67
68rm -rf $HOME/.firecracker/release-${VERSION}-${ARCH}/firecracker \
69 $HOME/.firecracker/release-${VERSION}-${ARCH}/cpu-template-helper \
70 $HOME/.firecracker/release-${VERSION}-${ARCH}/jailer \
71 $HOME/.firecracker/release-${VERSION}-${ARCH}/rebase-snap \
72 $HOME/.firecracker/release-${VERSION}-${ARCH}/seccompiler-bin \
73 $HOME/.firecracker/release-${VERSION}-${ARCH}/snapshot-editor
74
75ln -s ${HOME}/.firecracker/release-${VERSION}-${ARCH}/firecracker-${VERSION}-${ARCH} $HOME/.firecracker/release-${VERSION}-${ARCH}/firecracker
76
77ln -s ${HOME}/.firecracker/release-${VERSION}-${ARCH}/cpu-template-helper-${VERSION}-${ARCH} $HOME/.firecracker/release-${VERSION}-${ARCH}/cpu-template-helper
78
79ln -s ${HOME}/.firecracker/release-${VERSION}-${ARCH}/jailer-${VERSION}-${ARCH} $HOME/.firecracker/release-${VERSION}-${ARCH}/jailer
80
81ln -s ${HOME}/.firecracker/release-${VERSION}-${ARCH}/rebase-snap-${VERSION}-${ARCH} $HOME/.firecracker/release-${VERSION}-${ARCH}/rebase-snap
82
83
84ln -s ${HOME}/.firecracker/release-${VERSION}-${ARCH}/seccompiler-bin-${VERSION}-${ARCH} $HOME/.firecracker/release-${VERSION}-${ARCH}/seccompiler-bin
85
86
87ln -s ${HOME}/.firecracker/release-${VERSION}-${ARCH}/snapshot-editor-${VERSION}-${ARCH} $HOME/.firecracker/release-${VERSION}-${ARCH}/snapshot-editor
88
89SUDO=""
90
91if command -v sudo >/dev/null 2>&1; then
92 SUDO=sudo
93fi
94
95$SUDO cp $HOME/.firecracker/release-${VERSION}-${ARCH}/firecracker /usr/sbin/firecracker
96
97$SUDO cp $HOME/.firecracker/release-${VERSION}-${ARCH}/jailer /usr/local/bin/jailer
98
99$SUDO cp $HOME/.firecracker/release-${VERSION}-${ARCH}/cpu-template-helper /usr/local/bin/cpu-template-helper
100
101$SUDO cp $HOME/.firecracker/release-${VERSION}-${ARCH}/rebase-snap /usr/local/bin/rebase-snap
102
103$SUDO cp $HOME/.firecracker/release-${VERSION}-${ARCH}/seccompiler-bin /usr/local/bin/seccompiler-bin
104
105$SUDO cp $HOME/.firecracker/release-${VERSION}-${ARCH}/snapshot-editor /usr/local/bin/snapshot-editor
106
107
108function detect_os() {
109 # Determine the operating system
110 OS=$(uname -s)
111 if [ "$OS" = "Linux" ]; then
112 # Determine the CPU architecture
113 ARCH=$(uname -m)
114 if [ "$ARCH" = "aarch64" ]; then
115 ASSET_NAME="aarch64-unknown-linux-gnu.tar.gz"
116 elif [ "$ARCH" = "x86_64" ]; then
117 ASSET_NAME="_x86_64-unknown-linux-gnu.tar.gz"
118 else
119 echo "Unsupported architecture: $ARCH"
120 exit 1
121 fi
122 else
123 echo "Unsupported operating system: $OS"
124 echo "This script only supports Linux."
125 exit 1
126 fi;
127}
128
129detect_os
130
131RELEASE_URL="https://api.github.com/repos/tsirysndr/fireup/releases/latest"
132
133DOWNLOAD_URL=$(curl -sSL "$RELEASE_URL" | grep -o "browser_download_url.*fireup_.*$ASSET_NAME\"" | cut -d ' ' -f 2)
134
135DOWNLOAD_URL=`echo $DOWNLOAD_URL | tr -d '\"'`
136
137ASSET_NAME=$(basename $DOWNLOAD_URL)
138
139curl -SL $DOWNLOAD_URL -o /tmp/$ASSET_NAME
140
141tar -xvf /tmp/$ASSET_NAME -C /tmp
142
143chmod a+x /tmp/fireup
144
145$SUDO cp /tmp/fireup /usr/local/bin/fireup
146rm -rf /tmp/fireup
147
148cat <<EOF
149${ORANGE}
150 _______ __ __
151 / ____(_)_______ / / / /___
152 / /_ / / ___/ _ \/ / / / __ \\
153 / __/ / / / / __/ /_/ / /_/ /
154 /_/ /_/_/ \___/\____/ .___/
155 /_/
156${NO_COLOR}
157Welcome to Fireup!
158
159${GREEN}https://github.com/tsirysndr/fireup${NO_COLOR}
160
161Please file an issue if you encounter any problems!
162
163===============================================================================
164
165Installation completed! 🎉
166
167You can now run the following command to start using Fireup:
168${CYAN}fireup${NO_COLOR}
169
170EOF