OS

Добавление статического маршрута при запуске системы через StartupItems

Понадобилось мне при запуске OS X добавить статический маршрут. И всё бы хорошо, но сколько не бился - всё без толку, испытываю очередной вариант, перезапускаю сервер, проверяю - маршрута нет.

Уже начал думать, что в Lion поменялись механизмы работы с StartupItems. Но тут в Console.app заметил сообщение “add net 10.0.0.0: gateway 192.168.98.9: Network is unreachable” и всё стало на свои места.

Всё дело в том, что сетевые интерфейсы подымаются не сразу (что при DHCP, что при ручной установке адреса), а для добавления статического маршрута шлюз должен быть доступен. Добавил в скрипт задержку 10 секунд перед выполнением команды route - и всё получилось.

При прописывании StartupItems я отталкивался от статьи ”Disabling file access time updates using noatime in OS X” - она первая мне попалась под руку.

StartupItems

Создаю каталог для нового StartupItem

$ sudo mkdir /Library/StartupItems/ctrld_boot

Делаю описание скрипта (без него работать не будет)

$ sudo vim  /Library/StartupItems/ctrld_boot/StartupParameters.plist
{
	Description = "Ctrld Boot Script";
	Provides = ("ctrld_boot");
	OrderPreference = "None";
	Messages =
	{
		start = "Starting ctrld Boot Script";
		stop = "Stoping ctrld Boot Script";
		restart = "Restarting ctrld Boot Script";
	};
}

Пишу скрипт (обратите внимание на sleep 10 - не будет работать, замените 10 секунд, например, на 20):

$ sudo vim /Library/StartupItems/ctrld_boot/ctrld_boot
#!/bin/sh
. /etc/rc.common
case "$1" in
start)
	ConsoleMessage "Starting ctrld Boot: adding static route"
	sleep 10
	route add -net 10.0.0.0 -netmask 255.0.0.0 192.168.98.9
	;;
esac
exit 0

Делаю скрипт исполняемым:

$ sudo chmod 755 /Library/StartupItems/ctrld_boot/ctrld_boot

Перезапускаюсь - работает.

LaunchDaemons

Если бы не задержка с активацией интерфейсов, то можно было бы сделать запуск и через механизм LaunchDaemons.

$ cd /Library/LaunchDaemons

Создаю plist:

$ sudo vim me.ctrld.route.plist

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

    
        Label
        me.ctrld.route
        ProgramArguments
        
            route
            add
			-net
			10.0.0.0
			-netmask
			255.0.0.0
			192.168.98.9
        
        RunAtLoad
        
    

Выставляю права (они и так нормальные):

$ sudo chmod 644 me.ctrld.route.plist

Этот способ я продемонстрировал для полноты, как можно выполнить нужную операцию при старте системы.

Comments