Amazon Linux 2升级PHP:yum priorities插件可用性及操作咨询
问题
我正在Amazon Linux 2实例上进行PHP版本升级操作,由于默认EPEL源无法提供全部PHP 8模块,计划使用REMI源。但安装部分模块时,系统会从EPEL源拉取包,为此考虑使用yum priorities插件解决该问题。不过网上有帖子指出该插件存在更新相关问题,现咨询:
- 是否应在添加REMI源前执行yum update命令?
- 该插件是否可以安全使用?
- 添加新源后我已执行清理元数据和更新包的命令,请问还需要进行其他操作吗?
附现有Ansible配置代码:
- name: "Install EPEL" become: true command: "amazon-linux-extras install epel=stable" - name: install yum priorities become: true command: yum install yum-plugin-priorities - name: Add REMI repository become: true ansible.builtin.yum_repository: name: remi description: REMI YUM repo file: external_repos baseurl: http://rpms.remirepo.net/enterprise/7/remi/$basearch/ gpgcheck: true gpgkey: http://rpms.remirepo.net/RPM-GPG-KEY-remi - name: Add PHP8.0 REMI repository become: true ansible.builtin.yum_repository: name: remi-php80 description: REMI PHP8.0 repo file: php80_remi_repo baseurl: http://rpms.remirepo.net/enterprise/7/php80/$basearch/ mirrorlist: http://cdn.remirepo.net/enterprise/7/php80/httpsmirror priority: 1 gpgcheck: true gpgkey: http://rpms.remirepo.net/RPM-GPG-KEY-remi - name: Add REMI Safe repository become: true ansible.builtin.yum_repository: name: remi-safe description: REMI Safe repo file: remi_safe_repo baseurl: http://rpms.remirepo.net/enterprise/7/safe/$basearch/ mirrorlist: https://rpms.remirepo.net/enterprise/7/safe/httpsmirror priority: 2 gpgcheck: true gpgkey: http://rpms.remirepo.net/RPM-GPG-KEY-remi - name: clean yum metadata command: yum clean metadata - name: yum update become: true command: yum -y update
回答
1. 是否应在添加REMI源前执行yum update命令?
建议在添加REMI源前先执行yum update,理由如下:
- 先把系统现有包更新到最新稳定版,避免后续引入REMI源后,新旧包版本冲突引发依赖问题。
- Amazon Linux 2的基础包和EPEL源的包先同步到当前最新版,再安装REMI的PHP 8相关包,能大幅降低兼容性风险。
- 注意:如果系统已安装旧版本PHP,更新时旧版会保留,后续安装REMI的PHP 8时,需要明确指定版本或先清理旧包,避免版本冲突。
2. yum priorities插件是否可以安全使用?
在Amazon Linux 2上,yum priorities插件是可以安全使用的,但要注意配置细节:
- 网传的更新问题大多源于优先级配置错误,比如给第三方源设置了比官方基础源更高的优先级,导致系统核心包被替换,或无法获取安全更新。只要配置合理,就能规避这类问题。
- 你的配置里给
remi-php80设了priority:1(最高优先级),remi-safe设了priority:2,这个逻辑是对的——PHP相关包优先从REMI的PHP 8源拉取,其他通用安全包从remi-safe或EPEL获取。 - 额外建议:给EPEL源也设置一个合适的优先级(比如3),同时不要给第三方源设置比Amazon官方基础源(amazon-linux-main)更高的优先级,防止系统核心组件被意外替换。
3. 添加新源后还需要进行其他操作吗?
除了清理元数据和更新包,还需要完成以下操作:
- 验证优先级配置生效:执行
yum repolist all查看各源的优先级,确认remi-php80是1,remi-safe是2,EPEL和官方源优先级合理。 - 清理旧版PHP(如果有):如果系统之前装过旧版PHP,执行
yum remove php-*彻底清理,再安装新版,避免版本冲突。 - 安装PHP 8模块:明确安装所需的PHP 8模块,比如
yum install php-fpm php-mysqlnd php-gd,如果担心优先级没生效,可强制指定源:yum install --enablerepo=remi-php80 php-fpm。 - 验证安装结果:执行
php -v确认PHP版本为8.0,用php -m检查所需模块是否全部安装。 - 优化Ansible代码:现有代码可以优化,更符合Ansible最佳实践:
- 用
yum模块替代command模块安装EPEL和yum-plugin-priorities,示例:- name: "Install EPEL" become: true yum: name: epel-release state: present - name: install yum priorities become: true yum: name: yum-plugin-priorities state: present - 给REMI主源(remi)也设置优先级(比如3),避免默认优先级问题。
- 用
yum makecache替代yum clean metadata,元数据更新更高效,可放在添加源之后、更新之前。
- 用
内容的提问来源于stack exchange,提问作者Rob Wilkinson
相关产品推荐
相关产品推荐

