Differences between revisions 1 and 4 (spanning 3 versions)
Revision 1 as of 2012-02-19 14:46:09
Size: 6379
Comment: first translated version
Revision 4 as of 2012-10-16 20:05:51
Size: 6613
Comment: sync with English version
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:
Debian ha un modo particolare di gestire `/etc/motd`. Il "messaggio del giorno" (`motd`) viene aggiornato ad ogni avvio, con uno script di avvio (`/etc/init.d/bootmisc.sh` in squeeze e precedenti, `/etc/init.d/bootlogs` in wheezy e successive), che fondamentalmente esegue quanto segue: Debian ha un modo particolare di gestire `/etc/motd`. Il "messaggio del giorno" (`motd`) viene aggiornato ad ogni avvio, con uno script di avvio (`/etc/init.d/bootmisc.sh` in lenny e precedenti, `/etc/init.d/bootlogs` in squeeze e successive), che fondamentalmente esegue quanto segue:
Line 33: Line 33:
[ -f /etc/motd.tail ] && cat /etc/motd.tail >> /var/run/motd [ ! -f /etc/motd.tail ] && exit 0
cat /etc/motd.tail >> /var/run/motd
Line 90: Line 91:
=== Wheezy ===

Attualmente /etc/motd è modificabile dagli utenti ed è statico in Wheezy: il file non viene sovrascritto all'avvio.s user editable and static in Wheezy - The file will not be overwritten by reboot.


Translation(s): English - Italiano


/etc/motd in Debian

Debian ha un modo particolare di gestire /etc/motd. Il "messaggio del giorno" (motd) viene aggiornato ad ogni avvio, con uno script di avvio (/etc/init.d/bootmisc.sh in lenny e precedenti, /etc/init.d/bootlogs in squeeze e successive), che fondamentalmente esegue quanto segue:

uname -snrvm > /var/run/motd
[ -f /etc/motd.tail ] && cat /etc/motd.tail >> /var/run/motd

Dato che in Debian /etc/motd è un collegamento simbolico a /var/run/motd, questo funziona.

Come aggiornare il proprio /etc/motd

Dato che /etc/motd in pratica viene sovrascritto ad ogni riavvio, è necessario aggiornare invece /etc/motd.tail e poi o riavviare (!!) oppure poi eseguire i comandi indicati sopra. Esiste una segnalazione di bug (437176) per fornire un comando più semplice per permettere di aggiornare solamente /etc/motd.tail.

Come aggiornare automaticamente con script il proprio /etc/motd

Una cosa meno nota riguardo /etc/motd in Debian e Ubuntu è che pam di fatto aggiorna /etc/motd semplicemente in base agli script in /etc/update-motd.d. Perciò per replicare gli script indicati in precedenza si può anche usare:

mkdir /etc/update-motd.d
cat > /etc/update-motd.d/10uname <<EOF
#! /bin/sh
uname -snrvm > /var/run/motd
EOF
cat > /etc/update-motd.d/20tail <<EOF
#! /bin/sh
[ ! -f /etc/motd.tail ] && exit 0
cat /etc/motd.tail >> /var/run/motd
EOF
chmod a+x /etc/update-motd.d/*

Si potrebbero quindi aggiungere altri script alla propria directory /etc/update-motd.d per aggiungere cose nel proprio /etc/motd. Vedere la pagina di manuale per maggiori informazioni.

Notare che questa tecnica usa una patch che viene fornita solamente in Debian e Ubuntu e non è compresa in PAM originale a monte. Inoltre, questo codice ha avuto in passato problemi di sicurezza (CVE-2010-0832, questo bug).

Come evitare che il proprio /etc/motd venga sovrascritto

rm /etc/motd
cat > /etc/motd <<EOF
Questo è il mio messaggio del giorno!
EOF

In questo modo, /etc/motd non è più un collegamento simbolico a quello aggiornato e sarà quindi per sempre lasciato così come è. Il rovescio della medaglia è che il motd non mostrerà la versione del kernel più recente.

Approccio "Non toccare il mio motd" in stile "vecchia scuola"

Questo approccio, simile al precedente, garantisce di poter visualizzare informazioni dinamiche:

cat > /etc/profile.d/uname <<EOF
#!/bin/sh
uname -snrvm
EOF
rm /etc/motd
cat > /etc/motd <<EOF
Problemi noti
============

 * kerkuffle è noto per non riavviarsi in modo corretto al riavvio del sistema, per riavviarlo usare il comando
   service kerkuffle restart

Chi è responsabile di /etc/motd?

Ecco un elenco di pacchetti che se ne occupano:

base-files: /usr/share/base-files/motd
base-files: /usr/share/base-files/motd.md5sums
manpages: /usr/share/man/man5/motd.5.gz
manpages: /usr/share/man/man5/motd.tail.5.gz
libpam-modules: /lib/x86_64-linux-gnu/security/pam_motd.so
initscripts: /etc/init.d/bootlogs
  • base-files praticamente si occupa di installare motd all'avvio ma non lo sostituisce in occasione degli aggiornamenti (vedere /usr/share/doc/base-files/README)

  • le manpage spiegano il funzionamento di motd e motd.tail

  • libpam-modules ha un modulo pam_motd che visualizza il file motd. Ha inoltre una patch (in squeeze e successive, da Ubuntu) per eseguire gli script in /etc/update-motd.d per aggiornare il motd al login.

Wheezy

Attualmente /etc/motd è modificabile dagli utenti ed è statico in Wheezy: il file non viene sovrascritto all'avvio.s user editable and static in Wheezy - The file will not be overwritten by reboot.

Cosa fanno gli altri

Ubuntu

A partire da Ubuntu Intrepid Ibex (2008.10), Ubuntu ha una directory /etc/update-motd.d/, da cui vengono eseguiti gli script per aggiornare il file /etc/motd file. Questo è ora compreso nel modulo pam_motd, che aggiorna il file /var/run/motd, usando questo codice C:

    if (do_update && (stat("/etc/update-motd.d", &st) == 0)
        && S_ISDIR(st.st_mode))
    {
       mode_t old_mask = umask(0022);
       if (!system("/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ru
n-parts --lsbsysinit /etc/update-motd.d > /var/run/motd.new"))
           rename("/var/run/motd.new", "/var/run/motd");
       umask(old_mask);
     }

Per un breve periodi, ciò veniva invece fatto dal pacchetto update-motd ogni 10 minuti.

Ubuntu in modo predefinito viene fornita con un insieme di script che aggiungono il numero di pacchetti da aggiornare (ad esempio).

Gentoo

Gentoo non mostra in modo predefinito il file motd, ma ciò può essere abilitato in login.defs, vedere questa pagina wiki.

Arch, CentOS e altri

Secondo questa pagina wiki, Arch non sembra fare nulla di particolare con /etc/motd tranne visualizzarlo all'avvio.

FreeBSD

Anche in FreeBSD, il file motd viene generato con uno script di avvio, che preserva le modifiche cambiando solo la riga che corrisponde (più o meno) all'uname aggiornato all'avvio. Le righe magiche sono:

T=`mktemp -t motd`
uname -v | sed -e 's,^\([^#]*\) #\(.* [1-2][0-9][0-9][0-9]\).*/\([^\]*\) $,\1 (\3) #\2,' > ${T}
awk '{if (NR == 1) {if ($1 == "FreeBSD") {next} else {print "\n"$0}} else {print}}' < /etc/motd >> ${T}

Riferimenti


CategoryCommandLineInterface