Proxmox memoárok: AdGuard Home és Unbound költöztetés

Proxmox memoárokFolytatom a "saját" bejegyzések generálását. A jegyzettömbél jobb és hátha másnak is segít...

Alpine LXC

Mivel jár ez? A Debian/Ubuntu LXC-ket egy script frissítette, sok dolgom nem volt vele. Alpine-ra átírni... hááát... ezt buktam. Hátrány, hogy az Alpine-t nem ismerem, de a Debian-t sem kellett zaklatnom. Ha be vannak állítva, akkor az ilyen egyszerű LXC-k működnek. Ha van mentés, akkor meg a frissítéstől sem kell félni... ugye?

Proxmox, konzolban adjuk ki a pveam update parancsot, ezzel frissül a Template listánk. A webui-n menjünk
a template-okat tartalmazó tárhelyre, középen katt a CT Template-ra, fent pedig a Templates-ra és keressük meg a legfrissebb Alpine-t, letöltés.

Ezután PVE webui-n create CT, azaz hozzuk létre az Alpine LXC-t. Nálam kapott 2 core-t (nem használja ki, ahogy az 512M RAM-ot sem). Ezeket lehet utólag is módosítani, ahogy szükséges. A disk maga a kérdés, ezt PVE alatt csak növelni lehet könnyedén, csökkenteni már jóval macerásabb...
Annyira, hogy a reinstall általában a gyorsabb opció.

Ezért a disk méretre adjuk 0.3 -at, amiből egy ca. 300 MB-os lemez lesz. Mint kiderült, az Alpine annyira szerény, hogy ez is óriási lett... De kell a hely a frissítéseknek, AGH logoknak és Unbound cache-nak is.
Pár hétig figyelem majd hogy alakul a mérete és ha sok hely marad, akkor újra elkészítem 0.2 GB lemezmérettel. Egyelőre itt el fog férni biztosan:

A további beállításokat nem írtam, pl. unprivileged megfelel, kell neki IP cím (lehetőleg ne ütközön semmivel,
a hálózat rész csak ennyi egyelőre). Indítsuk el, konzolba be (Alpine LXC-n) és barátkozzunk össze vele, kezdjük a frissítéssel:
apk update && apk upgrade

Kell még néhány apróság:
apk add curl wget

Hirdetés

Töltsük le az AdGuard Home-t:
mkdir -p /opt/AdGuardHome

wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz
tar xvf AdGuardHome_linux_amd64.tar.gz -C /opt

*****
A kód formázás nem túl jó. Fórumtárs javaslatára monospace lett végül a kód helyett. Ez sem tökéletes, a sorok lezárása "windows-os", erre néhol a Linux érzékeny. Ahol több soros blokkban van kód, azt másold ki egy jegyzettömbbe, töröld az extra üres sorokat, ctrl+a, ctrl+c és terminálban jobb klikk, beillesztés egyszerű szövegként. Átnéztem, de ne legyen ebből gond.
*****

Systemd itt nincs, init van. Kell egy script (és a Claude AI segítsége), ami indítja majd az AGH-t:
nano /etc/init.d/adguardhome

Elvileg ez egy új file, másoljuk bele ezt:
#!/sbin/openrc-run
name="adguardhome"
command="/opt/AdGuardHome/AdGuardHome"
command_args="-s run"
pidfile="/run/${RC_SVCNAME}.pid"
background=yes
depend() {
need net
}

Mentsük el és kapjon jogokat:
chmod +x /etc/init.d/adguardhome

Legyen autostart is:
rc-update add adguardhome default

Ez a része kész, teszteljük:
rc-service adguardhome start
A böngészőben a http://Alpine_LXC_IP:3000 porton kellene az első indításos AGH-nak fogadnia.
Ha ez megtörtént, akkor itt ne harcoljunk tovább, állítsuk le: rc-service adguardhome stop

Jöhet az Unbound telepítése és autostart-hoz adása:
apk add unbound
rc-update add unbound default

Ezzel egyelőre készen vagyunk, irány a régi LXC: hozzuk át az AGH és Unbound beállításainkat.
Az AGH viszonylag egyszerű, vagy SSH-n vagy konzolban navigáljunk az /opt/AdGuardHome mappába (régebben mintha máshol lett volna a yaml file, de nem vennék rá mérget). Innen nekünk csak a yaml kell, illetve a data mappa, ha a statisztikákat is át szeretnénk vinni. A gyorsabb utat választottam, az eredeti yaml tartalmát kimásoltam egy txt-be, majd az Alpine LXC-ben létrehoztam a fájlt:
nano /opt/AdGuardHome/AdGuardHome.yaml
bemásoltam a korábbi tartalmát, mentés, kész.


kép: nlnetlabs.nl

Az Unbound már kicsit macerásabb, itt sokkal több a mentenivaló, szerencsére az AI segítségével ez is megoldódott. Első lépésben az Unbound mappánk beállításait csomagoljuk be, mindenestül a régi LXC-ben:
tar -czvf /root/unbound_backup.tar.gz /etc/unbound/

A parancs a csomagot a /root könyvtárba rakta, a régi AGH LXC-n ezzel végeztünk is.
Irány a Proxmox konzol, csináljuk amit az AI javasolt:
Húzd ki a fájlt a Debianból a hostra:
pct pull 112 /root/unbound_backup.tar.gz /tmp/unbound_backup.tar.gz
Told be a fájlt a hostról az Alpine-ba:
pct push 113 /tmp/unbound_backup.tar.gz /root/unbound_backup.tar.gz

Természetesen az ID-k mások lesznek/lehetnek Nálad, nálam 112 a régi LXC és 113 az új. Ugorjunk ismét az Alpine LXC konzolba és csomagoljuk ki a mappánkat:
cd /root
tar -xzvf unbound_backup.tar.gz
Majd a megjelenő ETC mappát rakjuk a helyére:
cp -r etc/unbound/* /etc/unbound/
Ha nincs hiba, akkor a cd /etc/unbound parancsra az importált beállításainkat találjuk. Térjünk vissza a /root könyvtárba, itt a tömörített és a kicsomagolt etc könyvtár is törölhető.

Az Alpine-on az Unbound felhasználónak hozzáférést kell kapnia a fájlokhoz, különben nem fog elindulni:
chown -R unbound:unbound /etc/unbound

Ezután egy gyors önteszt:
unbound-checkconf
Ha azt írja, hogy "no errors", akkor indítsd el:
rc-update add unbound default
rc-service unbound start

Nálam fatal volt:
unbound-checkconf
/var/lib/unbound/root.key: No such file or directory

Nem gond, kellett egy root key a bódottához:
Mappa létrehozása (ha nincs)
mkdir -p /var/lib/unbound

Kulcs generálása
unbound-anchor -a /var/lib/unbound/root.key

Jogosultság beállítása
chown unbound:unbound /var/lib/unbound/root.key

Ennél a pontnál még egyszer ellenőrizzük, hogy indul-e automatikusan majd minden:
rc-status default

Itt látnod kell mindkettőt:
adguardhome [ started ] és unbound [ started ]

### Még egy (opcionális, kihagyható) apróság:
Mobilnetünk van, nem túl acélos sebességgel, tehát minden bit érték... Normális le/fel sebességnél erre nincs szükség.
Unbound a DNS cache-t ramban tartja, ami azzal jár, hogy az LXC minden újraindításakor üres a cache. Ezt részben kezeli, hogy az AGH-n belül is van egy kis méretű cache, de az csak a leggyakoribb lekérdezésekre elég és rövid ideig tárolja. Jobb, ha időzítve, pl. óránként mentjük az Unbound cache-t és restartnál az utolsót visszatöltjük.

Alpine konzolban crontab -e
Sajnos itt vi a szerkesztő, amit nehéz kedvelni... szerintem nem is lehet. Valahogy az utolsó sor alá szúrjuk be:
0 * * * * unbound-control dump_cache > /var/lib/unbound/cache.dump
Elsőre mindig hibásan szúrja be, az eleje lemarad. Fura. Kilépéshez és mentéshez esc egyszer, majd shift ZZ. Ezzel óránkénti cache mentésünk már lesz. Kell egy script, ami az Unbound indulása után fut le (tehát LXC vagy Unbound service restartnál is), ellenőrzi, hogy az Unbound elindult (ha nincs kész, akkor nem lehet visszatölteni). Ha minden OK, akkor DNS dump visszatölt, kész. Ha nem OK, akkor pár próba után elengedi a feladatot és kilép.

Jöhetnek a megjegyzések: DNS cache lejár: igen, optimistic van, lejártat is kiszolgálja, ami 98%-ban teljesen jó. Minek, ha újraépül: mert a DNS feloldás így kb. mindig ugyan olyan gyors (gyakori oldalakra), mert mobilnet és mert ez a tuning akkor is jó, ha csak placebo hatása van...

Alpine konzolba:
nano /usr/local/bin/unbound-cache-load.sh
Ezt másoljuk bele:
#!/bin/sh
CACHE_FILE="/var/lib/unbound/cache.dump"
LOG="/var/log/unbound-cache.log"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG"; }
[ ! -f "$CACHE_FILE" ] && { log "Nincs cache fájl, kihagyva."; exit 0; }
RETRIES=5
WAIT=3
for i in $(seq 1 $RETRIES); do
if unbound-control status >/dev/null 2>&1; then
log "Unbound fut, cache visszatöltés..."
if unbound-control load_cache < "$CACHE_FILE" 2>> "$LOG"; then
log "Cache visszatöltve."
else
log "load_cache sikertelen."
fi
exit 0
fi
log "Unbound még nem fut ($i/$RETRIES), várakozás ${WAIT}s..."
sleep $WAIT
done
log "Unbound nem indult el $((RETRIES * WAIT))s alatt. Cache nincs visszatöltve."
exit 0

Mentsük el és készítsük el a service-t is:
nano /etc/init.d/unbound-cache-load
Ez lesz a tartalma:
#!/sbin/openrc-run
description="Unbound DNS cache visszatöltése induláskor"
depend() {
after unbound
}
start() {
ebegin "Unbound cache visszatöltése"
/usr/local/bin/unbound-cache-load.sh
eend $?
}
stop() {
return 0
}

Kellenek jogosultságok is:
chmod +x /usr/local/bin/unbound-cache-load.sh
chmod +x /etc/init.d/unbound-cache-load
rc-update add unbound-cache-load default

Unbound-ot is fel kell erre készíteni:
nano /etc/unbound/unbound.conf.d/remote-control.conf
Itt a remote-control: control-enable: yes kell legyen.
Ellenőrzéshez adjunk neki időt... nézzük meg, van-e dump fájlunk:
cd /var/lib/unbound/
ls
Itt kell lennie egy cache.dump nevű fájlnak. Ha van, akkor a crontab-os dump működik.
Visszatöltés tesztelése: nézzük meg, van-e log file:
nano /var/log/unbound-cache.log
Ha van, akkor látjuk, hogy mi történt. Ha nincs, akkor manuálisan indítsuk a dump visszatöltést:
rc-service unbound-cache-load start

Ha hibákat dob, akkor lehet keresni az okot. Nálam a sortörésnél a láthatatlan karakterek okoztak bajt, ezért is írtam a bevezetőbe a kiegészítést a kód formázásról.
###

OK, állítsuk le a régi, Debian LXC-t és az új, Alpine alapút is. Proxmox webUI-n a Debian LXC network részén másoljuk ki a mac address-t, erre cseréljük az Alpine LXC mac addressét. Ne felejtsük el az IP címeket is megcserélni, a Debian-t vegyük ki az autostartból, Alpine-nál kapcsoljuk be a "start at boot"-ot.
A módosítással az Alpine LXC indulásakor nem fog feltűnni a csere a routernek, ha mac+IP kombóval használtuk.

Ezzel a rendszerváltás kész, lehet pezsgőzni...


stockcake.com celebration-champagne-burst free to use

Ha esetleg nem volt elég a parancssorból, akkor lapozz és kiderül, hogy miért ez a megabájt-vadászat...
Csak erős idegzetűeknek, az irgalmatlan mennyiségű konzol használat miatt! :)

A cikk még nem ért véget, kérlek, lapozz!