Запуск сервера Samba в NetBSD с помощью daemontools
Содержание
Установка пакета
Установим пакет с сервером SAMBA:
# pkgin install samba
Настройка запуска nmbd
Создадим каталог будущего сервиса и подкаталог log
в нём:
# mkdir -p /service/.nmbd/log/
Создадим файл /service/.nmbd/run
, содержащий команды для запуска сервиса:
#!/bin/sh
exec 2>&1
if [ ! -f /usr/pkg/etc/samba/smb.conf ] ; then
echo "Missing /usr/pkg/etc/samba/smb.conf"
exit 1
fi
exec \
/usr/pkg/sbin/nmbd -FSs /usr/pkg/etc/samba/smb.conf
Создадим файл /service/.nmbd/log/run
, содержащий команды для запуска сервиса, который будет сохранять сообщения сервиса в журналы:
#!/bin/sh
exec \
setuidgid multilog \
multilog t /var/log/nmbd/
Выдадим созданным скриптам права на выполнение:
# chmod +x /service/.nmbd/run
# chmod +x /service/.nmbd/log/run
Создадим каталог для размещения журналов сервиса и сделаем его владельцем пользователя multilog
, от имени которого будет работать сервис, сохраняющий журналы:
# mkdir -p /var/log/nmbd/
# chown multilog:multilog /var/log/nmbd/
Для того, чтобы daemontools запустил сервис, переименуем каталог сервиса:
# mv /service/.nmbd /service/nmbd
Совместимость с rc
Создадим скрипт /etc/rc.d/nmbd
для управления работой сервиса, совместимый с системой инициализации rc, родной для NetBSD:
#!/bin/sh
# REQUIRE: DAEMON
# PROVIDE: nmbd
if [ -f /etc/rc.subr ]; then
. /etc/rc.subr
fi
name=nmbd
rcvar=$name
load_rc_config $name
if checkyesno $rcvar ; then
rm -f /service/$name/down
else
touch /service/$name/down
fi
status_cmd="/usr/pkg/bin/svstat /service/$name/ | sed -e 's,^/service/\(.*\)/: up (\(pid .*\)).*$,\1 is running as \2.,g; s,^/service/\(.*\)/: down .*,\1 is not running.,g'"
start_cmd="/usr/pkg/bin/svc -u /service/$name/ ; echo 'Starting $name.'"
stop_cmd="/usr/pkg/bin/svc -d /service/$name/ ; echo 'Stopping $name.'"
restart_cmd="/usr/pkg/bin/svc -du /service/$name/ ; echo 'Restarting $name.'"
extra_commands="status"
run_rc_command "$1"
Сделаем скрипт исполняемым:
# chmod +x /etc/rc.d/nmbd
Осталось включить в файле /etc/rc.conf
запуск сервиса при загрузке системы:
nmbd=YES
Настройка запуска smbd
Создадим каталог будущего сервиса и подкаталог log
в нём:
# mkdir -p /service/.smbd/log/
Создадим файл /service/.smbd/run
, содержащий команды для запуска сервиса:
#!/bin/sh
exec 2>&1
if [ ! -f /usr/pkg/etc/samba/smb.conf ] ; then
echo "Missing /usr/pkg/etc/samba/smb.conf"
exit 1
fi
if [ ! -d /var/db/samba ] ; then
echo "Missing /var/db/samba"
exit 1
fi
exec \
/usr/pkg/sbin/smbd -FSs /usr/pkg/etc/samba/smb.conf
Создадим файл /service/.smbd/log/run
, содержащий команды для запуска сервиса, который будет сохранять сообщения сервиса в журналы:
#!/bin/sh
exec \
setuidgid multilog \
multilog t /var/log/smbd/
Выдадим созданным скриптам права на выполнение:
# chmod +x /service/.smbd/run
# chmod +x /service/.smbd/log/run
Создадим каталог для размещения журналов сервиса и сделаем его владельцем пользователя multilog
, от имени которого будет работать сервис, сохраняющий журналы:
# mkdir -p /var/log/smbd/
# chown multilog:multilog /var/log/smbd/
Для того, чтобы daemontools запустил сервис, переименуем каталог сервиса:
# mv /service/.smbd /service/smbd
Совместимость с rc
Создадим скрипт /etc/rc.d/smbd
для управления работой сервиса, совместимый с системой инициализации rc, родной для NetBSD:
#!/bin/sh
# REQUIRE: DAEMON
# PROVIDE: smbd
if [ -f /etc/rc.subr ]; then
. /etc/rc.subr
fi
name=smbd
rcvar=$name
load_rc_config $name
if checkyesno $rcvar ; then
rm -f /service/$name/down
else
touch /service/$name/down
fi
status_cmd="/usr/pkg/bin/svstat /service/$name/ | sed -e 's,^/service/\(.*\)/: up (\(pid .*\)).*$,\1 is running as \2.,g; s,^/service/\(.*\)/: down .*,\1 is not running.,g'"
reload_cmd="/usr/pkg/bin/svc -h /service/$name/ ; echo 'Reloading $name.'"
start_cmd="/usr/pkg/bin/svc -u /service/$name/ ; echo 'Starting $name.'"
stop_cmd="/usr/pkg/bin/svc -d /service/$name/ ; echo 'Stopping $name.'"
restart_cmd="/usr/pkg/bin/svc -du /service/$name/ ; echo 'Restarting $name.'"
extra_commands="status reload"
run_rc_command "$1"
Сделаем скрипт исполняемым:
# chmod +x /etc/rc.d/smbd
Скрипт поддерживает дополнительную команду reload
для того, чтобы сообщить демону о необходимости применить изменения из файла конфигурации.
Осталось включить в файле /etc/rc.conf
запуск сервиса при загрузке системы:
smbd=YES