将端口php55升级到php56 - 与不存在的帮助器

时间:2016-12-26 23:59:28

标签: php port upgrade freebsd

我有一个freebsd系统,我通常使用portmaster管理端口。由于php55在2016年7月被EOL编辑,我用portmaster -o /usr/ports/lang/php56 php5-5.5.24将php55升级到php56。工作就像一个魅力。

稍后在更新端口(portmaster -a)时,我发现有archivers/php55-bz2之类的PHP助手仍然存在。无法安装较新版本(例如archivers/php56-bz2),因为它们与旧版本冲突,而旧版本无法删除,因为相应的目录不再存在。

如何强制删除旧的php55助手,以便安装新的php56版本?

2 个答案:

答案 0 :(得分:0)

通过pkg_delete删除旧端口不起作用("未安装软件包"),选项-f仅删除了DB条目,但仍然不允许安装新包装。

我终于使用pkg_deinstall成功卸载了。在安装portmaster成功之前,已安装了一半已安装的新软件包make deinstall

答案 1 :(得分:0)

要从PHP 5.5迁移到5.6,您必须手动将portmaster -o应用于所有php55- *软件包。因此,理论上,这样的命令可能有效:

awk \
    -vPATTERN="55" \
    -vREPLACEMENT="56" \
    'BEGIN { while (("pkg query -x %o \"/(mod_)?php" PATTERN "(-|$)\"" | getline name) > 0) { oldname = name; sub(PATTERN, REPLACEMENT, name); print "portmaster -o " name " " oldname } }' | sh

但这在实践中可能并不那么容易:

  • 如果你从5.X升级到7.X,首先需要删除一些软件包(比如pecl-intl或php56-mysql)
  • pecl- *包可能还需要重建(portmaster pecl ?,如果它们兼容 - 仍然与PHP 5和7之间的ABI中断有关)

这就是为什么有些用户喜欢在重新安装新版本之前卸载所有旧的php包(pkg delete -R php55\*)。