Ну тогда публикую с некоторыми комментариями.
Имя для этой службы я слямзил у пакета
ncpmount (которым пользовался раньше, но который ныне устарел и в состав основного дистрибутива SLE-11 уже не входит; хотя его можно найти на диске SDK для SLE-11). Соответственно, у стартап-скриптов для тех служб-демонов, которые от него зависят (и должны запускаться позже), в блоке заголовков в строке "Required-Start:" должна быть ссылка на ncpmount.
Переменные
NW* относятся к пользователю eDirectory, которым делается подключение.
В переменной
LXUser задаётся имя Linux-пользователя, от которого делается логин. По умолчанию (в свойствах клиента можно настроить иначе) именно в его домашней директории "мапятся диски" при работе новелловского логин-скрипта - т.е. создаются соответствующие символические ссылки. Команда
su запускает логин от этого пользователся и нужна даже для пользователя root, т.к. корректно выставляет переменную
HOME (на момент работы скрипта при перезагрузке машины эта переменная выставлена не в "
/root", а просто в "
/").
Добавление пути "
/opt/novell/ncl/bin" к переменной
PATH перед логином - не прихоть, а необходимость: без этого не отрабатывают мапы.
Далее - собственно, файлы.
Файл
/etc/sysconfig/ncpmount содержит настройки - переменные, которые можно выставить и вручную, но удобнее через YaST -> System -> /etc/sysconfig Editor. К тому же при этом они корректно обрабатываются утилитой SUSEconfig. Этот файл не должен иметь доступов по чтению для кого-либо, кроме пользователя
root, поскольку содержит в открытом виде все креденшиалсы (включая пароль). У меня он имеет владельца/группу root/root и права доступа 0600 (rw-------).
- Код: Выделить всё
## Path: Network/Novell/ncpmount
## Description: Credentials for eDirectory user (used by /etc/init.d/ncpmount script)
## ServiceRestart: ncpmount
## Type: string("root")
## Default: "root"
#
# Linux user account for starting connection
#
LXUser="root"
## Type: string
## Default: ""
#
# eDirectory tree to connect
#
NWTree="MYTREE"
## Type: string
## Default: ""
#
# Context of eDirectory user
#
NWContext="MYORG"
## Type: string
## Default: ""
#
# Name of eDirectory user (without of context)
#
NWUser="arcserve"
## Type: string
## Default: ""
#
# Password of eDirectory user
#
NWPassword="12345678"
## Type: string("-r","-P ProfileName","-L LoginscriptFileName","")
## Default: "-r"
#
# Login Script to run.
# The "-r" value means to run the standard login script for user.
# Use "-P ProfileName" or "-L LoginscriptFileName"
# for alternative login scripts.
# Use empty value for ignoring any login scripts at all.
#
NWScript="-r"
Второй файл - сам скрипт
/etc/init.d/ncpmount (он должен быть выполняемым для root-а и не иметь прав записи для остальных, например - root/root 0755 rwxr-xr-x). После этого можно будет сделать необходимые ссылки на этот файл командой
insserv ncpmount .
- Код: Выделить всё
#! /bin/sh
# Copyright (c) 2010 Constantin Oshmyan
#
# Author: Constantin Oshmyan
#
# Revision History:
# 02-Sep-2010: Initial revision
#
# /etc/init.d/ncpmount
#
### BEGIN INIT INFO
# Provides: ncpmount
# Required-Start: $remote_fs $network $syslog $named novfsd
# Required-Stop: $network $syslog
# Should-Start: novell-xregd
# Default-Start: 3 5
# Default-Stop:
# Description: access to Novell NetWare servers via Novell Client for Linux
### END INIT INFO
. /etc/rc.status
[ -f /opt/novell/ncl/bin/nwlogin ] || {
echo -n "The Novell Client for Linux is not installed"
rc_status -s
rc_exit
}
[ -f /etc/sysconfig/ncpmount ] && . /etc/sysconfig/ncpmount
ncp="no"
[ "$NWTree" -a "$NWContext" -a "$NWUser" -a "$NWPassword" ] && ncp="yes"
rc_reset
case "$1" in
start)
echo -n "Starting Netware interconnection"
if [ "$ncp" = yes ] ; then
#Set the environment variables. HOME, NWPassword and PATH are
#necessary for correct login and map drives via login script.
#HOME variable is taken by "su" utility from the /etc/passwd file
export NWPassword
echo $PATH|grep -q '/opt/novell/ncl/bin' || PATH=${PATH}:/opt/novell/ncl/bin
su $LXUser -c "nwlogin -t \"$NWTree\" -c \"$NWContext\" -u \"$NWUser\" $NWScript -E"
rc_status -v
else
rc_status -u
fi
;;
stop)
echo -n "Stopping Netware interconnection"
if [ "$ncp" = yes ] ; then
su $LXUser -c "/opt/novell/ncl/bin/nwlogout -a"
rc_status -v
else
rc_status -u
fi
;;
status)
echo -n "Checking for logged in status"
su $LXUser -c "/opt/novell/ncl/bin/nwconnections | grep -q -i \"$NWTree\"" || rc_failed 3
rc_status -v
;;
restart)
$0 stop
$0 start
# Remember status and be quiet
rc_status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
rc_exit