giovedì 26 marzo 2009

Archeologia del pinguino: Serial Terminal as Console

Quella raffigurata sopra e' la copertina del numero di Aprile 1997 del Linux Journal.
L'ho tirata fuori perche' gironzolando in rete ho ritrovato un articolo che avevo pubblicato in quel numero della prestigiosa rivista.

L'articolo mostrava come modificare la gestione della console nel kernel di Linux (se non ricordo male erano i tempi della versione 2.0.x) per consentire di usare un terminale seriale come console al posto di un monitor collegato ad una scheda video.

Ecco il testo originale dell'articolo (perdonate la mia pigrizia ma non lo tradurro' in italiano...almeno non oggi):

Serial Terminal as Console by Francesco Conti

A frequently asked, but never completely answered, question in the comp.os.linux.* newsgroups and other Linux mailing lists, is the one about cheap, headless Linux boxes. It seems that many people need to install Linux boxes without a video card, a monitor or a keyboard.

A cheap response to this problem is to use a serial terminal (Wyse or Ampex, for example) as the main Linux console. This cuts the cost of a keyboard, a video card and a monitor. I've done this very thing on my second computer, an old 486 VLB, by using a Wyse 60 terminal.

Linking a terminal to your computer's serial port is not at all difficult. You can easily follow the instructions in the Serial-HOWTO and in the inittab(5) and agetty(8) man pages. Here's a short summary.

First, you must use a null modem cable.

Second, insert the following line in your /etc/inittab file, if you're using agetty. Other getty programs, like getty_ps, use a different syntax.

ID:RUNLEVELS:respawn:/sbin/agetty -L SPEED TTY TERM


  • ID = a two character identifier, e.g., s1 or s2

  • RUNLEVELS = Runlevels in which the terminal must be active

  • SPEED = serial port speed

  • TTY = tty port name relative to the /dev directory

  • TERM = value to be used for the TERM environment variable

My machine's /etc/inittab has the following line:

s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100

for a serial terminal on the /dev/ttyS1 port (COM2 for DOS users), with a port speed of 9600 BPS and vt100 terminal emulation (which seems to run better than native Wyse 60 mode).

Finally, restart init with the command init q.

If you correctly followed these three simple steps, you should see the login prompt on your terminal screen. You can log in and work on your machine in the same way you can when you're actually on the console or telneting from a remote host.

Kernel Messages

The messages the kernel shows at boot time are always directed to your main console (tty1). If you turn on your headless box, you can only wait for the login on the terminal, which means losing those precious messages. You can see them by using the dmesg command, but usually you need them before the login shell comes up.

There are other messages on your console: those generated by the scripts in the /etc/rc.d directory, and from scripts run at boot and shutdown time. How can you really know that “the system is halted” if you can't read it on a monitor?

You must patch the /usr/src/linux/drivers/char/console.c program in your kernel source tree. It's not a complex kernel hack. You can follow these three simple steps.

First, define the CONFIG_SERIAL_ECHO symbol at program start:


Second, modify the address of the terminal serial port (only if you're using a port different from that defined by default) looking for the following line:

#define SERIAL_ECHO_PORT        0x3f8   /* COM1 */
In my machine I've changed that line to:
#define SERIAL_ECHO_PORT        0x2f8   /* COM2 */
Third, rebuild your kernel and reboot: you should see on your terminal screen the kernel messages during your system's hardware devices probe.

Please note that these steps work for a 2.0.0 kernel, not on 1.2.13. I haven't yet had time to try other kernels. The console.c patch is necessary for all Linux ports except the one for Alpha, which contains it in the make config with the following option:

Echo console messages on /dev/ttyS1
Messages from /etc/rc.d/rc.*

To show these messages on your terminal, you can append > TTY to every line of these files that contains the command echo. TTY is the terminal serial port (the same one used in /etc/inittab serial terminal line).

LILO Configuration

If you want to choose among more than two kernel images, you have to modif the LILO configuration file, /etc/lilo.conf.

Complete instructions for seeing the LILO prompt on serial terminals can be found in the /usr/doc/lilo/README file (look for the SERIAL option). Here are two steps to do that correctly.

First, edit the /etc/lilo.conf file and insert a SERIAL option line after the BOOT option line:



SERIAL_LINE = 0 (com1)
1 (com2)
2 (com3)
3 (com4)
SPEED = serial port speed
PARITY = n (= none)
o (= odd)
e (= even)
BITS = bits in a character (8 or 7)
Please note that there are no spaces between the SPEED, PARITY and BITS parameters. These must be equal to the ones defined in your terminal setup. Here's the line used by my machine's LILO:
This line means COM2 at 9600 BPS, no parity, 8 bits per character.

Second, execute the lilo command to update your system's configuration.

Using the SERIAL option, LILO sets a two second delay (the same as when you put a delay = 20 line in the lilo.conf file) before booting the default kernel image. During this pause, you can interrupt the boot process and get the LILO prompt by sending a break to the terminal as you press the SHIFT key on your main console.


At last, your serial terminal can be used as a real system console. I think that the only thing you can't do is the CTRL-ALT-DEL reset—except, perhaps, with certain terminal emulations. If you're lucky, you can find one of these terminals cheaply, maybe even free, from a company upgrading its hardware.

martedì 24 marzo 2009

Ancora webmail: RoundCube

  1. Scaricare il pacchetto roundcubemail-0.2.1.tar.gz dal sito
  2. Scompattarlo nella document root del vostro server http
  3. mv roundcubemail-0.2.1 roundcubemail
  4. cd roundcubemail
  5. chown -R www-data.www-data *
  6. chown -R www-data.www-data .htaccess
  7. Creare il database seguendo le istruzioni contenute nel file INSTALL
  8. Aprire l'URL http://INDIRIZZO_IP_SERVER/roundcubemail/installer e seguire la procedura guidata
  9. cancellate la cartella installer dalla directory roundcubemail

Vediamo come cambiare il logo visualizzato sulle pagine e sui messaggi stampati con uno di nostra scelta.

cd roundcubemail/skins
cp -R default miaskin
cd ../roundcubemail/config
Editare il file
Modificare la riga:
$rcmail_config['product_name'] = ‘RoundCube Webmail’;

$rcmail_config['product_name'] = ‘Il mio nome Webmail’;

e la riga:
$rcmail_config['skin'] = ’skins/default/’;

$rcmail_config['skin'] = ’skins/miaskin/’;

Nella cartella roundcubemail/skins/images trovate 3 immagini:

Potete sostituirle (mantenendone il nome) con altre 3 immagini di vostra scelta, oppure potete creare 3 nuove immagini:

In questo caso pero' dovete modificare tutte le ricorrenze dei primi 3 nomi nei seguenti file:
Nel file templates/login.html modificare
img src=”/images/roundcube_logo.png” …

img src=”/images/roundcube_logo.png” …

Nel file templates/error.html modificare
RoundCube|Mail :: ERROR

MioNome|Mail :: ERROR

”/images/roundcube_logo.png” width=”165″ height=”55″ alt=”RoundCube Webmail”

”/images/mionome_logo.png” width=”165″ height=”55″ alt=”MioNome Webmail”

Nel file templates/printmessage.html modificare
”/images/roundcube_logo_print.gif” width=”182″ height=”50″ alt=”RoundCube Webmail”

”/images/mionome_logo_print.gif” width=”182″ height=”50″ alt=”MioNome Webmail”

Nel file includes/header.html modificare
image=”/images/roundcube_logo.png” alt=”RoundCube Webmail”

image=”/images/mionome_logo.png” alt=”MioNome Webmail”

Un altra webmail: Uebimiau

Installazione molto semplice:

  1. Scaricare il pacchetto .zip dal sito
  2. Scompattarlo nella document root del vostro server http
  3. cd webmail
  4. chown -R www-data.www-data *
  5. Aprite l'URL http://INDIRIZZO_IP_SERVER/webmail
  6. Verificate eventuali errori o warning visualizzati dalla pagina di installazione
  7. cancellate la cartella install dalla directory webmail
  8. Cliccate sul link indicato sulla pagina di installazione

Se ricevete l'errore:
ERROR (2): Header may not contain more than a single header, new line detected. (/webmail/inc/inc.php:169)

Aprite il file webmail/inc/inc.php e andate alla riga indicata nel messaggio di errore.
Header("Expires: Wed, 11 Nov 1998 11:11:11 GMT\r\n".
"Cache-Control: no-cache\r\n".
"Cache-Control: must-revalidate");

Header("Expires: Wed, 11 Nov 1998 11:11:11 GMT");
Header("Cache-Control: no-cache");
Header("Cache-Control: must-revalidate");

Salvate e uscite.

Probabilmente dovete anche configurare il tipo di login da utilizzare. Configurazione che deve essere eseguita sul file webmail/inc/config.php

Potete scegliere tra questi tipi di login:

Installare IlohaMail su Debian Etch

Oggi sto sperimentando un po' di webmail da installare su server Debian.
Ho scoperto che i repository di Etch contengono IlohaMail, e' quindi sufficiente eseguire il seguente comando:
apt-get install ilohamail

selezionare, quando richiesto, il server http da voi utilizzato (solitamente apache2) e dirigersi con il vostro browser di fiducia all'URL seguente:

Se volete cambiare il default (IlohaMail) lo potete fare nel file /etc/apache2/conf.d/ilohamail

tsclient: abilitare supporto XDMCP

Per default il programma tsclient (Terminal Server Client) utilizza i protocolli RDP e VNC.
Per abilitare il protocollo XDMCP bisogna eseguire il comando seguente:
sudo apt-get install xnest
Per abilitare l'accesso XDMCP su un host Ubuntu potete seguire due strade.


  1. Andate su System -> Administration -> Login window (or run gdmsetup)
  2. Nel tab REMOTE cambiate il settaggio STYLE in SAME AS LOCAL. Le diverse scelte modificano il tipo di schermata di login che l'utente remoto vede al momento del collegamento
  3. Eseguite il restart di GDM con il comando seguente
kill -HUP `cat /var/run/`


  1. Aprite il file /etc/gdm/gdm.conf (verificate di non attivare dei settaggi in conflitto con quelli contenuti nel file gdm.conf-custom)
  2. Rimuovete il simbolo di commento dalla riga contenente RemoteGreeter nella sezione DAEMON
  3. Nella sezione XDMCP cambiate il campo Enable da false a true.
  4. Eseguite il restart di GDM con il comando seguente
kill -HUP `cat /var/run/`

lunedì 23 marzo 2009

Errore Adobe Reader: the print process returned error. Please check whether the printer is connected to the machine.

Soluzione: installare il pacchetto cups-bsd
sudo apt-get install cups-bsd

venerdì 20 marzo 2009

Errore: Has an A record but no DHCID, not mine.

Lo scenario e' costituito da una subnet con DHCP che aggiorna dinamicamente il DNS ad ogni rinnovo di indirizzo IP.

Il meccanismo funzionava perfettamente per tutti gli host della subnet tranne uno: riceveva correttamente un indirizzo IP, pero' il DNS non veniva aggiornato. Il file /var/log/daemon.log conteneva questo errore:
Mar 16 20:29:05 server dhcpd: Forward map from hostname.domain.local. to FAILED: Has an A record but no DHCID, not mine.
Ho trovato diverse soluzioni proposte, ma non la piu' ovvia (almeno in questo caso): esisteva infatti una definizione statica di hostname.domain.local nelle zone forward e reverse del DNS.



rndc freeze domain.local
rndc freeze
vi /etc/bind/zones/db.domain.local (e rimuovere la linea contenente hostname.domain.local)
vi /etc/bind/zones/db.10.1.1 (e rimuovere la linea contenente hostname.domain.local)
rndc unfreeze domain.local
rndc unfreeze


nslookup hostname.domain.local (se e' tutto ok, dovrebbe risultare l'indirizzo IP assegnato dal comando dhclient)

giovedì 19 marzo 2009

Installare Kerio MailServer su Debian Etch

Scaricare il pacchetto RPM del server kerio dal sito

Scaricate lo script di init per avviare/arrestare il server (quello distribuito non funziona su Debian) a questo indirizzo:

Preparazione del pacchetto deb e installazione

apt-get update
cp /var/lib/dpkg/status /var/lib/dpkg/status.start
alien kerio-kms-xxx-i386.rpm
apt-get update (serve per verificare se alien vi ha rovinato il file /var/lib/dpkg/status. In caso positivo ricopiateci sopra il backup fatto a inizio procedura)
apt-get install libstdc++5
dpkg -i kerio-kms-xxx-i386.deb

Preparazione script di init

cp /etc/init.d/keriomailserver /etc/init.d/keriomailserver.redhat
cp keriomailserver /etc/init.d
update-rc.d keriomailserver start 99 2 3 4 5 . stop 20 0 1 6 .

Configurazione server

cd /opt/kerio/mailserver

Al prossimo boot il server sara' presumibilmente attivo.

Accesso webmail

http://IP_VOSTRO_SERVER_KERIO (inizialmente solo con l'utente amministratore definito in fase di configurazione)

Amministrazione server (testata su Ubuntu 8.10)

Scaricare il pacchetto RPM dell'interfaccia di amministrazione dal sito

Preparazione del pacchetto deb e installazione

apt-get update
cp /var/lib/dpkg/status /var/lib/dpkg/status.start
alien kerio-kms-admin_xxx-i386.rpm
apt-get update (serve per verificare se alien vi ha rovinato il file /var/lib/dpkg/status. In caso positivo ricopiateci sopra il backup fatto a inizio procedura)
dpkg -i kerio-kms-admin_xxx-i386.deb

Esecuzione interfaccia di amministrazione

Eseguire il comando seguente:

martedì 17 marzo 2009

Aisleriot (solitario): non esce dal fullscreen

Se chiudete aisleriot mentre si trova in modalita' a pieno schermo, puo' capitare che alle successive esecuzioni il programma restera' in questa modalita' senza possibilita' di uscirne.

1. Aprite un terminale.
2. Eseguite gconf-editor (senza usare sudo).
3. Navigate fino a Apps->Aisleriot.
4. Trovate la chiave "maximized" e assicuratevi che non sia selezionata.
5.Trovate la chiave "fullscreen" e assicuratevi che non sia selezionata.
11. Uscite da gconf-editor.
12. Eseguite Aisleriot. Dovrebbe partire in modalita' finestra.

non-maximized mode.

martedì 3 marzo 2009

ddclient per

Per sincronizzare il proprio IP pubblico con il DNS dinamico di da un host linux dovete seguire questi passi:

apt-get install ddclient
rispondere alle domande che vi vengono poste sul vostro account
vi /etc/ddclient.conf
Commentare riga use=if
Inserire riga con use=web