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

Leave a comment

You must be logged in to post a comment.