You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Linux 2升级PHP:yum priorities插件可用性及操作咨询

问题

我正在Amazon Linux 2实例上进行PHP版本升级操作,由于默认EPEL源无法提供全部PHP 8模块,计划使用REMI源。但安装部分模块时,系统会从EPEL源拉取包,为此考虑使用yum priorities插件解决该问题。不过网上有帖子指出该插件存在更新相关问题,现咨询:

  1. 是否应在添加REMI源前执行yum update命令?
  2. 该插件是否可以安全使用?
  3. 添加新源后我已执行清理元数据和更新包的命令,请问还需要进行其他操作吗?

附现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:57:06