Используем portdowngrade на примере

Возникла необходимость откатить один из портов FreeBSD, а именно eAccelerator, с версии 0.9.6.1 до 0.9.5.3. Связано это с удалением пользовательских функций кэширования начиная с версии 0.9.6-rc1. Для решения подобной задачи как раз подойдет утилита portdowngrade.
Без неё мы должны выполнить следующие действия:
1. Отследить изменения порта в CVS репозитории FreeBSD
2. По комментариям найти все файлы предыдущего релиза (пример ревизий Makefile для eAccelerator)
3. Загрузить эти файлы и правильно их расположить в дереве портов FreeBSD
4. Используя стандартные механизмы управления портами установить порт
Утилита portdowngrade сама анализирует историю заданного порта и показывает список изменений. Остается лишь выбрать, какую из предыдущих версий порта мы хотим установить. Таким образом, portdowngrade автоматизирует всю, описанную выше, последовательность действий, от осмотра CVS-репозитория, до копирования нужных файлов в дерево портов. Рассмотрим как происходит откат порта к предыдущей версии на примере eAccelerator.
Установка portdowngrade:
Переходим в каталог порта, запускаем сборку:
$ make
И сразу получаем сообщение:
(e.g. make DEFAULT_CVS_SERVER=":pserver:anoncvs@anoncvs. ... .FreeBSD.org:/home/ncvs" install)
if you want to use a special CVS server as default. See
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/anoncvs.html
for a list of possible cvs server
Нам предлагают остановить сборку порта и и выполнить её с указанием анонимного CVS сервера по умолчанию. Так же дается ссылка на страницу Handbook, где есть список этих серверов. По собственному опыту могу сказать, что лучше брать сервера из английской версии Handbook, потому как в русской версии информация далека от действительности. Я не стал указывать CVS сервер по умолчанию (возможная недоступность и прочие факторы). Его можно будет задать в параметрах командной строки при запуске portdowngrade.
Устанавливаем
Установка завершена.
Использование portdowngrade:
Переходим к дереву портов
Запускаем portdowngrade
$ portdowngrade -s :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs www/eaccelerator
Не забываем указать CVS сервер (параметр -s) и имя порта с категорией, который будем откатывать.
Дополнительные параметры командной строки можно посмотреть в man portdowngrade.
Видим следующее:
Please note, that nothing is changed in the ports tree
unless it is explicitly permitted in step 6!
Seeking port www/eaccelerator ... found: www/eaccelerator
Step 1: Checking out port from CVS repository
CVS root directory: :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs
Step 2: Reading the port history from the CVS repository
Step 3: Analyzing the port history from the CVS repository
Step 4: Load port version numbers and present results
Keys: : next page d : details
p : previous page
: leave presentation and downdgrade if wanted
=================================================================
number date portversion comment
1 2010/06/01 08:37:37 0.9.6.1 Update to 0.9.6.1 release.
2 2010/04/11 08:10:38 0.9.6 Update to 0.9.6 release:
3 2008/06/18 12:26:58 0.9.5.3 Update to 0.9.5.3 release.
4 2008/02/11 07:12:33 unknown Enable shared memory and content caching api.
.........................................................................................
48 2003/04/04 09:49:28 2.3.8 [New Port] Turck MMCache 2.3.6 (An opcode cache for PHP)
Total lines: 48. Command:
Собственно, мы получили список версий порта с номером, датой и комментарием. Нас интересует версия 0.9.5.3 (номер 3). Жмём «Ввод» («Enter»), вводим номер, соглашаемся с тем, что порт будет изменен:
Step 5: Checking out choosen date of the port from the CVS repository
Step 6: Modifying the port
Port: www/eaccelerator
at : 2008/06/18 12:26:58
Type 'yes' to bring the port to the state of the date above
or 'no' to exit without changing anything. Note, that this only changes
the port, not the installed software! yes or no:yes
The port has been set to the selected version.
Все, откат порта в дереве портов осуществлен.
Теперь можно установить этот порт стандартными средствами. Но для обновления портов я использую portupgrade.
Создаем новый файл базы данных INDEX.db в /usr/ports:
Устанавливаем eAccelerator:
P.S. Нужно помнить, что после следующего обновления дерева портов все изменения порта будут утеряны.
Похожие записи: