Ho ripescato una vecchia box con ancora Sarge sopra.
Ho deciso di aggiornarla per portarla alla versione Lenny (attualmente stable di Debian).
Innumerevoli porconi sono stati lanciati causa conflitti vari legati a python2.3 (che mi ero colpevolmente dimenticato di aggiornare prima del resto) e ad un altro paio di conflitti.
Una vecchia versione di postgres (7.4.x) aveva due (inutili) database nella pancia che dopo l’aggiornamento non erano piu’ nel server 8.3 (no migrazione automatica fra le versioni di Pg) – ma ancora presenti nel filesystem (in /var/lib/postgres/data/ ).
Raccatta la vecchia versione sul sito ftp di Postgres: ftp://ftp-archives.postgresql.org.
Installa la vecchia versione da qualche parte in /opt specificando il prefisso in fase di configurazione (per evitare bordelli), make e make install.
… Fai partire il postmaster locale che punta al repository vecchio:
FAIL
DETAIL: The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP.
Che cosa non va? Ravanando sul web capisco che serve l’obzione: ‘–enable-integer-datetimes‘ in configurazione. Pulisci la dir, riconfigura, ricompila e ribuilda. Questa volta parte.
Non serve neanche controllare, se non si vuole: dumpall diretto sul server, salvataggio dei dati in un file, control+C per chiudere il server vecchia versione nonchè remove… infine riavvio di quello nuovo.
Nota: La prossima volta, meglio fare il dump prima.
CPAN è l’archivio online di tutta la robaccia che i vari perlisti si inventano. C’è bisogno di qualche modulo per puffare qualcosa di puffoso? Vallo a cercare su CPAN!
cpan è anche un programma che permette di interagire via linea di comando con l’archivio online di CPAN per scaricare e gestire i moduli perl che potrebbero risultare utili. Nel caso ce ne sia bisogno, si puo’ lanciare con un:
o (in maniera più perlica, poichè CPAN è infine anche un modulo)
cpan ha un file di configurazione che indica dove e come agire quando si scaricano i moduli. Queste informazioni (che di solito stanno in un qualcosa di simile a CPAN/Config.pm) su debian sono nel file /etc/perl/CPAN/Config.pm; la configurazione è un semplice hash gestibile dalla shell di cpan con il comando > o conf.
Ovviamente, come per tutti i linguaggi, i file-librerie (moduli) che si usano per “aggiornare” il perl vanno messi in percorsi specifici che in questo caso sono dentro l’array @INC; lanciando un programma perl il compilatore va a cercare le lib incluse.
In Debian:
perl -e ‘for (@INC) { if (-d $_) { print "esiste : $_"; } else { print "non esiste: $_"}; print "\n" }’
esiste : /etc/perl
non esiste: /usr/local/lib/perl/5.10.1
non esiste: /usr/local/share/perl/5.10.1
esiste : /usr/lib/perl5
esiste : /usr/share/perl5
esiste : /usr/lib/perl/5.10 #link a 5.10.1
esiste : /usr/share/perl/5.10 #link a 5.10.1
non esiste: /usr/local/lib/site_perl
esiste : .
Ohibò.
Gli /usr/local non esistono. WTF?
Di recente (settembre mi pare) perl è passato alla versione 5.10.1, e mentre Debian si è aggiornata serenamente in modalità semi-automatica, la parte /usr/local/ che viene gestita attraverso il modulo CPAN non e’ stata upgradata (son fesso, I know).
Dovendo cercare un modulo perl e auspicando che più controlli siano meglio, tanto vale affidarsi ai manutentori di Debian – cpan potrebbe essere più esotico e volatile; come sistemisti avere una base più solida può essere ritenuto generalmente migliore, anche se si rimane indietro di un paio di sottoversioni della lib voluta.
apt di norma ha tutti i pacchetti che si potrebbero volere, basta trovarli, e li si può a ragione ritenere stabili.
Le ricerche sui pacchetti di Debian possono essere completate nei due form a questa pagina; il secondo ricerca esattamente i pacchetti che contengono il file nominato, il che puo’ essere utile quando si ricerca un modulo specifico visto su CPAN.
(Es: Ricercando il modulo Restarter.pm si ottiene questo.)
Nota: le installazioni di cpan dipendono dal Makefile del modulo (vedere qui: /root/.cpan/build/ ), mentre quelle di Debian dai pacchetti (# dpkg -L nome_pacchetto).
Nota2: Se si è su Slackware o Gentoo, probabilmente tutte le lib perl stanno in un percorso sotto /usr/lib/perl divise per versione, site_perl e vendor_perl a seconda di come sono state installate.
Puo’ capitare di dimenticarsi la password di root. Oppure, come mi è successo di recente, puo’ capitare di dover entrare in un sistema Linux di cui non si sa la password per un recupero.
Se si ha libero accesso fino al bootloader (GRUB o LILO) che sia, si è a cavallo. Procediamo.
Quando il bootloader carica il kernel lancia init che è il processo padre di tutti i processi in ambiente Linux; init di conseguenza avvia getty per il login e il sistema è pronto.
Accedendo alle stringhe di GRUB (premendo “e”) possiamo invece modificare il comportamento all’avvio.
root (hd0,1)
kernel /boot/vmlinuz-2.6.29-1-amd64 root=/dev/sda2 ro
initrd /boot/initrd.img-2.6.29-1-amd64
Definito il device di avvio con root, la stringa kernel identifica il percorso all’immagine del kernel da avviare, nonche’ la partizione dove si trova.
In fondo alla riga kernel possiamo aggiungere un parametro che forzi init ad iniziare dal programma che preferiamo:
In questo modo il sistema si avvierà lanciando la console come primo processo e non richiedera’ password all’avvio (sic).
Per reimpostare la password di root è sufficiente utilizzare il comando passwd, ma le cose potrebbero non andare per il verso giusto poichè a quel livello la partizione è montata read-only.
Sarà quindi necessario rimontare la partizione di root con
e poi cambiare la password.
Nel caso il bootloader fosse protetto, la modifica di GRUB non sarebbe possibile come ho descritto. In quel caso sarà comunque semplice aggirare l’ostacolo con un media di boot (chiavetta, floppy o cd che sia).
Se la password è messa a livello di bios, meglio resettare la scheda madre.
Generalmente ogni rete (medio-piccola) ha un mailserver che comunica con l’esterno e che invia e riceve la mail degli utenti verso e da il mondo. ![]()
Configurare completamente un exim è un lavoraccio di cui attualmente non parlerò.
I mailclient (mutt, thunderbird, outlook) operano in maniere differenti, a seconda del fatto che sappiano parlare direttamente il protocollo SMTP o no. Di sicuro gli MTA sanno parlare l’SMTP, ma non aiutano gli utenti finali a scrivere le mail.
Mentre un client come thunderbird parla direttamente i protocolli necessari con l’MTA remoto, uno come mutt si limita a “impostare” la mail, e poi la consegna ad un MTA locale che la dovrebbe consegnare al mailserver che fa da ponte con il resto del mondo.
(Nota: Attualmente anche mutt ha il supporto SMTP (dalla ver. 1.5.x), ma c’è chi dice sia una bestemmia usarlo per questo.
Nel caso interessi, guardare le FAQ e settare le variabili smtp_* (ie: smtp_url) SENZA l’account name – che si incarta.)
Ogni box unix ha un MTA locale – la sua natura di stazione multi-utente fa si che gli utenti della box abbiano la possibilità di comunicare fra di loro come default.
Le debian installano autonomamente la versione light di exim con una configurazione che permette di inviare e ricevere mail localmente.
Nel caso sia necessario configurare senza troppe pretese l’exim-light per permettere all’MTA locale di comunicare con l’MTA sul mailserver della lan, si può usare:
# dpkg-reconfigure exim4-config
sfruttando come smarthost il mailserver di cui sopra.
Se c’è una cosa grandiosa delle chiavette USB, è che possono tenere un sacco di cose importanti, ed essere estremamente portatili.
Credo che una delle cose più ganze, sia poter girare con il proprio OS a portata di mano.
Per gli utenti che non vogliono chiedere mai e che hanno una chiavetta USB a disposizione:
- scaricate l’immagine della distro debian (5.0) con il DE che preferite da qui (io sono andato sulla i386, usb-hdd, xfce).
- copiate su una chiavetta con $ dd if=immagine_debian_live.img of=/dev /chiavetta /usb
Attenzione: copiate sul device della chiavetta, non su quella della partizione (ie: /dev/sdc, non /dev/sdc1) - Inserite la chiavetta in una porta usb e riavviate il pc, facendo il boot dalla chiavetta (ie: F8 per avere il menu di boot).
Facile e utile.
Oramai trovo grub un boot loader pratico e bello (sarà abitudine).
Quello di FreeBSD invece mi ha lasciato un po’ perplesso, così ho partizionato la solita box in 3 parti:
hda1) /boot/ per Grub, hda2) FreeBSD, hda3) / di Debian.
In effetti installando FreeBSD dopo Debian, il boot loader era gentile (anche se brutto) e mi permetteva di accedere alle varie partizioni sul disco; quando invece ho fatto viceversa (prima FreeBSD e poi Linux) il grub di Debian ha diligentemente riscritto tutto, e non vede il loader del demonietto. Male male.
Ho dovuto dunque un po’ pistolare…
Per montare il filesystem di FreeBSD (che è UFS) si deve sfruttare il seguente comando:
mount -r -t ufs /dev(hda2 /mnt/
Questo mi è stato utile per vedere il percorso ed i file all’interno del fs di BSD, ricordandomi che nella sottopartizione a c’era root.
A questo punto ho modificato il /boot/grub/ menu.lst aggiungendo le seguenti righe:
title FreeBSD 7.1 root (hd0,1,a) kernel /boot/loader
… ed il gioco è fatto.
(Già che c’ero con Debian ho apt-gettato memtest86+ per i check sulla ram. Quello si installa da solo nella partizione /boot/ , si deve solo modificare la menu.lst di grub facendo puntare al memtest86+.bin)
Mi sono spesso chiesto quanta robba ci fosse in una installazione (davvero) minimale di Debian.
Visto che di recente ho installato una Lenny, una grep’pata sul /var/log/dpkg .log mi ha dato questo risultato:
install base-passwd 3.5.20 install base-files 5lenny2 install libc6 2.7-18 install perl-base 5.10.0-19 install mawk 1.3.3-11.1 install debconf 1.5.24 install gcc-4.3-base 4.3.2-1.1 install libgcc1 1:4.3.2-1.1 install debianutils 2.30 install libncurses5 5.7+20081213-1 install bash 3.2-4 install bsdutils 1:2.13.1.1-1 install libattr1 1:2.4.43-2 install libacl1 2.2.47-2 install libselinux1 2.0.65-5 install coreutils 6.10-6 install libstdc++6 4.3.2-1.1 install lzma 4.43-14 install liblocale-gettext-perl 1.05-4 install libtext-iconv-perl 1.7-1+b1 install libtext-charwidth-perl 0.04-5+b1 install libtext-wrapi18n-perl 0.06-6 install debconf-i18n 1.5.24 install diff 2.8.1-12 install libcomerr2 1.41.3-1 install e2fslibs 1.41.3-1 install libpam-runtime 1.0.1-5+lenny1 install libpam0g 1.0.1-5+lenny1 install libdb4.6 4.6.21-11 install libpam-modules 1.0.1-5+lenny1 install passwd 1:4.1.1-6 install libuuid1 1.41.3-1 install libblkid1 1.41.3-1 install libss2 1.41.3-1 install e2fsprogs 1.41.3-1 install findutils 4.4.0-2 install gcc-4.2-base 4.2.4-6 install grep 2.5.3~dfsg-6 install gzip 1.3.12-6 install hostname 2.95 install mount 2.13.1.1-1 install ncurses-bin 5.7+20081213-1 install lsb-base 3.2-20 install libsepol1 2.0.30-2 install initscripts 2.86.ds1-61 install libdevmapper1.02.1 2:1.02.27-4 install libslang2 2.1.3-3 install login 1:4.1.1-6 install makedev 2.3.1-88 install mktemp 1.5-9 install ncurses-base 5.7+20081213-1 install procps 1:3.2.7-11 install sed 4.1.5-6 install sysvinit-utils 2.86.ds1-61 install sysv-rc 2.86.ds1-61 install sysvinit 2.86.ds1-61 install tar 1.20-1 install tzdata 2008h-2 install zlib1g 1:1.2.3.3.dfsg-12 install util-linux 2.13.1.1-1 install adduser 3.110 install libbz2-1.0 1.0.5-1 install libreadline5 5.2-3.1 install libusb-0.1-4 2:0.1.12-13 install gpgv 1.4.9-3 install gnupg 1.4.9-3 install debian-archive-keyring 2009.01.31 install apt 0.7.20.2 install apt-utils 0.7.20.2 install libncursesw5 5.7+20081213-1 install libsigc++-2.0-0c2a 2.0.18-2 install libcwidget3 0.5.12-4 install libxapian15 1.0.7-4 install libept0 0.5.22 install aptitude 0.4.11.11-1~lenny1 install bsdmainutils 6.1.10 install cpio 2.9-13 install cron 3.0pl1-105 install dhcp3-common 3.1.1-6 install dhcp3-client 3.1.1-6 install dmidecode 2.9-1 install ed 0.7-3 install groff-base 1.18.1.1-21 install net-tools 1.60-22 install ifupdown 0.6.8+nmu1 install info 4.11.dfsg.1-4 install iproute 20080725-2 install iptables 1.4.2-6 install iputils-ping 3:20071127-1 install libconsole 1:0.2.3dbs-65.1 install libgpg-error0 1.4-2 install libgcrypt11 1.4.1-1 install libgdbm3 1.8.3-3 install libtasn1-3 1.4-1 install libgnutls26 2.4.2-6+lenny1 install libnewt0.52 0.52.2-11.3 install libpopt0 1.14-4 install libsasl2-2 2.1.22.dfsg1-23 install libssl0.9.8 0.9.8g-15 install libwrap0 7.6.q-16 install logrotate 3.7.1-5 install man-db 2.5.2-4 install manpages 3.05-1 install module-init-tools 3.4-1 install nano 2.0.7-4 install netbase 4.34 install netcat-traditional 1.10-38 install readline-common 5.2-3.1 install rsyslog 3.18.6-4 install tasksel-data 2.78 install tasksel 2.78 install tcpd 7.6.q-16 install traceroute 2.0.11-2 install update-inetd 4.31 install vim-common 1:7.1.314-3+lenny2 install vim-tiny 1:7.1.314-3+lenny2 install wget 1.11.4-2 install whiptail 0.52.2-11.3 install locales 2.7-18 install console-data 2:1.07-11 install console-tools 1:0.2.3dbs-65.1 install console-common 0.7.80 install installation-report 2.38 install mdadm 2.6.7.2-1 install busybox 1:1.10.2-2 install libvolume-id0 0.125-7 install udev 0.125-7 install libklibc 1.5.12-2 install klibc-utils 1.5.12-2 install initramfs-tools 0.92o install linux-image-2.6.26-2-686 2.6.26-15 install linux-image-2.6-686 2.6.26+17+lenny1 install usbutils 0.73-10 install acpid 1.0.8-1 install acpi-support-base 0.109-11 install eject 2.1.5+deb1-4 install libc6-i686 2.7-18 install laptop-detect 0.13.6 install popularity-contest 1.46 install grub-common 1.96+20080724-16 install grub 0.97-47lenny2
Per minimale intendo che nel momento della scelta dei pacchetti, nessuna voce era selezionata.
Installazioni subito seguenti decise da me:
vim, ssh, file