댓글 검색 목록

[php] Ubuntu에서 PHP를 최신 패치 버전으로 업데이트하는 방법

페이지 정보

작성자 운영자 작성일 20-05-01 22:59 조회 1,080 댓글 0

매년 packagist의 사람들은 PHP 사용법에 대한 통찰력 있는 통계를 공유합니다. 새로운 주요 릴리스의 채택은 훌륭해 보이지만 다음은 부 버전을 통한 파티션 분할에 대한 개요입니다.


https://medium.com/code16/how-to-keep-php-updated-with-last-patch-version-on-ubuntu-62b313361c6f 


1*xQrANifP9TW5dhTQpfHI8A.jpeg 

https://twitter.com/seldaek/status/1226773382835982336


이 권리를 읽으면 모든 요청 중 약 70 %가 오래된 PHP 버전으로 작성된 것입니다. 최신 패치로 업그레이드 되지 않았음을 의미합니다. 예를 들어 이 데이터 세트에는 7.2.27보다 7.2.24를 사용하는 사람이 더 많습니다. 그것은 약간의 지름길이지만, 대다수의 웹 서버가 PHP를 사용하고 있다고 생각하면 오래된 PHP 엔진이 많이 만들어집니다! 

그리고 분명히 오래된 것은 더 많은 버그와 심각한 보안 부족을 의미합니다. 새로운 취약점이 생각보다 일반적일 것입니다.

왜 그럴까요? 이 업그레이드 부족의 원인은 무엇입니까? 자동화! 자동화되지 않고 이 작업은 일반적으로 수동으로 수행됩니다.


웹 개발자 인 sysadmin은 제 편의와는 거리가 멀습니다. 면책 조항 : 저는 전문가가 아닙니다. 내 코드는 여전히 laravel forge가 처리하는 오래된 VPS에서 실행 중입니다. 이 도구는 새로운 플랫폼을 설정하는 데 도움이 되지만 불행히도 PHP를 자동으로 업그레이드하는 데 도움이 되지 않습니다. 그것은 당신이 원활하게 수행하는 데 도움이 정말 좋은 기능이 있습니다.


나는 그 주제에 대해 약간의 연구를 했고 많은 자료와 튜토리얼을 발견했다. 그들 모두는 PHP 설치 또는 특정 메이저 버전으로 업그레이드하는 데 중점을 두지 만 항상 최신 버전을 유지하는 방법을 말하는 것을 잊지 마십시오. 

나는 마침내 그것을 스스로 찾았지만 나의“초보자”여행은 쉽지 않았다. 불행히도 Ubuntu는 다른 시스템과 완전히 다르기 때문에 Ubuntu에 중점을 두었습니다. 어쨌든 나는 그것이 누군가를 도울 수 있기를 진심으로 바랍니다.


메이저 버전 설치 


앞서 말했듯이, PHP 설치의 주제는 잘 문서화 되어 있습니다. 모든 것을 쉽게 찾을 수 있습니다. 그러나 원격 플랫폼에 연결하는 동안 때때로 이미 설치된 것을 확인해야 합니다. 이것이 내가 그렇게 하는 방법입니다.


설치된 모든 PHP 메이저 버전 나열 


PHP 버전을 설치하거나 제거하기 전에 이미 설치된 것을 나열하고 싶습니다. 확장 기능이 포함되어있어 매우 유용합니다.


dpkg --list | grep php 


PPA 


우분투의 각 버전은 하나의 패키지 된 PHP 버전으로 제공됩니다 (예 : 우분투 18.04는 PHP 7.2와 함께 제공). 다른 것을 설치하려면 PPA (Personnal Package Archive)가 필요할 것입니다. Ondřej라는 사람이 인기가 있습니다.


sudo add-apt-repository ppa:ondrej/php


또한 시스템에 구성된 모든 PPA를 언제든지 나열 할 수 있습니다.


sed -n '/deb .*ppa.launchpad.net/ s@.*ppa.launchpad.net/\(.*\)/ubuntu.*@\1@p' /etc/apt/sources.list.d/*.list 


최신 메이저 PHP 버전 설치 방지 


이 단계는 필수 단계는 아니지만 아직 마지막 주 버전으로 업그레이드 할 준비가 되지 않고 이전 버전으로 계속 실행하려는 경우 유용 할 수 있습니다. 주어진 PHP 버전이 시스템에 설치되는 것을 막을 수 있습니다. 끝에 *를 사용하는 것을 알 수 있습니다. 그 목적은 확장명을 포함하는 것입니다.


sudo apt-mark hold php7.4*


다음을 실행하여 보류 된 모든 패키지를 볼 수도 있습니다.


apt-mark showhold 


물론 새 주요 버전으로 업그레이드 할 준비가 되면 보류를 제거해야 합니다. 모든 PHP 패키지를 보류 해제하여 되돌릴 수 있습니다.


sudo apt-mark hold php7.4* 


PHP를 최신 상태로 유지 


모든 것을 설치 했으므로 모든 준비가 완료되었습니다. 하지만 생각보다 빨리 새로운 패치를 사용할 수 있기 때문에 오래 걸리지 않습니다.


수동 업그레이드 


분명히, 이것을 달성하는 가장 간단한 방법은 PHP를 수동으로 업그레이드하는 것입니다. 새 릴리스를 직접 확인하고 각 서버에서 이 명령을 수동으로 실행해야 합니다. 다수를 관리하는 것은 고통스러울 수 있습니다.


sudo apt-get install --only-upgrade php7.4* 


보너스 : 전용 채널에서 느슨하게 알림처럼 편리한 방법으로도 오래된 시스템을 추적 할 수 있도록 알림 시스템을 쉽게 설정할 수 있습니다.


자동 업그레이드 


우리는 마침내 이 포스트의 요점을 알게 됩니다. 어떻게 시스템을 자체적으로 PHP를 업그레이드 할 수 있습니까? 무인 업그레이드라는 도구를 사용합니다. 실제로 시스템을 정기적으로 업그레이드하여 설치 및 실행했을 수 있습니다. 그러나 PPA에서 PHP를 얻었으므로 즉시 작동하지 않습니다.


따라서 특정 PPA에 대해 명시 적으로 프로그램에 지시해야 합니다. 너무 쉬웠기 때문에 다음을 알아야 합니다.


  • 배포판의 코드명
  • the PPA “origin”


Ubuntu 18.04를 사용할 때 배포판의 이름은 "bionic"입니다.


그런 다음 /var/lib/apt/lists/를 파헤쳐 야합니다. 거기에서 ppa.launchpad.net_ondrej_php_ubuntu_dists_bionic_InRelease라는 파일을 발견했습니다. 내부에서 ondrej PPA의 귀중한 끈을 발견했습니다.


Origin: LP-PPA-ondrej-php
Label: ***** The main PPA for supported PHP versions with many PECL extensions ***** 


이제 무인 업그레이드 구성을 편집 할 수 있습니다. /etc/apt/apt.conf.d/50unttended-upgrades를 편집하고 다음을 추가하십시오.


Unattended-Upgrade::Allowed-Origins {
"LP-PPA-ondrej-php:bionic";
} 


사용 가능한 매크로로 좀 더 일반적인 것을 사용할 수 있습니다.


Unattended-Upgrade::Allowed-Origins {
"LP-PPA-ondrej-php:${distro_codename}";
} 



우리는 가까워졌지만 아직 끝나지 않았습니다.


구성 파일 충돌 해결 프롬프트 피하기 


수정 한 새 구성 파일을 설치해야 할 때마다 업그레이드가 중지되고 프롬프트가 열리고 응답을 기다립니다. 기존 conf를 유지하거나 교체 하려는지 알고 싶습니다. 상상할 수 있듯이 기본적으로 "무인 업그레이드"는 이 문제를 처리하는 방법을 모르며 프로세스를 중단합니다.


자동 업데이트를 수행하는 동안 원본 구성 파일을 유지하기 위해 특정 옵션을 설정할 수 있습니다 (자세한 내용). 이전에 편집 한 동일한 파일에 다음을 추가하기 만하면 됩니다. /etc/apt/apt.conf.d/50unattended-upgrades


Dpkg::Options {
"--force-confdef";
"--force-confold";
}; 


그리고 우리는 끝났습니다! 우분투 시스템이 PHP와 모든 확장 프로그램을 최신 패치 버전으로 업그레이드하기를 바랍니다.


보너스 : 시스템에서 오래된 PHP 메이저 버전을 제거하십시오 


하나의 PHP 버전 만 사용하는 경우 사용되지 않는 다른 PHP 버전을 모두 제거하는 것이 안전합니다. 사용하지 않으면 계속 업데이트하는 것이 쓸모 없게 되고, 더 중요한 것은 실수를 잡기 어려운 것을 피하는 것입니다. 예 : 원하지 않는 오래된 PHP를 가리키는 웹 서버 구성 유지 : /


sudo apt-get purge 'php7.3*' 



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.