APT a apticron
Automatizáciou úloh APT som sa už viackrát zaoberal. Tentokrát sa zameriam na riešenie, ktoré sa postará o automatické sťahovanie dostupných aktualizácií, posielanie informácií emailom, ale aj o zaistenie, že vyrovnávacia pamäť stiahnutých balíkov nezaplní disk (partíciu).
Obsah článku
Niektoré ďalšie poznámky a návody ohľadom automatizácie APT si môžete prečítať v predošlých článkoch – Auto nástroje APT a Automatizácia APT. Tento popis je praktickým využitím a riešením, ktoré už dlhšiu dobu úspešne používam a vychádza zo skúseností z jednotlivých automatizačných riešení systému APT.
Nastavenie
Nastavenie nástroja apticron
je v súbore /etc/apticron/apticron.conf
a je podrobne popísané v komentároch. Z nastavení vyberám tie, ktoré sú podľa
dôležité:
EMAIL="root"
- nastavuje emailovú adresu, kam sú posielané emailové upozornenia na dostupné aktualizácie.
- môže obsahovať viac adries, oddelených medzerami.
SYSTEM="debtest"
- nastavuje meno systému, ktorým bude email označený, aby ste vedeli ktorého stroja sa aktualizácie týkali
- ak nie je nastavené, použije sa FQDN z hostname
NOTIFY_HOLDS="0"
- udáva, že vo výstupe nemajú byť informácie o podržaných (hold) balíkoch
NOTIFY_NO_UPDATES="1"
- zapína (1) alebo vypína (0) posielanie upozornení aj v prípade, že nie sú dostupné aktualizácie
- vhodné, ak si chcete byť istý, že apticron pracuje správne
CUSTOM_SUBJECT=""
prispôsobuje text predmetu emailu
vhodné napríklad na triedenie pošty v klientovi
je možné použiť aj interné premenné (pozor, apostrofy):
$CUSTOM_SUBJECT='[apticron] $SYSTEM: $NUM_PACKAGES package update(s)'
CUSTOM_NO_UPDATES_SUBJECT=""
obdoba predošlého, ale pre predmet správ, keď nie sú k dispozícii žiadne aktualizácie
i tu je možné použiť aj interné premenné (pozor, apostrofy):
$CUSTOM_NO_UPDATES_SUBJECT='[apticron] $SYSTEM: no updates'
CUSTOM_FROM="apticron"
- nastavuje adresu odosielateľa emailu
- predvolené je root@example.org
Spúšťanie
Nástroj apticron môžete spustiť priamo z príkazového riadku:
apticron
Tip
Príkaz nepoužíva žiadne voľby, ale všetko načíta z vyššie spomenutého konfiguračného súboru.
Manuálne spúšťanie z príkazového riadku je vhodné na testovanie, aby nástroj splnil
svoj účel, je potrebné aby bol automaticky spúšťaný, o čo sa postará úloha cron
v /etc/cron.d/apticron
:
# cron entry for apticron
47 * * * * root if test -x /usr/sbin/apticron; then /usr/sbin/apticron --cron; else true; fi
Ako možno vidieť, úloha je spúšťaná každú hodinu (inak, presná minúta je náhodná),
ale v skutočnosti neodstanete email o aktualizáciách každú hodinu, ale len raz za deň,
o čo sa postará kontrola časovej pečiatky súboru /var/lib/apticron/cron_run
.
Pri spúšťaní z príkazového riadku pošle email aj viac krát denne…
Balíky v stave hold
Zmeny vo formáte súboru so stavom balíkov (/var/lib/aptitude/pkgstates
):
majú za následok, že apticron nedokáže filtrovať balíky v stave hold
,
je na základe BTS 707230
stačí malá zmena kódu:
---8<---
--- apticron.orig 2013-07-26 10:06:11.773698290 +0200
+++ apticron 2013-07-26 10:06:40.957691347 +0200
@@ -124,7 +124,7 @@
done
# workaround to handle apt-get installing packages hold by aptitude.
-APTITUDE_HOLDS=`grep "^State: 2" -B 2 /var/lib/aptitude/pkgstates 2>/dev/null |grep "^Package: .*$" |cut -d" " -f 2`
+APTITUDE_HOLDS=`egrep "^(Package|State):" /var/lib/aptitude/pkgstates 2>/dev/null | \
+ grep "^State: 2" -B 1 |grep "^Package: .*$" |cut -d" " -f 2`
DSELECT_HOLDS=`dpkg --get-selections |grep "hold$" |cut -f1`
if [ "$NOTIFY_HOLDS" = "0" ]; then