Needrestart

Na Portalu smo već pisali o potrebi da, nakon nadogradnje programskih biblioteka, obavezno mora slijediti restart svih daemona. Ukoliko to ne učinimo, zakrpane verzije neće biti učitane, a servisi će biti i dalje ranjivi sve dok se ne pokrenu ponovo i tako učitaju nove biblioteke. Spomenut je program checkrestart iz paketa debian-goodies, no sada ćemo vidjeti što može needrestart, kojeg možete naći u wheezy-backports i kasnijim izdanjima.

Da bi instalirali needrestart, morate dodati repozitorij wheezy-backports u datoteku /etc/apt/sources.list i napraviti "apt-get update". Ukoliko se ne želite s tim igrati, možete paket jednostavno skinuti iz repozitorija. Trenutno se nalazi na podugačkom URL-u http://ftp.hr.debian.org/debian/pool/main/n/needrestart/needrestart_1.2-7~bpo70+1_all.deb.

U slučaju da ste skinuli paket, instalirajte ga s "dpkg -i", u suprotnom postupak je standardan:

# apt-get install needrestart
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libmodule-find-perl libmodule-scandeps-perl libproc-processtable-perl
libsort-naturally-perl libterm-readkey-perl

Paket će pokupiti sve potrebne ovisne pakete, module pisane u perlu.  Ukoliko te module već imate, popis ovisnosti će biti nešto manji.

Pokretanje programa je jednostavno: "needrestart". Nakon toga ćete dobiti popis daemona koje treba restartati (po defaultu je to ncurses sučelje):

Needrestart 1

Dovoljno je potrvditi na "OK" i odabrani servisi će biti ponovo pokrenuti. U ovom prozoru možete isključiti servis kojeg u ovom trenutku ne želite restartati.

Postoji mogućnost neinteraktivnog restarta daemona, koji će biti korisniji u situacijama kada ne želite ili ne možete interaktivno potvrditi da želite restart. Potrebno je upotrijebiti opciju "-r":

# needrestart -r a
Services to be restarted:
RTNETLINK1 answers: No such file or directory
acpid: error talking to the kernel via netlink
Skipping dbus...

Ukoliko vam se prikažu kakve greške, obično ih možete zanemariti, no provjerite rade li vam kritični servisi nakon ovakvih grešaka. Nakon rješavanja ovih problema pokrenite naredbu:

# needrestart -r a
Scanning processes...
Scanning candidates...
Scanning kernel images...
Running kernel seems to be up-to-date.
No services need to be restarted.

Inače, opcija "-r" prima ove parametre:

       l      (l)ist only
i (i)nteractive restart
a (a)utomatically restart

Ukoliko stavimo "l", na ekran će biti ispisan samo popis servisa, dok će "a" automatski restartati servise. Opcija "i" je jasna, potvrda će biti zatražena interaktivno u vidu već prikazanog prozora.

Postoje određeni izuzeci. Daemon dbus se po defaultu neće restartati, ni monit ili Nagios daemon, ako ga imate:

Needrestart 2

Kod restarta dobit ćete ovakve poruke, a kod ponovnog pokretanja ništa se neće promijeniti, uvijek će ovi daemoni biti navedeni kao da ponovo trebaju restart.

Stopping system message bus: dbus.
Starting system message bus: dbus.
CN: Monit SystemV init script disabled -- inittab is in use
CN: Exiting now...
Stopping nagios-nrpe: nagios-nrpe.
Starting nagios-nrpe: nagios-nrpe.

Idemo redom: dbus je daemon koji olakšava komunikaciju između procesa, a najviše se koristi za grafičko sučelje. Zbog toga što će odjaviti sve korisnike iz njihovih sesija, njegov se restarat ne podrazumijva. Na serverima to nije toliki problem. Ddeveloperi obećavaju da će problem biti riješen u verziji 2.0 ,no još dugo neće biti uključena u  Debian).

Nakon što restartamo dbus, ostaju nam još dvije stvari, monit i Nagios daemon:
Needrestart 3

Monit je specifičan po tome što se pokreće iz inittaba, dakle nema posebnu skriptu za pokretanje:

# grep monit /etc/inittab
# Begin update by CARNet package monit-cn -- DO NOT DELETE THIS LINE!
mo:2345:respawn:/usr/bin/monit -Ic /etc/monit/monitrc
m0:06:wait:/usr/bin/monit -Ic /etc/monit/monitrc stop myprocess
# End update by CARNet package monit-cn -- DO NOT DELETE THIS LINE!

To znači da se pomoću /etc/init.d/monit skripte ne može restartati monit. Dovoljno je jednostavno "ubiti" monit naredbom:

# pkill monit

Sekundu poslije, init će ponovo pokrenuti monit i stvar je time riješena.

Kao zadnji, ostaje problem Nagiosovog daemona. Niti Google nam nije znao reći zašto se restartani daemon opet javlja kao da nije restartan. Vjerojatno je neka specifičnost u pitanju, pa će ta greška biti ispravljena u kasnijim verzijama needrestarta.

Valja spomenuti da se needrestart integrira u APT, te ga zapravo nije potrebno posebno pokretati. Da vam ne iskaće prozor, u datoteci /etc/needrestart/needrestart.conf promijenite parametar "$nrconf{restart}" u "a", što je isto kao upotreba opcije "-r a" kada naredbu needrestart pokrećete direktno:

# Restart services (l)ist only, (i)nteractive or (a)utomatically.
$nrconf{restart} = 'a';

Sada vas kod nadogradnji neće iskakati prozor, nego će se servisi restartati automatski. U needrestart.conf je moguće podesiti još stvari, poput koje servise možemo ignorirati:

# Override service default selection (hash of regex).
$nrconf{override_rc} = {
# DBus
q(^dbus) => 0,

# networking stuff
q(^network-manager) => 0,
q(^NetworkManager) => 0,
q(^wpa_supplicant) => 0,
q(^openvpn) => 0,

# gettys
q(^getty@.+\.service) => 0,

};

U tom polju možemo dodati servise koje needrestart može ignorirati, zato što ćemo mi brinuti o tome, ili jednostavno nisu toliko bitni za siguran rad sustava.

U konfiguraciji možete podesiti i druge stvari, koje su prilično jasne kada otvorite datoteku, no mislimo da nema potrebe odstupati od podrazumijevane konfiguracije.

Na kraju, needrestart vodi brigu i o tome jeste li instalirali novi kernel, a niste restartali računalo, što je također korisna funkcija kada ste u nedostatku vemena ili termina zaboravili restatati cijeli server.

Zdravko Rašić

Kuharice: 
Kategorije: 
Vote: 
0
No votes yet