Демоны и их окружение (в смысле... оси)

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

Аватара пользователя
ProDev
Сообщения: 12
ОС: Windows (а чо?) и FreeBSD

Демоны и их окружение

Сообщение ProDev »

FreeBSD 6
Суть проблемы :( :

Есть прога verlihub, при запуске проверяет переменную окружения VERLIHUB_CFG, в которой забит путь к ее конфигурационным файлам.
Переменная окружения забита в /root/.csh, вручную все прекрасно работает.
Когда загружается как демон при запуске, той переменной окружения нет и он ищет свои конфиги в других папках.

Где прописывается окружение для демонов? Кроме как /etc/login.conf пока вариантов нет, да и не проверял будет ли работать, не хочется для верли отдельный класс делать.

Также буду благодарен, если кто подкинет толковые электронные книги или документацию по данной тематике, т.к. мануалы поверхностные, а в инете нашел только цитаты с мануалов. Может я не там ищу?
Хде напесано, шо драва от венды не работают в ленуксе? Прачти емануаль и не пеши всякую чушь, обе поделки написоны на си, значет дрова можно с таким же успехом откомпилить и в ленуксе.
Спасибо сказали:
Jay
Сообщения: 57
ОС: FreeBSD, Kubuntu Linux

Re: Демоны и их окружение

Сообщение Jay »

Возможно, что переменную окружения в рутовом шелле можно выставить в файле /.profile.
В login.conf тоже должно работать.
Возможно, что проще будет модифицировать скрипт запуска указанной программулины.

Но все это не есть правильный путь. Я сейчас посмотрел в файлик /usr/ports/net-p2p/verlihub/files/verlihub.in и заметил там вот такую конструкцию:

Код: Выделить всё

: ${verlihub_configdir="`%%PREFIX%%/bin/vh_getcfg`"}

При инсталляции %%PREFIX%% заменится на /usr/local. Выходит, что в качестве пути к конфигам будет использоваться строка, которую вернет нечто по пути /usr/local/bin/vh_getcfg.
А вернуть оно по идее должно что-то типа /usr/local/etc/verlihub. Собственно, там и должны находиться конфиги, согласно принятой иерархии.
FreeBSD 6.2-REL, Kubuntu 6.06
pdaXrom r198 на Sharp Zaurus C1000
Спасибо сказали:
Аватара пользователя
ProDev
Сообщения: 12
ОС: Windows (а чо?) и FreeBSD

Re: Демоны и их окружение

Сообщение ProDev »

Jay писал(а):
06.07.2007 01:43
Возможно, что переменную окружения в рутовом шелле можно выставить в файле /.profile.
В login.conf тоже должно работать.
Переменная окружения прописана в /root/.cshmrc (точное название файла не помню), вручную никаких проблем, перезагружаюсь - переменной нет.
Немножко покурил мануал, вычитал, что демоны запускаются без входа в систему, посему файлы профиля не используются.
К тому же, если запускать демон не под рутом, то снижение привилегий происходит командой su. В мане написано, что в таком случае передается единственная переменная SHELL.
И что-то мне подсказывает, что действительно не происходит реального входа пользователя, т.к. команда su требует только имя пользователя, а пароль ей не нужен.

Еще мне не понятно, почему задание переменных окружения в ~/.profile, ~/.cshmrc работает, а в /etc/profile нет? хотя языковые параметры прокатывают :mellow: .

Jay писал(а):
06.07.2007 01:43
Возможно, что проще будет модифицировать скрипт запуска указанной программулины.
Содержимое файла verlihub.in, которое я поместил в /etc/rc.d/? С этим-то меньше всего проблем.

Jay писал(а):
06.07.2007 01:43
Но все это не есть правильный путь. Я сейчас посмотрел в файлик /usr/ports/net-p2p/verlihub/files/verlihub.in и заметил там вот такую конструкцию:
Суть скрипта такова: путь к конфигам узнается путем вызова скрипта vh_getcfg, после чего проверка на существование необходимых файлов. Просто изменил переменную configdir в скрипте vh_getcfg на свой путь и все :) .
Но, блин, програмулина verlihub не использует скрипты для выяснения пути к конфигам, в ней самой забиты пути /etc/verlihub, ~/.verlihub и чтение переменной окружения, хотя должна проверять и $prefix/etc/verlihub и др. как сказано в vh_install.

Вот такой гемор, мол или все по дефолту, или работать не буду. Думаю остановится на варианте "правка исходного кода, заменой /etc/verlihub на свой путь", легче всего.

В добавок, решил завести отдельного юзера для демона, добавил строчку в стартовом скрипте: verlihub_user="verlihub".
После чего напрочь отказывается при запуске писать pid процесса в pid-файл (echo $! > $pidfile), пишет пустые символы, хотя под root писал правильно.
Даже вырезка pid из команды ps после запуска (pid="ps -ax | grep ... "; start_postcmd="echo $pid > $pidfile") ничего не возвращает, хотя демон работает.
В результате не может остановить демон, т.к. нет pid процесса.
Пока еще новичек в этих $!, поэтому пришлось закоментировать использование pidfile, вроде работает корректно.

P.S. Поиск документации по данной тематике остается в силе, можно на англ. языке.
Хде напесано, шо драва от венды не работают в ленуксе? Прачти емануаль и не пеши всякую чушь, обе поделки написоны на си, значет дрова можно с таким же успехом откомпилить и в ленуксе.
Спасибо сказали:
Jay
Сообщения: 57
ОС: FreeBSD, Kubuntu Linux

Re: Демоны и их окружение

Сообщение Jay »

ProDev писал(а):
06.07.2007 10:35
Еще мне не понятно, почему задание переменных окружения в ~/.profile, ~/.cshmrc работает, а в /etc/profile нет? хотя языковые параметры прокатывают :mellow: .


Думаю, что чтение man csh и man sh поможет вам разобраться с этим вопросом :)

ProDev писал(а):
06.07.2007 10:35
Суть скрипта такова: путь к конфигам узнается путем вызова скрипта vh_getcfg, после чего проверка на существование необходимых файлов. Просто изменил переменную configdir в скрипте vh_getcfg на свой путь и все :) .
Но, блин, програмулина verlihub не использует скрипты для выяснения пути к конфигам, в ней самой забиты пути /etc/verlihub, ~/.verlihub и чтение переменной окружения, хотя должна проверять и $prefix/etc/verlihub и др. как сказано в vh_install.

Вот такой гемор, мол или все по дефолту, или работать не буду. Думаю остановится на варианте "правка исходного кода, заменой /etc/verlihub на свой путь", легче всего.


Посмотрел на скрипт внимательнее.. Похоже-таки да.. либо ошибка в verlihub (должна использовать то, что возвращает vh_getcfg), либо в скрипте (должен указывать, где искать конфиги).

ProDev писал(а):
06.07.2007 10:35
В добавок, решил завести отдельного юзера для демона, добавил строчку в стартовом скрипте: verlihub_user="verlihub".
После чего напрочь отказывается при запуске писать pid процесса в pid-файл (echo $! > $pidfile), пишет пустые символы, хотя под root писал правильно.
Даже вырезка pid из команды ps после запуска (pid="ps -ax | grep ... "; start_postcmd="echo $pid > $pidfile") ничего не возвращает, хотя демон работает.
В результате не может остановить демон, т.к. нет pid процесса.
Пока еще новичек в этих $!, поэтому пришлось закоментировать использование pidfile, вроде работает корректно.


Насколько я помню rcNG, *_user="" выполняет su перед запуском программы. Согласно man sh:
$! Expands to the process ID of the most recent background command executed from the current shell. For a pipeline, the process ID is that of the last command in the pipeline.

su может внести тут некоторую неопределенность.. Да и вообще, "echo $! > $pidfile" - это довольно своеобразный путь получения pid-файла. В общем, лучше обойтись без него. В этом случае, rcNG должно проверять статус программы по ее наличию в списке процессов.

Кстати, скрипт вызова должен был положить сам порт в каталог /usr/local/etc/rc.d. Из /etc/rc.d его лучше убрать. Не место там для пользовательских скриптов. Бывают исключения, но verlihub к ним явно не относится.

ProDev писал(а):
06.07.2007 10:35
P.S. Поиск документации по данной тематике остается в силе, можно на англ. языке.


Ну для начала вот:
  • Хендбук FreeBSD
  • man hier
  • man sh
  • man rc
  • man rc.conf
  • man rc.subr
FreeBSD 6.2-REL, Kubuntu 6.06
pdaXrom r198 на Sharp Zaurus C1000
Спасибо сказали: