2016-12-26 13 views
0

У меня есть система freebsd, на которой я обычно управляю портами с помощью portmaster. Поскольку php55 был EOL'ed в июле 2016 года, я обновил php55 до php56 с помощью portmaster -o /usr/ports/lang/php56 php5-5.5.24. Работал как шарм.Обновление порта php55 до php56 - конфликт с несуществующими помощниками

При обновлении портов в дальнейшем (portmaster -a) я обнаружил, что есть дополнительные помощники PHP, такие как archivers/php55-bz2. Более новые версии (например, archivers/php56-bz2) не могут быть установлены, поскольку они сталкиваются со старыми, а старые не могут быть удалены, потому что соответствующих каталогов больше нет.

Как принудительно удалить старые помощники php55, чтобы я мог установить новые версии php56?

+0

Это принадлежит к ServerFault. – sepehr

+0

Действительно ли 'pkg delete -f' не работает для вас? –

+0

См. Мой ответ ниже. – patmin

ответ

0

Извлечение старого порта через pkg_delete не сработало («пакет не установлен»), с опцией -f удалена только запись в БД, которая до сих пор не разрешает установку нового пакета.

У меня, наконец, удалась деинсталляция pkg_deinstall. Полностью установленный новый пакет был удален с make deinstall перед установкой с помощью portmaster.

0

Чтобы перейти от PHP 5.5 до 5.6, вам необходимо вручную применить portmaster -o ко всем пакетам php55- *. Так, theorically, команда, как это может работать:

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-аэроропорт или php56-MySQL)
  • pecl- * пакеты могут также должны быть восстановлены (portmaster pecl, если они совместимы? - по-прежнему связаны с ABI перерывы между PHP 5 и 7)

Вот почему некоторые пользователи предпочитают деинсталлировать все старые пакеты php (pkg delete -R php55\*), прежде чем переустанавливать их в новой версии.