При установке программ из портов freebsd нередко компилируются и ставятся их зависимости. Если для самой программы пакет собирается одной командой
make packageто сборка пакетов зависимостей превращается или в ручной обход требуемых программ или в длительное ожидание конца обработки команды
make package-recursiveПоследняя команда начинает тупо компилировать все зависимости и пытаться ставить их в систему, в том числе установленные вместе с программой.
Для решения этой проблемы я сделал следующее:
- В файл
/etc/make.conf
добавить параметрWRKDIRPREFIX=/tmp/work
указывающий системе компилировать программы из портов в папке/tmp/work
. - Cохранить скрипт под именем
pkg-recursive.sh
:#!/bin/sh
if [ -z "$WRKDIRPREFIX" ];
then {
# WRKDIRPREFIX берем из make.conf
wrkdir=`grep -oE 'WRKDIRPREFIX=[^ ]+' /etc/make.conf | sed 's/WRKDIRPREFIX=//'`
if [ -z "$wrkdir" ];
then {
# WRKDIRPREFIX не задан ни в переменной окружения ни в make.conf
echo No WRKDIRPREFIX variable defined;
exit;
} fi;
}
else {
# WRKDIRPREFIX задан в переменной окружения
wrkdir=$WRKDIRPREFIX;
} fi;
# Меняем текущую директорию на директорию сборки и просматриваем его
cd $wrkdir/usr/ports && ls -d */* | \
while read pkg;
do {
if [ -f $wrkdir/usr/ports/$pkg/work/.install* ] && [ ! -f $wrkdir/usr/ports/$pkg/work/.package* ];
then {
# Условие срабатывает если программа установлена в систему и пакет не еще не собран.
# Команда printf "\t\n" принудительно завершает режим конфигурирования программы
# (выходит из make config).
cd /usr/ports/$pkg && (printf "\t\n" | make package);
} fi;
} done - Сделать скрипт исполняемым
chmod +x pkg-recursive.sh
- Установить и собрать пакет программы командой
make package
- Выполнить скрипт.
4 комментария:
Спасибо за скриптик.
Тема скриптописания очень интересует.
Например? :)
Привет, а расскажи как теги pre и code заставить как у тебя выглядеть.
Смотри вот тут :)
Отправить комментарий