Назад | Перейти на главную страницу

Скрипт, который обновляет интерфейсы при изменении / etc / network / interfaces

[Это для Debian Squeeze, но применимо к Ubuntu и другим дистрибутивам Linux.]

У меня есть довольно сложный файл / etc / network / interfaces, который создается на основе различных факторов (количество интерфейсов, необходимые мосты, vlan и т. Д.). После того, как новый файл сгенерирован, мне нужно запустить все новые интерфейсы и отключить устаревшие интерфейсы; и мне, возможно, придется перезагрузиться, если основной интерфейс изменится (например, изменится с eth0 или br0).

Прямо сейчас я прикидываю, что делать ifup / ifdown вручную.

Есть ли сценарий, который сделает это за меня?

Я не знаю, как вы сейчас изменяете / генерируете свой /etc/network/interfaces. Вероятно, лучшим решением было бы использовать инструмент управления конфигурацией (например, Puppet, Chef или Cfengine) для выполнения этой задачи и заставить его вызывать ifup при изменении файла. Такие инструменты предназначены для решения подобных задач. Вы даже можете воспользоваться возможностями создания шаблонов Puppet или поставщиком Augeas для изменения вашего файла.

Другое решение - использовать inotify. Для экзаменуемых вы можете настроить incron звонить ifup каждый раз /etc/network/interfaces модифицирован.

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

Вот как я управляю файлами ifcfg с помощью puppet. Я создаю каталог под files/ для каждого хоста, например:

modules/network/files/foohostname/
modules/network/files/someotherhostname/

Затем в modules/network/manifests/init.pp Я делаю следующее:

  1. Скопируйте все файлы в modules/network/files/hostname/ в каталог сетевых скриптов на хосте.
  2. Бегать service network start или /etc/init.d/network start при добавлении / изменении любых файлов. Я нашел это service network start вызовет все интерфейсы, которые еще не работают, но не убьет мои существующие сетевые подключения.
class network {
  # copy all ifcfg files from files/hostname/ directory to network-scripts/ 
  # other files in network-scripts/ will not be touched.
  file { '/etc/sysconfig/network-scripts/':
      recurse => true,
      purge   => false,
      owner   => root,
      group   => root,
      ignore  => '\.svn', # this is specific to me as I use svn.
      source  => "puppet:///modules/network/${hostname}/",
  }

  # if anything changes with the above File resource, then fire network start to bring them up.
  # this won't restart the network, only bring up any ifaces that are not up yet.
  exec{ 'network-ifup':
      command     => 'service network start',       
      refreshonly => true,
      subscribe   => File['/etc/sysconfig/network-scripts/'],
  }        
}

К вашему сведению, некоторые из вышеперечисленных могут быть немного специфичными для CentOS / RHEL.