Home FreeBSD FreeBSD полезные мелочи
FreeBSD полезные мелочи

portupgrade

E-mail Печать PDF

portupgrade - `обновлялка` установленных портов.

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/tuning/portupgrade/

К вопросу об обновлении портов. Вопрос возник от народа - как обновляться. Странный вопрос - то, что касается портов, неплохо рассмотрено в хандбуке. Порыскав по сайту понял, тема пока не окучена, просто забыл, хотя сам давно и активно пользуюсь. Для обновления установленных портов есть утилита - portupgrade. /usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='portupgrade'
Port: portupgrade-2.0.1_1,1
Path: /usr/ports/sysutils/portupgrade
Info: FreeBSD ports/packages administration and management tool suite
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps: ruby-1.8.4_4,1
R-deps: perl-5.8.8 ruby-1.8.4_4,1 ruby18-bdb1-0.2.2
WWW:

/usr/ports/>
/usr/ports/>cd /usr/ports/sysutils/portupgrade
/usr/ports/sysutils/portupgrade/>make && make install && make clean


Тутже вылезет синенькое окошко с выбором - какую БД использовать. Я выбрал BDB4 - с первой были проблемы на 4.11. (правда всё это делается под шохой, но тем не менее.)[X] BDB4 Use Berkeley DB >=2 as backend. (Use BDB 1.85 if off)


После установки (кстати, тянет он за собой немало - мегов на 10 выльется.) смотрим, что нам надо обновить:/usr/ports/sysutils/portupgrade/>pkg_version -v | grep "need"
fontconfig-2.3.2,1 < needs updating (port has 2.3.2_3,1)
freetype2-2.1.10_2 < needs updating (port has 2.1.10_3)
gettext-0.14.5 < needs updating (port has 0.14.5_2)
glib-2.8.6 < needs updating (port has 2.8.6_1)
john-1.6.40 < needs updating (port has 1.7_1)
jpeg-6b_3 < needs updating (port has 6b_4)
libdrm-2.0 < needs updating (port has 2.0_1)
libiconv-1.9.2_1 < needs updating (port has 1.9.2_2)
libmcrypt-2.5.7_1 < needs updating (port has 2.5.7_2)
libtool-1.5.18 < needs updating (port has 1.5.22_2)
mysql-server-5.0.18 < needs updating (port has 5.0.18_2)
perl-5.8.7_2 < needs updating (port has 5.8.8)
phpMyAdmin-2.7.0.2 < needs updating (port has 2.8.0.1)
png-1.2.8_2 < needs updating (port has 1.2.8_3)
popt-1.7 < needs updating (port has 1.7_1)
samba-3.0.21a,1 < needs updating (port has 3.0.21b,1)
t1lib-5.1.0,1 < needs updating (port has 5.1.0_1,1)
/usr/ports/sysutils/portupgrade/>


Немало. Руками вводить столько команд:portupgrade имя_порта ломало. Решил написать скриптик такого вида:#!/bin/sh

# Скриптик для обнввления всех портов,
# что нуждаются в обновлении

portupgrade="/usr/local/sbin/portupgrade"
pkg_ver="/usr/sbin/pkg_version"

# Получаем список портов, нуждающихся в обновлении
# и в цикле обновляем их
${pkg_ver} -v | grep "need" | awk '{print $1}' |
{
while read pkg_name
do
# обновляем порт, имя которого в переменной pkg_name
${portupgrade} ${pkg_name}
done
}
# примечание: при сборке и обновлении портов выводимтся намного
# технической инфы, куда меньше чем при запуске той же команды
# руками. Это к тому, чтоб не подумали, что "зависло" :)


Советую не увлекаться подобными скриптами, а думать прежде чем обновлять - т.к. при обновлении приложение, обычно останавливается, то подумайте, чем грозит остановка, например, MySQL? Или samba, если эта машина файл-сервер конторы? В данном случае это был сервер для архивации, и днём он не использовался - значит можно творить что душе угодно. Потому запускаем и ждём - времени уйдёт прилично, т.к. там пара тяжёлых приложений типа MySQL, perl`a и той же самбы. По окончании обновления имеем следующее:/usr/home/lissyara/>pkg_version -v | grep "need"
libtool-1.5.18 < needs updating (port has 1.5.22_2)
/usr/home/lissyara>pkg_info | grep libtool-
libtool-1.5.18 Generic shared library support script (1.5)
libtool-1.5.22_2 Generic shared library support script
/usr/home/lissyara/>


Ага. libtool в двух экземплярах... Либо чё-то глюкануло, либо так и задумано, ввиду того что не все приложения переваривают новые версии зависмостей, а хотят чё-то старое. Попробуем пофиксить БД:/usr/home/lissyara/>pkgdb -F
---> Checking the package registry database
Duplicated origin: devel/libtool15 - libtool-1.5.18 libtool-1.5.22_2
Unregister any of them? [no] yes
Unregister libtool-1.5.18 keeping the installed files intact? [no] yes
-> libtool-1.5.22_2 is kept.
--> Saving the libtool-1.5.18's +CONTENTS file as /var/db/pkg/libtool-1.5.22_2/
+CONTENTS.libtool-1.5.18
--> Unregistering libtool-1.5.18
--> Done.
[Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 71 packages found
(-1 +0) (...) done]
Stale dependency: mysql-server-5.0.18_2 -> ldconfig_compat-1.0_6
(misc/ldconfig_compat):
New dependency? (? to help):
^C


Прервал - куча ошибок из-за одного отсутствующего порта. Значит пойдём правильным путём, - доставим зависисмось, которую он хочет:/usr/home/lissyara/>cd /usr/ports/misc/ldconfig_compat
/usr/ports/misc/ldconfig_compat/>make && make install && make clean
===> Vulnerability check disabled, database not found
===> Extracting for ldconfig_compat-1.0_6
===> Patching for ldconfig_compat-1.0_6
===> Configuring for ldconfig_compat-1.0_6
===> Installing for ldconfig_compat-1.0_6
===> Generating temporary packing list
===> Checking if misc/ldconfig_compat already installed
===> Registering installation for ldconfig_compat-1.0_6
===> Cleaning for ldconfig_compat-1.0_6
/usr/ports/misc/ldconfig_compat/>pkgdb -F
---> Checking the package registry database
[Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 72 packages
found (-0 +1) . done]
/usr/ports/misc/ldconfig_compat/>


Всё. Никакой ругани, в системе стоят последние версии портов.

P.S. Насчёт того, какие опции выбирались при установке приложения, и какие ключи make использовались - можно не беспокоится, portupgrade пересоберёт с такими же опциями и ключами. Проблемы могут возникнуть только в случае если Вы руками правили Makefile - ибо это за Вас он сделать не сможет. В таком случае - тока руками - pkg_delete и в портах make && make install && make clean :)

P.S.2 надо заметить, что с portupgrade устанавливается далеко не два приложения:/usr/home/lissyara/>pkg_info -xL portupgrade | grep man
/usr/local/man/man1/pkg_deinstall.1.gz
/usr/local/man/man1/pkg_fetch.1.gz
/usr/local/man/man1/pkg_glob.1.gz
/usr/local/man/man1/pkg_sort.1.gz
/usr/local/man/man1/pkgdb.1.gz
/usr/local/man/man1/portcvsweb.1.gz
/usr/local/man/man1/portsclean.1.gz
/usr/local/man/man1/portsdb.1.gz
/usr/local/man/man1/portupgrade.1.gz
/usr/local/man/man1/portversion.1.gz
/usr/local/man/man5/pkgtools.conf.5.gz
/usr/local/man/man1/pkg_which.1.gz
/usr/local/man/man1/portinstall.1.gz
/usr/local/man/man1/ports_glob.1.gz
/usr/home/lissyara/>


И функциональность у проги весьма богатая.

P.S. По следам наделанного :) Совет - перед использованием portupgrade делайте пакеты, и обязательно сохраняйте конфиги! На выходных напоролся на два косяка:
1. courier-imap при обновлении затёр нахер мои конфиги. Хорошо они были почти один-в-один со статьёй на сайте.
2. MySQL у меня собрана с дефаулт чарсет и коллатион cp1251 - слетело всё - вместо русских символов везде вопросы были... Два раза пересобирал, пока вспомнил с чем у меня что было собрано. Причём и клиент тоже с нужной кодировкой пришлось пересобирать.

Обновлено 28.05.2010 13:46
 

Обновление дерева портов

E-mail Печать PDF

Использование утилиты CVSup

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/tuning/cvsup/

CVSup - это утилита для обновления исходных кодов ядра и самой сиcтемы, дерева портов и документации входящей в состав FreeBSD. C её помощью можно обновиться как до текущей стабильной ветки так и до одного из релизов. Вообще-то, в хандбуке эта тема довольно подробно разобрана, но тем не менее информации по этому вопросу в инете довольно мало. Здесь это изложено ради того, чтобы показать - порты нужно обновлять, и сделать это совсем несложно.
Всё что тут описано - делалось на системе FreeBSD 4.11, но отличия от других версий должны быть минимальны, если они будут вообще, во всяком случае в пределах всей 4-й ветки всё делается точно также, а пятую пока не использую - не нравиться она мне.../usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='cvsup'
Generating INDEX - please wait..^C
/usr/ports/>


Встревон. Нету индекса. Можно дать ему сделать его самостоятельно, но даже на 4 пне это занимает пару часов. Поэтому чтобы не мучать животину зазря надо это дело прервать (Ctrl-C) и скачать его:/usr/ports/>make fetchindex
INDEX.bz2 100% of 668 kB 19 kBps 00m00s
/usr/ports/>


Что тоже не есть хорошо. Скачается индекс для текущей версии портов... Обычно - прокатывает :) Ищем путь к порту:/usr/ports/>make search name='cvsup'
Port: cvsup-16.1h_2
Path: /usr/ports/net/cvsup
Info: General network file distribution system optimized
for CVS (GUI version)
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps: XFree86-libraries-4.5.0 expat-1.95.8_3 ezm3-1.2
fontconfig-2.2.3,1 freetype2-2.1.10_1 pkgconfig-0.17.2
R-deps: XFree86-libraries-4.5.0 expat-1.95.8_3 fontconfig-2.2.3,1
freetype2-2.1.10_1 pkgconfig-0.17.2

Port: cvsup-mirror-1.3_3
Path: /usr/ports/net/cvsup-mirror
Info: A kit for easily setting up a FreeBSD mirror site
using CVSup
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps:
R-deps: cvsup-without-gui-16.1h_2

Port: cvsup-without-gui-16.1h_2
Path: /usr/ports/net/cvsup-without-gui
Info: General network file distribution system optimized
for CVS (non-GUI version)
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps: ezm3-1.2
R-deps:

Port: fastest_cvsup-0.2.9_1
Path: /usr/ports/sysutils/fastest_cvsup
Info: Finds fastest CVSup server
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps:
R-deps: p5-PathTools-3.09 p5-Scalar-List-Utils-1.14,1
p5-Time-HiRes-1.72,1

/usr/ports/>


Я на серваке ГУИ не ставлю, потому выбираю /usr/ports/net/cvsup-without-gui. Если у Вас стоят иксы - значит надо просто cvsup ставить./usr/ports/>cd net/cvsup-without-gui
/usr/ports/net/cvsup-without-gui/>make && make install && make clean
===> Vulnerability check disabled, database not found
=> cvsup-snap-16.1h.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CV


Также будет вопрос от gettext что инсталлировать, я выбрал оба пункта - и файлы примеров и справку в html формате. Пригодится.
Он (CVSup) за собой тащит достаточно длинный список того что ему необходимо (суммарный объём скачанных файлов составил 28,2 метров) - /usr/ports/net/cvsup-without-gui/>pkg_info
expat-1.95.8 XML 1.0 parser written in C
ezm3-1.2 Easier, more portable Modula-3 distribution for building CV
gettext-0.14.1 GNU gettext package
gmake-3.80_2 GNU version of 'make' utility
libiconv-1.9.2_1 A character set conversion library
libtool-1.3.5_2 Generic shared library support script (version 1.3)
libtool-1.5.10 Generic shared library support script (version 1.5)


После установки копируем файл настроек и редактируем его:/usr/ports/net/cvsup-without-gui/>cd /usr/share/examples/cvsup/
/usr/share/examples/cvsup/>ls
README ports-supfile standard-supfile
cvs-supfile refuse www-supfile
doc-supfile refuse.README
gnats-supfile stable-supfile
/usr/share/examples/cvsup/>cp standard-supfile /usr/local/etc/supfile
/usr/share/examples/cvsup/>cd /usr/local/etc/
/usr/local/etc/>ee supfile


У меня он получился такой:# cvsup -g -L 2 /usr/local/etc/supfile
#
# Defaults that apply to all the collections
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=cvsup2.ru.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4_11
*default delete use-rel-suffix

# If your network link is a T1 or faster, comment out the following line.
*default compress

## Main Source Tree.
#
# The easiest way to get the main source tree is to use the "src-all"
# mega-collection. It includes all of the individual "src-*" collections.
#src-all
ports-all tag=.
#doc-all tag=.


Строка cvsup -g -L 2 /usr/local/etc/supfile сделана только по одной причине - память у меня жутко дырявая и постоянно в нём смотрю с какими опциями его надо запускать :) Какой выбрать сервер, с которого брать обновления - это ваше дело. Я нахожусь в России, поэтому выбрал cvsup3.ru.FreeBSD.org (вообще-то раньше я постоянно пользовался cvsup2.ru.FreeBSD.org - но последнее время он постоянно занят, поэтому я перешёл на cvsup3.ru.FreeBSD.org). Если Вы на камчатке и инет идёт, например, из японии - имеет смысл выбрать японский сервак. После чего можно запускать:/usr/ports/>rehash
/usr/ports/>cvsup -g -L 2 /usr/local/etc/supfile && make fetchindex
Parsing supfile "/usr/local/etc/supfile"
Connecting to cvsup2.ru.FreeBSD.org
Connected to cvsup2.ru.FreeBSD.org
Server software version: SNAP_16_1f
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
......................................


Первый раз на обновление всего дерева портов уходит довольно много трафика, входящего 14.4 - мегабайт, и исходящего 3.8 мег. В дальнейшем его будет гораздо меньше. Также, первое обновление самое долгое. У меня ушло почти 2 часа, и дело не в скорости линии (у меня 20кб/с - за 2 часа на ней можно выкачать 140 мегов), и не в скорости моего компа, тоже не слабый. Как я подозреваю сервак-то один а клиентов много. Он и неуспевает.
Вот, пожалуй и всё. Теперь у Вас свежая версия портов, и можно не волноваться за то, что устанавливаемое ПО давно устарело. Вообще, я завёл себе за правило - перед каждой установкой обновляю порты (разумеется если за один день надо установить 10 приложений, я их не обновляю 10 раз - вполне достаточно одного :)).

P.S. Вообще начиная с 5-ки появилась новая утилита portsnap - но она толи бестолковая какая-то, толи я дурак - но у меня она пытается всё архивное дерево портов затащить - 39 мегов... Нафик оно мне надо, если обновление с помощью cvsup выльется мне в пару мегов? Да и обновлять она может только порты, исходные коды системы не может....

Обновлено 28.05.2010 13:50
 


Страница 5 из 5.

  • Вопросы по поводу написанных статей можно обсудить в нашем сообществе в Вконтакте / Questions about written articles can be discussed in our community in Vkontakte Вопросы по поводу написанных статей можно обсудить в нашем сообществе в  Вконтакте / Questions about written articles can be discussed in our community in Vkontakte
Яндекс.Метрика