如何固定 PPA 软件包?

如何固定 PPA 软件包?

我已经ppa:ondrej/php5在 Ubuntu 14.04 LTS 中安装了(为了使用最新的 PHP 5.5),但是它还包含apache2软件包,这导致我无法安装apache2-mpm-worker

$ sudo apt-get install apache2-mpm-worker
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 apache2-mpm-worker : Depends: apache2 (= 2.4.12-1+deb.sury.org~trusty+5) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

当你使用apt-cache policy检查 时,你会发现 apache2 已经被 PPA 替换了:

$ apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.16-3+deb.sury.org~trusty+1
  Version table:
     2.4.16-3+deb.sury.org~trusty+1 0
        500 http://ppa.launchpad.net/ondrej/php5/ubuntu/ trusty/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://tw.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://tw.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

因此我将 apt pin 设置/etc/apt/preferences为较低优先级:

#
Package: apache2
Pin: origin "ppa.launchpad.net"
Pin-Priority: 1

但不起作用:

$ apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.16-3+deb.sury.org~trusty+1
  Package pin: 2.4.16-3+deb.sury.org~trusty+1
  Version table:
     2.4.16-3+deb.sury.org~trusty+1 1
        500 http://ppa.launchpad.net/ondrej/php5/ubuntu/ trusty/main amd64 Packages
     2.4.7-1ubuntu4.5 1
        500 http://tw.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 1
        500 http://tw.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

release o=LP-PPA-ondrej-php5与和的结果相同version 2.4.16-*。我想知道如何正确执行 apt pin ?

答案1

我认为您要安装的软件包已过时并留在 PPA 存储库中。这是那里的第一个问题。

源码包可以一次性生成多个二进制包,例如 apache2 的源码包由apache2apache2-binapache2-dbgapache2-devapache2-mpm-workerapache2-mpm-preforkapache2-mpm-event... 等多个包组成,它们共用一个版本号,相互依赖,很合理。

您的情况是,您想安装apache2-mpm-worker2.4.12-1 软件包,但缺少 apache2 (2.4.12-1)。为什么?因为上游已删除所有过渡软件包,包括apache2-mpm-worker

apache2 (2.4.12-2) unstable; urgency=medium

  [ Jean-Michel Nirgal Vourgère ]
  * d/control:
    + Update Vcs-Browser.
  * d/copyright:
    + Change d/debhelper/dh_apache2 to dh_apache2.in.
    + Drop paragraph about inexistant itk patches.

  [ Stefan Fritsch ]
  * Remove all the transitional packages:
    apache2-mpm-worker, apache2-mpm-prefork, apache2-mpm-event,
    apache2-mpm-itk, apache2.2-bin, apache2.2-common,
    libapache2-mod-proxy-html, libapache2-mod-macro, apache2-suexec
    This also fixes the dependency problems caused by a recent version
    of debhelper (see #784803).

最新版本apache2(2.4.16-3) 已在 PPA 存储库中构建。您不能在一个存储库中有两个不同的版本,因此 apache2_2.4.12-1 被 apache2_2.4.16-3 取代。这是 apt 的一个已知限制;由于 PPA 是一个 apt 存储库,因此它也有此限制。

因此,缺少 apache2_2.4.12-1 软件包(apache2-mpm-worker_2.4.12 的依赖项)。这就是根据您的描述您的安装失败的原因。

The following packages have unmet dependencies:
 apache2-mpm-worker : Depends: apache2 (= 2.4.12-1+deb.sury.org~trusty+5) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

我认为您已经安装了 apache2_2.4.16-3。以下步骤是将 MPM 更改为 worker 的新方法:

$ a2enmod mpm_worker

考虑 mpm_event 与 mpm_worker 的冲突:

考虑到 mpm_prefork 与 mpm_worker 的冲突:

错误:模块 mpm_prefork 已启用 - 由于冲突无法继续。需要先将其禁用!

$ a2dismod mpm_prefork

无法删除 /etc/apache2/mods-enabled/mpm_prefork.load:权限被拒绝

$ sudo a2dismod mpm_prefork

模块 mpm_prefork 已禁用。

要激活新配置,您需要运行:

服务 apache2 重启

$ sudo a2enmod mpm_worker

考虑 mpm_event 与 mpm_worker 的冲突:

考虑到 mpm_prefork 与 mpm_worker 的冲突:

启用模块 mpm_worker。

要激活新配置,您需要运行:

服务 apache2 重启

$ sudo service apache2 restart
  • 重新启动 Web 服务器 apache2...完成。

$ apache2ctl status

无法创建配置目录 (/.w3m)!本地主机的 Apache 服务器状态(通过 127.0.0.1)

服务器版本:Apache/2.4.16(Ubuntu)
服务器 MPM: worker
服务器建立时间:2015-08-18T00:00:00

----------------------------------------------------------------------------------------------

当前时间:2015 年 8 月 20 日星期四 07:20:23 UTC
重启时间:2015 年 8 月 20 日星期四 07:19:38 UTC
父服务器配置。代数:1
父服务器 MPM 代数:0
服务器正常运行时间:44 秒
服务器负载:0.00 0.01 0.05
总访问量:0 - 总流量:0 kB
CPU 使用率:u0 s0 cu0 cs0
0 请求/秒 - 0 B/秒 -
当前正在处理 1 个请求,49 个闲置工人

_____W__________________________________________..............
...........................................................
......................

记分牌键:
“_” 等待连接,“S” 正在启动,“R” 读取请求,
“W” 发送回复,“K” 保持活动(读取),“D” DNS 查找,
“C” 关闭连接,“L” 记录,“G” 优雅地完成,
“I” 空闲清理工作者,“。” 没有当前进程的开放槽

回到 apt 偏好设置的问题。你的配置对我来说似乎不错,但它并没有按预期工作。这对我来说是有趣的部分。经过一番挖掘,它改变了我过去使用 apt 的经验。这可能是缺少一些功能或固定特定软件包的错误。

相关内容