# Handoff — statyczne IP (dual NIC) dla agenta kodującego ## Stan: skrypt v2 (skan + menu), wdrożenie przez użytkownika - [x] [`scripts/configure-static-dual-nic.sh`](../scripts/configure-static-dual-nic.sh) — Netplan **1.2** (`ignore-carrier`, DNS na interfejsie z bramą; bez `networkd:`) - [x] [`scripts/restore-dhcp-network.sh`](../scripts/restore-dhcp-network.sh) — pomija zepsute backupy; `--force-dhcp` - [ ] **Użytkownik uruchamia** skrypt na hoście - [ ] Po apply: uzupełnić [`NETWORK-STATIC-IP-DEPLOYMENT.md`](NETWORK-STATIC-IP-DEPLOYMENT.md) (wybrany profil) - [ ] Zsynchronizować `192.168.100.5` → `192.168.100.90` w pozostałych handoffach Artykuł: [`NETWORK-STATIC-IP-BLOG.md`](NETWORK-STATIC-IP-BLOG.md). --- ## Jak działa skrypt (v2) 1. **Skan** `eno1` / `enp3s0` — stan, link (TAK/NIE), obecny IPv4 2. **Menu CLI** — tylko opcje pasujące do wykrytych kabli 3. **Netplan** — globalne `nameservers`, `optional` / `networkd.ConfigureWithoutCarrier`, brama z `metric: 100` 4. **Weryfikacja** — oczekiwane IP, `networkctl reconfigure`, `ping -I 192.168.100.1` ### Profile (menu / `--profile`) | Profil | eno1 | enp3s0 | Brama | |--------|------|--------|-------| | `dual-eno1` (dual, zalecane) | `.80` | `.90` | eno1 | | `dual-enp3s0` | `.90` | `.80` | enp3s0 | | `single-eno1-80` | `.80` | — | eno1 | | `single-eno1-both` | `.80` + `.90` | — | eno1 | | `single-enp3s0-90` | — | `.90` | enp3s0 | | `single-enp3s0-80` | — | `.80` | enp3s0 | | `single-enp3s0-both` | — | `.80` + `.90` | enp3s0 | Menu pokazuje się tylko gdy **co najmniej jeden** interfejs ma link. Żaden link → błąd i `exit 1`. --- ## Uruchomienie ```bash cd /home/tomasz-syn-grzegorza/cursor/ubuntu-bare-metal/scripts # Interaktywnie (skan + menu): sudo ./configure-static-dual-nic.sh # Podgląd YAML (domyślna opcja 1 z menu po skanie): sudo ./configure-static-dual-nic.sh --dry-run # Bez menu (agent / automatyzacja): sudo ./configure-static-dual-nic.sh --non-interactive --profile dual-eno1 ``` Rollback (pomija zepsute backupy ze statycznej konfiguracji): ```bash sudo ./restore-dhcp-network.sh # lub wymuś czysty DHCP: sudo ./restore-dhcp-network.sh --force-dhcp ``` --- ## Pre-flight 1. Zarezerwuj `.80` i `.90` na routerze (DHCP) 2. Druga sesja SSH lub konsola fizyczna 3. Skrypt tworzy backup: `/etc/netplan/00-installer-config.yaml.bak.` **Nie zakładaj** sztywnie kabla w `eno1` — skrypt wykrywa link i proponuje właściwy profil. --- ## Weryfikacja po apply ```bash ip -br addr show eno1 enp3s0 ip route show default ping -c 2 -I eno1 192.168.100.1 # lub -I enp3s0, zależnie od profilu curl -s -o /dev/null -w '%{http_code}\n' http://192.168.100.90:8091 ``` --- ## Troubleshooting | Problem | Działanie | |---------|-----------| | Brak IPv4 na eno1 mimo kabla (stary bug) | v2: `ConfigureWithoutCarrier` + menu; spróbuj `dual-eno1` lub `single-enp3s0-90` jeśli tylko enp3s0 | | Brak internetu | `ip route`; brama musi być na interfejsie **z kablem** | | SSH urwane | `ip a` z konsoli; rollback `restore-dhcp-network.sh` | | Konflikt IP | Zwolnij `.80`/`.90` na routerze | --- ## Follow-up po wdrożeniu Pliki z `192.168.100.5` → **`.90`** (gdy usługi na enp3s0): - `coding-agent/DOCKER-UI-*.md`, `SWARMUI-*.md`, `PORTAINER-SETUP-TOKEN.md`, `BACKLOG.md` - `stacks/npmplus/README.md`, `manual-tutorial/06-gpu-fan-control.md` Gdy wybrano `single-enp3s0-both` lub `single-enp3s0-90` — usługi pod `.90` na enp3s0. --- ## Backlog - [ ] Wypełnić `NETWORK-STATIC-IP-DEPLOYMENT.md` z wybranym profilem - [ ] Zaktualizować IP w handoffach