Feat: Ollama-Installation und systemd-Service-Konfiguration mit anpassbarem Modellpfad hinzugefügt
Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
@@ -41,7 +41,7 @@ Dieses Repository ist ein modulares, automatisiertes Setup- und Konfigurations-F
|
|||||||
│ ├── 03-bootloader.sh # GRUB Kernel-Parameter, Vimix-Theme, Plymouth Solar
|
│ ├── 03-bootloader.sh # GRUB Kernel-Parameter, Vimix-Theme, Plymouth Solar
|
||||||
│ ├── 04-packages.sh # Installation der thematischen Paketlisten
|
│ ├── 04-packages.sh # Installation der thematischen Paketlisten
|
||||||
│ ├── 05-fonts.sh # Download & Installation von Coding- & Nerd-Fonts
|
│ ├── 05-fonts.sh # Download & Installation von Coding- & Nerd-Fonts
|
||||||
│ ├── 06-services.sh # Aktivierung von AppArmor, Docker, Libvirt, zram
|
│ ├── 06-services.sh # Aktivierung von AppArmor, Docker, Libvirt, zram, Ollama
|
||||||
│ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync
|
│ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync
|
||||||
│ ├── 08-flatpaks-apps.sh # Flathub Setup, Flatpaks, Spotify, Waydroid, MIME-Types
|
│ ├── 08-flatpaks-apps.sh # Flathub Setup, Flatpaks, Spotify, Waydroid, MIME-Types
|
||||||
│ └── 09-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Desktop-Setup
|
│ └── 09-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Desktop-Setup
|
||||||
@@ -121,6 +121,7 @@ Dieses Repository ist ein modulares, automatisiertes Setup- und Konfigurations-F
|
|||||||
- `require_root`: Bricht ab, wenn das Skript nicht mit Root-Rechten ausgeführt wird.
|
- `require_root`: Bricht ab, wenn das Skript nicht mit Root-Rechten ausgeführt wird.
|
||||||
- `command_exists "tool"`: Prüft, ob ein Befehl im Pfad verfügbar ist.
|
- `command_exists "tool"`: Prüft, ob ein Befehl im Pfad verfügbar ist.
|
||||||
- `prompt_target_user`: Erkennt `$SUDO_USER` oder fragt interaktiv nach dem Zielbenutzer.
|
- `prompt_target_user`: Erkennt `$SUDO_USER` oder fragt interaktiv nach dem Zielbenutzer.
|
||||||
|
- `prompt_ollama_models_path`: Fragt interaktiv nach dem Speicherort für Ollama KI-Modelle oder nutzt Standardpfad.
|
||||||
- `get_target_home [username]`: Gibt den absoluten Pfad des Home-Verzeichnisses des Nutzers zurück.
|
- `get_target_home [username]`: Gibt den absoluten Pfad des Home-Verzeichnisses des Nutzers zurück.
|
||||||
- `run_as_user "command"`: Führt einen Befehl als `$TARGET_USER` via `su - "$TARGET_USER" -c ...` aus.
|
- `run_as_user "command"`: Führt einen Befehl als `$TARGET_USER` via `su - "$TARGET_USER" -c ...` aus.
|
||||||
- `backup_file "filepath"`: Erstellt ein Backup einer Datei mit Zeitstempel.
|
- `backup_file "filepath"`: Erstellt ein Backup einer Datei mit Zeitstempel.
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ sudo ./setup.sh --stages 04,05
|
|||||||
│ ├── 03-bootloader.sh # GRUB Kernel-Parameter, Vimix-Theme, Plymouth Solar
|
│ ├── 03-bootloader.sh # GRUB Kernel-Parameter, Vimix-Theme, Plymouth Solar
|
||||||
│ ├── 04-packages.sh # Installation der ausgewählten thematischen Paketlisten
|
│ ├── 04-packages.sh # Installation der ausgewählten thematischen Paketlisten
|
||||||
│ ├── 05-fonts.sh # Download & Installation von JetBrainsMono, Fantasque, VictorMono
|
│ ├── 05-fonts.sh # Download & Installation von JetBrainsMono, Fantasque, VictorMono
|
||||||
│ ├── 06-services.sh # Aktivierung von AppArmor, Docker, Libvirt, zram
|
│ ├── 06-services.sh # Aktivierung von AppArmor, Docker, Libvirt, zram, Ollama
|
||||||
│ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync
|
│ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync
|
||||||
│ ├── 08-flatpaks-apps.sh # Flathub Setup, Flatpaks, Spotify, Waydroid, MIME-Types
|
│ ├── 08-flatpaks-apps.sh # Flathub Setup, Flatpaks, Spotify, Waydroid, MIME-Types
|
||||||
│ └── 09-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Dotfiles
|
│ └── 09-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Dotfiles
|
||||||
|
|||||||
@@ -16,5 +16,11 @@ GRUB_TIMEOUT_STYLE="hidden"
|
|||||||
# Shell & Userland
|
# Shell & Userland
|
||||||
DEFAULT_SHELL="zsh"
|
DEFAULT_SHELL="zsh"
|
||||||
|
|
||||||
|
# Ollama AI Configuration
|
||||||
|
OLLAMA_MODELS_DEFAULT="/mnt/Data/Software/ollama/models"
|
||||||
|
OLLAMA_FLASH_ATTENTION="1"
|
||||||
|
OLLAMA_KV_CACHE_TYPE="q8_0"
|
||||||
|
OLLAMA_KEEP_ALIVE="30m"
|
||||||
|
|
||||||
# Default Stages (if --all is passed or in default batch mode)
|
# Default Stages (if --all is passed or in default batch mode)
|
||||||
ALL_STAGES="00 01 02 03 04 05 06 07 08 09"
|
ALL_STAGES="00 01 02 03 04 05 06 07 08 09"
|
||||||
|
|||||||
+1
-1
@@ -32,7 +32,7 @@ tui_select_stages() {
|
|||||||
"03" "Bootloader & Theme (GRUB, Vimix, Plymouth)" ON \
|
"03" "Bootloader & Theme (GRUB, Vimix, Plymouth)" ON \
|
||||||
"04" "Pakete (Base, Desktop, Gaming, Virtualisierung)" ON \
|
"04" "Pakete (Base, Desktop, Gaming, Virtualisierung)" ON \
|
||||||
"05" "Coding & Nerd Fonts (JetBrainsMono, VictorMono)" ON \
|
"05" "Coding & Nerd Fonts (JetBrainsMono, VictorMono)" ON \
|
||||||
"06" "System-Dienste (AppArmor, Docker, Libvirt, zram)" ON \
|
"06" "System-Dienste (AppArmor, Docker, Libvirt, zram, Ollama)" ON \
|
||||||
"07" "Userland & Skel (Zsh, Skel-Templates, Dotfiles)" ON \
|
"07" "Userland & Skel (Zsh, Skel-Templates, Dotfiles)" ON \
|
||||||
"08" "Flatpaks & Apps (Flathub, Flatpaks, MIME)" ON \
|
"08" "Flatpaks & Apps (Flathub, Flatpaks, MIME)" ON \
|
||||||
"09" "Hyprland Desktop (LinuxBeginnings Debian-Hyprland Installer)" ON \
|
"09" "Hyprland Desktop (LinuxBeginnings Debian-Hyprland Installer)" ON \
|
||||||
|
|||||||
@@ -180,6 +180,65 @@ get_target_home() {
|
|||||||
echo "$user_home"
|
echo "$user_home"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Prompt for Ollama AI models storage path
|
||||||
|
prompt_ollama_models_path() {
|
||||||
|
if [[ -n "${OLLAMA_MODELS:-}" ]]; then
|
||||||
|
echo "$OLLAMA_MODELS"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local default_path="${OLLAMA_MODELS_DEFAULT:-/mnt/Data/Software/ollama/models}"
|
||||||
|
local chosen=""
|
||||||
|
local is_interactive=0
|
||||||
|
if [[ -t 0 || -c /dev/tty ]] && [[ "${DEBIAN_FRONTEND:-}" != "noninteractive" && "${CI:-}" != "1" && "${AUTO_CONFIRM:-}" != "1" ]]; then
|
||||||
|
is_interactive=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$is_interactive" -eq 1 ]]; then
|
||||||
|
local tty_in="/dev/tty"
|
||||||
|
local tty_out="/dev/tty"
|
||||||
|
if [[ ! -c /dev/tty ]]; then
|
||||||
|
tty_in="/dev/stdin"
|
||||||
|
tty_out="/dev/stderr"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If whiptail is available and running on an active terminal, use whiptail dialog
|
||||||
|
if command_exists whiptail && [[ -t 1 || -c /dev/tty ]]; then
|
||||||
|
local tui_input
|
||||||
|
if tui_input=$(whiptail --title "Ollama KI-Modelle Speicherort" \
|
||||||
|
--inputbox "Bitte gib den Speicherort für die Ollama KI-Modelle an:" \
|
||||||
|
10 70 "$default_path" \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
tui_input="$(echo "$tui_input" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
|
||||||
|
if [[ -n "$tui_input" ]]; then
|
||||||
|
chosen="$tui_input"
|
||||||
|
else
|
||||||
|
chosen="$default_path"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# CLI fallback if whiptail was not used or failed
|
||||||
|
if [[ -z "$chosen" ]]; then
|
||||||
|
printf "\n%bOllama KI-Modelle Speicherort:%b\n" "${CLR_CYAN}" "${CLR_RESET}" > "$tty_out"
|
||||||
|
printf "Standard-Pfad: %b%s%b\n" "${CLR_BOLD}" "$default_path" "${CLR_RESET}" > "$tty_out"
|
||||||
|
local input_path=""
|
||||||
|
read -r -p "Speicherort für Ollama-Modelle eingeben [$default_path]: " input_path < "$tty_in" > "$tty_out" 2>&1 || true
|
||||||
|
input_path="$(echo "$input_path" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
|
||||||
|
if [[ -n "$input_path" ]]; then
|
||||||
|
chosen="$input_path"
|
||||||
|
else
|
||||||
|
chosen="$default_path"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
chosen="$default_path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export OLLAMA_MODELS="$chosen"
|
||||||
|
echo "$chosen"
|
||||||
|
}
|
||||||
|
|
||||||
# Run a command as the target user
|
# Run a command as the target user
|
||||||
run_as_target_user() {
|
run_as_target_user() {
|
||||||
local user
|
local user
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ Available Stages:
|
|||||||
03: Bootloader & Splash (GRUB configuration, Vimix Theme, Plymouth Solar)
|
03: Bootloader & Splash (GRUB configuration, Vimix Theme, Plymouth Solar)
|
||||||
04: Package Installation (Base, Desktop, Gaming, Virtualization, Multimedia)
|
04: Package Installation (Base, Desktop, Gaming, Virtualization, Multimedia)
|
||||||
05: Font Installation (JetBrainsMono, FantasqueSans, VictorMono)
|
05: Font Installation (JetBrainsMono, FantasqueSans, VictorMono)
|
||||||
06: System Services (AppArmor, Docker, Libvirt, zram)
|
06: System Services (AppArmor, Docker, Libvirt, zram, Ollama)
|
||||||
07: Skel & User Environment (Zsh, Templates, Dotfiles Sync)
|
07: Skel & User Environment (Zsh, Templates, Dotfiles Sync)
|
||||||
08: Flatpaks & Applications (Flathub, Spotify, Waydroid, MIME types)
|
08: Flatpaks & Applications (Flathub, Spotify, Waydroid, MIME types)
|
||||||
09: Hyprland Desktop (LinuxBeginnings Auto-Installer)
|
09: Hyprland Desktop (LinuxBeginnings Auto-Installer)
|
||||||
|
|||||||
+50
-3
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# stages/06-services.sh - System services activation (AppArmor, Docker, Libvirt, zram)
|
# stages/06-services.sh - System services activation (AppArmor, Docker, Libvirt, zram, Ollama)
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -9,6 +9,11 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|||||||
source "$SCRIPT_DIR/lib/utils.sh"
|
source "$SCRIPT_DIR/lib/utils.sh"
|
||||||
source "$SCRIPT_DIR/lib/apt.sh"
|
source "$SCRIPT_DIR/lib/apt.sh"
|
||||||
|
|
||||||
|
if [[ -f "$SCRIPT_DIR/config/setup.conf" ]]; then
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source "$SCRIPT_DIR/config/setup.conf"
|
||||||
|
fi
|
||||||
|
|
||||||
setup_err_trap
|
setup_err_trap
|
||||||
|
|
||||||
log_step "Running Stage 06: System Services Configuration & User Privileges"
|
log_step "Running Stage 06: System Services Configuration & User Privileges"
|
||||||
@@ -92,11 +97,53 @@ else
|
|||||||
log_info "No hardware virtualization extensions (VT-x/AMD-V) detected in /proc/cpuinfo."
|
log_info "No hardware virtualization extensions (VT-x/AMD-V) detected in /proc/cpuinfo."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 5. User Group Memberships
|
# 5. Ollama AI Service & Configuration
|
||||||
|
log_substep "Configuring Ollama AI Service..."
|
||||||
|
OLLAMA_MODELS_DIR="$(prompt_ollama_models_path)"
|
||||||
|
log_info "Ollama models directory set to: $OLLAMA_MODELS_DIR"
|
||||||
|
mkdir -p "$OLLAMA_MODELS_DIR"
|
||||||
|
|
||||||
|
log_substep "Installing / Updating Ollama..."
|
||||||
|
if curl -fsSL https://ollama.com/install.sh | sh; then
|
||||||
|
log_success "Ollama installation completed."
|
||||||
|
else
|
||||||
|
log_warn "Ollama installation script returned a non-zero exit code."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure permissions on models directory for ollama user
|
||||||
|
if id ollama >/dev/null 2>&1; then
|
||||||
|
chown -R ollama:ollama "$OLLAMA_MODELS_DIR" 2>/dev/null || true
|
||||||
|
chmod -R 775 "$OLLAMA_MODELS_DIR" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure systemd drop-in override for Ollama service
|
||||||
|
log_substep "Configuring systemd override for Ollama service..."
|
||||||
|
mkdir -p /etc/systemd/system/ollama.service.d
|
||||||
|
cat <<EOF > /etc/systemd/system/ollama.service.d/override.conf
|
||||||
|
[Service]
|
||||||
|
Environment="OLLAMA_MODELS=$OLLAMA_MODELS_DIR"
|
||||||
|
Environment="OLLAMA_FLASH_ATTENTION=${OLLAMA_FLASH_ATTENTION:-1}"
|
||||||
|
Environment="OLLAMA_KV_CACHE_TYPE=${OLLAMA_KV_CACHE_TYPE:-q8_0}"
|
||||||
|
Environment="OLLAMA_KEEP_ALIVE=${OLLAMA_KEEP_ALIVE:-30m}"
|
||||||
|
EOF
|
||||||
|
chmod 0644 /etc/systemd/system/ollama.service.d/override.conf
|
||||||
|
|
||||||
|
if command_exists systemctl; then
|
||||||
|
systemctl daemon-reload 2>/dev/null || true
|
||||||
|
systemctl enable --now ollama.service 2>/dev/null || true
|
||||||
|
systemctl restart ollama.service 2>/dev/null || true
|
||||||
|
log_success "Ollama systemd service configured and enabled."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 6. User Group Memberships
|
||||||
log_substep "Updating user group memberships for $TARGET_USER..."
|
log_substep "Updating user group memberships for $TARGET_USER..."
|
||||||
groupadd -f sudo
|
groupadd -f sudo
|
||||||
groupadd -f docker
|
groupadd -f docker
|
||||||
|
groupadd -f ollama 2>/dev/null || true
|
||||||
usermod -aG sudo,docker "$TARGET_USER"
|
usermod -aG sudo,docker "$TARGET_USER"
|
||||||
log_success "Target user $TARGET_USER added to sudo and docker groups."
|
if getent group ollama >/dev/null 2>&1; then
|
||||||
|
usermod -aG ollama "$TARGET_USER" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
log_success "Target user $TARGET_USER added to sudo, docker and ollama groups."
|
||||||
|
|
||||||
log_success "Stage 06: System services configuration completed successfully!"
|
log_success "Stage 06: System services configuration completed successfully!"
|
||||||
|
|||||||
Reference in New Issue
Block a user