Aktualizowanie PHP
1.
Wprowadzenie
W przeszłości wielokrotnie proszono nas o oznaczenie PHP5 jako stabilne w
drzewie Portage. Problemem nie było samo PHP5, powodem była duża ilość
pakietów, rozszerzeń i programów, które z PHP5 nie chciały działać, na co nie
mogliśmy nic poradzić. PHP5 nie jest w 100% kompatybilne z PHP4 i nie każdy
program w PHP4 może zostać przeniesiony i uruchomiony w PHP5. Wielu
użytkowników będzie zmuszonych do korzystania z PHP4 jeszcze przez długi czas.
Sposobem na rozwiązanie problemu jest połączenie PHP4 i PHP5 w jedno
zróżnicowane środowisko. Nie byłoby to jednak możliwe przy obecnym
rozmieszczeniu pakietów oraz eklasie PHP, z tego powodu włożono wiele pracy by
ebuildy i eklasy odpowiednio podzielić.
Dokument ten szczegółowo omawia proces aktualizacji.
Uwaga:
Nowe pakiety PHP wymagają Apache, należy zapoznać się z tekstem Aktualizowanie Apache jeżeli jeszcze
nie zostało zaktualizowane.
|
2.
Zmiany
Podstawowe zbiorcze pakiety PHP
Wszystkie ebuildy PHP (dev-php/php, dev-php/php-cgi i
dev-php/mod_php) zostały połączone w jeden ebuild: dev-lang/php.
Aby wybrać SAPI, używamy tych flag USE:
-
cgi - instaluje /usr/bin/php-cgi
-
cli - instaluje /usr/bin/php
-
apache - instaluje mod_php dla Apache 1.3 (nowy projekt)
-
apache2 - instaluje mod_php dla Apache 2.0 (nowy projekt)
Można używać zamiennie tych flag USE, z tym wyjątkiem, że nie można mieć obu
apache oraz apache2 jednocześnie.
Dzięki tym ebuildom możemy posiadać jednocześnie zarówno PHP4 jak i PHP5.
Listing 2.1: Instalowanie 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*'
|
Uwaga:
Flagi USE nie powinny być używane w ten sposób, na dłuższą metę należy
skorzystać z pliku /etc/portage/package.use, omówimy to później.
|
Nowe kategorie w Portage
Nowe ebuildy PHP przeniesiono z dev-php do dev-lang/php. By
umożliwić niezależną instalację pakietów dla PHP4 i PHP5 dodano dwie nowe
kategorie w Portage: dev-php4 oraz dev-php5. Kategorie te są
używane głównie przez pakiety PECL takie jak: pecl-pdo, pecl-apc,
php-java-bridge i xdebug.
Instalowanie pecl-apc:
Listing 2.2: Instalacja rozszerzeń PHP takich jak PECL::APC (przykład) |
emerge dev-php4/pecl-apc
emerge dev-php5/pecl-apc
emerge dev-php4/pecl-apc dev-php5/pecl-apc
|
Nowe katalogi
-
Zawartość nowych ebuildów będzie się znajdować w /usr/lib/php4
i /usr/lib/php5 (moduły Apache umieszczone będą w odpowiednim
dla nich miejscu).
-
Pakiety PEAR będą położone w /usr/share/php (wcześniej
/usr/lib/php).
-
Pakietów PECL nie konfigurujemy już przez dodanie opcji do pliku
php.ini, a przez skopiowanie pliku [PACKAGE].ini
do katalogu /etc/php/[SAPI]/ext.
Tworzenie dowiązań symbolicznych binariów PHP
W przypadku gdy instalowane są obie wersje PHP:
Listing 2.3: Instalowanie PHP4 i PHP5 |
# USE="cgi cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'
|
Ebuildy utworzą dowiązania symboliczne w /usr/bin dla ostatniej
zainstalowanej wersji PHP. W tym przypadku PHP5, biorąc pod uwagę, że zostało
zainstalowane po PHP4. Jeśli chcemy by /usr/bin/php
lub /usr/bin/php-cgi było miejscem położenia dla PHP4 lub też
jedno dla PHP4, inne dla PHP5 itp. możemy posłużyć
się narzędziem php-select z pakietu app-admin/php-toolkit, które w
znacznym stopniu ułatwia tworzenie dowiązań symbolicznych dla binariów.
3.
Aktualizowanie poleceń
Szukanie pakietów wymagających uaktualnienia
W pierwszej kolejności należy ustalić, które dodatkowe pakiety wymagają
aktualizacji. W tym celu można wykorzystać equery, który jest częścią
pakietu app-portage/gentoolkit:
Listing 3.1: Lista pakietów zainstalowanych w 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)
|
Ważne:
Pakiety które zainstalowaliśmy mogą się znacznie różnić od tej listy, dlatego
należy się upewnić, że jest ona właściwa dla naszego systemu. Zachowujemy
wygenerowaną tak jak w powyższym przykładzie listę, by mieć pewność, że zostaną
zaktualizowane wszystkie pakiety.
|
Uwaga:
Nie dotyczy to większości programów z kategorii webapp, ponieważ mają osobną
eklasę, która dba o to by były instalowane poprawnie. Warto jednak sprawdzić
czy nie ma jej nowej wersji.
|
Rozszerzenia PHP, takie jak:
- PECL-apc
- PECL-imagick
- xdebug
Podzielono na 2 osobne kategorie dev-php4 oraz dev-php5, by
umożliwić ich niezależne użycie dla obu wersji PHP. Dodatkowo większość z nich
ma zmienione nazwy:
Przykłady nowych katalogów i ich nowego nazewnictwa:
| Rozszerzenie PHP |
stare |
nowe PHP4 |
nowe 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 |
Uwaga:
Zanim zainstalujemy ponownie te rozszerzenia, należy przejrzeć
/usr/portage, by zobaczyć jak zostały nazwane poszczególne
pakiety.
|
Usuwanie starych pakietów
Wykonaliśmy wiele zmian w działaniu PHP w obrębie Gentoo. Zanim przystąpimy do
instalacji nowych pakietów, wymagane jest całkowite usunięcie starych pakietów:
Listing 3.2: Usuwanie starych pakietów (przykład) |
emerge --unmerge php mod_php
emerge --unmerge PECL-apc PECL-imagick xdebug
emerge --unmerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty
|
Flagi USE
Pewne flagi USE zostały już przez nas dodane, ale warto je przejrzeć i utworzyć
odpowiednie wpisy w /etc/portage/package.use (plik należy utworzyć
w przypadku gdy nie istnieje).
Uwaga:
/etc/portage/package.use ustawi oraz zapisze flagi USE dla PHP bez
konieczności globalnych zmian poprzez edycję pliku make.conf.
|
Ustawiamy flagi USE stosownie do instalacji PHP jaką chcemy otrzymać (zalecane
jest ustawienie przynajmniej jednej flagi USE cli):
Listing 3.3: Flagi USE dla dev-lang/php (przykład) |
dev-lang/php -* cli apache2 ctype expat fastbuild ftp gd hash iconv memlimit
mysql nls pcre pic pdo reflection session simplexml sockets spl ssl tokenizer
truetype unicode xml xsl zlib
|
Uwaga:
-* wyłączy wszystkie flagi USE (nawet te podstawowe dla PHP jak np.
Session-, PCRE-, gd- i MySQL-support!), należy więc sprecyzować każdą flagę USE
dla każdego rozszerzenia, którego będziemy używać. Szczegóły znajdują się w
tekście
Zarządzanie rozszerzeniami. Trzeba również ustawić flagi USE dla
domyślnych wartości takich jak pcre jeśli chcemy używać preg_*
Functions lub session, jeśli będziemy używać
Session Handling Functions.
|
Jeżeli PHP4 i PHP5 będą instalowane równolegle, możemy użyć osobnych flag USE
dla każdej z wersji:
Listing 3.4: Osobne flagi USE dla PHP4 i PHP5 (przykład) |
=dev-lang/php-4* -* cli cgi apache2 ctype expat fastbuild force-cgi-redirect
ftp gd iconv ipv6 memlimit mysql nls pcre pic posix session sockets ssl
tokenizer truetype unicode xml xsl zlib
=dev-lang/php-5* -* cli cgi apache2 ctype fastbuild force-cgi-redirect ftp gd
hash iconv ipv6 memlimit mysql nls pcre pic posix pdo reflection session
simplexml soap sockets spl sqlite ssl tokenizer truetype unicode xml xmlreader
xmlwriter xsl zlib
|
Uwaga:
Lista zalecanych flag USE Zalecane flagi
USE. Lista flag USE dostępnych dla PHP Tabela flag
USE znajdująca się na wiki.
|
Instalowanie PHP
Teraz należy wybrać instalację, którą chcemy posiadać. Możemy wybrać tylko PHP4
lub PHP5 albo oba równolegle. Samo PHP4 instalujemy poprzez zemergowanie
=dev-lang/php-4*, by zainstalować PHP5 (najnowszą wersję) użyjemy
dev-lang/php, natomiast obie wersje równolegle instalujemy przez
=dev-lang/php-4* oraz =dev-lang/php-5*.
Sprawdzanie ustawień flag USE:
Listing 3.5: Sprawdzenie flag USE (przykład) |
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
|
Jeśli wszystko jest w porządku, instalujemy PHP:
Listing 3.6: Instalowanie nowych pakietów (przykład) |
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 i PHP5 równolegle: wybór binariów do użycia z cli/cgi
Po zemergowaniu będziemy mieli binaria dostępne dla cli i/lub cgi
w /usr/lib/php4/bin i/lub /usr/lib/php5/bin. Jeśli
zainstalowaliśmy oba pakiety, czyli PHP4 i PHP5, Portage nie zdecyduje za
nas,które z nich powinno być użyte jako domyślne i utworzy dowiązanie do
najnowszej zainstalowanej przez nas wersji PHP w /usr/bin. Z tego
wynika, że jeśli jako ostatnie instalowaliśmy PHP5 to /usr/bin/php
będzie dowiązane do /usr/lib/php5/bin/php. Tak więc binaria
cli i/lub cgi, tak jak php-devel (odpowiedzialne za
utworzenie rozszerzeń PHP przez phpize i php-config) muszą być
dowiązane (do /usr/bin), można to prosto wykonać poprzez użycie
php-select, który jest częścią app-admin/php-toolkit.
Uwaga:
Pakiet dev-lang/php jest zależny od app-admin/php-toolkit
tak więc php-select powinno być automatycznie dostępne po
zainstalowaniu nowych pakietów PHP.
|
Zakładając, ze zainstalowaliśmy =dev-lang/php-4* oraz
=dev-lang/php-5*, wykonujemy polecenie php-select
by pokazać obecnie wybrane wersje PHP:
Listing 3.7: Pokazuje obecnie wybrane wersje PHP |
php-select php
php-select php-cgi
php-select php-devel
|
Powinniśmy zobaczyć coś w rodzaju:
Listing 3.8: Przykładowy listing programu php-select |
# php-select php
/usr/bin/php is set to /usr/lib/php5/bin/php
|
Oznacza to, że domyślna ścieżka binariów cli /usr/bin/php jest
dowiązana do biblioteki PHP5 /usr/lib/php5/bin/php. Tak więc
skrypty PHP korzystające z /usr/bin/php będą wykonane przez PHP5.
Użycie php-select do zmiany domyślnych wersji PHP
Jeśli domyślne ustawienia wersji z poprzedniego rozdziału nie są
satysfakcjonujące, można ponownie użyć php-select by wybrać
pożądane wersje:
Listing 3.9: Wybór interesującej nas wersji |
php-select php php4
php-select php-cgi php5
php-select php-devel php5
|
Uwaga:
Wpisanie php-select -h pokaże nam jak można jeszcze
wykorzystać php-select.
|
Sprawdzanie dowiązań symbolicznych:
Listing 3.10: Sprawdza dowiązania |
# 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'
|
Uwaga:
Zauważmy, że php-select zmienia jedynie domyślne wersje. Jeśli
zainstalowaliśmy PHP4 i PHP5 cgi/cli możemy zawsze użyć bezpośredniej ścieżki
jak /usr/lib/php4/bin/php i/usr/lib/php5/bin/php
by uruchomić skrytp PHP z określonymi wersjami. Można również użyć PHP4 i PHP5
cgi w tym samym przykładzie/przypadku Apache, ale nie możemy korzystać z dwóch
różnych modułów PHP Apache w jednym przypadku/przykładzie. Więcej informacji
znajduje się w
Przewodniku konfiguracji PHP4 i PHP5.
|
4.
Przenoszenie plików konfiguracyjnych
Pliki konfiguracyjne pakietu PHP znajdują się w katalogu /etc/php,
który zawiera jeden podkatalog dla każdego SAPI dla każdej wersji PHP:
Listing 4.1: Listuje katalogi (z) konfiguracji/ą PHP |
$ ls -1 /etc/php
apache2-php4
apache2-php5
cli-php4
cli-php5
|
Każdy podkatalog zawiera własne php.ini, tak jak stare pakiety.
Zmiany w php.ini
Zalecane jest użycie etc-update lub dispatch-conf i przejrzenie
różnic pomiędzy starymi a nowymi ustawieniami w php.ini. Dwie
opcje/dyrektywy, które bezwzględnie powinny być sprawdzone to
include_path oraz extension_dir. Tutaj ostrożnie,
extension_dir różni się pomiędzy poszczególnymi wersjami PHP (również
pomiędzy 5.0, i 5.1!).
Przykład dla 5.1 w /etc/php/apache2-php5/php.ini i
/etc/php/cli-php5/php.ini:
Listing 4.2: Stare ustawienia w php.ini |
include_path = ".:/usr/lib/php"
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20050617/"
|
Listing 4.3: Nowe ustawienia w php.ini |
include_path = ".:/usr/share/php"
extension_dir = "/usr/lib/php5/lib/php/extensions/no-debug-non-zts-20050617/"
|
Ostrzeżenie:
Należy użyć etc-update lub dispatch-conf by mieć pewność co do
poprawnych ustawień dla każdego z plików.
|
Zmiany w konfiguracji rozszerzeń PHP
Nowy pakiet PHP nie przechowuje już konfiguracji z zewnętrznych (dzielonych)
rozszerzeń PHP w php.ini. Dyrektywy będą przechowywane w
specyficznych dla każdego rozszerzenia pliku konfiguracyjnym ulokowanym w
/etc/php/*/ext. W celu włączenia wspólnych rozszerzeń, używane są
dowiązania z /etc/php/*/ext-active. Jeśli chcemy włączyć
rozszerzenie, tworzymy dowiązanie symboliczne w
/etc/php/*/ext-active odpowiadające plikowi
[EXTENSION].ini w /etc/php/*/ext/. Jeśli chcemy
usunąć/wyłączyć rozszerzenie, usuwamy dowiązanie.
Jeśli wcześniej było zainstalowane dev-php/PECL-apc to konfiguracja dla
APC znajduje się w php.ini. Jeśli pakiet dev-php5/pecl-apc
został przez nas przeinstalowany to domyślna konfiguracja APC będzie zapisana
do /etc/php/*5/ext/apc.ini.
Należy więc przenieść konfigurację APC z /etc/php/*5/php.ini do
/etc/php/*5/ext/apc.ini i utworzyć dowiązanie z
/etc/php/*5/ext-active/apc.ini do /etc/php/*5/ext/apc.ini
.
Uwaga:
Jeśli instalujemy PHP jako moduł Apache, należy ponownie uruchomić Apache po
zainstalowaniu i skonfigurowaniu.
|
5.
Konfigurowanie Apache do pracy z PHP4 i PHP5
Aby skłonić Apache do ładowania modułu (mod_php) PHP4 lub PHP5, wystarczy dodać
odpowiednio -D PHP4 lub -D PHP5 do zmiennej -D PHP4
respectively -D PHP5 to APACHE2_OPTS w pliku
/etc/conf.d/apache2.
Listing 5.1: Konfiguranie ładowania mod_php w Apache |
APACHE2_OPTS="-D PHP4"
APACHE2_OPTS="-D PHP5"
|
Istnieje wiele sposobów na to by Apache działał z dwiema równoległymi wersjami
PHP. Najłatwiej jest użyć PHP4 i PHP5 jako binarii cgi, albo cgi PHP4 i modułu
PHP5 (lub na odwrót). Nie jest możliwe jednoczesne korzystanie z modułów PHP4 i
PHP5 w jednym procesie Apache.
Stworzyliśmy przewodnik konfiguracji PHP4 i PHP5, które przedstawia część z
możliwych rozwiązań Przewodnik
konfiguracji PHP4 i PHP5.
6.
Pomoc
W razie jakichkolwiek problemów związanych z nowym pakietem Gentoo PHP, oto
miejsca gdzie można znaleźć pomoc:
-
Częste
pytania związane z PHP w Gentoo
-
Strona dewoloperów
PHP
-
Kanał #gentoo-php w sieci irc.freenode.net. Miejsce spotkań autorów obsługi
i użytkowników PHP w Gentoo.
-
Forum Gentoo popularne miejsce
do zadawania pytań. Wielu użytkowników korzysta z forum, jest to więc
świetne miejsce do uzyskania w miare szybkiej pomocy.
Szczegółowe zastosowanie nowych pakietów znajdziemy na postach Stuarta
na listę gentoo-dev i w blogu Stuarta.
Na Development-Page
znajdziemy dokumentację i najnowsze ebuildy, które będą przeniesione do
oficjalnego drzewa portage w późniejszym czasie.
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|