setup_weeder.sh
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| setup_weeder.sh [2025/12/20 15:04] – 46.109.187.144 | setup_weeder.sh [2026/05/29 07:14] (current) – 46.109.187.144 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | **chmod +x setup_weeder.sh && sudo ./ | ||
| + | |||
| < | < | ||
| #!/bin/bash | #!/bin/bash | ||
| + | set -euo pipefail | ||
| + | |||
| + | # ====== CONFIG ====== | ||
| + | USER=" | ||
| + | HOME_DIR="/ | ||
| + | APP_DIR=" | ||
| + | SERVICE_NAME=" | ||
| + | |||
| + | echo "=== Install & enable NetworkManager ===" | ||
| + | sudo apt update || true | ||
| + | sudo apt install -y network-manager openssh-server | ||
| + | echo "=== Disable background updates / indexing / notifications ===" | ||
| + | |||
| + | # Keep correct time sync ON | ||
| + | sudo timedatectl set-timezone Europe/Riga || true | ||
| + | sudo timedatectl set-ntp true || true | ||
| + | |||
| + | # Disable apt automatic update timers/ | ||
| + | sudo systemctl disable --now apt-daily.timer apt-daily-upgrade.timer 2>/ | ||
| + | sudo systemctl disable --now apt-daily.service apt-daily-upgrade.service 2>/ | ||
| + | sudo systemctl mask apt-daily.timer apt-daily-upgrade.timer apt-daily.service apt-daily-upgrade.service 2>/ | ||
| + | |||
| + | # Disable unattended upgrades | ||
| + | sudo systemctl disable --now unattended-upgrades.service 2>/ | ||
| + | sudo systemctl mask unattended-upgrades.service 2>/ | ||
| + | |||
| + | # Disable PackageKit / GUI package refresh | ||
| + | sudo systemctl disable --now packagekit.service packagekit-offline-update.service 2>/ | ||
| + | sudo systemctl mask packagekit.service packagekit-offline-update.service 2>/ | ||
| + | |||
| + | # Disable update notifier | ||
| + | sudo systemctl disable --now update-notifier-download.timer update-notifier-download.service 2>/ | ||
| + | sudo systemctl mask update-notifier-download.timer update-notifier-download.service 2>/ | ||
| + | |||
| + | sudo systemctl disable --now update-notifier-motd.timer update-notifier-motd.service 2>/ | ||
| + | sudo systemctl mask update-notifier-motd.timer update-notifier-motd.service 2>/ | ||
| + | |||
| + | # Disable plocate daily database indexing | ||
| + | sudo systemctl disable --now plocate-updatedb.timer plocate-updatedb.service 2>/ | ||
| + | sudo systemctl mask plocate-updatedb.timer plocate-updatedb.service 2>/ | ||
| + | |||
| + | # Disable firmware update daemon refresh | ||
| + | sudo systemctl disable --now fwupd-refresh.timer fwupd-refresh.service 2>/ | ||
| + | sudo systemctl mask fwupd-refresh.timer fwupd-refresh.service 2>/ | ||
| + | |||
| + | # Disable anacron daily jobs | ||
| + | sudo systemctl disable --now anacron.timer anacron.service 2>/ | ||
| + | sudo systemctl mask anacron.timer anacron.service 2>/ | ||
| + | |||
| + | # Disable snap background refresh/ | ||
| + | sudo systemctl disable --now snapd.service snapd.socket snapd.seeded.service 2>/ | ||
| + | sudo systemctl mask snapd.service snapd.socket snapd.seeded.service 2>/ | ||
| + | |||
| + | # Disable printing services if printer support is not needed | ||
| + | sudo systemctl disable --now cups.service cups.socket cups.path cups-browsed.service 2>/ | ||
| + | sudo systemctl mask cups.service cups.socket cups.path cups-browsed.service 2>/ | ||
| + | |||
| + | # Disable GNOME tracker file indexing for user pi | ||
| + | sudo -u pi systemctl --user stop tracker-miner-fs-3.service tracker-extract-3.service 2>/ | ||
| + | sudo -u pi systemctl --user mask tracker-miner-fs-3.service tracker-extract-3.service 2>/ | ||
| - | # Lietotājvārds | + | # Kill already running background processes |
| - | USER=pi | + | pkill -f tracker-miner-fs-3 2>/ |
| - | HOME_DIR=/home/$USER | + | pkill -f update-notifier 2>/ |
| + | pkill -f apt-check 2>/ | ||
| + | pkill -f snap-store 2>/ | ||
| + | pkill -f snapd-desktop-integration 2>/dev/null || true | ||
| - | sudo apt install | + | # Disable APT periodic config |
| + | sudo bash -c 'cat > /etc/apt/ | ||
| + | APT:: | ||
| + | APT:: | ||
| + | APT:: | ||
| + | APT:: | ||
| + | EOF' | ||
| sudo systemctl enable --now NetworkManager | sudo systemctl enable --now NetworkManager | ||
| + | sudo systemctl enable --now ssh | ||
| - | # 0. Statiskā IP konfigurācija ar netplan | + | echo "=== Netplan: NetworkManager renderer + static eth0 (link-local) ===" |
| - | sudo bash -c "cat <<EOF > / | + | sudo bash -c "cat <<'EOF' |
| network: | network: | ||
| version: 2 | version: 2 | ||
| Line 17: | Line 89: | ||
| eth0: | eth0: | ||
| dhcp4: no | dhcp4: no | ||
| - | addresses: | + | addresses: |
| - | | + | - 169.254.1.244/ |
| - | - to: default | + | EOF" |
| - | via: 169.254.1.1 | + | sudo netplan apply |
| - | nameservers: | + | |
| - | addresses: [8.8.8.8, 1.1.1.1] | + | |
| + | echo "=== Create systemd service: $SERVICE_NAME ===" | ||
| + | sudo bash -c "cat <<EOF > / | ||
| + | [Unit] | ||
| + | Description=Weeder Premium Multi 2 startup script | ||
| + | Wants=network-online.target | ||
| + | After=network-online.target | ||
| + | |||
| + | [Service] | ||
| + | Type=simple | ||
| + | User=$USER | ||
| + | WorkingDirectory=$APP_DIR | ||
| + | ExecStart=/ | ||
| + | Environment=PATH=/ | ||
| + | Restart=always | ||
| + | RestartSec=5 | ||
| + | StandardOutput=append: | ||
| + | StandardError=append: | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| EOF" | EOF" | ||
| - | # Piemēro netplan konfigurāciju | + | echo "=== Enable and start service ===" |
| - | sudo netplan apply | + | sudo systemctl daemon-reload |
| + | sudo systemctl enable " | ||
| + | sudo systemctl restart " | ||
| - | # 1. Izveido .desktop saīsni | + | echo "=== Desktop shortcut (optional) ===" |
| - | cat <<EOF > $HOME_DIR/ | + | mkdir -p " |
| + | cat <<EOF > "$HOME_DIR/ | ||
| [Desktop Entry] | [Desktop Entry] | ||
| Version=1.0 | Version=1.0 | ||
| Name=weeder | Name=weeder | ||
| - | Comment=Run | + | Comment=Run |
| - | Exec=python3 $HOME_DIR/Desktop/WEEDER_PREMIUM_MULTI/server.py | + | Exec=/usr/bin/python3 $APP_DIR/server.py |
| Terminal=true | Terminal=true | ||
| Type=Application | Type=Application | ||
| - | Category=Utility; | + | Categories=Utility; |
| EOF | EOF | ||
| + | gio set " | ||
| + | chmod +x " | ||
| + | chown " | ||
| - | # 2. Piešķir uzticamību un izpildes tiesības | + | echo "=== Sudoers (safe) ===" |
| - | gio set $HOME_DIR/Desktop/weeder.desktop metadata::trusted true | + | sudo bash -c "cat <<EOF > /etc/sudoers.d/weeder |
| - | chmod +x $HOME_DIR/Desktop/weeder.desktop | + | $USER ALL=(ALL) NOPASSWD: / |
| + | EOF" | ||
| + | sudo chmod 0440 /etc/sudoers.d/weeder | ||
| - | # 3. Pievienot / | + | echo "=== Setup complete. Rebooting in 5 seconds... ===" |
| - | echo "$USER ALL=(ALL) NOPASSWD: / | + | sleep 5 |
| + | sudo reboot | ||
| - | # 4. Pievienot /bin/dmesg bez parolēm | ||
| - | echo "$USER ALL=(ALL) NOPASSWD: / | ||
| - | # 5. Izveidot | + | </ |
| - | sudo bash -c "cat <<EOF > / | + | |
| + | |||
| + | < | ||
| + | #!/ | ||
| + | set -euo pipefail | ||
| + | |||
| + | # ====== CONFIG ====== | ||
| + | USER=" | ||
| + | HOME_DIR="/ | ||
| + | APP_DIR=" | ||
| + | SERVICE_NAME=" | ||
| + | USB_MOUNT="/ | ||
| + | USB_IMG_DIR=" | ||
| + | PATH_STORAGE=" | ||
| + | |||
| + | echo "=== Install & enable NetworkManager ===" | ||
| + | sudo apt update || true | ||
| + | sudo apt install -y network-manager openssh-server | ||
| + | sudo systemctl enable --now NetworkManager | ||
| + | sudo systemctl enable --now ssh | ||
| + | |||
| + | echo "=== Netplan: NetworkManager renderer + static eth0 (link-local) ===" | ||
| + | sudo bash -c "cat <<' | ||
| + | network: | ||
| + | version: 2 | ||
| + | renderer: NetworkManager | ||
| + | ethernets: | ||
| + | eth0: | ||
| + | dhcp4: no | ||
| + | addresses: | ||
| + | - 169.254.1.244/ | ||
| + | routes: | ||
| + | - to: default | ||
| + | via: 169.254.1.1 | ||
| + | EOF" | ||
| + | |||
| + | sudo netplan apply || true | ||
| + | |||
| + | echo "=== Prepare USB mount folder ===" | ||
| + | sudo mkdir -p " | ||
| + | sudo chown " | ||
| + | sudo chmod 777 " | ||
| + | |||
| + | echo "=== Update path_storage.json img_folder_path ===" | ||
| + | if [ -f " | ||
| + | python3 - << | ||
| + | import json | ||
| + | |||
| + | path = " | ||
| + | |||
| + | with open(path, " | ||
| + | data = json.load(f) | ||
| + | |||
| + | data[" | ||
| + | |||
| + | with open(path, " | ||
| + | json.dump(data, | ||
| + | |||
| + | print(" | ||
| + | PY | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | |||
| + | echo "=== Create | ||
| + | sudo bash -c "cat <<EOF > / | ||
| [Unit] | [Unit] | ||
| - | Description=WEEDER code | + | Description=Weeder Premium Multi server startup script |
| - | After=network.target | + | Wants=network-online.target |
| + | After=network-online.target | ||
| [Service] | [Service] | ||
| - | ExecStart=/ | + | Type=simple |
| - | Environment=\" | + | |
| - | WorkingDirectory=$HOME_DIR/ | + | |
| - | StandardOutput=journal | + | |
| - | StandardError=journal | + | |
| - | Restart=on-failure | + | |
| - | RestartSec=2 | + | |
| User=$USER | User=$USER | ||
| + | WorkingDirectory=$APP_DIR | ||
| + | |||
| + | # Create stable USB mount point | ||
| + | ExecStartPre=/ | ||
| + | |||
| + | # Unmount old mount if exists. ' | ||
| + | ExecStartPre=-/ | ||
| + | |||
| + | # Find first USB storage partition and mount it to $USB_MOUNT. | ||
| + | # If USB exists, mount with pi permissions. | ||
| + | # If no USB exists, service still starts and uses local / | ||
| + | ExecStartPre=/ | ||
| + | |||
| + | # Create image folder | ||
| + | ExecStartPre=/ | ||
| + | ExecStartPre=/ | ||
| + | |||
| + | ExecStart=/ | ||
| + | |||
| + | Environment=PATH=/ | ||
| + | Restart=always | ||
| + | RestartSec=5 | ||
| + | StandardOutput=append: | ||
| + | StandardError=append: | ||
| [Install] | [Install] | ||
| Line 71: | Line 252: | ||
| EOF" | EOF" | ||
| - | # 6. Aktivēt servisu | + | echo "=== Disable old weeder.service if it exists ===" |
| + | sudo systemctl disable weeder.service 2>/ | ||
| + | sudo systemctl stop weeder.service 2>/ | ||
| + | |||
| + | echo "=== Enable and start $SERVICE_NAME ===" | ||
| sudo systemctl daemon-reload | sudo systemctl daemon-reload | ||
| - | sudo systemctl enable | + | sudo systemctl enable |
| - | sudo systemctl | + | sudo systemctl |
| - | echo " | + | echo "=== Desktop shortcut (optional) ===" |
| - | sleep 5 | + | mkdir -p " |
| - | sudo reboot | + | cat <<EOF > " |
| + | [Desktop Entry] | ||
| + | Version=1.0 | ||
| + | Name=weeder | ||
| + | Comment=Run WEEDER server | ||
| + | Exec=/ | ||
| + | Terminal=true | ||
| + | Type=Application | ||
| + | Categories=Utility; | ||
| + | EOF | ||
| + | gio set " | ||
| + | chmod +x " | ||
| + | chown " | ||
| + | echo "=== Sudoers (safe) ===" | ||
| + | sudo bash -c "cat <<EOF > / | ||
| + | $USER ALL=(ALL) NOPASSWD: / | ||
| + | EOF" | ||
| + | |||
| + | sudo chmod 0440 / | ||
| + | |||
| + | echo "=== Setup complete ===" | ||
| + | echo " | ||
| + | echo "Image path: $USB_IMG_DIR/" | ||
| + | echo "" | ||
| + | echo "Check with:" | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo "" | ||
| + | echo " | ||
| + | sleep 5 | ||
| + | sudo reboot | ||
| </ | </ | ||
| + | |||
| + | sudo systemctl disable --now apt-daily.timer | ||
| + | sudo systemctl disable --now apt-daily-upgrade.timer | ||
| + | sudo systemctl disable --now unattended-upgrades.service | ||
| + | sudo systemctl disable --now packagekit.service | ||
setup_weeder.sh.1766243090.txt.gz · Last modified: by 46.109.187.144 · Currently locked by: 216.73.217.69
