Prepare, configure, and manage Firecracker microVMs in seconds!
virtualization linux microvm firecracker
at a8fd32b488e2d7b2927a3d5c294c6a68cf4af37d 170 lines 5.2 kB view raw
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