Aggiornare PHP

Contenuti:

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

(installare l'ultima versione di PHP con i moduli CLI e Apache2)
USE="cli apache2" emerge 'dev-lang/php'

(installare solo PHP4)
USE="cli apache2" emerge '=dev-lang/php-4*'

(installare sia PHP4 che PHP5)
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)

(installare APC solo per PHP4)
emerge dev-php4/pecl-apc

(installare APC solo per PHP5)
emerge dev-php5/pecl-apc

(installare APC sia per PHP4, sia per PHP5)
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)

(rimuovere i pacchetti PHP)
emerge --unmerge php mod_php

(rimuovere le estensioni PHP)
emerge --unmerge PECL-apc PECL-imagick xdebug

(rimuovere le librerie/applicazioni PHP)
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)

(verificare il pacchetto PHP4)
emerge --pretend --verbose '=dev-lang/php-4*'

(verificare il pacchetto PHP5)
emerge --pretend --verbose '=dev-lang/php-5*'

(verificare le estensioni PHP per PHP4)
emerge --pretend --verbose dev-php4/pecl-apc dev-php4/pecl-imagick
dev-php4/xdebug

(verificare le estensioni PHP per PHP5)
emerge --pretend --verbose dev-php5/pecl-apc dev-php5/pecl-imagick

(verificare le librerie/applicazioni PHP)
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)

(installare il pacchetto PHP4)
emerge '=dev-lang/php-4*'

(installare il pacchetto PHP5)
emerge '=dev-lang/php-5*'

(installare le estensioni PHP per PHP4)
emerge dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(installare le estensioni PHP per PHP5)
emerge dev-php5/pecl-apc dev-php5/pecl-imagick

(installare le librerie/applicazioni PHP)
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

(per cli)
php-select php

(per cgi)
php-select php-cgi

(per phpize, php-config)
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

(perr cli)
php-select php php4

(per cgi)
php-select php-cgi php5

(per phpize, php-config)
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.



Ultimo aggiorn.:
2006-01-22
Andreas Korthaus
Autore

Davide Cendron
Traduzione

Sommario:  Questo documento descrive la procedura che gli utenti finali dovrebbero seguire per aggiornare in sicurezza la propria installazione di PHP
- 2002 Gentoo.it - Domande, commenti e/o correzioni? Email gentoo-dev@gentoo.it.