• PHP 7 obok standardowego PHP dzięki yumchroot

    dodany przez Konrad Stępień

    Prędzej czy później nadchodzi taki moment, że trzeba założyć na CentOS nowszego PHP. Można po prostu upgradować php-5.3 który jest w dystrybucji, ale czasami lepiej tego nie ruszać. Wiadomo, upgrade PHP, szczególnie poważny, to zawsze ryzyko, że coś pisane „pod” starego PHP się sypnie. Najprostsza metoda, to wykompilowanie nowego php gdzieś obok i podłączenie go jako FPM do konkretnego vhost-a. Ale wtedy tracimy większość zalet systemu RPM, w tym różne automatyczne aktualizacje, sprawdzanie spójności i to wszystko, co powoduje, że korzystamy z RPM. Można zrobić kontener i tam postawić osobną instancję systemu z nowym php, ale ja postanowiłem zastosować jeszcze „lżejsze” rozwiązanie. Od zawsze istnieje w linuksie mechanizm chroot i właśnie z niego postanowiłem skorzystać. Posiłkowałem się świetnym poradnikiem http://prefetch.net/articles/yumchrootlinux.html. Tylko zmodyfikowałem kilka rzeczy.
    Na początek, instalujemy pakiet yum-utils, nie jest konieczny ale się przyda

    yum install yum-utils

    Teraz zakładamy katalog roboczy dla ściąganych plików i docelowy katalog gdzie zainstalujemy nasze środowisko:

    mkdir jail
    cd jail
    mkdir -p /chroot/php7/

    I zaczynamy

    rpm --root /chroot/php7/ --initdb
    yumdownloader redhat-release -destdir=.
    rpm --root /chroot/php7/ -ivh centos-release-7-3.1611.el7.centos.x86_64.rpm

    Co zrobiliśmy? Skorzystaliśmy z opcji --root programu rpm aby zainicjalizować bazę programu rpm w naszym izolowanym środowisku. Następnie pobraliśmy pakiet centos-release i go w tym środowisku zainstalowaliśmy. Do tego przydał się program yum-downloader z pakietu yum-utils, to tam znalazł nam właściwy pakiet zawierający „redhat-release”. Można by sobie poradzić bez niego, pobierając pakiet „ręcznie”. Mamy już założony „szkielet”, możemy jechać dalej.

    wget https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    yumdownloader epel-release -destdir=.
    rpm --root=/chroot/php7/ -ivh epel-release-7-10.noarch.rpm
    rpm --root=/chroot/php7/ -ivh webtatic-release.rpm
    yum --installroot=/chroot/php7/ -y install php71w-fpm

    W zasadzie wygląda to jak zwykła instalacja php71 z repozytorium webtatic, ale działamy w izolowanym środowisku, więc nic nam się nie konfliktuje. Parametr –installroot programu yum działa identycznie jak –root dla rpm-a.

    Teraz możemy sobie doinstalować potrzebne moduły, np.

    yum --installroot=/chroot/php7/ -y install php71w-mysql php71w-pdo php71w-pear php71w-mbstring php71w-mcrypt php71w-bcmath

    Nasze izolowane środowisko potrzebuje jeszcze kilku plików specjalnych w katalogu /dev/. Normalnie, załatwia to udev, ale tu go nie ma, a bez tych plików, niektóre rzeczy mogą działać dziwnie. No to zakładamy „urządzenia”.

    cd /chroot/php7/dev
    mknod null c 1 3
    mknod zero c 1 5
    mknod random c 1 8
    mknod urandom c 1 9
    mknod tty c 5 0
    chgrp tty tty
    chmod go+w *

    Startujemy naszego php-fpm przez „/sbin/chroot /chroot/php7 /usr/sbin/php-fpm”. Ja sobie stworzyłem odpowiedni do /etc/rc.d/init.d i startuje mi automatycznie. Próbowałem przekonać systemd żeby robił to bezpośrenio, ale po kilku próbach się poddałem. Na koniec została jeszcze jedna sprawa. php71 działający w chroot-cie oczywiście nie widzi nic „powyżej” swojego „korzenia”. Jeśli nasz vhost jest powiedzmy w katalogu /var/www/vhost1 to nie ma szans, żeby php7 „dobrał się” do plików tam znajdujących. Jest na to prosta recepta, przenosimy pliki do /chroot/php7/var/www/vhotst1 i robimy linka do /var/www/. Dzięki temu zarówno apache działający w „macierzystym” systemie jak i php7 działający w środowisku izolowanym, będą widziały takie same ścieżki. Warto też porobić inne linki, np. dla /var/log/php-fpm, /var/run/php-fpm czy /etc/php-fpm. No i przy okazji robienia yum update zrobić też

    yum --installroot=/chroot/php7/ update

    A o tym jak podłączyć php-fpm-a do apache, to można poczytać w innych artykułach.

Dodaj komentarz

Warto odwiedzić
Valid XHTML 1.0 Transitional centos.com.pl- mapa strony