Personalizzare Ubuntu Server creando una intranet basata su Plone
medio
Introduzione
Nella presente guida (realizzata da Luciana Dimauro) verrà spiegato come personalizzare una distribuzione di Ubuntu Server manualmente, in modo da ottenere una intranet basata su Plone, in aggiunta a LDAP e Samba.
Capitolo 1
1.1 Operazioni preliminari
Come prima cosa è necessario creare l’ambiente di lavoro adatto per poter effettuare le modifiche; quindi su di un pc, occorre scaricare la iso (immagine disco) della versione Server di Ubuntu 7.10, dopodiché bisogna scaricare anche un software che permetta la simulazione di diversi sistemi operativi.
Questo strumento serve ad installare Ubuntu Server senza usare un’altra macchina in modo da raccogliere informazioni utili.
L’operazione successiva consistite nell’ottenere una copia dei file contenuti nella iso appena scaricata: aperta una shell sul pc, si monta l’immagine in una cartella creata arbitrariamente con:
mkdir /opt/mount[1]
mount –o loop /percorso_della_iso /opt/mount [2]
Quindi creare la cartella cd-image
mkdir /opt/cd-image
ed eseguire la copia dei file presenti in /opt/mount
cp –rT /opt/mount /opt/cd-image[3]
1.2 Modifica del file di preseed
Il file di preseed è un file contenuto nel cd che dà all’installer del sistema [4] le informazioni necessarie per un’installazione base.
In poche parole l’installer legge questo file, costituito da alcune stringhe e variabili, e lo “interpreta”, effettuando delle scelte sulle operazioni da effettuare, dalla selezione del kernel alle opzioni sulla lingua.
Questo file si trova nella cartella /opt/cd-image/preseed ed è simile a questo:
#Always install the server kernel.
d-i base-installer/kernel/override-image string linux-server
#Only install basic language packs. Let tasksel ask about tasks.
d-i pkgsel/language-pack-patterns string
#No language support packages.
d-i pkgsel/install-language-support boolean false
Per poter personalizzare una distribuzione è necessario modificare questo file, o meglio crearne uno nuovo con le impostazioni volute.
Per alcune opzioni si può far eseguire il tasksel in background.
Il tasksel è un selettore di opzioni: quando si installa il sistema operativo, l’installer fa delle domande relative ad alcuni strumenti.
Per evitare che nella distribuzione modificata vengano fatte queste domande, occorre aggiungere al file di preseed[5] la riga
tasksel tasksel/first multiselect dns-server, lamp-server, mail-server,
openssh-server, print-server, samba-server
In questo modo la macchina su cui viene installato questo sistema operative verrà impostata automaticamente, senza che venga chiesto nulla all’utente, come server multifunzione, seguendo le indicazioni scritte specificate dalla stringa.
Il passo successivo è stato ricavare i pacchetti software extra, da aggiungere al cd, e la loro configurazione.
Dato che alcuni pacchetti ne richiedevano degli altri strettamente correlati, per non incorrere in errori dovuti a queste dipendenze, ci si può avvalere dell’aiuto della macchina virtuale: una volta installata la versione originale di Ubuntu Server su questo strumento, si può installare ogni singolo pacchetto con
apt-get install nome_pacchetto[6]
Nell’output compare l’elenco (se esiste) dei pacchetti da cui il singolo software dipende.
Verificato ciò va scaricato tutto quello che serve dal sito http://packages.ubuntu.com/ sul pc, mettendoli poi nella cartella (creata appositamente) /opt/cd-image/pool/extras.
In seguito bisogna aggiungere un’altra riga al file di preseed in cui questi oggetti vengono richiamati:
d-i pkgsel/include string catdoc courier-authdaemon courier-authlib
courier-authlib-userdb courier-base expect expectk gamin jabber jabber-common
ldap-utils libgamin0 libglib2.0-0 libglib2.0-data libgcc1 libiodbc2
libldap-2.3-0 libperl5.8 slapd tcl8.4 tclreadline libc6 libexpat1 wv unrtf
libfreetype6 libgsf-1-common libgsf-1-114 libatk1.0-0 libcomerr2 libatk1.0-data
libopencdk8 liblzo2-2 libgnutls13 libkeyutils1 libkrb53 x11-common libgtk2.0-0
libwmf0.2-7 libwv-1.2-3 elinks links lynx libjasper1 liblcms1 libmagick9
imagemagick xpdf xpdf-common lesstif2 xpdf-reader xpdf-utils ppthtml xlhtml
libgtk2.0-common libxcomposite1
In relazione a ldap.deb, se si vuole, si può aggiungere al file di preseed anche alcune righe relative alla sua configurazione per quanto riguarda i parametri principali, in modo che non necessitino ritocchi durante l’installazione del sistema operativo.
Le impostazioni sono state ricavate usando debconf-utils, installato sulla macchina virtuale.
Perciò, eseguendo
debconf-get selections | grep slapd[7] > slapd.txt
viene creato il file splapd.txt in cui ci sono esattamente le stringhe di cui si ha bisogno e che vanno inserite nel file di preseed, che appare così strutturato[8]:
#Always install the server kernel.
d-i base-installer/kernel/override-image string linux-server
# Only install basic language packs. Let tasksel ask about tasks.
d-i pkgsel/language-pack-patterns string
# No language support packages.
d-i pkgsel/install-language-support boolean false
tasksel tasksel/first multiselect dns-server,
lamp-server, mail-server, openssh-server, print-server, samba-server
d-i pkgsel/include string catdoc courier-authdaemon courier-authlib courier-authlib-userdb courier-base expect
expectk gamin jabber jabber-common ldap-utils libgamin0 libglib2.0-0
libglib2.0-data libgcc1 libiodbc2 libldap-2.3-0 libperl5.8 slapd tcl8.4
tclreadline libc6 libexpat1 wv unrtf libfreetype6 libgsf-1-common libgsf-1-114
libatk1.0-0 libcomerr2 libatk1.0-data libopencdk8 liblzo2-2 libgnutls13
libkeyutils1 libkrb53 x11-common libgtk2.0-0 libwmf0.2-7 libwv-1.2-3 elinks
links lynx libjasper1 liblcms1 libmagick9 imagemagick xpdf xpdf-common lesstif2
xpdf-reader xpdf-utils ppthtml xlhtml libgtk2.0-common libxcomposite1
slapd slapd/password2 password
slapd slapd/internal/adminpw password
slapd slapd/password1 password
slapd slapd/allow_ldap_v2 boolean false
slapd slapd/password_mismatch note
slapd slapd/fix_directory boolean true
slapd slapd/invalid_config boolean true
slapd shared/organization string nome_scelto
slapd slapd/upgrade_slapcat_failure note
slapd slapd/no_configuration boolean false
slapd slapd/move_old_database boolean true
slapd slapd/migrate_ldbm_to_bdb boolean true
slapd slapd/upgrade_slapadd_failure note
slapd slapd/suffix_change boolean false
slapd slapd/slave_databases_require_updateref note
slapd slapd/dump_database_destdir string /var/backups/slapd-VERSION
slapd slapd/autoconf_modules boolean true
# Do you want your database to be removed when slapd is purged?
slapd slapd/purge_database boolean false
slapd slapd/domain string nome_scelto
slapd slapd/backend select BDB
slapd slapd/dump_database select when needed
A questo punto si deve fare in modo che il preseed appena creato venga visualizzato nella schermata iniziale che compare quando installiamo e che venga impostato come opzione di default.
Nella cartella /opt/cd-image/isolinux modificare il file isolinux.cfg.
Di norma, isolinux.cfg è strutturato in questo modo:
DEFAULT install
GFXBOOT bootlogo
APPEND file=/cdrom/preseed/ubuntu-server.seed initrd=/install/initrd.gz quiet --
LABEL install
menu label ^Install to the hard disk
kernel /install/vmlinuz
append file=/cdrom/preseed/ubuntu-server.seed initrd=/install/initrd.gz quiet --
LABEL linux
menu hide
kernel /install/vmlinuz
append file=/cdrom/preseed/ubuntu-server.seed initrd=/install/initrd.gz quiet --
LABEL cdrom
menu hide
kernel /install/vmlinuz
append file=/cdrom/preseed/ubuntu-server.seed initrd=/install/initrd.gz quiet --
LABEL expert
menu hide
kernel /install/vmlinuz
append file=/cdrom/preseed/ubuntu-server.seed priority=low initrd=/install/initrd.gz --
LABEL check
menu label ^Check CD for defects
kernel /install/vmlinuz
append
MENU=/bin/cdrom-checker-menu initrd=/install/initrd.gz quiet --
LABEL rescue
menu label ^Rescue a broken system
kernel /install/vmlinuz
append rescue/enable=true initrd=/install/initrd.gz --
LABEL memtest
menu label ^Memory test
kernel /install/mt86plus
append -
LABEL hd
menu label ^Boot from first hard disk
localboot 0x80
append -
DISPLAY isolinux.txt
TIMEOUT 0
PROMPT 1
F1 f1.txt
F2 f2.txt
F3 f3.txt
F4 f4.txt
F5 f5.txt
F6 f6.txt
F7 f7.txt
F8 f8.txt
F9 f9.txt
F10 f10.txt
DEFAULT è l’opzione preselezionata, LABEL indica invece quale voce deve apparire sul menu, quello che compare dopo APPEND invece identifica il percorso da seguire per prendere il file di preseed. Le altre voci invece indicano le altre opzioni di installazione.
Innanzitutto aggiungere, subito dopo la riga con APPEND
LABEL Nome_Arbitrario
menu label ^Nome_Arbitrario
kernel /install/vmlinuz
append file=/cdrom/preseed/mio_preseed.seed
initrd=/install/initrd.gz quiet --
e poi modifcare DEFAULT in questo modo:
DEFAULT Nome_Arbitrario
Il resto del file rimane invariato.
1.3 Creazione dei repository
Per repository si intende una specie di deposito o archivio di dati, in cui vengono memorizzate informazioni sul percorso da seguire quando si cerca un software.
In esempi pratici, in una distribuzione Linux Debian/Ubuntu[9], questo elenco di archivi è contenuto nel file /etc/apt/sources.list ed è costituito da una serie di righe simili a questa:
deb http://it.archive.ubuntu.com/ubuntu/ edgy main restricted
Ogni riga identifica un percorso che viene utilizzato quando l’utente installa un software.
Nel momento in cui si digita apt-get install nome_pacchetto, non si fa altro che ricercare questo pacchetto all’interno degli archivi indicati nel sources.list.
Creare un repository, in questo caso, vuol dire modificare questo file, in modo che venga incluso il percorso relativo al software extra della mia distribuzione.
Dopo aver incluso tutti i pacchetti nella cartella appositamente creata, si deve aggiungere anche il file Release in /opt/cd-image/dists/gutsy/extras/binary-i386 contenente le seguenti informazioni utili, come verrà descritto più avanti :
Archive: gutsy
Version: 7.10
Component: extras
Origin: ubuntu
Label: nome_qualsiasi
Architecture: i386
1.3.1 Creazione della chiave pubblica.
Prima di eseguire qualsiasi altra operazione è necessario generare una chiave pubblica, per poter firmare il CD e permetterne l’identificazione, grazie al pacchetto gnupg presente sul sistema, eseguendo da terminale
gpg --gen-key
accettando le impostazioni di default e inserendo informazioni quali nome, indirizzo di posta elettronica e una password (chiamata passphrase) valida.
Una volta creata la cartella /opt/build e dopo essersi posizionati al suo interno[10], installare lo strumento fakeroot in modo da ottenere il file sorgente di ubuntu-keyring con
apt-get source ubuntu-keyring
Questa operazione crea automaticamente all’interno della cartella /build, altre due sottocartelle, e cioè /opt/build/ubuntu-keyring-xxxx.xx.xx[11]/keyrings.
Posizionandosi proprio in /keyrings eseguire:
gpg --import < ubuntu-archive-keyring.gpg
gpg --list-keys “nome_scelto_per_la_chiave”[12]
gpg --export numero_esadecimale numero_esadecimale id_chiave > ubuntu-archive-keyring.gpg[13]
Così il proprio identificativo viene aggiunto alla sorgente.
Spostandosi nella cartella superiore (ubuntu-keyring-xxxx.xx.xx), ricostruire il pacchetto grazie a fakeroot:
dpkg-buildpackage –rfakeroot –m”nome_scelto<e-mail>” –kid_chiave
Riposizionandosi nella cartella /build effettuare una copia del pacchetto ricostruito in /opt/cd-image/pool/main/u/ubuntu-keyring affinché l’installer del sistema lo trovi e non dia errori.
1.3.2 Creazione di Packages e Packages.gz
L’installer ha bisogno che tutti i pacchetti presenti nel cd vengano elencati in due file: Packages e Packages.gz[14].
Questi vengono creati automaticamente con apt-ftparchive, uno strumento del sistema operativo stesso.
Dopo aver creato /opt/indices e /opt/apt-ftp-archive, bisogna recuperare le informazioni sui pacchetti stessi, sottoforma di indice, che si trovano nelle varie sottocartelle della distribuzione, facendo riferimento ad un archivio in rete. Posizionandosi nella cartella /indices eseguire
wget http://archive.ubuntu.com/ubuntu/indices/override.gutsy.{extra,main,main.debian-installer, restricted, restricted.debian-installer}
Questo trasferisce per l’appunto le informazioni che servono nella cartella in cui ci si è posizionati.
A questo punto occorre creare nella cartella /apt-ftparchive i file apt-ftparchive-deb.conf, apt-ftparchive-udeb.conf, apt-ftparchive-extras.conf e release.conf.
All’interno di ciascuno di questi file vanno inseriti degli script trovati sull sito http://help.ubuntu.com/community/InstallCDCustomization modificati secondo la necessità.
Lo scopo di questi file è quello di creare il Packages.gz che, come già detto, è necessaria all’installer ai fini dell’installazione.
In apt-ftparchive-deb.conf scrivere:
Dir {
ArchiveDir "/opt/cd-image/";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/gutsy/main/binary-i386/Packages";
BinOverride "/opt/indices/override.gutsy.main";
ExtraOverride "/opt/indices/override.gutsy.extra.main";
};
BinDirectory "pool/restricted" {
Packages "dists/gutsy/restricted/binary-i386/Packages";
BinOverride "/opt/indices/override.gutsy.restricted";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
Per apt-ftparchive-udeb.conf:
Dir {
ArchiveDir "/opt/cd-image/";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/gutsy/main/debian-installer/binary-i386/Packages";
BinOverride "/opt/indices/override.gutsy.main.debian-installer";
};
BinDirectory "pool/restricted" {
Packages "dists/gutsy/restricted/debian-installer/binary-i386/Packages";
BinOverride "/opt/indices/override.gutsy.restricted.debian-installer";
};
Default {
Packages {
Extensions ".udeb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
Per apt-ftparchive-extras.conf:
Dir {
ArchiveDir "/opt/cd-image/";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/extras" {
Packages "dists/gutsy/extras/binary-i386/Packages";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
Per release.conf:
APT::FTPArchive::Release::Origin "Ubuntu";
APT::FTPArchive::Release::Label "Ubuntu";
APT::FTPArchive::Release::Suite "gutsy";
APT::FTPArchive::Release::Version "7.10";
APT::FTPArchive::Release::Codename "gutsy";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Components "main restricted extras";
APT::FTPArchive::Release::Description "Ubuntu 7.10";
Inoltre, va aggiunto anche uno script in Perl[15], che ricava il file di override, ovvero un file che ricava le intestazioni per i pacchetti che si trovano nella cartella /main. Per questa distribuzione non è strettamente necessario avere il file di override, ma è stato consigliabile metterlo, al fine di evitare errori nella creazione dei repository.
#! /usr/bin/perl
while (<>) {
chomp;
next if /^ /;
if (/^$/ && defined($task)) {
print "$package Task $task\n";
undef $package;
undef $task;
}
($key, $value) = split /: /, $_, 2;
if ($key eq 'Package') {
$package = $value;
}
if ($key eq 'Task') {
$task = $value;
}
}
Si esegue da terminale, digitando:
extraoverride.pl < /opt/cd-image/dists/gutsy/main/binary-i386/Packages >> /opt/indices/override.gutsy.extra.main[16]
Il vero e proprio repository, il file md5sum e la creazione dell’immagine disco sono le fasi finali di questa prima parte.
In realtà il tutto consiste in pochi comandi da eseguire, il cui corretto funzionamento dipende dalle fasi precedenti.
Sempre grazie al sito della comunità Ubuntu, si possono generare i repository senza difficoltà.
Innanzitutto, per evitare di scrivere interi percorsi vengono utilizzate delle variabili[17] (scritte a caratteri maiuscoli):
BUILD=/opt/cd-image
APTCONF=/opt/apt-ftparchive/release.conf
DISTNAME=gutsy
Poi con il comando apt-ftparchive:
pushd[18] $BUILD
apt-ftparchive -c $APTCONF generate /opt/apt-ftparchive/apt-ftparchive-deb.conf
apt-ftparchive -c $APTCONF generate /opt/apt-ftparchive/apt-ftparchive-udeb.conf
apt-ftparchive -c $APTCONF generate /opt/apt-ftparchive/apt-ftparchive-extras.conf
apt-ftparchive -c $APTCONF release $BUILD/dists/$DISTNAME > $BUILD/dists/$DISTNAME/Release
In sostanza, queste righe prendono le informazioni dai file creati precedentemente: informazioni sui pacchetti da apt-ftparchive *.conf, informazioni relative a distribuzione, versione, architettura della macchina e componenti di riferimento (main,extra, etc.) dal file release.conf.
Tutto ciò viene usato per aggiungere nel file sources.list il percorso da utilizzare affinché vengano trovati i pacchetti presenti nel CD.
Si aggiunge anche la chiave definitivamente, cioè si esportata nel file Release, in modo che venga anche essa letta facilmente dall’installer, e che possa essere facilmente rintracciabile una volta installato il sistema:
gpg --default-key "id_chiave" --output $BUILD/dists/$DISTNAME/Release.gpg -ba $BUILD/dists/$DISTNAME/Release
Quindi si deve aggiornare il file md5sum, che contiene l’elenco degli elementi presenti sul CD crittografato con l’algoritmo conosciuto come Md5, e che serve a controllare che non ci siano errori nei file:
find . -type f -print0 | xargs -0 md5sum > md5sum.txt
popd[19]
Infine, per creare l’immagine iso avviabile del lavoro, in modo da controllarne il funzionamento corretto tramite macchina virtuale e per usarla nella seconda fase, digitare da terminale[20]:
mkisofs –r -V “Etichetta_CD” –cache-inodes –J –l –b isolinux/isolinux.bin –c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o nome_immagine.iso /opt/cd-image[21]
Capitolo 2
Conclusa la prima fase e creata l’immagine del disco, l’ho installata sulla macchina virtuale, ottenendo così un sistema funzionante e pronto per poter installare e configurare Plone.
Essendo una versione server, e quindi mancando la parte grafica, mi sono dovuta connettere a questa macchina virtuale in modalità remota usando ssh[22] da una shell sul pc , in modo da poter modificare dei file e per trasportare[23] questi file da una parte all’altra.
2.1 Installazione di Plone
Per installare Plone basta utilizzare, dalla shell collegata in remoto con la macchina virtuale
wget https://launchpad.net/plone/3.0/3.0.3/+download/Plone-3.0.3-UnifiedInstaller.tar.gz
che scaricato l’Unified Installer[24] in formato compresso.
Dopo aver decompresso la tarball[25] con
tar xvzf Plone-3.0.3-UnifiedInstaller.tar.gz
ci si deve spostare nella cartella relative e lanciare l’installer
./install.sh standalone[26]
che provvede a compilare e cioè a rendere eseguibile i file e a installare Plone nella cartella /opt/Plone-3.0.3[27]
Dopo aver rimosso la tarball e riavviato la macchina virtuale, il processo che fa partire Plone e Zope viene avviato automaticamente all’avvio del sistema.
Nella distribuzione, Plone viene installato seguendo un’altra procedura, in modo che tutte le configurazioni effettuate risultino già incluse e funzionanti.
Sul pc, nella cartella /cd-image, creare un’altra cartella chiamata /addons in cui occorre inserire alcuni file.
Dopo aver fatto le configurazioni necessarie per tutti i servizi, comprimere la cartella in cui si trova Plone (/opt/Plone-3.0.3) e mettere quindi la tarball in /addons.
Facendo scompattare la tarball durante l’installazione del sistema operativo tramite uno script in bash inserito all’interno del cd[28], si evita che l’applicazione venga compilata e reinstallata nuovamente, e che quindi tutte le configurazioni fatte e descritte nei paragrafi successivi, vadano perdute.
Lo script in questione (chiamato setup.sh) viene lanciato durante l’installazione del sistema operativo tramite una riga aggiunta nel file di preseed:
d-i preseed/late_command string sh /cdrom/setup.sh
Questa fa in modo che la sua esecuzione venga riconosciuta come ultima operazione da effettuare, poco prima che l’installazione finisca e subito dopo che sono state create le cartelle e i file di sistema.
Grazie a setup.sh, oltre al comando di scompattare la tarball di Plone, possono essere inclusi comandi che permettono l’aggiunta di file di configurazione, la creazione di link, utenti e altro.
Per la funzione sopra descritta, la riga relativa è:
#!/bin/sh[29]
cd /target[30]/opt
tar xvzf /cdrom/addons/plone.tar.gz
dopodichè è necessario anche aggiungere quelle relative alla creazione di link simbolici che permettono l’avvio del servizio in /etc/init.d e /etc/rc2.d .
Init.d è lo strumento che gestisce le fasi di avvio del sistema, e cioè in /init.d sono contenuti tutti i servizi che devono essere avviati quando si accende il computer, mentre /rc2.d contiene i link simbolici prensenti in /init.d e ha la possibilità di far partire effettivamente il servizio o no, anteponendo una S (start) o una K (kill) al nome del servizio stesso.
ln -s /opt/Plone-3.0.3/zeocluster/client1/bin/zopectl /target/etc/init.d/zopectl
ln -s /opt/Plone-3.0.3/zeocluster/server/bin/zeoctl /target/etc/init.d/zeoctl
ln -s /etc/init.d/zopectl /target/etc/rc2.d/S93zopectl
ln -s /etc/init.d/zeoctl /target/etc/rc2.d/S92zeoctl
Infine si deve creare un utente plone rendendolo proprietario della cartella /opt/Plone-3.0.3 in modo che non ci siano problemi sui permessi di lettura e scrittura, ovvero per renderlo accessibile a chi usa la distribuzione tutto il contenuto della cartella /opt
echo "plone:x:1001:1001::/opt/Plone-3.0.3:/bin/false" >> /target/etc/passwd
echo fa in modo che il pezzo di riga scritta tra virgolette (e cioè l’utente plone o utente 1001) sia aggiunto nel file in cui si trova la lista di tutti gli utenti del sistema (/etc/passwd)
Per attribuire la cartella a quell’utente basta aggiungere:
chown -R 1001 /target/opt/Plone-3.0.3
L’installazione di Plone è così conclusa.
2.2 Configurazione di Apache
2.2.1 Apache e la porta 80
Una porta è uno strumento utilizzato dal livello di trasporto della pila ISO/OSI per permettere la ricezione e l’invio di pacchetti tra calcolatori, facilitando la comunicazione tra loro.
Il protocollo http, quello più comune, utilizza la porta 80, la quale non è necessariamente da esplicitare quando si digita un indirizzo web.
In termini pratici, se si vuole visitare il sito di Google (o qualsiasi altro sito), scrivere http://www.google.com e http://www.google.com:80 è la stessa cosa.
Con una distribuzione di Ubuntu Server, viene installato di default Apache, un software che svolge la funzione di web-server e che utilizza automaticamente la porta 80 per svolgere le sue funzioni.[31]
Di conseguenza esso risulta essere il web-server predefinito, anche qualora sullo stesso sistema ne esistessero degli altri.
Dal momento che la distribuzione è basata su Plone, e che Plone pur essendo un’applicazione di Zope svolge le stesse funzioni di un web-server, il problema principale è fare in modo che Apache venga sostituito e che Plone occupi la porta 80 in sua vece.
Reindirizzare Plone significa modificare, o meglio creare un nuovo file di configurazione del servizio Apache, in modo che il Virtual Host abbia le caratteristiche volute.
E' anche necessario eliminare alcuni link (simbolici) che permettono l’avvio di Apache stesso allo startup del sistema.
2.2.2 Procedura utilizzata
Il file di configurazione si trova nella cartella /etc/apache/sites-available (siti disponibili) ed è sotto il nome di 000-default. Sullo stesso stile, bisogna crearne uno, in questo esempio chiamato plone-default, incluso nella cartella /addons, strutturato in questo modo:
<VirtualHost * >
ServerAdmin mail@mail.it
ServerName intranet
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^/(.*)
http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/Plone/VirtualHostRoot/$1[P,L]
</VirtualHost>
in cui l’asterisco nella prima riga fa in modo che il Virtual Host possa essere raggiungibile da tutti, la voce che segue ServerAdmin è arbitraria come pure il ServerName, mentre nella penultima riga è specificato che Plone è visibile sulla porta 80.
Il file non va incluso nella cartella /sites-available, ma va ricopiato tramite setup.sh
cp /cdrom/addons/plone.default /target/etc/apache2/sites-available/
Sempre tramite setup.sh si deve aggiungere un link di plone.default in /sites-enabled (siti abilitati):
ln -s /etc/apache2/sites-available/plone.default /target/etc/apache2/sites-enabled
rimuovendo quindi il link a 000-default:
rm /target/etc/apache2/sites-enabled/000-default
in modo che quest’ultimo non venga trovato e riconosciuto.
Occorre poi creare dei link ad alcuni moduli di Apache (proxy.load, proxy_http.load e rewrite.load) che permettono il funzionamento del Virtual Host. Questi moduli si trovano in /etc/apache/mods-available (moduli disponibili) e per funzionare, i link vanno creati in /etc/apache/mods-enabled (moduli abilitati):
ln -s /etc/apache2/mods-available/proxy.load /target/etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/proxy_http.load /target/etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/rewrite.load /target/etc/apache2/mods-enabled
Infine, per rendere il tutto funzionante alla fine dell’installazione, si deve far ripartire il servizio Apache da setup.sh:
/target/etc/init.d/apache2 reload
2.3 Configurazione di LDAP
Il pacchetto LDAP è già stato incluso nei pacchetti extra durante la prima fase del lavoro. Quello che occorre fare ora è adattarlo a Plone.
Come già detto, Plone e Zope sono scritti in Python, quindi anche l’accesso ad una LDAP-Directory deve essere possibile tramite Python stesso.
C’è bisogno innanzitutto di installare su macchina virtuale il pacchetto python-ldap.
Il primo problema che si presenta è quello di adattare la versione de Python di Plone a quello del sistema per evitare problemi di compatibilità, e può essere risolto importando le impostazioni necessarie. Come utente root, da terminale digitare python per avviare l’interprete; e poi import ldap.
Fatto ciò eseguire prima
cp /usr/lib/python2.x/site-packages/ldap /opt/Plone-3.0.3/Python2.x/lib/python/site-packages/ldap
e poi
cp /usr/lib/python2.x/site-packages/ldap/schema /opt/Plone-3.0.3/Python2.x/lib/python/site-packages/ldap/schema
in quanto python-ldap non viene installato con la distribuzione, quindi i link che si trovano nella cartella /opt/Plone-3.0.3/Python2.x/lib/python/site-packages/ldap e quelli nella cartella /opt/Plone-3.0.3/Python2.x/lib/python/site-packages/ldap/schema non sarebbero validi, generando errori. Eliminando questi link ed eseguendo la copia dei file, come scritto sopra, il problema viene risolto.
Installare poi il prodotto PloneLDAP e i suoi plugins: posizionandosi nella cartella /opt/Plone-3.0.3/zeocluster/Products eseguire
wget http://plone.org/products/ploneldap/releases/1.0/PloneLDAP-bundle-1.0.tar.gz
e decomprimere il file tar.gz appena scaricato. Per fare in modo che questi nuovi prodotti siano utilizzabili, cancellare il tar.gz che non serve più e riavviare il servizio.
Sulla pagina di Plone corrispondente all’indirizzo ip del server, dopo essersi loggati[32], andare su
Configurazione sito → Prodotti aggiuntivi → Prodotti installabili
e selezionare la casella corrispondente alla voce LDAP connections.
Il passo successivo consiste nel configurare il servizio.
Per evitare di usare la ZMI (Zope Management Interface), e rischiare di manomettere impostazioni essenziali per il funzionamento stesso di Plone e Zope, bisogna aggiungere anche il plugin simplon-plone-ldap tra le librerie di Python relative a Plone.
Questo plugin permette di avere una interfaccia grafica user-friendly proprio nel Plone Site.
Riavviato di nuovo il servizio Zope[33] è possibile accedere a
Configurazione sito → Configurazione prodotti aggiuntivi → LDAPconnection → LDAPconfiguration → Global settings
e inserire i seguenti parametri:
LDAP server type LDAP
rDN attribute cn
user id attribute cn
login name attribute cn
LDAP object classes pilotPerson
Bind DN cn=admin, dc=nome
Bind password password_arbitraria
Base DN for users cn =admin,dc=nome
Search scope for users subtree
Base DN for groups cn=admin, dc=nome
Search scope for groups subtree
confermando poi le modifiche.
L’ultima operazione da fare è modificare il file di configurazione di LDAP, slapd.conf, che si trova in /etc/ldap.
Dopo aver copiato il file di configurazione originale in /addons aggiungere due righe nella sezione “Specific directive for database, of type bdb” sotto la voce “rootdn directive for specifying a superuser on the database” :
rootdn "cn=admin,dc=nome"
rootpw passwod_arbitraria
Così impostato, il file viene sostituito grazie alla riga
cp /cdrom/addons/slapd.conf /target/etc/ldap/
aggiunta in setup.sh.
La configurazione di LDAP è terminata.
2.4 Configurazione di Samba
Configurare Samba è la parte più semplice del lavoro: il tutto consiste nel fare in modo da creare una cartella per la condivisione dei dati e modificare in modo opportuno il file di configurazione del servizio aggiungendo una sezione in cui sono state specificate le proprietà di lettura e scrittura sella cartella stessa.
Dopo aver effettuato una copia di smb.conf (situato in /etc/samba) nella cartella /addons, aggiungere al fondo del file le seguenti righe:
[share]
comment = share
path = /opt/share
security = share
public = yes
writable = yes
create mask = 0777
directory mask = 0777
force user = plone
di cui fornisco una breve spiegazione:
[share] = nome dato alla cartella condivisa
comment = commento aggiunto
path = percorso in cui si trova la cartella
security = livello di sicurezza da attribuire
public = specificato se renderla pubblica o meno
writable =serve per accordare permessi di scrittura
create mask = server per dare permessi di lettura e scrittura agli utenti e gruppi sui file contenuti nella cartella
directory mask = ha la stessa funzione di create mask per la cartella e le cartelle contenute in essa force user = fa in modo che le operazioni effettuate sulla cartella condivisa appaiano come se fossero effettuate dall’utente specificato.
Come per slapd.conf, il file va sostituito tramite setup.sh:
cp /cdrom/addons/smb.conf /target/etc/samba/
Anche la cartella /share va aggiunta in /opt tramite script:
mkdir /target/opt/share
inoltre occorre cambiare il nome del proprietario:
chown -R 1001 /target/opt/share
dopodiché anche l’implementazione di Samba si può dire completa.
2.5 Rifiniture.
2.5.1 Installazione di hotfix.
La versione di Plone utilizzata per questo esempio è la 3.0.3, che presentava alcuni problemi di sicurezza.
Alcuni dati infatti venivano interpretati come elementi di Python, generando numerosi errori.
E’ stato necessario aggiungere un hotfix per correggere questo problema, nella cartella /opt/Plone-3.0.3/zeocluster/Products.
Con
wget http://plone.org/products/plone-hotfix/release/20071106-2/Plone20071106.tar.gz
scaricare il file in quella cartella e decomprimerlo, rimuovendo alla fine il tar.gz.
Al riavvio di Zope, l’hotfix corregge automaticamente gli errori.
2.5.2 TextIndex e Reflecto
Reflecto e TextIndex sono dei plugins che servono ad indicizzare i contenuti.
Questi ultimi infatti possono essere catalogati, in modo che possano essere trovati nel momento in cui si utilizzi un sistema di ricerca.
Mentre Reflecto serve per l’indicizzazione dei file non di testo, TextIndex funziona al contrario: indicizza solo questo tipo di file.
Nella cartella /Products scaricare e scompattare i due file tramite la procedura utilizzata finora.
Per TextIndex occorre effettuare un passaggio in più: una volta decompresso, bisogna posizionarsi nella cartella /TextIndexNG3/extension_modules, compilare e installare il prodotto usando
python2.x setup.py install
Per avere i servizi attivi, bisogna anche far ripartire Zope, dopodichè dal Plone Site
Configurazione sito → Prodotti aggiuntivi → Prodotti installabili
selezionare le caselle corrispondenti.
Riavviato nuovamente il servizio, i prodotti sono risultati funzionanti.
2.5.3 Modifica password e cancellazione dei file non necessari
Una volta finite le configurazioni, si può modificare la password di default, in modo che sia più accessibile all’utente finale. Occorre quindi eliminare i file non necessari, ad eccezione del file Data.fs, contenente tutte le impostazioni date.
Per la modifica della password, loggarsi sulla ZMI (sul browser: http://ip server:8080) e selezionare
acl_users → users → password
modificata la password cliccare su update.
Per eliminare i file non necessari invece, sempre dalla ZMI selezionare
control panel → Database → main → Pack
control panel → Database → temporary → Pack
Dopodichè selezionando
control panel → Shutdown
rm `find –iname *.pyc`
si rimuovono tutti i file .pyc presenti. Questi file sono delle copie eseguibili dei file .py e se non eliminati danno conflitti nell’esecuzione di Plone.
Con
rm `find –iname *.log`
vengono cancellati tutti i file di log. Purtroppo l’unico file di log necessario è zeo.log che bisogna ricreare vuoto all’interno della sua cartella di origine:
touch /opt/Plone-3.0.3/zeocluster/server/log/zeo.log
Dalla cartella /opt/Plone-3.0.3/zeocluster/server/var occorre eliminare tutti I file presenti tranne Data.fs, mentre dalla cartella /opt/Plone-3.0.3/zeocluster si deve eliminare il file adminPassword.txt, contenente la vecchia password, e il file inituser contenuto sia in /opt/Plone-3.0.3/zeocluster/client1 sia /opt/Plone-3.0.3/zeocluster/client2, relativo anche esso alla password iniziale.
Infine, per poter mettere Plone nella distribuzione all’interno della cartella /addons, bosogna comprimere la cartella /Plone-3.0.3 e con ssh spostare il file.
Alcuni pacchetti extra aggiunti manualmente prevedevano l’installazione intrinseca di MySQL, che non era necessario allo scopo di questa distribuzione.
Per evitare lo startup del servizio relativo, tramite setup.sh si possono rimuovere i link di riferimento da /rc2.d, aggiungendo queste righe:
rm /target/etc/rc2.d/S17mysql-ndb-mgm
rm /target/etc/rc2.d/S18mysql-ndb
rm /target/etc/rc2.d/S19mysql
A questo punto si può creare la iso definitiva.
Questo sistema è stato progettato per poter essere installato su macchine con architettura x86 e i test sono stati effettuati su macchine di questo tipo a 32 bit.[1] mkdir = crea directory
[2] Monta l’immagine presa da /percorso_della_iso in /opt/mount
[3] r e T sono due parametri di cp (copy) che servono a ricopiare recursivamente tutti i file contenuti in /opt/mount, compresi quelli nascosti.
[4] L’agente che permette l’installazione fisica del sistema operativo
[5] Strutturato come quello mostrato in esempio nella pagina precedente.
[6] E’ sottointeso che per usare apt-get install è stato usato l'utente root, ovvero l’utente amministratore del sistema.
[7] Slapd appartiene a ldap ed è l’agente (in Linux chiamato demone) che ne permette il funzionamento
[8] Le scritte in grassetto sono i veri e propri comandi di esecuzione e corrispondono alle domande poste dall’installer durante l’installazione, le righe che iniziano con # sono dei commenti e quindi non vengono prese in considerazione, le altre righe sono le impostazioni date.
[9] La struttura di Ubuntu è basata su un’altra versione di Linux, Debian.
[10] Con il comando cd /opt/build
[11] xxxx.xx.xx corrisponde alla data di rilascio versione di ubuntu-keyring
[12] Informazione reperibile con gpg - -list-keys che visualizza un output del tipo
pub 1024D/id_chiave_in_sistema_esadecimale data_di_creazione
uid nome_scelto_per_la_firma <e-mail>
sub 2058g/numero_esadecimale data_di_creazione
[13] Vedi nota 12
[14] Packages.gz è la versione compressa di Packages ed è quella realmente necessaria all’installer.
[15] Anche lo script in Perl è stato preso dal sito http://help.ubuntu.com/community/InstallCDCustomization.
[16] Traduzione: esegui lo script extraoverride.pl, con il quale prendi le informazioni da /opt/cd-image/dists/gutsy/main/binary-i386/Packages e le esporti in /opt/indices/override.gutsy.extra.main.
[17] Le variabili sono richiamate aggiungendo il simbolo $ davanti.
[18] Il comando pushd apre una specie di directory virtuale in cui eseguire i comandi. In questo caso apre la directory in BUILD che corrisponde al percorso /opt/cd-image
[19] Il comando popd chiude la directory aperta da pushd.
[20] La iso viene generata nella cartella da cui digitiamo il comando.
[21] I parametri utlizzati sono relativi alle caratteristiche che deve aver l’immagine iso, sia sul formato da utilizzare, sia sulle caratteristiche di avviabilità, etc.
[22] ssh ip_server
[23] Si sottintende l’utilizzo della cartella /opt/cd-image a cui sono state fatte delle aggiunte; il mount dell’immagine non cancella i file originari, che quindi sono ancora utilizzabili.
[24] L’Unified Installer installa automaticamente Plone e Zope, poiché come già descritto il primo si basa sul secondo, che quindi diventa necessario.
[25] L’archivio compresso in tar.gz
[26] Standalone è una opzione di installazione, alternativa a zeo, necessaria da specificare
[27] La cartella /Plone-3.0.3 viene creata automaticamente dall’installer in /opt, non è una scelta arbitraria
[28] L’esecuzione di questo script verrà spiegata in seguito
[29] Questa riga è necessaria all’esecuzione dello script stesso
[30] La cartella /target è una cartella di appoggio dell’installer: in poche parole è un mezzo attraverso il quale viene permessa l’installazione del sistema da cd su hard disk. Una volta terminata, /target viene eliminata automaticamente.
E’ necessario includerla poiché le cartelle come si vedono a installazione conclusa non sono ancora definitive.
[31] O, in termini tecnici, il suo demone si mette in ascolto sulla porta 80.
[32] Nome utente e password sono contenute nel file adminPaswword.txt contenuto nella cartella /opt/Plone-3.0.3/zeocluster
[33] Dato che Plone fa parte di Zope, per farlo funzionare si parla di riavviare il servizio Zope.
[34] Operazione necessaria al fine di cancellare i file inutili