diff --git a/scripts/install-server.sh b/scripts/install-server.sh index 1c21ec9..3061379 100755 --- a/scripts/install-server.sh +++ b/scripts/install-server.sh @@ -1,75 +1,63 @@ #!/usr/bin/env bash set -euo pipefail +ORIG_USER=${SUDO_USER:-$(id -un)} -# 1) Install system dependencies (Arch Linux) -sudo pacman -S --needed --noconfirm git rustup protobuf gcc pulseaudio tailscale snapd -# Enable and start snapd if not already: -sudo systemctl enable --now snapd.socket -# Create classic symlink for snap (one-time): -sudo ln -sf /var/lib/snapd/snap /snap -# Install µStreamer via Snap (if you actually need streaming) -if ! snap list | grep -q ustreamer; then - sudo snap install ustreamer +# 1. base packages (Arch + yay if missing) +sudo pacman -Syq --needed --noconfirm git rustup protobuf gcc pipewire pipewire-pulse tailscale base-devel +if ! command -v yay >/dev/null 2>&1; then + echo "→ installing yay from AUR ..." + sudo -u "$ORIG_USER" bash -c ' + cd /tmp && git clone --depth 1 https://aur.archlinux.org/yay.git && + cd yay && makepkg -si --noconfirm' fi -# 2) Ensure Rust toolchain is present -rustup toolchain install stable -sudo install -Dm755 target/release/navka-server /usr/local/bin/navka-server -sudo install -Dm755 gadget/navka-gadget.sh /usr/local/bin/navka-gadget.sh +# 2. Rust tool-chain for both accounts +sudo rustup default stable +sudo -u "$ORIG_USER" rustup default stable -# 3) Determine repo URL from the current directory -REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)" -REPO_URL="$(git -C "$REPO_DIR" config --get remote.origin.url)" -if [ -z "$REPO_URL" ]; then - echo "Error: could not read git remote.origin.url from $REPO_DIR" - exit 1 +# 3. writable build tree under /var/src (create once, chown to user) +SRC_DIR=/var/src/navka +if [[ ! -d $SRC_DIR ]]; then + sudo mkdir -p /var/src + sudo chown "$ORIG_USER":"$ORIG_USER" /var/src fi - -# 4) Where to clone/build if not already present -WORK="/opt/navka" -if [ ! -d "$WORK" ]; then - sudo git clone "$REPO_URL" "$WORK" +if [[ -d $SRC_DIR/.git ]]; then + sudo -u "$ORIG_USER" git -C "$SRC_DIR" pull --ff-only else - sudo git -C "$WORK" fetch --all - sudo git -C "$WORK" reset --hard origin/$(sudo git -C "$WORK" rev-parse --abbrev-ref HEAD) + sudo -u "$ORIG_USER" git clone "$PWD" "$SRC_DIR" fi -# 5) Build navka-server (and ensure gadget script is in place) -cd "$WORK" -cargo build --release --manifest-path server/Cargo.toml +# 4. build (as the normal user – avoids root-owned Cargo.lock) +sudo -u "$ORIG_USER" bash -c "cd '$SRC_DIR/server' && cargo build --release" -sudo install -Dm755 target/release/navka-server /usr/local/bin/navka-server -sudo install -Dm755 gadget/navka-gadget.sh /usr/local/bin/navka-gadget.sh +# 5. install payload +sudo install -Dm755 "$SRC_DIR/server/target/release/navka-server" /usr/local/bin/navka-server +sudo install -Dm755 "$SRC_DIR/navka-core.sh" /usr/local/bin/navka-core.sh -# 6) Install systemd unit for navka-gadget (USB gadget) -cat | sudo tee /etc/systemd/system/navka-gadget.service >/dev/null <<'EOF' +# 6. systemd units +cat <<'UNIT' | sudo tee /etc/systemd/system/navka-core.service >/dev/null [Unit] -Description=Navka USB Gadget (HID + Audio) +Description=Navka USB gadget bring-up [Service] Type=oneshot -ExecStart=/usr/local/bin/navka-gadget.sh +ExecStart=/usr/local/bin/navka-core.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target -EOF +UNIT -# 7) Install systemd unit for navka-server (Rust relay) -cat | sudo tee /etc/systemd/system/navka-server.service >/dev/null <<'EOF' +cat <<'UNIT' | sudo tee /etc/systemd/system/navka-server.service >/dev/null [Unit] -Description=Navka Relay Server (HID over gRPC) -After=network.target navka-gadget.service - +Description=Navka gRPC relay +After=network.target navka-core.service [Service] ExecStart=/usr/local/bin/navka-server Restart=always User=root - [Install] WantedBy=multi-user.target -EOF +UNIT -# 8) Reload & enable both services sudo systemctl daemon-reload -sudo systemctl enable --now navka-gadget.service navka-server.service - -echo "navka-server installed and running." +sudo systemctl enable --now navka-core.service navka-server.service +echo "✅ navka-server installed and running."