fine tuning
This commit is contained in:
@@ -11,11 +11,10 @@ echo ""
|
||||
# --- Step 1: Install system packages ---
|
||||
echo "[1/4] Installing system packages..."
|
||||
sudo apt update -qq
|
||||
sudo apt install -y -qq \
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt install -y -qq \
|
||||
xfce4 xfce4-goodies \
|
||||
tigervnc-standalone-server tigervnc-common \
|
||||
dbus-x11 \
|
||||
> /dev/null 2>&1
|
||||
dbus-x11
|
||||
echo " Done."
|
||||
|
||||
# --- Step 2: Install Brave browser (native .deb, not snap) ---
|
||||
@@ -26,7 +25,7 @@ if ! command -v brave-browser-stable > /dev/null 2>&1; then
|
||||
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg] https://brave-browser-apt-release.s3.brave.com/ stable main" \
|
||||
| sudo tee /etc/apt/sources.list.d/brave-browser-release.list > /dev/null
|
||||
sudo apt update -qq
|
||||
sudo apt install -y -qq brave-browser > /dev/null 2>&1
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt install -y -qq brave-browser
|
||||
fi
|
||||
# Fix launcher symlink
|
||||
if [ -f /opt/brave.com/brave/brave-browser ]; then
|
||||
|
||||
@@ -13,6 +13,13 @@
|
||||
|
||||
set -e
|
||||
|
||||
# Resolve the real user's home even when running under sudo
|
||||
if [[ -n "${SUDO_USER:-}" ]]; then
|
||||
REAL_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
|
||||
else
|
||||
REAL_HOME="$HOME"
|
||||
fi
|
||||
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
@@ -72,7 +79,7 @@ if [[ "$SERVICES" == "all" ]]; then
|
||||
fi
|
||||
|
||||
# ─── compose directory ──────────────────────────────────────────────────────
|
||||
prompt_value COMPOSE_DIR "Docker Compose directory" "$HOME/.local/dockers"
|
||||
prompt_value COMPOSE_DIR "Docker Compose directory" "$REAL_HOME/.local/dockers"
|
||||
mkdir -p "$COMPOSE_DIR"
|
||||
|
||||
# ─── build compose file ─────────────────────────────────────────────────────
|
||||
|
||||
+35
-12
@@ -20,6 +20,13 @@ has() { command -v "$1" &>/dev/null; }
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
# Resolve the real user's home even when running under sudo
|
||||
if [[ -n "${SUDO_USER:-}" ]]; then
|
||||
REAL_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
|
||||
else
|
||||
REAL_HOME="$HOME"
|
||||
fi
|
||||
|
||||
# ─── detect package manager ────────────────────────────────────────────────────
|
||||
if has apt; then
|
||||
PM=apt
|
||||
@@ -239,7 +246,7 @@ esac
|
||||
|
||||
# symlink fdfind → fd (apt installs as fdfind)
|
||||
if has fdfind && ! has fd; then
|
||||
sudo ln -sf "$(which fdfind)" /usr/local/bin/fd
|
||||
sudo ln -sf "$(command -v fdfind)" /usr/local/bin/fd
|
||||
ok "Symlinked fdfind → fd"
|
||||
fi
|
||||
|
||||
@@ -310,11 +317,11 @@ echo ""
|
||||
echo "── Auto-suspend (disable for server) ──"
|
||||
|
||||
# Disable system suspend/hibernate
|
||||
if systemctl is-enabled sleep.target 2>/dev/null | grep -q "enabled\|masked"; then
|
||||
if systemctl is-enabled sleep.target 2>/dev/null | grep -q "masked"; then
|
||||
skip "sleep targets already masked"
|
||||
else
|
||||
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target 2>/dev/null
|
||||
ok "Masked sleep/suspend targets"
|
||||
else
|
||||
skip "sleep targets already masked"
|
||||
fi
|
||||
|
||||
# Configure logind to ignore idle — patch individual keys, don't overwrite the file
|
||||
@@ -375,8 +382,8 @@ case $PM in
|
||||
install_node22_apt
|
||||
if [ -f "$SYSTEM_NODE" ] && [ "$("$SYSTEM_NODE" -v 2>/dev/null | cut -d. -f1 | tr -d 'v')" = "22" ]; then
|
||||
ok "node v$("$SYSTEM_NODE" -v) installed at $SYSTEM_NODE"
|
||||
if has node && [ "$(which node)" != "$SYSTEM_NODE" ]; then
|
||||
warn "Shell resolves 'node' to $(which node) — system node is at $SYSTEM_NODE"
|
||||
if has node && [ "$(command -v node)" != "$SYSTEM_NODE" ]; then
|
||||
warn "Shell resolves 'node' to $(command -v node) — system node is at $SYSTEM_NODE"
|
||||
warn "nvm may shadow it in interactive shells; systemd services will use $SYSTEM_NODE"
|
||||
fi
|
||||
else
|
||||
@@ -449,8 +456,9 @@ install_go() {
|
||||
esac
|
||||
echo " Installing Go ${GOLANG_VERSION} from official tarball..."
|
||||
curl -fsSL "https://go.dev/dl/go${GOLANG_VERSION}.linux-${GO_ARCH}.tar.gz" -o /tmp/go.tar.gz
|
||||
rm -rf "$HOME/.local/go"
|
||||
mkdir -p "$HOME/.local"
|
||||
# Only remove old installation after successful download
|
||||
rm -rf "$HOME/.local/go"
|
||||
tar -C "$HOME/.local" -xzf /tmp/go.tar.gz
|
||||
rm /tmp/go.tar.gz
|
||||
export GOPATH="$HOME/.local/go-path"
|
||||
@@ -522,6 +530,21 @@ case $PM in
|
||||
brew) ;; # not needed on macOS
|
||||
esac
|
||||
|
||||
# Vorbis/OGG/FLAC dev headers (needed by cliamp's Go dependencies)
|
||||
case $PM in
|
||||
apt)
|
||||
for pkg in libvorbis-dev libogg-dev libflac-dev; do
|
||||
if dpkg -s "$pkg" &>/dev/null 2>&1; then skip "$pkg"; else PULSE_PKGS+=("$pkg"); fi
|
||||
done
|
||||
;;
|
||||
pacman)
|
||||
for pkg in libvorbis libogg flac; do
|
||||
if pacman -Qi "$pkg" &>/dev/null 2>&1; then skip "$pkg"; else PULSE_PKGS+=("$pkg"); fi
|
||||
done
|
||||
;;
|
||||
brew) ;; # not needed on macOS
|
||||
esac
|
||||
|
||||
if [ ${#PULSE_PKGS[@]} -gt 0 ]; then
|
||||
install_pkg "${PULSE_PKGS[@]}"
|
||||
ok "Installed: ${PULSE_PKGS[*]}"
|
||||
@@ -535,7 +558,7 @@ GOPATH_BIN="${GOPATH:-$HOME/.local/go-path}/bin"
|
||||
export PATH="$GOPATH_BIN:$PATH"
|
||||
|
||||
if has cliamp; then
|
||||
skip "cliamp ($(which cliamp))"
|
||||
skip "cliamp ($(command -v cliamp))"
|
||||
else
|
||||
if ! has go; then
|
||||
warn "Go not installed — skipping cliamp build"
|
||||
@@ -548,7 +571,7 @@ else
|
||||
if [ -f "$GOPATH_BIN/cliamp" ]; then
|
||||
ok "cliamp installed at $GOPATH_BIN/cliamp"
|
||||
else
|
||||
fail "cliamp build failed"
|
||||
warn "cliamp build failed"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -708,7 +731,7 @@ else
|
||||
# Use explicit path to system npm if available, to avoid nvm conflicts
|
||||
SYSTEM_NPM="/usr/bin/npm"
|
||||
if [ ! -f "$SYSTEM_NPM" ]; then
|
||||
SYSTEM_NPM="$(which npm)"
|
||||
SYSTEM_NPM="$(command -v npm)"
|
||||
fi
|
||||
|
||||
# Set npm prefix to system location so all users can access packages
|
||||
@@ -817,9 +840,9 @@ if [ "$GENERATE_ENV" = true ]; then
|
||||
read -r ENV_PUBLIC_URL
|
||||
done
|
||||
|
||||
echo -n " DATA_PATH [/mnt/data]: "
|
||||
echo -n " DATA_PATH [$REAL_HOME/.local/data]: "
|
||||
read -r ENV_DATA_PATH
|
||||
ENV_DATA_PATH="${ENV_DATA_PATH:-/mnt/data}"
|
||||
ENV_DATA_PATH="${ENV_DATA_PATH:-$REAL_HOME/.local/data}"
|
||||
|
||||
MAIL_DEFAULT="${DOCKER_MAIL_TRANSPORT:-smtp://127.0.0.1:1025}"
|
||||
echo -n " MAIL_TRANSPORT [$MAIL_DEFAULT]: "
|
||||
|
||||
+6
-14
@@ -33,20 +33,7 @@ type ProbeResult = {
|
||||
error?: string;
|
||||
};
|
||||
|
||||
const PI_PROVIDERS: { key: string; piId: string }[] = [
|
||||
{ key: 'Anthropic', piId: 'anthropic' },
|
||||
{ key: 'OpenAI', piId: 'openai' },
|
||||
{ key: 'Google', piId: 'google' },
|
||||
{ key: 'Groq', piId: 'groq' },
|
||||
{ key: 'Mistral', piId: 'mistral' },
|
||||
{ key: 'xAI', piId: 'xai' },
|
||||
{ key: 'OpenRouter', piId: 'openrouter' },
|
||||
{ key: 'MiniMax', piId: 'minimax' },
|
||||
{ key: 'Hugging Face', piId: 'huggingface' },
|
||||
{ key: 'Azure OpenAI', piId: 'azure-openai-responses' },
|
||||
{ key: 'ZAI', piId: 'zai' },
|
||||
{ key: 'Cerebras', piId: 'cerebras' },
|
||||
];
|
||||
type PiProvider = { key: string; piId: string };
|
||||
|
||||
type ProbeState = { step: 'url' } | { step: 'probing' } | { step: 'auth'; probe: ProbeResult } | { step: 'saving' };
|
||||
|
||||
@@ -55,6 +42,11 @@ export const AIHarnessesSection = () => {
|
||||
const queryClient = useQueryClient();
|
||||
const [installing, setInstalling] = useState(false);
|
||||
|
||||
const { data: PI_PROVIDERS = [] as PiProvider[] } = useQuery({
|
||||
queryKey: ['PI_MONO_PROVIDERS'],
|
||||
queryFn: () => client.get<PiProvider[]>('/server-settings/pi-mono/providers'),
|
||||
});
|
||||
|
||||
const { data: piMonoVersion, isLoading: piMonoLoading } = useQuery({
|
||||
queryKey: ['PI_MONO_VERSION'],
|
||||
queryFn: () => client.get<VersionInfo>('/server-settings/pi-mono/version'),
|
||||
|
||||
@@ -366,6 +366,10 @@ export const PROVIDERS: { key: string; piId: string }[] = [
|
||||
{ key: 'Cerebras', piId: 'cerebras' },
|
||||
];
|
||||
|
||||
piMonoRouter.get('/providers', async (ctx) => {
|
||||
return ctx.json(PROVIDERS);
|
||||
});
|
||||
|
||||
piMonoRouter.get('/auth', async (ctx) => {
|
||||
const auth = await readAuthJson();
|
||||
const providers = PROVIDERS.filter((p) => auth[p.piId]?.key?.trim()).map((p) => p.key);
|
||||
|
||||
Reference in New Issue
Block a user