Как запустить задачу перед сетями?

Я записал новомодную задачу, которая изменяет/etc/network/interfaces. (На самом деле файл sourced в него.), Который start on условие я должен объявить для разрешения моей задаче, выполненной перед какими-либо сетевыми заданиями?

Я попробовал start on starting networking, но это по-видимому слишком поздно. То, когда я вхожу в систему после начальной загрузки I, видит, что изменения были записаны, но очевидно они не используются: новая конфигурация указывает статический IP, но процесс начальной загрузки ожидает несуществующего сервера DHCP (старая конфигурация) для таймаута.

Я также попробовал start on starting network-interface INTERFACE=eth0, который не работал также. IIRC там был ошибкой в журнале, что изменение не могло быть записано.

Фон: Мне нужен шаблон VM, который может быть клонирован, и клоны настроены через сценарий. Среди других настроек я должен дать им статический IP-адрес для доступа к ним от хоста. Я использую guestfish, чтобы записать файл конфигурации в один из виртуальных дисков и позволить сценарию применить эти настройки к системе. Я не хочу, чтобы тот диск содержал фактический файл параметров настройки системы. Я не могу изменить / и т.д. непосредственно, потому что тот диск совместно используется (copy-on-write/diff) среди клонов, и guestfish, по-видимому, не поддерживает тот тип изображения. Я мог также позволить им использовать DHCP и установить сервер, который присваивает IP MAC, но я боюсь сложности. Я мог также добавить просто другой виртуальный диск для конфигурационных файлов, но если возможный я предпочту хранить настройки непосредственно на изображении системного диска.

Программное обеспечение Used: Сервер Ubuntu 12.04, VirtualBox. Модификатор конфигурации сам записанный рубиновый сценарий.

2
задан 5 June 2012 в 17:32

3 ответа

start on starting network-interface
instance $INTERFACE
task
exec mything

и

start on starting networking
task
exec mything

ifup запускается одним из двух методов: заданием network-interface или заданием networking, которое используется для настройки любых интерфейсов, не охватываемых Udev.

Раздел instance выше гарантирует, что ваша работа запущена для каждого из двух случаев, потому что, как работает upstart, одно or условие не будет блокировать другое.

(вот эта ошибка, между прочим: https://bugs.launchpad.net/upstart/+bug/568860 )

Если ваша работа не может выполняться одновременно или дважды, вы будете нужно разделить его на три задания. Один называется «mything-waiter»:

start on starting network-interface
instance $INTERFACE
task
exec start wait-for-state WAITER=mything-waiter-$UPSTART_JOB-$INTERFACE WAIT_FOR=mything

А другой с похожей линией exec для начала работы в сети:

start on starting networking
task
exec start wait-for-state WAITER=mything-waiter-networking WAIT_FOR=mything

А другой называется «mything», который просто

task
exec mything

Я думаю, что можно привести аргумент, чтобы «начать запуск сети» делал все это, но это потребует некоторого изменения дизайна сети в Ubuntu.

0
ответ дан 5 June 2012 в 17:32

Не могли бы вы просто начать свою работу в start on startup? Есть ли какая-либо причина, чтобы связать его с началом сетей, если вам просто нужно изменить конфигурацию до запуска сети.

Редактировать: хорошо, это не сработало.

Сейчас я не могу испортить свою систему инициализации, поэтому я должен дать несколько советов без проверки:

Первый вариант: добавить task строфу к своей работе. Это должно заставить Upstart подождать, пока он не выйдет, прежде чем запускать ожидающее задание сетевого / сетевого интерфейса. Я вполне уверен, что это не решает проблему синхронизации, так как в AskUbuntu было много вопросов о том, как внедрить материал в обычный процесс загрузки.

Второй вариант: используйте переопределить файлы. Я думаю, что network-interface.conf это то, что вам нужно, чтобы подделать. К сожалению, он уже использует раздел pre-start, поэтому вместо того, чтобы просто создать его, нам нужно скопировать его (и только его) в наш файл network-interface.override.

После того, как вы скопировали раздел pre-start, просто измените содержимое в соответствии с вашими потребностями. Исходный файл остается без изменений, но предстартовый раздел переопределения буквально переопределяет исходный файл.

Надежда тоже помогает.

0
ответ дан 5 June 2012 в 17:32

Нашел обходной путь для себя.

Я удалил любую конфигурацию для eth0 из шаблона VM. Таким образом, он не поднимается автоматически. Мое задание конфигурации теперь начинается с starting networking, изменяет файл конфигурации и явно вызывает ifup eth0.

Хотя это решает мою проблему, это не соответствует общему случаю, как запустить службу / задачу в upstart перед подключением к сети. Таким образом, я собираюсь оставить вопрос открытым.

0
ответ дан 5 June 2012 в 17:32

Другие вопросы по тегам:

Похожие вопросы: