Appunti su Gentoo Linux

La data e l'ora

I due orologi di un computer

Ci sono due orologi che contano in un PC. Quello hardware, mantenuto dalla batteria della scheda madre, e quello software (anche detto di sistema) mantenuto dal sistema operativo (ovviamente quest'ultimo esiste solo a computer acceso). Ogni volta che si accende il computer, l'orologio software si autoregola in base all'orologio hardware.

UTC, fuso orario, ora locale

La cosa migliore da fare è tenere l'orologio hardware regolato, non con l'orario del luogo ove ci si trova (ora locale), bensì con l'orario universale UTC (anche detto GMT). Di conseguenza faremo in modo che l'orologio software si aggiusterà automaticamente in base alla città dove vivete (fuso orario) e in base al periodo dell'anno (ora legale). Purtroppo però se avete un sistema dual-boot Windows/Linux questo è impossibile come vedremo più avanti.

I modi di procedere sono svariati, il più veloce è quello di default: si regola l'orologio software e allo spegnimento quello hardware si regola automaticamente su quello software. Così facendo regoleremo un solo orologio e non ci preoccuperemo della loro sincronizzazione perché qualsiasi modifica fatta a quello software si rifletterà su quello hardware (ad esempio la sincronizzazione dell'orologio software tramite programmi appositi).

Mettiamo in opera quanto appena detto: accendere il pc ignorando il fatto che l'ora del BIOS (orologio hardware) sia corretta o meno. Una volta partito il SO, apriamo il file /etc/conf.d/hwclock

/etc/conf.d/hwclock
CLOCK="UTC"
#CLOCK_SYSTOHC="yes" # essendo commentato, YES è di default

Regoliamo ora la timezone, cioè il luogo dove fisicamente ci troviamo. Le timezone disponibili sono in /usr/share/zoneinfo.

echo "Europe/Rome" > /etc/timezone

Cancelliamo infine il file che corregge eventuali disallineamenti sistematici tra i due orologi.

rm -f /etc/adjtime

La regolazione dell'orologio

Impostiamo l'orologio di sistema (software) tramite il comando date:

date MMDDhhmmYYYY

Ora non ci resta che riavviare il PC ed il gioco è fatto! Se non si ha la possibilità di riavviare il PC allora regoleremo l'orologio hardware con il comando hwclock specificando che si deve regolare in base a quello di sistema (systohc: system to hardware clock) e che deve essere in UTC:

hwclock --systohc --utc

Controllare la data e l'ora

Per controllare l'orologio hardware si hanno due possibilità: all'accensione del PC si entra nel BIOS e si controlla che la data e l'ora siano corrette oppure si lancia il comando (l'opzione localtime mostra l'ora effettiva del BIOS senza riscalarla per il fuso orario):

hwclock --localtime

Invece per controllare l'ora del sistema basta dare il comando:

date

Coesistenza Windows/Linux

Nel caso in cui sul pc sia presente anche Windows, non si può settare l'orologio hardware ad UTC. Perché Windows usa direttamente quello! In realtà un modo c'è ma si deve modificare una chiave del registro e oltretutto su Windows Vista non sembra funzionare. Pertando si è obblogati a settare l'orologio hardware all'ora locale.

/etc/conf.d/clock
CLOCK="local"
TIMEZONE="Europe/Rome"
CLOCK_SYSTOHC="yes"

Problemi

Se si notano dei problemi nell'orario o messaggi strani all'avvio dove si riscontrano date nel futuro ecc... rincontrollare prima di tutto che si sia configurato tutto correttamente. Se non si ottengono risultati positivi provare a cancellare il file /etc/adjtime e riavviare il sistema ed infine se ancora ci sono problemi provare a sostituire la batteria della scheda madre.

I formati di date e orari

Spesso l'ora è impostata in base alla localizzazione attuale (tipicamente en_US). Si vorrebbe quindi esprimere la date e l'ora in base o agli standard italiani oppure internazionali o ancora in un qualsiasi stile a nostro piacimento.
Molte applicazioni che gestiscono la data e l'ora, come date, permettono di impostare il formato in cui viene mostrata l'ora e/o la data. Ecco alcuni esempi e il risultato prodotto:

date +'%F'			2006-10-24 (formato universale)
date +'%Y/%m/%d'		2006/10/24
date +'%H:%M:%S'		09:25:45
date +'%A'			Wednesday
date +'%H:%M, %A %d %B %Y'	23:00, Wednesday 04 October 2006

Aggiornamento automatico dell'ora

Introduzione

Per avere l'orologio del PC sempre aggiornato basta usare un client NTP (Network Time Protocol). NTP è un protocollo per la sincronizzazione dell'orario tra computer. Esistono diversi server nel mondo che offrono questo servizio. La porta usata per comunicare con l'esterno è la UDP 123.

Installare il client ntp standard
echo "net-misc/ntp caps" >> /etc/portage/package.use
emerge ntp

Nota: La use-flag caps serve a poter regolare l'orologio senza privilegi di root.

Ora si hanno tre scelte possibili da fare. Far sì che l'orologio di sistema venga sincronizzato ogni volta che si accende il PC tramite uno script fornito da Gentoo, oppure venga sincronizzato ad intervalli regolari di tempo tramite un semplice script eseguito dal demone cron oppure infine tramite ntpd, utile quando si vuole uno scarto molto ridotto.
La prima scelta è la più semplice, è "poco" accurata ma soprattutto viene eseguita solo all'accensione del PC. La seconda è come la prima ma risolve il problema di un computer perennemente acceso. La terza via, a meno che non si abbia davvero questa necessità, è inutile. Usa un algoritmo piuttosto sofisticato basandosi su successive sincronizzazioni.
Da notare che l'orologio hardware viene sincornizzato allo spegnimento del sistema se avete settato, come indicato precedentemente, l'opzione CLOCK_SYSTOHC="yes" nel file /etc/conf.d/clock.

Quali server scegliere

Per non sovraccaricare i server più famosi, è nato un progetto, pool.ntp.org, che tramite dei DNS smista le richieste verso server diversi in modo da equilibrare il consumo di banda. Basta usare gli indirizzi forniti da questo progetto anziché direttamente quelli dei server ntp.

Sul sito del progetto potrete avere moltissime informazioni in proposito. Comunque gli indirizzi consigliati sono pool.ntp.org (quello generico di default in Gentoo), oppure per l'Italia 3.it.pool.ntp.org.

Lo script di Gentoo. Sincronizzazione all'avvio

Basta editare il file /etc/conf.d/ntp-client:

/etc/conf.d/ntp-client
NTPCLIENT_CMD="ntpdate"
NTPCLIENT_OPTS="-s -b -u 3.it.pool.ntp.org"

e far partire lo script, mettendolo anche nel runlevel di default (non boot!)

/etc/init.d/ntp-client start
rc-update add ntp-client default

Da notare l'uso del comando ntpdate che presto verrà eliminato in favore del comando ntpd -q che però attualmente non può essere usato nello script di Gentoo.

Uno script per la sincronizzazione ad intervalli di tempo

ntpd -q ha rimpiazzato ntpdate

Sincronizzazione tramite ntpd
Ricompilare il kernel per l'uso di CAPS
Security options  --->
 [*] Enable different security models
 <*>   Default Linux Capabilities
Configurare il demone ntpd. /etc/ntp.conf
server 3.it.pool.ntp.org
Aggiungere ntpd al runlevel default
/etc/init.d/ntpd start
rc-update add ntpd default