Bookmark and Share
You are here: Home Documentazione Ricette Personalizzare Ubuntu Server creando una intranet basata su Plone
Document Actions

Personalizzare Ubuntu Server creando una intranet basata su Plone
facile

Guida su come personalizzare una distribuzione di Ubuntu Server manualmente, in modo da ottenere una intranet basata su Plone, in aggiunta a LDAP e Samba.

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 –mnome_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

 

“spegnere” Zope[34].

 

Posizionandosi nella cartella /opt/Plone-3.0.3, con

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

 

by Fabrizio Reale last modified 2009-01-22 20:47
 

Supporto

Ottieni un
aiuto veloce e mirato sul forum, gratis!

partecipa al forum

 

Segui le icone

 

Livelli di difficoltà

livello guruSolo per i "guru"!
livello avanzatoPer configuratori e sviluppatori
livello medioPer chi ha già familiarità
livello basePer tutti!

 

I video

video

Il documento è supportato da un video!