Динамическое переназначение переменных в 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
в чем?
просто когда я например в домашней сети, то мне нужен FETURES="distcc" и MAKEOPTS="-j13", а когда в другой сети, то -j13 станоится реальной проблемой, т.к. на нетбуке делать становится ничего невозможно :( да и вывод захламляется сообщениями о неудачной связи с сервером distcc... лазать каждый раз править make.conf неудобно... не обновляться, тоже не хочется... нетбук почти всегда со мной...
да и больше всего меня интересует решение как академической задачи ;)
666joy666 написал(а): Можно
добавил в make.conf
получил:
скажу больше - там даже сам скрипт написан... толку ноль :( там только функции из файлов *.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 написал(а): Вообще-то
спасибо! хоть кто-то понял, что любое решение кому-нибудь может пригодиться ;) а то ССЗБ - ССЗБ :))))
решение я нашел, но не средствами portage, а элементарными средствами bash :) даже стыдно, что сразу в голову не пришло :-/
может признаешься ?
может признаешься ?
в чем?
в чем?
Что ему признавать?
прошу прощения, но "закос" под пророка по-моему, провалился... или я не так Вас понял.
Если имеете интересное решение этого вопроса, с вменяемым парсером конфигов, использованием
регэкспов и чётко продуманной логикой, лично я был бы рад увидеть плоды Ваших трудов,
иначе - получается не совсем конструктивная беседа.
Заранее извиняюсь, но солвер на bash'е видится мне зелоо проблематичным.
я сделал всё как сказано в
я сделал всё как сказано в FAQ (расписал все в первом же сообщении!!!) Что еще я должен раскрыть и в чем еще признаться? О_о
$ cat
Ну вот как-то так.
1. оператором source можно
1. оператором source можно подцепить только файл настроек, подобный make.conf ... т.е. башевый скрипт так подцепить нельзя, иначе можно было бы писать команды прямо в make.conf
2. как я уже писал выше, portage воспринимает только две переменные окружения ROOT и PORTAGE_CONFIGROOT... после вызова emerge --info видно такую строку:
если этих переменных нет в командной строке или в файле mkae.conf, то их значения сбрасываются... полагаю, что это некоторая защита от дурака :)))
Theli написал(а): 2. как я
блин, косяк :(
блин, косяк :(