Aggiornare PHP
1.Introduzione
In passato ci sono state diverse discussioni riguardo al fatto che PHP5 non
fosse ancora marcato come stabile in portage. Il problema non è nel pacchetto
PHP5 in sè, il motivo principale risiede nel fatto che ci sono diverse
applicazioni, estensioni PHP e pacchetti in portage, che non funzionano con
PHP5; purtroppo gli sviluppatori di Gentoo non possono fare nulla a riguardo.
PHP5 non è retrocompatibile al 100% con PHP4, e non tutti i programmi PHP4
possono/potranno essere convertiti per essere eseguiti correttamente in PHP5.
Molti utenti avranno bisogno di utilizzare PHP4 ancora per un lungo periodo di
tempo.
La soluzione a questo problema è fornire un ambiente misto PHP4/PHP5
funzionante simultaneamente nella medesima macchina. Questo però non era
realizzabile con l'attuale struttura dei pacchetti e le eclass di PHP, così gli
sviluppatori si sono dovuti armare di buona volontè per creare
appositamente nuove strutture, eclass ed ebuild.
Questo documento spiega in modo dettagliato come effettuare l'aggiornamento
senza corrompere l'integrità del proprio sistema.
Nota:
I nuovi pacchetti PHP richiedono la nuova configurazione di Apache, per cui date
un'occhiata a Aggiornare Apache
se non l'avete ancora aggiornato.
|
2.Cambiamenti
Pacchetti PHP di base unificati
Tutti gli ebuild PHP dev-php/php, dev-php/php-cgi e
dev-php/mod_php sono stati integrati in un unico ebuild:
dev-lang/php.
Per scegliere il SAPI desiderato, utilizzate le seguenti flag USE:
-
cgi - compila e installa /usr/bin/php-cgi
-
cli - compila e installa /usr/bin/php
-
apache - compila e installa mod_php per Apache 1.3
(nuova configurazione)
-
apache2 - compila e installa mod_php per Apache 2.0
(nuova configurazione)
Potete combinare tutte queste flag USE, eccetto l'uso contemporaneo
di apache e apache2.
Lo scopo definitivo di questi ebuild è di poter avere installato sia PHP4 sia
PHP5 simultaneamente.
Esempio 1: installare PHP |
USE="cli apache2" emerge 'dev-lang/php'
USE="cli apache2" emerge '=dev-lang/php-4*'
USE="cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'
|
Nota:
Le flag USE non vanno impostate in questo modo, si prega di usare
/etc/portage/package.use come descritto successivamente.
|
Nuove Categoria in Portage
I nuovi ebuild PHP sono stati spostati da dev-php a dev-lang/php.
Per rendere possibile l'installazione di pacchetti indipendentemente da PHP4 e
PHP5, sono state create in Portage due nuove categorie: dev-php4 e
dev-php5. Queste categorie sono usate soprattutto per i pacchetti PECL
come pecl-pdo, pecl-apc, php-java-bridge o xdebug.
Per installare pecl-apc:
Esempio 2: installare estensioni PHP come PECL::APC (esempio) |
emerge dev-php4/pecl-apc
emerge dev-php5/pecl-apc
emerge dev-php4/pecl-apc dev-php5/pecl-apc
|
Nuove Directory
- Questi nuovi ebuild installano il proprio contenuto in
/usr/lib/php4 e /usr/lib/php5 (i moduli Apache
vengono posizionati nella corretta posizione per Apache).
- I pacchetti PEAR vengono installati in /usr/share/php (prima
era /usr/lib/php), se usate la flag USE pear.
- I pacchetti PECL non aggiungono più le proprie direttive di configurazione
al file di configurazione php.ini, ma aggiungono un file
[PACKAGE].ini nella directory
/etc/php/[SAPI]/ext.
Collegamento simbolico dei binari PHP
Se installare più di una versione di PHP, per esempio:
Esempio 3: installare PHP4 and PHP5 |
USE="cgi cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'
|
Gli ebuild creerano dei collegamenti simbolici in /usr/bin per
l'ultima versione di PHP che viene installata, in questo caso PHP5 poichè viene
installato dopo PHP4. Se volete far puntare /usr/bin/php o
/usr/bin/php-cgi a PHP4 o uno a PHP4 e l'altro a PHP5, ecc. potete
usare lo strumento php-select contenuto in
app-admin/php-toolkit. php-select rende veramente facile la
gestione dei collegamenti simbolici ai binari appropriati.
3.Istruzioni per l'aggiornamento
Individuare i pacchetti da aggiornare
Per prima cosa bisogna segnare quali pacchetti necessitano di essere
aggiornati. Potete effettuare questa operazione con lo strumento equery,
contenuto nel pacchetto app-portage/gentoolkit:
Esempio 4: elencare i pacchetti installati in dev-php |
$ equery list 'dev-php/'
[ Searching for all packages in 'dev-php' among: ]
* installed packages
[I--] [ ] dev-php/php-4.4.0 (0)
[I--] [ ] dev-php/mod_php-4.4.0 (1)
[I--] [ ] dev-php/smarty-2.6.10 (0)
[I--] [ ] dev-php/PEAR-PEAR-1.3.5-r1 (0)
[I--] [ ] dev-php/PEAR-Mail-1.1.6 (0)
[I--] [ ] dev-php/PEAR-MDB-1.3.0 (0)
[I--] [ ] dev-php/PECL-apc-3.0.6 (0)
[I--] [ ] dev-php/PECL-imagick-0.9.11 (0)
[I--] [ ] dev-php/xdebug-2.0.0_beta3 (0)
|
Importante:
L'elenco dei pacchetti installati che otterrete potrà essere molto diverso da
quello sopraelencato, assicuratevi di eseguire questo comando nel vostro
sistema. La lista ottenuta dovrà essere salvata, per poter assicurare
l'aggiornamento di tutti i pacchetti.
|
Nota:
Molte applicazioni web non vengono influenzate in quanto utilizzano l'eclass
webapp che ha il compito di effettuare una corretta installazione del pacchetto.
Potrete comunque controllare se ci sono delle nuove revisioni di queste
applicazioni.
|
Estensioni PHP, come
- PECL-apc
- PECL-imagick
- xdebug
sono state suddivise nelle 2 categorie separate di portage dev-php4 e
dev-php5, per rendere possibile la loro installazione indipendente per
entrambe le versioni di PHP. In aggiunta molti di questi pacchetti sono stati
rinominati:
Esempi per le nuove directory e ridenominazioni:
| Estensione PHP |
vecchia |
nuova PHP4 |
nuova PHP5 |
| APC |
dev-php/PECL-apc |
dev-php4/pecl-apc |
dev-php5/pecl-apc |
| Imagick |
dev-php/PECL-imagick |
dev-php4/pecl-imagick |
dev-php5/pecl-imagick |
| Xdebug |
dev-php/xdebug |
dev-php4/xdebug |
dev-php5/xdebug |
Nota:
Prima di installare di nuovo queste estensioni, dovete scoprire le nuove
denomnazioni dei pacchetti in /usr/portage.
|
Rimuovere i vecchi pacchetti
Sono stati apportati diversi cambiamenti nella modalità di funzionamento di PHP
in Gentoo. Bisogna rimuovere completamente tutti i vecchi pacchetti relativi a
PHP, prima di installare quelli nuovi.
Esempio 5: rimuovere i vecchi pacchetti (esempio) |
emerge --unmerge php mod_php
emerge --unmerge PECL-apc PECL-imagick xdebug
emerge --unmerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty
|
Impostare le flag USE
Siccome sono state aggiunte delle nuove flag USE, bisogna riesaminarle e
aggiungere le linee appropriate in /etc/portage/package.use (questo
file deve essere creato, se non ancora esistente).
Nota:
/etc/portage/package.use imposterà le flag USE per la vostra
installazione PHP e le memorizzerà, senza ricorrere ad una pesante modifica di
make.conf.
|
Impostate le flag USE in base ai supporti di cui avete bisogno da parte
dell'installazione di PHP (è raccomandabile impostare almento la flag USE
cli):
Esempio 6: flag USE per dev-lang/php (esempio) |
dev-lang/php -* cli apache2 ctype gd jpeg mysql pcre png session truetype xml xsl zlib
|
Nota:
-* disabiliterà tutte le flag USE (verranno disabilitate anche le
caratteristiche basilari di PHP tipo Session-, PCRE-, gd- e il supporto a
MySQL!), perciò dovrete specificare ogni flag USE per ogni
estensione/caratteristica che vorrete usare. Leggete
Managing Extensions per ulteriori dettagli. Dovrete impostare le flag USE
per le impostazione predefinite principali come pcre se volete usare le
Funzioni preg_ * o session se volete usare le
Funzioni per la gestione delle Sessioni.
|
Se volete installare PHP4 e PHP5 in parallelo, potete impostare flag USE differenti per ciascuna versione:
Esempio 7: flag USE differenti per PHP4 and PHP5 (esempio) |
=dev-lang/php-4* -* cgi cli ctype gd jpeg mysql pcre pear png session truetype
xml xsl zlib
=dev-lang/php-5* -* cli apache2 ctype gd jpeg mysql pcre pdo-external pear png
session simplexml soap sqlite truetype xml xsl zlib
|
Nota:
Per un elenco di USE flag raccomandato potete guardare in Flag USE raccomandate. Per un
elenco delle flag USE disponibili in PHP potete guardare la tabella
flag USE dal wiki dell'overlay.
|
Installare PHP
A questo punto avete la possibilità di installare solo PHP4, solo PHP5 o
entrambi in parallelo. Per installare solo PHP4 dovete effettuare l'emerge di
=dev-lang/php-4*, per installare PHP5 (la versione più recente) potete
usare dev-lang/php, e per installare entrambe le versioni in parallelo
dovete effettuare l'emerge di =dev-lang/php-4* e =dev-lang/php-5*.
Verificare le impostazioni delle flag USE:
Esempio 8: verificare le flag USE (esempio) |
emerge --pretend --verbose '=dev-lang/php-4*'
emerge --pretend --verbose '=dev-lang/php-5*'
emerge --pretend --verbose dev-php4/pecl-apc dev-php4/pecl-imagick
dev-php4/xdebug
emerge --pretend --verbose dev-php5/pecl-apc dev-php5/pecl-imagick
emerge --pretend --verbose PEAR-PEAR PEAR-Mail PEAR-MDB smarty
|
Effettuare l'emerge di PHP se tutto è apposto:
Esempio 9: installare i nuovi pacchetti (esempio) |
emerge '=dev-lang/php-4*'
emerge '=dev-lang/php-5*'
emerge dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug
emerge dev-php5/pecl-apc dev-php5/pecl-imagick
emerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty
|
PHP4 e PHP5 paralleli: selezionare quale binario cli/cgi usare
Dopo il processo di emerge avrete i binari per cli e/o cgi in
/usr/lib/php4/bin e/o /usr/lib/php5/bin. Se avete
installato sia PHP4 sia PHP5, portage non può scegliere per voi quale versione
usare come predefinita e effettuerà sempre i collegamenti simbolici all'ultima
versione di PHP installata in /usr/bin. Perciò se PHP5 è stato
installato per ultimo, vedrete /usr/bin/php collegato
simbolicamente a /usr/lib/php5/bin/php. Come per il binario di
cli e/o cgi, anche quello di php-devel (responsabile della
creazione delle estensioni PHP tramite phpize e php-config) verrà
collegato simbolicamente (in /usr/bin), operazione facilmente
gestibile tramite php-select,, che fa parte del pacchetto
app-admin/php-toolkit.
Nota:
I pacchetti dev-lang/php dipendono da app-admin/php-toolkit per
cui php-select sarà automaticamente disponibile dopo l'installazione
delle nuove versioni dei pacchetti php.
|
Supponendo abbiate installato sia =dev-lang/php-4* sia
=dev-lang/php-5*, eseguite i seguenti comandi php-select per
vedere quali sono le versioni di PHP correntemente selezionate:
Esempio 10: mostrare le versioni di PHP correntemente selezionate |
php-select php
php-select php-cgi
php-select php-devel
|
Dovreste ottenere qualcosa di simile:
Esempio 11: esempio di output di php-select |
# php-select php
/usr/bin/php is set to /usr/lib/php5/bin/php
|
Ciò significa che il percorso predefinito del binario cli di PHP
/usr/bin/php è collegato simbolicamente al binario PHP5
/usr/lib/php5/bin/php. In questo modo gli script PHP che usano
/usr/bin/php verranno eseguiti da PHP5.
Usare php-select per cambiare le versioni predefinite di PHP
Se le versioni impostate in modo predefinite viste nell'ultimo capitolo non vi
soddisfano, potete usare di nuovo php-select per selezionare la versione
desiderata:
Esempio 12: selezionare la versione desiderata |
php-select php php4
php-select php-cgi php5
php-select php-devel php5
|
Nota:
Eseguite php-select -h per ottenere più dettagli sull'uso di php-select
|
Controllare i collegamenti:
Esempio 13: controllare i collegamento simbolici |
# stat /usr/bin/php /usr/bin/php-cgi /usr/bin/phpize /usr/bin/php-config | grep File
File: `/usr/bin/php' -> `/usr/lib/php4/bin/php'
File: `/usr/bin/php-cgi' -> `/usr/lib/php5/bin/php-cgi'
File: `/usr/bin/phpize' -> `/usr/lib/php5/bin/phpize'
File: `/usr/bin/php-config' -> `/usr/lib/php5/bin/php-config'
|
Nota:
E' importante notare che php-select cambia solamente la versione
predefinita. Se avete installato entrambe le versioni cgi/cli PHP4 e PHP5 potete
sempre usare il percorso diretto come /usr/lib/php4/bin/php e
/usr/lib/php5/bin/php per eseguire uno script PHP con una versione
specifica. Potete usare cgi di PHP4 e PHP5 nella medesima istanza di Apache, ma
non potete usare due differenti moduli Apache di PHP in un'unica istanza di
Apache, controllate la
Guida alla configurazione di PHP4 e PHP5 per ulteriori dettagli.
|
4.Migrazione dei file di configurazione
I pacchetti PHP di Gentoo memorizzano le proprie configurazione in
/etc/php, contenente una sottodirectory per ogni SAPI per ogni
versione di PHP:
Esempio 14: elencare le directory di configurazione di PHP |
$ ls -1 /etc/php
apache2-php4
apache2-php5
cli-php4
cli-php5
|
Ogni sottodirectory contiene il proprio php.ini, come i vecchi
pacchetti.
Modifiche in php.ini
È consigliabile usare etc-update o dispatch-conf e verificare le
differenze tra le vecchie e le nuove impostazioni in php.ini. Due
direttive da controllare assolutamente saranno include_path
e extension_dir. Bisogna prestare attenzione a extension_dir, in
quanto cambia tra le versioni di PHP (anche tra la 5.0 e la 5.1!).
Esempio per PHP 5.1 in /etc/php/apache2-php5/php.ini e
/etc/php/cli-php5/php.ini:
Esempio 15: vecchie impostazioni in php.ini |
include_path = ".:/usr/lib/php"
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20050617/"
|
Esempio 16: nuove impostazioni in php.ini |
include_path = ".:/usr/share/php"
extension_dir = "/usr/lib/php5/lib/php/extensions/no-debug-non-zts-20050617/"
|
Attenzione:
Assicuratevi di eseguire etc-update o dispatch-conf per vedere le
impostazioni corrette di ogni file.
|
Configurazioni modificate per le estensioni PHP
Il nuovo pacchetto PHP non memorizza più le direttive di configurazione da
estensioni PHP esterne (condivise) in php.ini. Queste direttive
verranno memorizzate in uno specifico file, in base all'estensione, nella
directory /etc/php/*/ext. Per abilitare/disabilitare le estensioni
condivise, vengono usati dei collegamenti simbolici da
/etc/php/*/ext-active. Se volete abilitare un'estensione, create
un collegamento simbolico in /etc/php/*/ext-active al
corrispondente file [EXTENSION].ini in
/etc/php/*/ext/. Se volete disabilitare un'estensione, rimuovete
il collegamento simbolico.
Se avevate installato precedentemente dev-php/PECL-apc, la
configurazione di APC sarà memorizzata in php.ini. Effettuando di
nuovo l'emerge il nuovo pacchetto dev-php5/pecl-apc. la configurazione
predefinita di APC verrà scritta in /etc/php/*5/ext/apc.ini.
Perciò dovrete spostare le vostre direttive di configurazione di AP da
/etc/php/*5/php.ini a /etc/php/*5/ext/apc.ini e
creare un collegamento simbolico da /etc/php/*5/ext-active/apc.ini
a /etc/php/*5/ext/apc.ini.
Nota:
Se installate PHP come modulo di Apache, assicuratevi di riavviare Apache dopo
l'installazione e la configurazione.
|
5.Configurare Apache per il suo funzionamento con PHP4 e PHP5
Ci sono svariati modi per far funzionare Apache con due versioni di PHP in
parallelo. La via più semplice è usare PHP4 e PHP5 come binari cgi, o un cgi
PHP4 e un modulo PHP5 (o viceversa).
E' stata redatta una Guida alla
configurazione di PHP4 e PHP5 che spiega alcune delle possibili soluzioni.
6.Supporto / Ottenere Aiuto
Se riscontrate dei problemi con i nuovi pacchetti PHP di Gentoo, potete
ottenere un aiuto tramite le seguenti risorse:
-
Domande generali riguardo PHP in Gentoo
- Pagina di sviluppo
dell'overlay di PHP
- #gentoo-php su irc.freenode.net; è il canale dove si incontrano gli
autori dell'overlay di PHP, i quali avranno il piacere di incontrarvi lì!
- I Forum di Gentoo sono una
delle fonti più popolari dove chiedere aiuto. Ci sono moltissimi utenti di
Gentoo che leggono il forum ad ogni ora del giorno, rendendolo un posto
eccezionale dove ottenere velocemente un aiuto
Per dettagli sulla realizzazione dei nuovi pacchetti guardate in
Discussioni di Stuarts su gentoo-dev e gli articoli del Blog di Stuarts a
partire da
'Radical Changes for PHP5 Support'.
Nella Pagina di Sviluppo
troverete molta documentazione e gli ebuild più recenti, che verranno inseriti
successivamente nell'albero ufficiale di portage.
|