вторник, 30 августа 2011 г.

Обновление пакетами: что делать, если сломали перл

Решили поставить/обновить например glib? Если обновлять пакетами (например portinstall -PP devel/glib20), можно увидеть такое:


---> Checking for the latest package of 'devel/glib20'
---> Fetching the package(s) for 'glib-2.28.8' (devel/glib20)
---> Fetching glib-2.28.8
/var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz 100% of 3095 kB 724 kBps
---> Downloaded as glib-2.28.8.tbz
---> Identifying the package /var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz
---> Saved as /usr/ports/packages/All/glib-2.28.8.tbz
---> Found a package of 'devel/glib20': /usr/ports/packages/All/glib-2.28.8.tbz (glib-2.28.8)
---> Located a package version 2.28.8 (/usr/ports/packages/All/glib-2.28.8.tbz)
---> Installing 'glib-2.28.8' from a package
---> Installing lang/perl5.12 as dependency required by glib-2.28.8
---> Checking for the latest package of 'lang/perl5.12'
---> Fetching the package(s) for 'perl-5.12.4_1' (lang/perl5.12)
---> Fetching perl-5.12.4_1
/var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz100% of 14 MB 986 kBps 00m00s
---> Downloaded as perl-5.12.4_1.tbz
---> Identifying the package /var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz
---> Saved as /usr/ports/packages/All/perl-5.12.4_1.tbz
---> Found a package of 'lang/perl5.12': /usr/ports/packages/All/perl-5.12.4_1.tbz (perl-5.12.4_1)
---> Located a package version 5.12.4_1 (/usr/ports/packages/All/perl-5.12.4_1.tbz)
---> Installing 'perl-5.12.4_1' from a package
---> Installing the new version via the package
pkg_add: package 'perl-5.12.4_1' conflicts with perl-5.10.1_3
pkg_add: -f specified; proceeding anyway
Removing stale symlinks from /usr/bin...
Removing /usr/bin/perl
Removing /usr/bin/perl5
Done.
Creating various symlinks in /usr/bin...
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl5
Done.
Cleaning up /etc/make.conf... Done.
Spamming /etc/make.conf... Done.
Cleaning up /etc/manpath.config... Done.
Spamming /etc/manpath.config... Done.

Первое - НЕ ПАНИКОВАТЬ! Не пытаться срочно переустановить старый перл и так далее. Он на месте и полностью рабочий, и чинится за минуту.
1) Узнать старую версию перла
pkg_info |grep perl-5
Теперь для каждого смотрим информацию о зависимостях (Required by:)
pkg_info perl-5.10.1_3
У которого их много - это наша старая версия.

2) восстановить симлинки
cd /usr/bin/
unlink perl*
ln -s /usr/local/bin/perl5.10.1 perl
ln -s /usr/local/bin/perl5.10.1 perl5
На самом деле, надо ещё поправить: в /usr/local/bin перезаписывается perl и perl5, причём perl5 симлинк, а вот perl - файл.
rm /usr/local/bin/perl
unlink /usr/local/bin/perl5
cp /usr/local/bin/perl5.10.1 /usr/local/bin/perl
ln -s /usr/local/bin/perl5.10.1 /usr/local/bin/perl5

vi /etc/make.conf
исправляем версию перла..
vi /etc/manpath.config
тоже самое

Всё, перл вернули назад.

1 комментарий:

  1. Сталкивался пару раз. Обычно решается с помощью pkg_upgrade -o ___ ___ (нужен bsdadminscrits) и обновлением пары пакетов (vim, к примеру).

    ОтветитьУдалить