martedì 31 maggio 2011

"Hash mismatch" su apt-get update usando proxy server

Chi utilizza una distribuzione Debian o una sua derivata (Ubuntu, Mint, Pinguy, etc.) dietro ad un proxy server,  come ad esempio all'interno di una rete aziendale, ecc. , nel momento in cui esegue il comando apt-get update per aggiornare la cache dei pacchetti dai repository standard, può riscontrare a console degli errori di questo tipo:

Se la localisation del sistema operativo e in lingua inglese:
....
W: Failed to fetch http://ir.archive.ubuntu.com/ubuntu/dists/..../Packages.bz2  Hash Sum mismatch
....
E: Some index files failed to download, they have been ignored, or old ones used instead.

Se la localisation del sistema operativo e in lingua italiana:
.....
Impossibile ottenere http://it.archive.ubuntu.com/ubuntu/dists/..../Packages.bz2 Somma Hash non corrispondente
.....
Impossibile scaricare alcune file di indice, essi verranno ignorati, oppure si useranno quelli precedenti.


Questo problema è dato dal fatto che nel proxy server è rimasta una cache "vecchia" che prende il sopravvento per alcune intestazioni di file rispetto a quelle presente nel repository pubblico e di conseguenza il checksum fallisce.

Di soluzioni ce ne potrebbero essere diverse, e forse la più corretta sarebbe quella di chiedere all'amministratore del proxy di fare regolarmente una pulizia della cache relativa agli url dei repository di aggiornamento ...
Tuttavia, l'operazione più veloce che io conosco ed utilizzo in questi casi, è quella di intervenire sulla macchina locale, ossia quella su cui si presenta il problema (su cui ho il pieno controllo come amministratore - o sono un "sudoer user" -, altrimenti non potrei lanciare 'apt-get update' ;-) )
In pratica elimino le liste e i file parziali sul computer locale con i quali viene fatto il checksum rispetto alle liste scaricate dalla rete (sia che queste provengano dal proxy o direttamente dal web..). In tal modo, "forzo" il server proxy a fare un refresh per ricaricarmi le liste complete dei pacchetti, che in questo caso si deve rivolgere all'URL esterno per avere le copie dei file originali aggiornati...

Ecco i pochi e semplici passi da compiere (testato su una Ubuntu Server 10.04 LTS x86_64):
rm -rf /var/lib/apt/lists/* 
mkdir -p /var/lib/apt/lists/partial
apt-get update

Anteporre il comando 'sudo' a tutti i 3 comandi sopracitati se si sta operando con un utente non-root, ma che può essere delegato a ruoli amministrativi (generalmente gruppo "admin" sui sistemi Ubuntu).

Chiunque è pregato di lasciare commenti e/o suggerimenti nel caso in cui ritiene che abbia omesso o descritto qualcosa in maniera imprecisa. Grazie.



Cordiali saluti,
Gabriele
http://www.gabrielezappi.net
GNU/Linux user #380098

lunedì 30 maggio 2011

File di log "/var/log/messages" mancante in Ubuntu Natty Narwhal

[click here for reading this blog post in english]

A seguito di un'installazione ex-novo di Linux Ubuntu 11.04 (Natty Narwhal) mi sono accorto che il file /var/log/messages non c'era (!). Ho altresì constatato che è stata una scelta voluta!
I mantainer del kernel della comunità Ubuntu (o Canonical) hanno preso questa decisione (fornendo un file di configurazione di rsyslog di default che non abilita la scrittura di messages) sostenendo che in tal modo si evita di duplicare linee di log in due file (/var/log/syslog e /var/log/messages).
Francamente e per esser chiaro, disapprovo completamente questa decisione: è vero che si possono avere linee di log duplicate, in quanto alcune di queste vengono scritte in entrambi i file "syslog" e "messages", ma lo scopo di questi file è sensibilmente diverso, pertanto non trovo corretto mischiarli insieme, sostanzialmente per due ragioni: 

  1. /var/log/messages non è solo una convenzione, bensì è divenuto uno standard per tutti i sistemi *nix/linux (Indipendentemente che si parli di distribuzioni di classe desktop o di classe server).
    /var/log/syslog è invece un audit log, pertanto verranno scritti log di qualsiasi cosa (tipo processi di  cron o at, messggi di "informazioni" non strettamente di "warning", e così via ...)
    /var/log/messages è generalmente il file in cui gli applicativi scrivono eventuali messaggi di warning, anche se non strettamente inerenti il kernel, messaggi di boot (non-kernel) simili alle informazioni ottenibili con il comando 'dmesg'. Questo è generlmente IL file principale da visionare, quando si ha l'impressione che qualcosa non stia andando come dovrebbe, o per verificare che il sistema e tutti gli applicativi principali stiano girando in maniera corretta!
  2. Tutti gli applicativi standard e i programmi (incluso applicazioni di terze parti, non fornite con la distribuzione, ecc.), programmi di monitoraggio, analizzatori e monitor di rete, ambienti SNMP (come Hobbit, Nagios, ecc.) generalmente intercettano stati ed eventuali condizioni d'errore leggendo questo file. Non ritengo neanche che sia una buona soluzione creare un link simbolico tra syslog e messages, in quanto i succitati programmi e/o processi sarebbero costretti ad analizzare inutilmente milioni di linee di log in più, rischiando così di incidere negativamente alle prestazioni di tutto il sistema.
Penso che né Canonical né la comunità Ubuntu possa decidere di apportare una variazione ad uno schema standard dall'oggi al domani (per lo meno senza aver preso in esame la cosa con una commissione mondiale sugli standard - vedi ANSI, ISO, ecc. - che ne valuterà l'opportunità). 
Comunque qui di seguito elenco i passi per ripristinare la scrittura del file /var/log/messages come in passato:
  • editare il file /etc/rsyslog.d/50-default.conf (con "sudo vi /etc/rsyslog.d/50-default.conf" se si è loggati come utenti non-root)
  • Cambiare il seguente paragrafo:
...
#
# Some "catch-all" log files.
#
#*.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
#*.=info;*.=notice;*.=warn;\
#       auth,authpriv.none;\
#       cron,daemon.none;\
#       mail,news.none          -/var/log/messages
....
con questo

....
#
# Some "catch-all" log files.
#
*.=debug;\
        auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages
....

(in altre parole, togliere il commento dalle linee sotto 'Some "catch-all" log files.')

  •  far ripartire il demone rsyslog con il seguente comando:
        sudo restart rsyslog
  • Fatto! Ora /var/log/messages sarà nuovamente scritto come nelle release precedenti.
Comunque, mi auguro che questo fastidioso (anche se apparentemente innocuo) problema venga sistemato in Oneiric (e secondo me potrebbe essere anche candidata come  patch per natty-backports)

Cordiali saluti,
Gabriele
http://www.gabrielezappi.net
GNU/Linux user #380098

"/var/log/messages" log file missing in Linux Ubuntu Natty Narwhal (english post)

[clicca qui per il post in lingua italiana]

Hi there,
After a clean install of Linux Ubuntu 11.04 (Natty Narwhal) I realized that the log file /var/log/messages was missing. I realized that it was a deliberate choice as well!
Ubuntu community's (or Canonical's) kernel guys took that decision (modifing rsyslog configuration file provided as default after install) saying that this change avoids logs to be duplicated in two log files (/var/log/syslog and /var/log/messages).
Just to be frank, polite and clear... I totally disagree this choice: as a matter of fact, you can have duplicated rows in both log files "syslog" and "messages", but the purpose of these files is quite different, and I don't find it correct to mix them up, for two reasons:

  1. /var/log/messages is not only a convention. It became a standard for all *nix/linux systems (no matter if you run a server or a desktop class distribution).
    /var/log/syslog purpose is to be the audit log, and it will be log everythings (such as cron/at jobs, "info" msg, and so on ...)
    /var/log/messages is the usual place for system applications warning messages, even if non-kernel related, boot messages (non-kernel) similar to info you may report with command 'dmesg'. This is THE place to look at, if you feel that something is going wrong!
  2. All standard applications and programs (including applications out-of-the-box, third part's, etc..), monitoring programs, Network monitors & SNMP frameworks (such as Hobbit/XyMon, Nagios, Zabbix, and so on) usually go to look for it in order to catch statuses and error conditions. It's not a solution to symbolic link syslog to messages, because that mentioned programs/daemons would parse milions of unuseful lines of logs in vain, degrading the overall system performances consequently.

Since I feel that neather Canonical nor Ubuntu community can decide to change this importand standard overnight (at least without discuss a change in a worldwide commission of IT standards or something like that - see ISO, ANSI, etc.), here is how to take rsyslog back to write /var/log/messages like in the past:


  • edit file /etc/rsyslog.d/50-default.conf (with "sudo vi /etc/rsyslog.d/50-default.conf" if you are logged as normal user)
  • Change the following paragraph:
...
#
# Some "catch-all" log files.
#
#*.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
#*.=info;*.=notice;*.=warn;\
#       auth,authpriv.none;\
#       cron,daemon.none;\
#       mail,news.none          -/var/log/messages
....
 
                      • to read the following:
                      ...
                      #
                      # Some "catch-all" log files.
                      #
                      *.=debug;\
                              auth,authpriv.none;\
                              news.none;mail.none     -/var/log/debug
                      *.=info;*.=notice;*.=warn;\
                              auth,authpriv.none;\
                              cron,daemon.none;\
                              mail,news.none          -/var/log/messages
                      ...
                        (in other words, uncomment the lines under the text 'Some "catch-all" log files.')
                      • restat rsyslog with the following command:
                            sudo restart rsyslog
                      • Done! Now /var/log/messages will be written again.

                      Anyway, I hope that this annoying problem will be fixed in Oneiric (and this should nicely be a valid patch for natty-backports)

                      Yours faithfully,
                      Gabriele
                      http://www.gabrielezappi.net
                      GNU/Linux user #380098

                      martedì 3 maggio 2011

                      Google Earth su Ubuntu 11.04 Natty Narwhal

                      A differenza delle release precedenti, con Ubuntu 11.04 anche installando i repository medibuntu e google non-free, non è più possibile installare Google Earth già pronto per la propria distribuzione via apt-get o attraverso synaptic / Software Manager.
                      Tuttavia nei repository di google, vi viene messo a disposizione un pacchetto, "googleearth-package" che contiene uno script in grado di partire dal binario proprietario, analizzare le librerie presenti nel vs. computer e di costruire un pacchetto Ad-hoc pronto da installare nel vostro sistema Debian o Ubuntu.
                      E' necessario avere il pacchetto lsb-core e se il vostro sistema ha un'archittettura diversa da i386 (a 32 bit), come un amd64 o ia64 (64 bit), occorre anche installare il pacchetto di compatibilità a 32bit ia32-libs.
                      Quindi vediamo i vari passi:

                      user@ubuntu:~$ sudo apt-get install lsb-core googleearth-package # .. aggiungete al comando  'ia32-libs' se avete un sistema  a 64 bit

                      A questo punto lanciate lo script (possibilmente NON come root, altrimenti occorre forzare con un --force)

                      user@ubuntu:~$ make-googleearth-package

                      La procedura vi scarica l'ultima release di GoogleEarth di Linux disponibile (al momento la 6.0.2!!!  :P ), raccoglie informazioni su tutte le librerie necessarie già presenti nel vostro sistema, e integra il tutto in un pacchetto .deb che lo troverete nella directory corrente con il nome  googleearth_x.y.z-_amd64.deb o googleearth_x.y.z-_i386.deb (a seconda dell'architettura del sistema operativo in cui lanciate il comando).
                      Quindi ora è sufficiente installarlo con un bel
                      user@ubuntu:~$ dpkg -i googleearth_x.y.z-_amd64.deb

                      Al termine dell'installazione lanciate il vostro googleearth nuovo fiammante "ritagliato" per il vostro pinguino.  ;)
                      ( dovreste trovarlo a menu di Kde o Gnome, oppure premente ALT+F2 per eseguire il comando e date 'googleearth', o lo lanciate da terminale con 'googleearth &' ).

                      :)