Upgrade PHP na Ubuntu server 8.04
Wersja któtka:
- Usuń PHP z serwera
apt-get remove php5
- Zrób backub pliku /etc/sources.list
- Wyczyść go
- Dodaj do niego adresy
deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all - Wywołaj
apt-get update
- Zainstaluj PHP
apt-get install php5
- Przywróć plik /etc/sources.list do pierwotnego stanu (na wypadek jakichś przyszłych update-ów, chociaż najprawdopodobniej tej wersji nie da się upgrade-ować bardziej niż jest teraz używając oficjalnego repo)
- Wywołaj
apt-get update
I to w zasadzie tyle. Nie wiem czy jest to najlepszy sposób, ale dla mnie zadziałał :).
Wersja z wynurzeniami:
Ten problem pojawił się gdy musiałem odpalić testy jednostkowe w frameworku Yii na rzeczonym systemie. Yii wymaga PHPUnit w wersji 3.5, PHPUnit wymaga PHP w wersji 5.2.7. Na serwerze było 5.2.4. Tak blisko, a tak daleko.
No ale nic, pomyślałem sobie „apt-get” załatwi sprawę. Nie załatwił, Ubuntu w oficjalnym repo ma co najwyżej 5.2.4. Zaczęła się zabawa.
Poszperałem w sieci, znalazłem dużo postów na różnych blogach, szukałem też na stackoverflow, również znalazłem sporo propozycji. Tylko że żadna nie działała. Nie chciałem dodawać repozytoriów z nowszej wersji Ubuntu bo z doświadczenia wiem, że to może się źle skończyć. Próbowałem kompilacji ze źródeł, ale było tyle niespełnionych zależności że pomyślałem, że musi być jakiś prostszy sposób. W zasadzie sposób z tej strony: http://www.dotdeb.org/2009/11/30/php-5-3-1-packages-for-debian-lenny-theyre-here/comment-page-1/ jest dobry, tylko nie wspomnieli tam o jednej rzeczy.
Okazało się, że nie do końca rozumiałem jak działa mechanizm apt-get. Myślałem, że jeśli w repozytoriach będzie nowsza wersja paczki to zostanie ona zainstalowana. Okazało się jednak że oficjalne repozytoria zasłaniają te które dodałem.
Obszedłem to w ten sposób, że usunąłem PHP na serwerze, wyczyściłem /etc/sources.list po czym dodałem do niego adresy ze wspomnianego linku i zainstalowałem PHP. Żadnych kompilacji ze źródeł bałaganiących w systemie, po instalacji przywróciłem stan sources.list i wszystko śmiga, mogę cieszyć się automatycznymi testami i spać spokojnie :).
Ta sytuacja przypomniała mi, że nie wszystko zawsze musi działać logicznie (albo zgodnie z moją logiką). No i że kiedy po długim próbowaniu coś w końcu wyjdzie, uczucie jest niesamowicie fajne.
Typowe, kilku czy też kilkunasto godzinna walka kończy się kilkoma linijkami „receptury”. Niestety bardzo wielu przepisodawców nie zaznacza warunków brzegowych, czyli np. jaka wersja pracuje w danym środowisku, z tego powodu większość postów na forach jest prawie bezużytecznych. Dlatego szczacun dla kolegi za dokładny opis 🙂
Dzięki kolego ;). Podejrzewam, że ta sama receptura byłaby skuteczna na nowszych/starszych wersjach Ubuntu, i nie tylko z PHP, jednak nie sprawdzałem tego. Jeśli ktoś jednak spróbuje niech da znać w komentarzach!