2012. március 20., kedd

Unattended-upgrades Ubuntu 12.04-ben

Egy Ubuntu szerver rendszeren az unattended-upgrades csomag felel azért, hogy az automatikus frissítések megtörténjenek.
Kezdjük azzal, hogy telepítjük a csomagot:
sudo apt-get install unattended-upgrades
És lesz még némi beállítanivalónk.

Az első, hogy kapjunk levelet arról, ha valami történik. Elsőként kivesszük a kommentet az /etc/apt/apt.conf.d/50unattended-upgrades fájl  Unattended-Upgrade::Mail sora elől. Scriptből így intézhető el:
sudo sed -i /\\/\\/Unattended-Upgrade::Mail\ /s/^..// /etc/apt/apt.conf.d/50unattended-upgrades
Aztán megadjuk a saját címünket a root@localhost helyett:
sudo sed -i s/root@localhost/sajatmagam@itt.hu/ /etc/apt/apt.conf.d/50unattended-upgrades
Ugyanebben a fájlban igyekszünk tenni azért, hogy ne legyen baj, ha pont egy frissítés közepén van leállás - kivesszük a kommentezést az Unattended-Upgrade::MinimalSteps kezdetű sor elől:
sudo sed -i /\\/\\/Unattended-Upgrade::MinimalSteps/s/^..// /etc/apt/apt.conf.d/50unattended-upgrades
Ha nem csak a biztonsági frissítéseket kérjük, akkor ismét kiveszünk egy sort a kommentezésből. Szóljunk emígyen:
sudo sed -i /\"\${distro_id}:\${distro_codename}-updates\"\;/s/^..// /etc/apt/apt.conf.d/50unattended-upgrades
És ha ezen felül a release "alap" (nem -updates és nem -security) részében lévő frissítéseket is kérjük, akkor szúrjunk be egy sort a harmadikként:
sudo sed -i '3 i\\t"${distro_id}:${distro_codename}";' /etc/apt/apt.conf.d/50unattended-upgrades
Ez különösen egy béta rendszer esetén hasznos:)

Beállítjuk, hogy a letöltött csomagok ne rohadjanak az örökkévalóságig a /var/cache/apt/archives mappában, hanem 3 nap után szűnjenek meg létezni - a nullát háromra cseréljük:
sudo sed -i /APT::Periodic::AutocleanInterval/s/0/3/ /etc/apt/apt.conf.d/10periodic

Akkor eddig megvagyunk. Az egész hóbelevanc kezeléséért az /etc/cron.daily/apt script felel, aminek az elején találunk még pár instrukciót. Már van egy 10periodic fájl, de az előbb említett scriptben lévő információk szerint az alábbiak a 02periodic fájlba valók. Ennek fényében
sudo sh -c "echo 'APT::Periodic::Enable "1";' >/etc/apt/apt.conf.d/02periodic"
sudo sh -c "echo 'APT::Periodic::MaxAge "3";' >>/etc/apt/apt.conf.d/02periodic"
sudo sh -c "echo 'APT::Periodic::Unattended-Upgrade "1";' >>/etc/apt/apt.conf.d/02periodic"
Nem igazán értem, hogy az előző három sor közül a MaxAge-es miként viszonyul az előzőekben megadott AutocleanInterval-hoz, de sebaj. Eccer majd leülök és rájövök.

Ekkor elvileg minden megy, de nagyon nehéz tesztelni, ugyanis a script azzal kezdi a dolgát, hogy az egyenletes terhelés mián alszik, mégpedig random másodpercnyit, ami akár 1800 is lehet.
Szóval a teszt idejére:
sudo sh -c "echo 'APT::Periodic::RandomSleep "1";' >>/etc/apt/apt.conf.d/02periodic"
Persze ezt majd átalakítjuk, ha látjuk, hogy minden rendben. Illetve a munkaállomásokon is alakítani kell majd.

No, akkor teszt (azért ilyen bonyolultan, mert ezzel szimuláljuk leginkább azt, ahogy a scriptet majd a cron futtatja):
sudo sh -c "cd / && run-parts --report /etc/cron.daily/"
Ilyenkor ugye esetleg mást is csinál a kis cuki, úgyhogy esetleg hosszabb idő lesz, amíg lefut. Ha visszakaptuk a promptot, akkor adjuk ki, hogy:
tail /var/log/unattended-upgrades/unattended-upgrades.log
És látjuk, hogy mi történt.
Ha nem az, amit akarunk, akkor az újabb tesztfuttatás előtt adjuk ki a
sudo rm /var/lib/apt/periodic/upgrade-stamp
parancsot, mert a kis cseles figyel arra, hogy futott-e mostanában, és ebből a fájlból rájön, hogy igen, és jól nem fog lefutni.

Minden kész, Mr. Teufel.

Nincsenek megjegyzések: