gzip 오류

This commit is contained in:
Jerry Chae committed 2026-05-13 22:36:03 +09:00
1 parent 9b34662c51
commit 8e5f8b549b
1 file changed
+103 -22
+103 -22
View File
@@ -5,11 +5,11 @@
# #
# Supported platforms: # Supported platforms:
# macOS : Apple Silicon (arm64), Intel (x86_64) — via Homebrew # macOS : Apple Silicon (arm64), Intel (x86_64) — via Homebrew
# Linux : x86_64, aarch64 — via package manager or curl installer # Linux : x86_64, aarch64 — via package manager or direct download
# #
# Prerequisites: # Prerequisites:
# - macOS: Homebrew (brew) — auto-installed if missing # - macOS: Homebrew (brew) — auto-installed if missing
# - Linux: curl — for curl-based installer # - Linux: curl — for direct download fallback
set -euo pipefail set -euo pipefail
@@ -17,6 +17,8 @@ set -euo pipefail
# Constants # Constants
# ──────────────────────────────────────────── # ────────────────────────────────────────────
REPO="Byron/dua-cli" REPO="Byron/dua-cli"
API_URL="https://api.github.com/repos/${REPO}/releases"
INSTALL_DIR="${HOME}/.local/bin"
# ──────────────────────────────────────────── # ────────────────────────────────────────────
# Utility functions (all stderr output) # Utility functions (all stderr output)
@@ -49,7 +51,7 @@ ensure_brew() {
} }
# ──────────────────────────────────────────── # ────────────────────────────────────────────
# Detect OS # Detect OS / Architecture
# ──────────────────────────────────────────── # ────────────────────────────────────────────
OS="$(uname -s)" OS="$(uname -s)"
ARCH="$(uname -m)" ARCH="$(uname -m)"
@@ -68,6 +70,41 @@ for cmd in curl; do
command -v "$cmd" &>/dev/null || error "'$cmd' command is required." command -v "$cmd" &>/dev/null || error "'$cmd' command is required."
done done
# Fallback: use python3 if jq is not available
if command -v jq &>/dev/null; then
_json_latest_tag() {
jq -r '[.[] | select(.prerelease==false)] | .[0].tag_name'
}
else
command -v python3 &>/dev/null || error "'jq' or 'python3' is required."
_json_latest_tag() {
python3 -c "
import sys, json
data = json.load(sys.stdin)
for r in data:
if not r.get('prerelease'):
print(r['tag_name'])
break
"
}
fi
# ────────────────────────────────────────────
# Get latest stable release tag
# ────────────────────────────────────────────
get_latest_tag() {
info "Fetching latest release from GitHub API..."
local releases
releases="$(curl -fsSL "${API_URL}")" || error "Failed to call GitHub API."
local tag
tag="$(echo "$releases" | _json_latest_tag)"
[[ -z "$tag" || "$tag" == "null" ]] && error "Could not find latest release tag."
echo "$tag"
}
# ──────────────────────────────────────────── # ────────────────────────────────────────────
# Step 1: Install dua # Step 1: Install dua
# ──────────────────────────────────────────── # ────────────────────────────────────────────
@@ -84,39 +121,83 @@ else
success "dua installed via Homebrew" success "dua installed via Homebrew"
;; ;;
Linux) Linux)
# Try package managers first, fall back to curl installer # Try package managers first
DUA_INSTALLED=false
if command -v apt-get &>/dev/null; then if command -v apt-get &>/dev/null; then
# dua-cli is available in newer Ubuntu/Debian repos info "Trying apt-get..."
info "Installing via apt-get..."
sudo apt-get update -y 2>/dev/null || true sudo apt-get update -y 2>/dev/null || true
if sudo apt-get install -y dua-cli 2>/dev/null; then if sudo apt-get install -y dua-cli 2>/dev/null; then
DUA_INSTALLED=true
success "dua installed via apt-get" success "dua installed via apt-get"
else
info "dua-cli not in apt repos. Using curl installer..."
curl -LSfs https://raw.githubusercontent.com/Byron/dua-cli/master/ci/install.sh |
sh -s -- --git Byron/dua-cli --crate dua --target x86_64-unknown-linux-musl
success "dua installed via curl installer"
fi fi
elif command -v dnf &>/dev/null; then fi
sudo dnf install -y dua-cli
if [ "$DUA_INSTALLED" = "false" ] && command -v dnf &>/dev/null; then
info "Trying dnf..."
if sudo dnf install -y dua-cli 2>/dev/null; then
DUA_INSTALLED=true
success "dua installed via dnf" success "dua installed via dnf"
elif command -v pacman &>/dev/null; then fi
sudo pacman -S --noconfirm dua-cli fi
if [ "$DUA_INSTALLED" = "false" ] && command -v pacman &>/dev/null; then
info "Trying pacman..."
if sudo pacman -S --noconfirm dua-cli 2>/dev/null; then
DUA_INSTALLED=true
success "dua installed via pacman" success "dua installed via pacman"
elif command -v zypper &>/dev/null; then fi
sudo zypper -n install dua-cli fi
if [ "$DUA_INSTALLED" = "false" ] && command -v zypper &>/dev/null; then
info "Trying zypper..."
if sudo zypper -n install dua-cli 2>/dev/null; then
DUA_INSTALLED=true
success "dua installed via zypper" success "dua installed via zypper"
else fi
info "No supported package manager found. Using curl installer..." fi
# Fallback: download binary from GitHub releases
if [ "$DUA_INSTALLED" = "false" ]; then
info "No package manager had dua-cli. Downloading from GitHub releases..."
# Determine target # Determine target
case "$ARCH" in case "$ARCH" in
x86_64 | amd64) TARGET="x86_64-unknown-linux-musl" ;; x86_64 | amd64) TARGET="x86_64-unknown-linux-musl" ;;
aarch64 | arm64) TARGET="aarch64-unknown-linux-musl" ;; aarch64 | arm64) TARGET="aarch64-unknown-linux-musl" ;;
*) error "Unsupported Linux architecture: $ARCH" ;; *) error "Unsupported Linux architecture: $ARCH" ;;
esac esac
curl -LSfs https://raw.githubusercontent.com/Byron/dua-cli/master/ci/install.sh |
sh -s -- --git Byron/dua-cli --crate dua --target "$TARGET" TAG="$(get_latest_tag)"
success "dua installed via curl installer" VERSION="${TAG#v}"
FILENAME="dua-${VERSION}-${TARGET}.tar.gz"
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${TAG}/${FILENAME}"
info "Downloading: $DOWNLOAD_URL"
TMPDIR="$(mktemp -d)"
trap '[[ -d "${TMPDIR:-}" ]] && rm -rf "$TMPDIR"' EXIT
curl -fsSL --progress-bar -o "${TMPDIR}/${FILENAME}" "$DOWNLOAD_URL" ||
error "Download failed: $DOWNLOAD_URL"
info "Extracting..."
tar -xzf "${TMPDIR}/${FILENAME}" -C "$TMPDIR"
# Find the dua binary
DUA_BIN="$(find "$TMPDIR" -maxdepth 3 -type f -name "dua" | head -1)"
[[ -z "$DUA_BIN" ]] && error "Cannot find 'dua' binary in the archive."
mkdir -p "$INSTALL_DIR"
cp "$DUA_BIN" "${INSTALL_DIR}/dua"
chmod +x "${INSTALL_DIR}/dua"
success "dua installed to ${INSTALL_DIR}/dua"
# PATH instructions
if ! echo ":${PATH}:" | grep -q ":${INSTALL_DIR}:"; then
warn "'${INSTALL_DIR}' is not in your PATH."
warn "Add this line to your ~/.bashrc or ~/.zshrc:"
warn " export PATH=\"\$HOME/.local/bin:\$PATH\""
fi
fi fi
;; ;;
esac esac