From 8d2b56889751550975dddfe8a386aad406a053c6 Mon Sep 17 00:00:00 2001 From: Yuta Hayashibe Date: Sat, 24 May 2025 01:39:55 +0900 Subject: [PATCH] Improve install script (#144) * Use `python3` instead of `curl` and `jq` * Use quote to word splitting * Remove undefined `local` in POSIX sh * Added `LLAMA_SWAP_DEFAULT_ADDRESS` to customize the server address * Added `mktemp` to `NEEDS` --- scripts/install.sh | 62 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/scripts/install.sh b/scripts/install.sh index e49a788..b3f8894 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -4,6 +4,8 @@ set -eu +LLAMA_SWAP_DEFAULT_ADDRESS=${LLAMA_SWAP_DEFAULT_ADDRESS:-"127.0.0.1:8080"} + red="$( (/usr/bin/tput bold || :; /usr/bin/tput setaf 1 || :) 2>&-)" plain="$( (/usr/bin/tput sgr0 || :) 2>&-)" @@ -11,16 +13,16 @@ status() { echo ">>> $*" >&2; } error() { echo "${red}ERROR:${plain} $*"; exit 1; } warning() { echo "${red}WARNING:${plain} $*"; } -available() { command -v $1 >/dev/null; } +available() { command -v "$1" >/dev/null; } require() { - local MISSING='' - for TOOL in $*; do - if ! available $TOOL; then - MISSING="$MISSING $TOOL" + _MISSING='' + for TOOL in "$@"; do + if ! available "$TOOL"; then + _MISSING="$_MISSING $TOOL" fi done - echo $MISSING + echo "$_MISSING" } SUDO= @@ -32,7 +34,7 @@ if [ "$(id -u)" -ne 0 ]; then SUDO="sudo" fi -NEEDS=$(require curl tee jq tar) +NEEDS=$(require tee tar python3 mktemp) if [ -n "$NEEDS" ]; then status "ERROR: The following tools are required but missing:" for NEED in $NEEDS; do @@ -62,18 +64,40 @@ esac download_binary() { ASSET_NAME="linux_$ARCH" - # Fetch the latest release info and extract the matching asset URL - DL_URL=$(curl -s "https://api.github.com/repos/mostlygeek/llama-swap/releases/latest" | \ - jq -r --arg name "$ASSET_NAME" \ - '.assets[] | select(.name | contains($name)) | .browser_download_url') + TMPDIR=$(mktemp -d) + trap 'rm -rf "${TMPDIR}"' EXIT INT TERM HUP + PYTHON_SCRIPT=$(cat <