원문 보기: https://dawoum.duckdns.org/wiki/PHP/Upgrading_PHP_Versions
2024년 11월 21일, PHP-8.4가 출시될 것으로 기대됩니다. 2024년 10월말 기준, PHP-8.4RC3가 제공됩니다.
이제 미디어위키 서비스를 제공하기 위해, PHP 버전 업그레이드 과정을 기록해 둡니다.
Information
우선 시스템에 설치된 패키지를 확인해야 합니다.
- php-defaults
- php8.3 : cli, common, curl, dev, fpm, gd, intl, mbstring, mysql, opcache, readline, xml
- php8.3-apcu
- php8.3-igbinary
- php8.3-redis
- php-luasandbox
- php-wikidiff2
그외 PHP 패키징과 관련된 dh-php 파일 업그레이드가 필요할 수 있습니다.
먼저, 패키징과 관련하여 아래 두 곳에서 대부분의 정보를 얻을 수 있습니다.
그 외는 검색을 통해 정보를 얻을 수 있습니다.
PHP-defaults
Php-8.4 버전 지원을 위해, 95 버전을 설치해야 합니다. 이런 정보는 sury 사이트에서 php-defaults 디렉토리가 있어서 쉽게 찾을 수 있습니다.
데비안 패키지 사이트에서는 php-defaults로 검색되는 것이 아니라, 제공하는 패키지 이름으로 검색해야 하며, php-fpm으로 검색을 시도할 수 있습니다. 이때, 더 최근 버전이 있는지 확인하기 위해, 오른쪽 링크 중에 Developer Information으로 들어갑니다.
새로운 페이지에서 왼쪽에 VCS: Git 중에 Git를 눌러서 최근 정보를 확인할 수 있습니다.
95 버전을 컴파일해서 설치합니다.
PHP8.4 compile
위와 같은 방법은 정보를 얻을 수 있습니다.
Sury 사이트에서는 php8.4 디렉토리가 있고, 데비안 검색에서는 php8.4-fpm으로 검색을 시도할 수 있습니다. 여기서 php8.4-fpm은 php-8.4를 패키징했을 때 만들어지는 패키지 중의 하나로써, 시스템에서 설치된 것은 위에서 나열해 두었습니다.
여기까지는 크게 문제가 되지 않습니다.
DH-PHP
모듈 컴파일에서, 이 패키지에서 제공하는 파일을 이용하기 때문에, 문제가 발생하지 않도록 버전 업그레이드를 진행할 필요가 있습니다.
아래서 수행할 모듈 컴파일이 정상적으로 이루어지면 굳이 버전 업이 필요하지는 않습니다.
이와 관련된 정보는 sury 사이트에는 없고 데비안 개발자 Git에서 얻을 수 있습니다.
PHP module
남아있는 5개의 모듈은 sury 사이트에 정보가 없습니다. 데비안 패키지 검색을 통해 정보를 확인하십시오:
- php8.4-apcu
- php8.4-igbinary
여기까지는 실험 버전이 제공되고 있습니다.
남은 것 중에 먼저 php8.4-redis는 해당 키워드로 검색을 합니다. 그런-다음 아래 사이트로 이동합니다.
가장 최근에 6.1.0 버전이 출시되었음을 확인할 수 있고, php8.3-redis 데비안 패키징 파일을 sury 사이트 또는 데비안 패키지 검색 사이트에서 얻어서 패키징을 시도할 수 있습니다.
나머지 2개는 검색을 통해서 버전 업그레이드가 없다는 사실을 확인할 수 있습니다.
이전 버전을 sury 사이트 또는 데비안 패키지 검색 사이트에서 가져와서 리빌드를 통해 패키지를 만들 수 있습니다.
Test
모든 준비가 끝나면, Nginx에서 PHP 버전을 8.3에서 8.4로 바꾸고 재시작합니다.
미디어위키 서비스가 정상적으로 작동하는지 확인합니다.
간혹 luasandbox와 관련하여 오류가 발생할 수도 있습니다. 이때에는 LocalSettings.php 파일에서 다음으로 수정해서 서비스를 계속할 수 있습니다:
$wgScribuntoDefaultEngine = 'luastandalone';
모든 것이 잘 작동하면, 이제 PHP 설정을 진행하십시오.
Troubleshootings
Executing php scripts in Command-line
간혹 의존성 라이브러리가 아직 새로운 버전을 이해하지 못해서 명령-줄에서 php 스크립트를 실행하면 오류가 생길 수 있습니다. 보통 이전 버전에서는 문제가 없기 때문에, 다음에서 이전 버전으로 수정해 둘 필요가 있습니다:
- sudo update-alternatives --config php
Module compile
위에서 소개한 별도로 컴파일되는 5개의 모듈 중에, apcu, igbinary, redis는 시스템에 설치된 버전별로 모듈이 만들어집니다. 반면에, luasandbox, wikidiff2는 phpize에서 현재 설정된 1개의 버전에 대해 컴파일이 됩니다.
이상적으로, 모든 버전별로 모듈이 만들어지도록 변경되는 것이 좋겠지만, 그렇지 않을 때에는 phpize로 버전을 바꾸면서 모듈을 만들어두고 설치 디렉토리에서 백업한 후에 다음 모듈을 설치할 수 있습니다:
- /usr/lib/php/20230831 : 여기서 wikidiff2.so, luasandbox.so를 다른 이름으로 바꾸어 둡니다.
- /usr/lib/php/20240924 : 여기에 새롭게 컴파일된 모듈을 설치 후에 위의 이름을 원래대로 바꾸어 줍니다.