Browse Source
feat: add Rust volume server CI release workflows and installer script
feat: add Rust volume server CI release workflows and installer script
- rust_binaries_release.yml: builds linux/darwin/windows on tags - rust_binaries_dev.yml: builds dev binaries on master push - install.sh: universal installer for Go weed and Rust volume serverrust-volume-server
3 changed files with 655 additions and 0 deletions
-
165.github/workflows/rust_binaries_dev.yml
-
215.github/workflows/rust_binaries_release.yml
-
275install.sh
@ -0,0 +1,165 @@ |
|||
name: "rust: build dev volume server binaries" |
|||
|
|||
on: |
|||
push: |
|||
branches: [ master ] |
|||
paths: |
|||
- 'seaweed-volume/**' |
|||
- '.github/workflows/rust_binaries_dev.yml' |
|||
|
|||
permissions: |
|||
contents: read |
|||
|
|||
jobs: |
|||
|
|||
cleanup: |
|||
permissions: |
|||
contents: write |
|||
runs-on: ubuntu-latest |
|||
steps: |
|||
- name: Delete old Rust volume dev assets |
|||
uses: mknejp/delete-release-assets@v1 |
|||
with: |
|||
token: ${{ github.token }} |
|||
tag: dev |
|||
fail-if-no-assets: false |
|||
assets: | |
|||
seaweed-volume-* |
|||
|
|||
build-rust-volume-dev-linux: |
|||
permissions: |
|||
contents: write |
|||
needs: cleanup |
|||
runs-on: ubuntu-22.04 |
|||
strategy: |
|||
matrix: |
|||
include: |
|||
- target: x86_64-unknown-linux-gnu |
|||
asset_suffix: linux-amd64 |
|||
|
|||
steps: |
|||
- uses: actions/checkout@v6 |
|||
|
|||
- name: Install protobuf compiler |
|||
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler |
|||
|
|||
- name: Install Rust toolchain |
|||
uses: dtolnay/rust-toolchain@stable |
|||
|
|||
- name: Cache cargo registry and target |
|||
uses: actions/cache@v4 |
|||
with: |
|||
path: | |
|||
~/.cargo/registry |
|||
~/.cargo/git |
|||
seaweed-volume/target |
|||
key: rust-dev-${{ matrix.target }}-${{ hashFiles('seaweed-volume/Cargo.lock') }} |
|||
restore-keys: | |
|||
rust-dev-${{ matrix.target }}- |
|||
|
|||
- name: Set BUILD_TIME |
|||
run: echo BUILD_TIME=$(date -u +%Y%m%d-%H%M) >> "$GITHUB_ENV" |
|||
|
|||
- name: Build Rust volume server (large disk) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: cd seaweed-volume && cargo build --release |
|||
|
|||
- name: Package large disk binary |
|||
run: | |
|||
cp seaweed-volume/target/release/seaweed-volume seaweed-volume-large-disk |
|||
tar czf "seaweed-volume-large-disk-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz" seaweed-volume-large-disk |
|||
rm seaweed-volume-large-disk |
|||
|
|||
- name: Build Rust volume server (normal) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: cd seaweed-volume && cargo build --release --no-default-features |
|||
|
|||
- name: Package normal binary |
|||
run: | |
|||
cp seaweed-volume/target/release/seaweed-volume seaweed-volume-normal |
|||
tar czf "seaweed-volume-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz" seaweed-volume-normal |
|||
rm seaweed-volume-normal |
|||
|
|||
- name: Upload dev release assets |
|||
uses: softprops/action-gh-release@v2 |
|||
with: |
|||
tag_name: dev |
|||
prerelease: true |
|||
files: | |
|||
seaweed-volume-large-disk-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz |
|||
seaweed-volume-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz |
|||
env: |
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|||
|
|||
build-rust-volume-dev-darwin: |
|||
permissions: |
|||
contents: write |
|||
needs: build-rust-volume-dev-linux |
|||
runs-on: macos-latest |
|||
strategy: |
|||
matrix: |
|||
include: |
|||
- target: aarch64-apple-darwin |
|||
asset_suffix: darwin-arm64 |
|||
- target: x86_64-apple-darwin |
|||
asset_suffix: darwin-amd64 |
|||
|
|||
steps: |
|||
- uses: actions/checkout@v6 |
|||
|
|||
- name: Install protobuf compiler |
|||
run: brew install protobuf |
|||
|
|||
- name: Install Rust toolchain |
|||
uses: dtolnay/rust-toolchain@stable |
|||
with: |
|||
targets: ${{ matrix.target }} |
|||
|
|||
- name: Cache cargo registry and target |
|||
uses: actions/cache@v4 |
|||
with: |
|||
path: | |
|||
~/.cargo/registry |
|||
~/.cargo/git |
|||
seaweed-volume/target |
|||
key: rust-dev-${{ matrix.target }}-${{ hashFiles('seaweed-volume/Cargo.lock') }} |
|||
restore-keys: | |
|||
rust-dev-${{ matrix.target }}- |
|||
|
|||
- name: Set BUILD_TIME |
|||
run: echo BUILD_TIME=$(date -u +%Y%m%d-%H%M) >> "$GITHUB_ENV" |
|||
|
|||
- name: Build Rust volume server (large disk) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: cd seaweed-volume && cargo build --release --target ${{ matrix.target }} |
|||
|
|||
- name: Package large disk binary |
|||
run: | |
|||
cp seaweed-volume/target/${{ matrix.target }}/release/seaweed-volume seaweed-volume-large-disk |
|||
tar czf "seaweed-volume-large-disk-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz" seaweed-volume-large-disk |
|||
rm seaweed-volume-large-disk |
|||
|
|||
- name: Build Rust volume server (normal) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: cd seaweed-volume && cargo build --release --target ${{ matrix.target }} --no-default-features |
|||
|
|||
- name: Package normal binary |
|||
run: | |
|||
cp seaweed-volume/target/${{ matrix.target }}/release/seaweed-volume seaweed-volume-normal |
|||
tar czf "seaweed-volume-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz" seaweed-volume-normal |
|||
rm seaweed-volume-normal |
|||
|
|||
- name: Upload dev release assets |
|||
uses: softprops/action-gh-release@v2 |
|||
with: |
|||
tag_name: dev |
|||
prerelease: true |
|||
files: | |
|||
seaweed-volume-large-disk-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz |
|||
seaweed-volume-${{ env.BUILD_TIME }}-${{ matrix.asset_suffix }}.tar.gz |
|||
env: |
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|||
@ -0,0 +1,215 @@ |
|||
name: "rust: build versioned volume server binaries" |
|||
|
|||
on: |
|||
push: |
|||
tags: |
|||
- '*' |
|||
|
|||
workflow_dispatch: |
|||
|
|||
permissions: |
|||
contents: read |
|||
|
|||
jobs: |
|||
|
|||
build-rust-volume-linux: |
|||
permissions: |
|||
contents: write |
|||
runs-on: ubuntu-22.04 |
|||
strategy: |
|||
matrix: |
|||
include: |
|||
- target: x86_64-unknown-linux-gnu |
|||
asset_suffix: linux_amd64 |
|||
- target: aarch64-unknown-linux-gnu |
|||
asset_suffix: linux_arm64 |
|||
cross: true |
|||
|
|||
steps: |
|||
- uses: actions/checkout@v6 |
|||
|
|||
- name: Install protobuf compiler |
|||
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler |
|||
|
|||
- name: Install Rust toolchain |
|||
uses: dtolnay/rust-toolchain@stable |
|||
with: |
|||
targets: ${{ matrix.target }} |
|||
|
|||
- name: Install cross-compilation tools |
|||
if: matrix.cross |
|||
run: | |
|||
sudo apt-get install -y gcc-aarch64-linux-gnu |
|||
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV" |
|||
|
|||
- name: Cache cargo registry and target |
|||
uses: actions/cache@v4 |
|||
with: |
|||
path: | |
|||
~/.cargo/registry |
|||
~/.cargo/git |
|||
seaweed-volume/target |
|||
key: rust-release-${{ matrix.target }}-${{ hashFiles('seaweed-volume/Cargo.lock') }} |
|||
restore-keys: | |
|||
rust-release-${{ matrix.target }}- |
|||
|
|||
- name: Build Rust volume server (large disk) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: | |
|||
cd seaweed-volume |
|||
cargo build --release --target ${{ matrix.target }} |
|||
|
|||
- name: Build Rust volume server (normal) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: | |
|||
cd seaweed-volume |
|||
cargo build --release --target ${{ matrix.target }} --no-default-features |
|||
|
|||
- name: Package binaries |
|||
run: | |
|||
# Large disk (default, 5bytes feature) |
|||
cp seaweed-volume/target/${{ matrix.target }}/release/seaweed-volume seaweed-volume-large-disk |
|||
tar czf seaweed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz seaweed-volume-large-disk |
|||
rm seaweed-volume-large-disk |
|||
|
|||
# Normal volume size |
|||
cp seaweed-volume/target/${{ matrix.target }}/release/seaweed-volume seaweed-volume-normal |
|||
tar czf seaweed-volume_${{ matrix.asset_suffix }}.tar.gz seaweed-volume-normal |
|||
rm seaweed-volume-normal |
|||
|
|||
- name: Upload release assets |
|||
uses: softprops/action-gh-release@v2 |
|||
with: |
|||
files: | |
|||
seaweed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz |
|||
seaweed-volume_${{ matrix.asset_suffix }}.tar.gz |
|||
env: |
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|||
|
|||
build-rust-volume-darwin: |
|||
permissions: |
|||
contents: write |
|||
runs-on: macos-latest |
|||
strategy: |
|||
matrix: |
|||
include: |
|||
- target: x86_64-apple-darwin |
|||
asset_suffix: darwin_amd64 |
|||
- target: aarch64-apple-darwin |
|||
asset_suffix: darwin_arm64 |
|||
|
|||
steps: |
|||
- uses: actions/checkout@v6 |
|||
|
|||
- name: Install protobuf compiler |
|||
run: brew install protobuf |
|||
|
|||
- name: Install Rust toolchain |
|||
uses: dtolnay/rust-toolchain@stable |
|||
with: |
|||
targets: ${{ matrix.target }} |
|||
|
|||
- name: Cache cargo registry and target |
|||
uses: actions/cache@v4 |
|||
with: |
|||
path: | |
|||
~/.cargo/registry |
|||
~/.cargo/git |
|||
seaweed-volume/target |
|||
key: rust-release-${{ matrix.target }}-${{ hashFiles('seaweed-volume/Cargo.lock') }} |
|||
restore-keys: | |
|||
rust-release-${{ matrix.target }}- |
|||
|
|||
- name: Build Rust volume server (large disk) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: | |
|||
cd seaweed-volume |
|||
cargo build --release --target ${{ matrix.target }} |
|||
|
|||
- name: Build Rust volume server (normal) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: | |
|||
cd seaweed-volume |
|||
cargo build --release --target ${{ matrix.target }} --no-default-features |
|||
|
|||
- name: Package binaries |
|||
run: | |
|||
cp seaweed-volume/target/${{ matrix.target }}/release/seaweed-volume seaweed-volume-large-disk |
|||
tar czf seaweed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz seaweed-volume-large-disk |
|||
rm seaweed-volume-large-disk |
|||
|
|||
cp seaweed-volume/target/${{ matrix.target }}/release/seaweed-volume seaweed-volume-normal |
|||
tar czf seaweed-volume_${{ matrix.asset_suffix }}.tar.gz seaweed-volume-normal |
|||
rm seaweed-volume-normal |
|||
|
|||
- name: Upload release assets |
|||
uses: softprops/action-gh-release@v2 |
|||
with: |
|||
files: | |
|||
seaweed-volume_large_disk_${{ matrix.asset_suffix }}.tar.gz |
|||
seaweed-volume_${{ matrix.asset_suffix }}.tar.gz |
|||
env: |
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|||
|
|||
build-rust-volume-windows: |
|||
permissions: |
|||
contents: write |
|||
runs-on: windows-latest |
|||
|
|||
steps: |
|||
- uses: actions/checkout@v6 |
|||
|
|||
- name: Install protobuf compiler |
|||
run: choco install protoc -y |
|||
|
|||
- name: Install Rust toolchain |
|||
uses: dtolnay/rust-toolchain@stable |
|||
|
|||
- name: Cache cargo registry and target |
|||
uses: actions/cache@v4 |
|||
with: |
|||
path: | |
|||
~/.cargo/registry |
|||
~/.cargo/git |
|||
seaweed-volume/target |
|||
key: rust-release-windows-${{ hashFiles('seaweed-volume/Cargo.lock') }} |
|||
restore-keys: | |
|||
rust-release-windows- |
|||
|
|||
- name: Build Rust volume server (large disk) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: | |
|||
cd seaweed-volume |
|||
cargo build --release |
|||
|
|||
- name: Build Rust volume server (normal) |
|||
env: |
|||
SEAWEEDFS_COMMIT: ${{ github.sha }} |
|||
run: | |
|||
cd seaweed-volume |
|||
cargo build --release --no-default-features |
|||
|
|||
- name: Package binaries |
|||
shell: bash |
|||
run: | |
|||
cp seaweed-volume/target/release/seaweed-volume.exe seaweed-volume-large-disk.exe |
|||
7z a seaweed-volume_large_disk_windows_amd64.zip seaweed-volume-large-disk.exe |
|||
rm seaweed-volume-large-disk.exe |
|||
|
|||
cp seaweed-volume/target/release/seaweed-volume.exe seaweed-volume-normal.exe |
|||
7z a seaweed-volume_windows_amd64.zip seaweed-volume-normal.exe |
|||
rm seaweed-volume-normal.exe |
|||
|
|||
- name: Upload release assets |
|||
uses: softprops/action-gh-release@v2 |
|||
with: |
|||
files: | |
|||
seaweed-volume_large_disk_windows_amd64.zip |
|||
seaweed-volume_windows_amd64.zip |
|||
env: |
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|||
@ -0,0 +1,275 @@ |
|||
#!/bin/bash |
|||
# |
|||
# SeaweedFS Installer |
|||
# Downloads Go and/or Rust binaries from GitHub releases. |
|||
# |
|||
# Usage: |
|||
# curl -fsSL https://raw.githubusercontent.com/seaweedfs/seaweedfs/master/install.sh | bash |
|||
# curl -fsSL ... | bash -s -- --component volume-rust --large-disk |
|||
# curl -fsSL ... | bash -s -- --version v3.93 --dir /usr/local/bin |
|||
# |
|||
# Options: |
|||
# --component COMP Which binary to install: weed, volume-rust, all (default: weed) |
|||
# --version VER Release version tag (default: latest) |
|||
# --large-disk Use large disk variant (5-byte offset, 8TB max volume) |
|||
# --dir DIR Installation directory (default: /usr/local/bin) |
|||
# --help Show this help message |
|||
|
|||
set -euo pipefail |
|||
|
|||
REPO="seaweedfs/seaweedfs" |
|||
COMPONENT="weed" |
|||
VERSION="" |
|||
LARGE_DISK=false |
|||
INSTALL_DIR="/usr/local/bin" |
|||
|
|||
# Colors (if terminal supports them) |
|||
if [ -t 1 ]; then |
|||
RED='\033[0;31m' |
|||
GREEN='\033[0;32m' |
|||
YELLOW='\033[0;33m' |
|||
BLUE='\033[0;34m' |
|||
NC='\033[0m' |
|||
else |
|||
RED='' GREEN='' YELLOW='' BLUE='' NC='' |
|||
fi |
|||
|
|||
info() { echo -e "${BLUE}[info]${NC} $*"; } |
|||
ok() { echo -e "${GREEN}[ok]${NC} $*"; } |
|||
warn() { echo -e "${YELLOW}[warn]${NC} $*"; } |
|||
error() { echo -e "${RED}[error]${NC} $*" >&2; exit 1; } |
|||
|
|||
usage() { |
|||
sed -n '/^# Usage:/,/^$/p' "$0" | sed 's/^# \?//' |
|||
exit 0 |
|||
} |
|||
|
|||
# Parse arguments |
|||
while [ $# -gt 0 ]; do |
|||
case "$1" in |
|||
--component) COMPONENT="$2"; shift 2 ;; |
|||
--version) VERSION="$2"; shift 2 ;; |
|||
--large-disk) LARGE_DISK=true; shift ;; |
|||
--dir) INSTALL_DIR="$2"; shift 2 ;; |
|||
--help|-h) usage ;; |
|||
*) error "Unknown option: $1. Use --help for usage." ;; |
|||
esac |
|||
done |
|||
|
|||
# Detect OS and architecture |
|||
detect_platform() { |
|||
local os arch |
|||
|
|||
case "$(uname -s)" in |
|||
Linux*) os="linux" ;; |
|||
Darwin*) os="darwin" ;; |
|||
MINGW*|MSYS*|CYGWIN*) os="windows" ;; |
|||
FreeBSD*) os="freebsd" ;; |
|||
*) error "Unsupported OS: $(uname -s)" ;; |
|||
esac |
|||
|
|||
case "$(uname -m)" in |
|||
x86_64|amd64) arch="amd64" ;; |
|||
aarch64|arm64) arch="arm64" ;; |
|||
armv7l|armv6l) arch="arm" ;; |
|||
*) error "Unsupported architecture: $(uname -m)" ;; |
|||
esac |
|||
|
|||
echo "${os}" "${arch}" |
|||
} |
|||
|
|||
# Get latest release tag from GitHub API |
|||
get_latest_version() { |
|||
local url="https://api.github.com/repos/${REPO}/releases/latest" |
|||
if command -v curl &>/dev/null; then |
|||
curl -fsSL "$url" | grep '"tag_name"' | head -1 | sed 's/.*"tag_name": *"\([^"]*\)".*/\1/' |
|||
elif command -v wget &>/dev/null; then |
|||
wget -qO- "$url" | grep '"tag_name"' | head -1 | sed 's/.*"tag_name": *"\([^"]*\)".*/\1/' |
|||
else |
|||
error "Neither curl nor wget found. Please install one." |
|||
fi |
|||
} |
|||
|
|||
# Download a file |
|||
download() { |
|||
local url="$1" dest="$2" |
|||
info "Downloading ${url}" |
|||
if command -v curl &>/dev/null; then |
|||
curl -fsSL -o "$dest" "$url" |
|||
elif command -v wget &>/dev/null; then |
|||
wget -qO "$dest" "$url" |
|||
fi |
|||
} |
|||
|
|||
# Build Go weed binary asset name |
|||
go_asset_name() { |
|||
local os="$1" arch="$2" |
|||
local suffix="${os}_${arch}" |
|||
if [ "$LARGE_DISK" = true ]; then |
|||
suffix="${suffix}_large_disk" |
|||
fi |
|||
echo "${suffix}.tar.gz" |
|||
} |
|||
|
|||
# Build Rust volume server asset name |
|||
rust_asset_name() { |
|||
local os="$1" arch="$2" |
|||
local prefix="seaweed-volume" |
|||
if [ "$LARGE_DISK" = true ]; then |
|||
prefix="seaweed-volume_large_disk" |
|||
else |
|||
prefix="seaweed-volume" |
|||
fi |
|||
local suffix="${os}_${arch}" |
|||
if [ "$os" = "windows" ]; then |
|||
echo "${prefix}_${suffix}.zip" |
|||
else |
|||
echo "${prefix}_${suffix}.tar.gz" |
|||
fi |
|||
} |
|||
|
|||
# Install a single component |
|||
install_component() { |
|||
local component="$1" os="$2" arch="$3" |
|||
local asset_name download_url tmpdir |
|||
|
|||
tmpdir="$(mktemp -d)" |
|||
trap "rm -rf '$tmpdir'" EXIT |
|||
|
|||
case "$component" in |
|||
weed) |
|||
asset_name="$(go_asset_name "$os" "$arch")" |
|||
download_url="https://github.com/${REPO}/releases/download/${VERSION}/${asset_name}" |
|||
download "$download_url" "${tmpdir}/${asset_name}" |
|||
|
|||
info "Extracting ${asset_name}..." |
|||
tar xzf "${tmpdir}/${asset_name}" -C "$tmpdir" |
|||
|
|||
# The Go release action puts the binary inside a directory |
|||
local weed_bin |
|||
weed_bin="$(find "$tmpdir" -name 'weed' -type f | head -1)" |
|||
if [ -z "$weed_bin" ]; then |
|||
weed_bin="$(find "$tmpdir" -name 'weed.exe' -type f | head -1)" |
|||
fi |
|||
if [ -z "$weed_bin" ]; then |
|||
error "Could not find weed binary in archive" |
|||
fi |
|||
|
|||
chmod +x "$weed_bin" |
|||
install_binary "$weed_bin" "weed" |
|||
ok "Installed weed to ${INSTALL_DIR}/weed" |
|||
;; |
|||
|
|||
volume-rust) |
|||
# Check platform support for Rust volume server |
|||
case "$os" in |
|||
linux|darwin|windows) ;; |
|||
*) error "Rust volume server is not available for ${os}. Supported: linux, darwin, windows" ;; |
|||
esac |
|||
case "$arch" in |
|||
amd64|arm64) ;; |
|||
*) error "Rust volume server is not available for ${arch}. Supported: amd64, arm64" ;; |
|||
esac |
|||
|
|||
asset_name="$(rust_asset_name "$os" "$arch")" |
|||
download_url="https://github.com/${REPO}/releases/download/${VERSION}/${asset_name}" |
|||
download "$download_url" "${tmpdir}/${asset_name}" |
|||
|
|||
info "Extracting ${asset_name}..." |
|||
if [ "$os" = "windows" ]; then |
|||
unzip -q "${tmpdir}/${asset_name}" -d "$tmpdir" |
|||
else |
|||
tar xzf "${tmpdir}/${asset_name}" -C "$tmpdir" |
|||
fi |
|||
|
|||
local rust_bin |
|||
if [ "$LARGE_DISK" = true ]; then |
|||
rust_bin="$(find "$tmpdir" -name 'seaweed-volume-large-disk*' -type f | head -1)" |
|||
else |
|||
rust_bin="$(find "$tmpdir" -name 'seaweed-volume-normal*' -type f | head -1)" |
|||
fi |
|||
if [ -z "$rust_bin" ]; then |
|||
rust_bin="$(find "$tmpdir" -name 'seaweed-volume*' -type f | head -1)" |
|||
fi |
|||
if [ -z "$rust_bin" ]; then |
|||
error "Could not find seaweed-volume binary in archive" |
|||
fi |
|||
|
|||
chmod +x "$rust_bin" |
|||
local dest_name="seaweed-volume" |
|||
if [ "$os" = "windows" ]; then |
|||
dest_name="seaweed-volume.exe" |
|||
fi |
|||
install_binary "$rust_bin" "$dest_name" |
|||
ok "Installed seaweed-volume to ${INSTALL_DIR}/${dest_name}" |
|||
;; |
|||
|
|||
*) |
|||
error "Unknown component: ${component}. Use: weed, volume-rust, all" |
|||
;; |
|||
esac |
|||
} |
|||
|
|||
# Copy binary to install dir, using sudo if needed |
|||
install_binary() { |
|||
local src="$1" name="$2" |
|||
local dest="${INSTALL_DIR}/${name}" |
|||
|
|||
mkdir -p "$INSTALL_DIR" 2>/dev/null || true |
|||
|
|||
if [ -w "$INSTALL_DIR" ]; then |
|||
cp "$src" "$dest" |
|||
else |
|||
info "Need elevated permissions to write to ${INSTALL_DIR}" |
|||
sudo cp "$src" "$dest" |
|||
fi |
|||
chmod +x "$dest" 2>/dev/null || sudo chmod +x "$dest" |
|||
} |
|||
|
|||
main() { |
|||
info "SeaweedFS Installer" |
|||
|
|||
read -r os arch <<< "$(detect_platform)" |
|||
info "Detected platform: ${os}/${arch}" |
|||
|
|||
if [ -z "$VERSION" ]; then |
|||
info "Resolving latest release..." |
|||
VERSION="$(get_latest_version)" |
|||
if [ -z "$VERSION" ]; then |
|||
error "Could not determine latest version. Specify with --version" |
|||
fi |
|||
fi |
|||
info "Version: ${VERSION}" |
|||
|
|||
if [ "$LARGE_DISK" = true ]; then |
|||
info "Variant: large disk (8TB max volume)" |
|||
else |
|||
info "Variant: normal (32GB max volume)" |
|||
fi |
|||
|
|||
case "$COMPONENT" in |
|||
all) |
|||
install_component "weed" "$os" "$arch" |
|||
install_component "volume-rust" "$os" "$arch" |
|||
;; |
|||
*) |
|||
install_component "$COMPONENT" "$os" "$arch" |
|||
;; |
|||
esac |
|||
|
|||
echo "" |
|||
ok "Installation complete!" |
|||
if [ "$COMPONENT" = "weed" ] || [ "$COMPONENT" = "all" ]; then |
|||
info " weed: ${INSTALL_DIR}/weed" |
|||
fi |
|||
if [ "$COMPONENT" = "volume-rust" ] || [ "$COMPONENT" = "all" ]; then |
|||
info " seaweed-volume: ${INSTALL_DIR}/seaweed-volume" |
|||
fi |
|||
echo "" |
|||
info "Quick start:" |
|||
info " weed master # Start master server" |
|||
info " weed volume -mserver=localhost:9333 # Start Go volume server" |
|||
info " seaweed-volume -mserver localhost:9333 # Start Rust volume server" |
|||
} |
|||
|
|||
main |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue