[sisyphus] OpenVPN: таймаут для пароля на сертификат

Michael A. Kangin =?iso-8859-1?q?mak_=CE=C1_rsmu=2Eru?=
Вс Окт 12 10:36:24 MSD 2008


On 11 октября 2008 Nikolay A. Fetisov wrote:

> > Вот было бы круто, если бы и сервис openvpn, жаждя пароля, позволял
> > оставшимся сервисам запускаться в фоне параллельно.
>
> Для этого как минимум для начала потребуется переход на
> систему с параллельным запуском сервисов. Хотя и потом вряд ли
> получится.

Ну почему же...


> И опять же - данный момент не является чем-либо специфичным для
> OpenVPN. Аналогичные проблемы можно словить и со всем остальным, что
> использует сертификаты SSL.

Именно. Более того - любой сервис имеет потенциальную возможность встать в 
позу зю и помешать нормальной инициализации системы. На моей памяти 
еще /etc/init.d/ntpd крысятничал попыткой во что-бы то ни стало 
синхронизировать время при старте, несмотря на недоступность сети. Ну там 
хоть таймаут был минутки на три...

Я хочу сказать, что проблема более системная и общая, мои кривые ручонки вкупе 
с OpenVPN и сертификатами с паролями лишь некоторые её проявления. :)

ИМХО нужен вотчдог на старт сервисов. Дающий некоторый разумный таймаут (да 
хоть 5 минут, хоть пол-часа) на инициализацию, а затем прибивающий 
неудачнегов.

В качестве мерзкого, но рабочего концепта могу предложить:
------------- 
--- /etc/rc.d/init.d/functions.bak      2008-10-11 22:03:31 +0400
+++ /etc/rc.d/init.d/functions  2008-10-12 01:28:30 +0400
@@ -215,6 +215,11 @@
        [ -z "$ANNOUNCE" ] || msg_starting "$DISPNAME"

 # Actually start the daemon.
+       [ -n "$WATCHDOG_TIME" ] && {
+               /bin/sh -c "sleep $WATCHDOG_TIME; killall initlog" &
+               killer_pid=$!
+       }
+
        if [ -z "$SU" ]; then
                initlog $INITLOG_ARGS -n "$BASENAME" -c "start-stop-daemon 
$FLAGS -- $*"
        else
@@ -223,6 +228,8 @@
        fi
        STATUS=$?

+       [ -n "$WATCHDOG_TIME" ] && kill $killer_pid
+
        if [ $STATUS = 0 ]; then
                [ -z "$LOCKFILE" ] || touch "$LOCKFILE"
                [ "$BOOTUP" != verbose ] || echo -n " $DISPNAME "
----------------

Переменную $WATCHDOG_TIME можно определить в /etc/sysconfig/init, например
WATCHDOG_TIME=1m

-- 
wbr, Michael A. Kangin
OIOS, RSMU


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