Динамическое переназначение переменных в make.conf в зависимости от некоторых условий[РЕШЕНО]

Всем привет!

Настроил я тут должным образом distcc и родился у меня такой вопрос:
как настроить portage на нетбуке так, чтобы при нахождении в домашней локальной сети, он брал из make.conf переменные FEATURES и MAKEOPTS с одними значениями, а при нахождении в любой другой сети другие... как это выглядело бы в виде bash-скрипта я прекрасно представляю, но к сожалению make.conf не bash-скрипт, поэтому всякие if-then-else там не катят :(

этим кто-нибудь когда-нибудь озадачивался? :)

Решение:
решение как всегда пришло с неожиданной стороны :) как оказалось средствами самого portage это сделать невозможно, поэтому:
1. пишем скрипт-обертку для emerge, например:

$ cat /usr/local/bin/myemerge
#!/bin/bash

if $(netstat -rn | awk '{print $2}' | grep "192.168.1.250" 1>/dev/null 2>&1) ; then
        MAKEOPTS="-j13" FEATURES="distcc" emerge $*
else   
        MAKEOPTS="-j2" emerge $*
fi

2. создаем псевдоним для команды emerge стандартными средствами bash, в котором заставляем вызывать наш скрипт

$ echo "alias emerge='myemerge'" >> /root/.bash_profile

3. перезаходим в систему и вуаля :)

make.conf отчасти и есть

make.conf отчасти и есть bash
Можно попробовать, напишитите сей скрипт, как вы его представляете, и просто укажите в make.conf: bash /some/func.sh
И в выхлопе скрипта должно быть две строки, собственно FEATURES и MAKEOPTS с значениями.
Так же можно попробовать в /etc/portage/bashrc указать на путь к скрипту.
P.S. Пользую paludis
P.S.S ССЗБ ;))

Все мы, рано или поздно, будем там...

666joy666 написал(а): P.S.S

666joy666 написал(а):
P.S.S ССЗБ ;))

в чем?
просто когда я например в домашней сети, то мне нужен FETURES="distcc" и MAKEOPTS="-j13", а когда в другой сети, то -j13 станоится реальной проблемой, т.к. на нетбуке делать становится ничего невозможно :( да и вывод захламляется сообщениями о неудачной связи с сервером distcc... лазать каждый раз править make.conf неудобно... не обновляться, тоже не хочется... нетбук почти всегда со мной...

да и больше всего меня интересует решение как академической задачи ;)

666joy666 написал(а): Можно

666joy666 написал(а):
Можно попробовать, напишитите сей скрипт, как вы его представляете, и просто укажите в make.conf: bash /some/func.sh

добавил в make.conf

bash /etc/portage/bashrc

получил:

# emerge --info
ParseError: Invalid token '/etc/portage/bashrc' (not '='): /etc/make.conf: line 8 in /etc/make.conf
666joy666 написал(а):
Так же можно попробовать в /etc/portage/bashrc указать на путь к скрипту.

скажу больше - там даже сам скрипт написан... толку ноль :( там только функции из файлов *.ebuild переназначать получается...

Не, не так :)

В файле /etc/conf.d/net, в случае поднятия того или инаго ынтырфейса ( postup() ),
запускаем другой скрипт; назовём его... ммм... ну как нибудь :D
в котором после ряда проверок, плясок с бубнами и прочее, применим приём "карате-до":
sed -e "s:MAKEOPTS=\"-jx\":MAKEOPTS=\"-jy\":" -i /etc/make.conf
Что-то в этом роде ;) Ну типа: вариация на тему - "палки и подпорки в любиимой OS"

спасибо, думал над этим ;)

спасибо, думал над этим ;) только интерфейс поднимается один раз, а потом выбор сети производится посредством графической утилиты (networkmanager, wicd, wpa_gui), в связи с этим нужно "определяться с переменными" непосредственно в процессе запуска emerge...

продолжаю курить маны в надежде, что невнимательно читал их раньше :)

Ну а если...

Я так думаю, что можно использовать alias'ы для интерфейсов, - каждый со
своим набором переменных...

к сожалению, если

к сожалению, если portage/emerge не находит объявление переменных в make.conf, то он "делает" unset ПЕРЕМЕННАЯ :( из переменных окружения воспринимаются только ROOT и PORTAGE_CONFIGROOT :(

пока склоняюсь к тому, что нужно написать скрипт для eselect, который менял бы символическую ссылку make.conf на один из двух конфигурационных файлов :(

В таком случае, как мне кажется,

eselect как бы и не нужен, так как создание ссылки/переименование и т.д. можно
предусмотреть с помощью других средств.
Ну а графические утилиты (networkmanager, wicd, wpa_gui) каке-нибудь return'ы в по шине D-BUS,
например, выдают (у меня с этим провал в знаниях)? Я к чему веду - может быть можно HAL заставить
выполнять скрипт?
Вообще-то идея может быть интересной, пользователем ноутбуков:
при работе от батареи наступает событие acpid, который в свою очередь запущает
скрипт, добавляющий в /etc/make.conf опцию:
EMERGE_DEFAULT_OPTS="--fetchonly", ибо неча на батарейке компиляцией заниматься.
Что-то в етом роде и - дико извиняюсь :)

willy написал(а): Вообще-то

willy написал(а):
Вообще-то идея может быть интересной, пользователем ноутбуков:

спасибо! хоть кто-то понял, что любое решение кому-нибудь может пригодиться ;) а то ССЗБ - ССЗБ :))))
решение я нашел, но не средствами portage, а элементарными средствами bash :) даже стыдно, что сразу в голову не пришло :-/

может признаешься ?

может признаешься ?

в чем?

в чем?

Что ему признавать?

iov написал(а):
может признаешься ?

прошу прощения, но "закос" под пророка по-моему, провалился... или я не так Вас понял.
Если имеете интересное решение этого вопроса, с вменяемым парсером конфигов, использованием
регэкспов и чётко продуманной логикой, лично я был бы рад увидеть плоды Ваших трудов,
иначе - получается не совсем конструктивная беседа.
Заранее извиняюсь, но солвер на bash'е видится мне зелоо проблематичным.

я сделал всё как сказано в

я сделал всё как сказано в FAQ (расписал все в первом же сообщении!!!) Что еще я должен раскрыть и в чем еще признаться? О_о

$ cat

Цитата:
$ cat /usr/local/bin/emerge-helper
#!/bin/sh

if $(netstat -rn | awk '{print $2}' | grep "192.168.1.250" 1>/dev/null 2>&1) ; then
export MAKEOPTS="${MAKEOPTS} -j13"
export FEATURES="${FEATURES} distcc"
else
export MAKEOPTS="${MAKEOPTS} -j2"
fi

Цитата:
echo 'source /usr/local/bin/emerge-helper' >> /etc/make.conf

Ну вот как-то так.

1. оператором source можно

1. оператором source можно подцепить только файл настроек, подобный make.conf ... т.е. башевый скрипт так подцепить нельзя, иначе можно было бы писать команды прямо в make.conf
2. как я уже писал выше, portage воспринимает только две переменные окружения ROOT и PORTAGE_CONFIGROOT... после вызова emerge --info видно такую строку:

Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, MAKEOPTS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

если этих переменных нет в командной строке или в файле mkae.conf, то их значения сбрасываются... полагаю, что это некоторая защита от дурака :)))

Theli написал(а): 2. как я

Theli написал(а):
2. как я уже писал выше, portage воспринимает только две переменные окружения ROOT и PORTAGE_CONFIGROOT... после вызова emerge --info видно такую строку:

Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, MAKEOPTS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

если этих переменных нет в командной строке или в файле mkae.conf, то их значения сбрасываются... полагаю, что это некоторая защита от дурака :)))

egorov-ey ~ # emerge --info | grep MAKEO
MAKEOPTS="-j4"
egorov-ey ~ # export MAKEOPTS=-j10
egorov-ey ~ # emerge --info | grep MAKEO
MAKEOPTS="-j10"

блин, косяк :(

блин, косяк :(

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".