[devel] coldplug

Денис Смирнов =?iso-8859-1?q?mithraen_=CE=C1_altlinux=2Eru?=
Вт Авг 30 12:29:29 MSD 2005


Проблема:

Есть новый установки дистрибутива, хотелось бы при их установке
автоматически определять список требуемых модулей, и прописывать их в
/etc/modules. Соответственно если после этого будет обновлён hotplug и
libhw, и "вдруг" для имеющегося железа изменится в его базе соответствие
модулей, не хотелось бы чтобы производились какие-либо лишние изменения.

При этом установка нового оборудования должна отрабатывать корректно.

Решение:

Скрипт, поверх pciscan -r, который сам пропишет модули в /etc/modules, что
весьма удобно.

Скрипт не трогает старые записи (чтобы сохранять порядок загрузки
модулей), исключительно добавляя новые при необходимости.

Процедура добавления выглядит так:
 - сначала формируем временный файл со списком
 - если в нём что-то есть -- _добавляем_ это прямо в /etc/modules.

Скрипт в аттаче.

Скоро в сизиф уйдёт пакет с этим скриптом (у меня он, видимо, будет одной
из системообразующих компонент).

-- 
С уважением, Денис

http://freesource.info
----------------------------------------------------------------------------
Посмотрите MTU на интерфейсах.
Фрагментация IP-пакетов разрешена?

Всё, мой телепатический модуль перегрелся.
		-- alb in community@

----------- следующая часть -----------
#!/bin/sh
# coldplug	Adding new modules to /etc/modules
#
# chkconfig: 2345 29 69
# description:	Script for adding new modules to /etc/modules, \
#		for don't depend to hotplug correctly works
# processname: coldplug
##config: /etc/template.conf
##pidfile: /var/run/template.pid
#=============================================================================#
#    				Add modules for loading to modules.conf					  #
#=============================================================================#
# (c) Denis Smirnov <mithraen на freesource.info>
#=============================================================================#
# + must be run _before_ sound
# + must be run _before_ hotplug
# + must be run _after_ mounting /usr (for comm and uniq utilites)
set +e

WITHOUT_RC_COMPAT=1

# Source function library.
. /etc/init.d/functions

#PIDFILE=/var/run/template.pid
#LOCKFILE=/var/lock/subsys/template
RETVAL=0

start()
{
T_OLD=`mktemp`
T_NEW=`mktemp`
T_DIFF=`mktemp`

cat /etc/modules \
	| /bin/grep -v '^#' \
	| /bin/grep . \
	| /bin/sort \
	| /usr/bin/uniq \
	> $T_OLD

# Get list for PCI-card drivers
/usr/bin/pciscan -r \
	| /bin/sort \
	| /usr/bin/uniq \
	> $T_NEW

/usr/bin/comm -13 $T_OLD $T_NEW  > $T_DIFF
/bin/rm -f $T_OLD $T_NEW

if [ -s $T_DIFF ]; then
	echo "# Added by coldplug @ `date -I`" >> /etc/modules
	cat $T_DIFF >> /etc/modules
fi

	RETVAL=$?
	return $RETVAL
}

stop()
{
#	stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user root -- template
	RETVAL=$?
	return $RETVAL
}

restart()
{
#	stop
	start
}

reload()
{
#	msg_reloading template
#	stop_daemon --pidfile "$PIDFILE" --expect-user root -HUP -- template
	RETVAL=$?
	return $RETVAL
} 

# See how we were called.
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	reload)
		reload
		;;
	restart)
		restart
		;;
	condstop)
		if [ -e "$LOCKFILE" ]; then
			stop
		fi
		;;
	condrestart)
		if [ -e "$LOCKFILE" ]; then
			restart
		fi
		;;
	condreload)
		if [ -e "$LOCKFILE" ]; then
			reload
		fi
		;;
	status)
		status --pidfile "$PIDFILE" --expect-user root -- template
		RETVAL=$?
		;;
	*)
		msg_usage "${0##*/} {start|stop|reload|restart|condstop|condrestart|condreload|status}"
		RETVAL=1
esac



Подробная информация о списке рассылки Devel