FreeBSD ports update
OS: FreeBSD 8.2
portsnap:
/etc/portsnap.conf не трогал, все по-умолчанию.
portsnap fetch
portsnap extract
portsnap fetch update
portupgrade:
1. Скачивание и установка дерева портов.
для начало перейти в:
cd /usr
скачаем архив дерева портов, это будет быстрее чем обновлять через cvsup, ищем ближайщый ftp провайдера/города/страны
качаем:
wget ‘ftp://ftp.ru.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz’
перед скачиваем нужно обратить внимание чтобы архив был создан не позже чем 1-2 дня назад (желательно), некоторые ftp редко синхронизируются!
rm -rf /usr/ports
можно не большой скрипт который быстрее разархивирует:
#!/usr/bin/perl
open (OPEN, “tar -tf ports.tar.gz |”);
while (my $p = ) {
system(“tar -xvzf ports.tar.gz $p > /dev/null &”);
}
close OPEN;
(если perl не стоит, то скорее всего он будет из мира, по-моему путь #!/usr/local/bin/perl )
PS вообще-то, portsnap лучше, чем архив качать и еще есть rsyns
2. Обновление и исправление базы данных портов.
бэкап базы пакетов:
cp /var/log/dpkgdb.db /home/dpkgdb.db
можно заархивировать каталоги /etc/ /usr/local/etc программа может затереть конфиг (осторожно с символическими ссылками чтобы не удалить случайно важную информацию)
pkgdb -aF
-a all, -F исправлять не спрашивая, считается безопасный метод
если база сбита, то на крайняк можно pkgdb -fu
3. Редактирование /etc/make.conf (оптимизация, etc).
по-моему: в FreeBSD 7.2, FreeBSD 8.0 CURRENT) в CFLAGS присутствует скрытый дефект: -ffast-math, который оборачиваектся для нас -funsafe-math-optimizations -fno-math-errno http://www.freebsd.org/cgi/query-pr.cgi?pr=137869
будьте внимательны
ee /etc/make.conf
WITCH=BATCH=yes # не выдавать окно в котором спрашивать с чем компилировать
BATCH=yes
# параллельная сборка портов, появилась с FreeBSD 7.2 лучше не включать
#
# MAKE_JOBS_SAFE=yes
# MAKE_JOBS_NUMBER=8
# FORCE_MAKE_JOBS=yes
# DISABLE_MAKE_JOBS=yes
# MAKE_JOBS_UNSAFE=yes
# FORCE_MAKE_JOBS=
#MAKE_JOBS_NUMBER!= let $$(sysctl -n kern.smp.cpus) \* 4
#
#.for port in \
# emacs-devel cross-binutils libgpg-error perl5.8 libthai \
# libiconv m17n-lib nasm tightvnc db47 subversion* \
# ghostscript8 pth cdrtools* w3m* xmp libslang2 ezm3 dcget libxml2 \
# vim gperf ffcall ORBit2 py-gtk2 xkeyboard-config ruby18 clisp \
# jdk16 p7zip zsh libsndfile openjdk6 gettext stumpwm
#
#. if ${.CURDIR:M*/${port}}
# MAKE_JOBS_UNSAFE=
#. endif
#.endfor
#
# оптимизация
# CPUTYPE=pentium4 # архитектура
# CFLAGS+=-g
# CFLAGS=-O2 -pipe -ffast-math -funit-at-a-time -fpeel-loops -ftracer
# -funswitch-loops -mmmx -msse -msse2 -march=pentium4 -mtune=pentium4
# COPTFLAGS=-O2 -pipe -ffast-math -funit-at-a-time -fpeel-loops -ftracer
# -funswitch-loops -mmmx -msse -msse2 -march=pentium4 -mtune=pentium4
# CXXFLAGS+=-fconserve-space
# NO_PROFILE=true
# LOCALIZED_LANG=ru
CPUTYPE=pentium4 # архитектура
CFLAGS=-O2 -pipe -funit-at-a-time -fpeel-loops -ftracer
-funswitch-loops -mmmx -msse -msse2 -march=pentium4 -mtune=pentium4
COPTFLAGS=-O2 -pipe -funit-at-a-time -fpeel-loops -ftracer
-funswitch-loops -mmmx -msse -msse2 -march=pentium4 -mtune=pentium4
CXXFLAGS+=-fconserve-space
NO_PROFILE=true
LOCALIZED_LANG=ru
# зеркало (указать свои)
MASTER_SITE_OVERRIDE?= \
ftp://ftp5.ua.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp7.ua.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.ua.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.gentoo.org.ua/distfiles/${DIST_SUBDIR}/ \
ftp://ftp2.ua.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp6.ua.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp8.ua.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.linux.kiev.ua/pub/Linux/Gentoo/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.lucky.net/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR} \
ftp://ftp3.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
ftp://ftp4.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.ntu-kpi.kiev.ua/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.univ.kiev.ua/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ \
ftp://ftp.univ.kiev.ua/pub/OS/FreeBSD/distfile/${DIST_SUBDIR} \
4. Простое обновление.
если portupgrade не стоит, то поставить:
(потянет ruby)
cd /usr/ports/sysutils/portupgrade && make && make install && make clean
в headbook’е написано:
portupgrade -a
в других источниках сразу, рекомендуют:
portupgrade -arR
чтобы пройтись вдоль всех зависимостей
5. Полезные опции portupgrade.
полезные опции в portupgrade:
-W не чистить порт после обновления;
-w не чистить порт перед обновлением;
-F для того что скачать все исходники сразу, если проблемы с интернетом: portupgrade -aFrR
опции -f устанавливает дальше все зависимости, если даже где-то ошибка, то пытается продолжить дальше…;
-l /var/log/pport.log – записывает последнюю ошибку;
-L %s::%s создает файл в текущем каталоге, в котором записывает весь вывод установленных портов.
2 полезные команды make:
1) cd /usr/ports/deve/icu && make run-depends-list покажет зависимости данного порта,
2) make all-depends-list – все зависимости и зависимости тех портов которые зависят от порта
есть один важный недостаток, бывает версия порта называется не совсем корректно, например cairo-1.8.6_1,1 и portupgrade может всегда писать что порт устаревший
6. Исправление некоторых проблем.
если обновилось php, то нужно обновить его библиотеки:
pkg_info | grep ‘^php5*’ | awk ‘{print $1}’ | xargs portupgrade -f
|| pkgdb -fFu && portsclean -CLPP
для perl часто тоже может понадобиться:
pkg_info | grep ‘^p5-*’ | awk ‘{print $1}’ | xargs portupgrade -f
|| pkgdb -fFu && portsclean -CLPP
так же есть скрипт perl-after-upgrade
Java (jdk*) прийдеться руками ставить
очистить порты и каталог distfile:
portsclean -CDD
UPD: Еще варианты:
cvsup -g -L 2 ports-supfile
portsdb -Uu
portversion -l “<" (сморим что устарело)
portupgrade -arR (сам абгрейд)
или
сначала посредством cvsup обновляем порты, потом в /usr/ports/ делаем
#make fetchindex
и напоследок
#portsdb -uf
а потом уже посредством portupgrade обнавляем установленые порты
или
pkgdb –force –update
pkgdb –fix (здесь лучше отвечать по дефолту,чтобы зависимости
востановить)
portupgrade
или
cvsup ports-supfile
portsdb -Uu
pkgdb -F (а лучше pkgdb -fu ?)
Что бы инсталировать порт надо:
cd /usr/ports/lang/php4-extensions
make config-recursive (что бы задать дополнительные опции)
Если я хочу вернуть “дефаулт” опции надо мне:
makе rmconfig-recursive
make install clean
Что бы удалить инсталированый порт надо:
pkg_delete php4-ext* (почему он мне не даёт удалить pkg_delete
php4-extensions1.0 ?)
Что бы апдейтит все инсталированые порты надо изпользовать portupgrade:
portupgrade -arRf , но после этой команды опять же не апдейтнулись все
пакеты. portupgrade сказал добавить -k , значит выходит для безопасного и рабочего
апдейта всех инсталированых портов изпользовать:
portupgrade -arRfк
А для отдельного порта вот так: #portupgrade -rRfк port.x.y
Ссылочки:
http://www.lissyara.su/articles/freebsd/tuning/fast_port_upgrade/
http://www.lissyara.su/articles/freebsd/tuning/portsnap/
http://bsdportal.ru/viewtopic.php?p=81723