# Setillo Synology DS223j NAS running DSM 7.3.2. Secondary Synology used for monitoring exporters and AdGuard secondary DNS. ## Specs | | | |---|---| | Model | DS223j | | Platform | rtd1619b (aarch64) | | DSM | 7.3.2 (build 86009) | | Storage | `/volume1` — 8.8 TB btrfs | | Tailscale | 1.96.4 (as of 2026-04-11) | ## Running services Containers under DSM Container Manager: | Name | Image | Purpose | |---|---|---| | `node_exporter` | `quay.io/prometheus/node-exporter` | Prometheus host metrics | | `snmp_exporter` | `quay.io/prometheus/snmp-exporter` | SNMP metrics for network gear | | `adguard` | `adguard/adguardhome` | Secondary AdGuard DNS resolver | | `dozzle-agent` | `amir20/dozzle` | Remote log agent for the main Dozzle instance | ## Sudoers restriction (important) The `vish` user has passwordless sudo but **cannot invoke shells via sudo**: ``` (ALL) NOPASSWD: "REDACTED_PASSWORD" !/bin/ash, !/bin/sh, !/bin/bash, !/usr/bin/su ``` Practical implications: - ✅ Works: `sudo mkdir`, `sudo mount`, `sudo wget`, `sudo /opt/bin/opkg install foo`, `sudo tee /etc/file`, `sudo systemctl enable foo` - ❌ Blocked: `sudo sh script.sh`, `sudo bash -c '...'`, `sudo -i`, `sudo ./script.sh` (even with a `#!/bin/sh` shebang — the kernel exec of `#!/bin/sh script.sh` is blocked) To run shell scripts as root, translate them into a series of individual `sudo` invocations of non-shell binaries. Use `sudo tee file < ``` For Python packages not in the Entware repo, use `/opt/bin/pip3`: ```sh sudo /opt/bin/pip3 install --break-system-packages ``` ### Currently installed (high-value tools) | Category | Packages | |---|---| | Shell | `bash`, `tmux`, `screen`, `htop`, `vim-full`, `nano`, `less`, `fzf` | | Network | `iperf3`, `mtr-json`, `bind-dig`, `tcpdump`, `nmap`, `socat`, `curl`, `wget-ssl`, `nethogs`, `iftop`, `whois`, `mosh-full`, `openssh-client`, `openssh-sftp-server` | | Filesystem | `rsync`, `rclone`, `ncdu`, `pv`, `file`, `tree`, `lsof`, `jq`, `yq` (pip) | | Observability | `sysstat`, `dstat`, `strace`, `procps-ng`, `python3-iotop`, `glances` (pip), `fail2ban` | | Dev | `git`, `python3`, `python3-pip`, `node`, `gnupg2` | | Modern unix | `ripgrep`, `fd`, `eza`, `zoxide` | ### Not available in the Entware aarch64-k3.10 repo - `bat` — install via `cargo install bat` if needed - `duf` — use `df` / `ncdu` instead - `bash-completion` — individual tools (git, fzf) provide their own - `yq`, `glances` — installed via `pip3` instead ### Uninstall (full reversal) ```sh sudo systemctl disable --now opt.mount sudo rm /etc/systemd/system/opt.mount sudo systemctl daemon-reload sudo rm -rf /volume1/@entware ``` ### DSM upgrade caveat DSM major version bumps (e.g. 7.3 → 8) can clobber `/etc/systemd/system/`. After any DSM upgrade, re-check: ```sh systemctl is-enabled opt.mount ``` If missing, recreate the unit file (content above), then `sudo systemctl daemon-reload && sudo systemctl enable --now opt.mount`. The Entware tree itself survives on `/volume1/@entware` — only the mount unit needs recreating. ## Tailscale upgrades Tailscale's Synology package ships a built-in self-updater. Don't hunt for SPK URLs — just: ```sh sudo tailscale update --yes ``` It downloads the right `.spk` from `pkgs.tailscale.com` and installs it in place. Confirmed working 2026-04-11 (upgraded 1.92.3 → 1.96.4).