Возникла необходимость откатить один из портов FreeBSD, а именно eAccelerator, с версии 0.9.6.1 до 0.9.5.3. Связано это с удалением пользовательских функций кэширования начиная с версии 0.9.6-rc1.
Для решения подобной задачи как раз подойдет утилита portdowngrade.
Без неё мы должны выполнить следующие действия:
Утилита portdowngrade сама анализирует историю заданного порта и показывает список изменений. Остается лишь выбрать, какую из предыдущих версий порта мы хотим установить. Таким образом, portdowngrade автоматизирует всю, описанную выше, последовательность действий, от осмотра CVS репозитория, до копирования нужных файлов в дерево портов.
Рассмотрим как происходит откат порта к предыдущей версии на примере eAccelerator.
Переходим в каталог порта, запускаем сборку:
И сразу получаем сообщение:
Нам предлагают остановить сборку порта и и выполнить её с указанием анонимного CVS сервера по умолчанию. Так же дается ссылка на страницу Handbook, где есть список этих серверов. По собственному опыту могу сказать, что лучше брать сервера из английской версии Handbook, потому как в русской версии информация далека от действительности.
Я не стал указывать CVS сервер по умолчанию (возможная недоступность и прочие факторы). Его можно будет задать в параметрах командной строки при запуске portdowngrade.
Устанавливаем:
Установка завершена.
Переходим к дереву портов:
Запускаем portdowngrade:
Не забываем указать CVS сервер (параметр -s) и имя порта с категорией, который будем откатывать.
Дополнительные параметры командной строки можно посмотреть в man portdowngrade.
Видим следующее:
Собственно, мы получили список версий порта с номером, датой и комментарием. Нас интересует версия 0.9.5.3 (номер 3). Жмём «Ввод» («Enter»), вводим номер, соглашаемся с тем, что порт будет изменен:
Все, откат порта в дереве портов осуществлен.
Теперь можно установить этот порт стандартными средствами. Но для обновления портов я использую portupgrade.
Создаем новый файл базы данных INDEX.db в /usr/ports:
Устанавливаем eAccelerator:
P.S. Нужно помнить, что после следующего обновления дерева портов все изменения порта будут утеряны.
Для решения подобной задачи как раз подойдет утилита portdowngrade.
Без неё мы должны выполнить следующие действия:
- Отследить изменения порта в CVS репозитории FreeBSD.
- По комментариям найти все файлы предыдущего релиза (пример ревизий Makefile для eAccelerator).
- Загрузить эти файлы и правильно их расположить в дереве портов FreeBSD.
- Используя стандартные механизмы управления портами установить порт.
Утилита portdowngrade сама анализирует историю заданного порта и показывает список изменений. Остается лишь выбрать, какую из предыдущих версий порта мы хотим установить. Таким образом, portdowngrade автоматизирует всю, описанную выше, последовательность действий, от осмотра CVS репозитория, до копирования нужных файлов в дерево портов.
Рассмотрим как происходит откат порта к предыдущей версии на примере eAccelerator.
Установка portdowngrade
Переходим в каталог порта, запускаем сборку:
cd /usr/ports/ports-mgmt/portdowngrade make
И сразу получаем сообщение:
Press CTRL-C and define DEFAULT_CVS_SERVER (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.
Устанавливаем:
make install clean
Установка завершена.
Использование portdowngrade
Переходим к дереву портов:
cd /usr/ports
Запускаем portdowngrade:
portdowngrade -s :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs www/eaccelerator
Не забываем указать CVS сервер (параметр -s) и имя порта с категорией, который будем откатывать.
Дополнительные параметры командной строки можно посмотреть в man portdowngrade.
Видим следующее:
portdowngrade 0.6 by Heiner Eichmann 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: <space> : next page d : details p : previous page <enter> : 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»), вводим номер, соглашаемся с тем, что порт будет изменен:
Enter version number to change port to (0: exit): 3 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:
portsdb -Uu
Устанавливаем eAccelerator:
portupgrade -f eaccelerator
P.S. Нужно помнить, что после следующего обновления дерева портов все изменения порта будут утеряны.