LINUX.ORG.RU

OpenRC - отдельная конфигурация сети для разных runlevels

 


0

1

Возникла задача сделать отдельную конфигурацию сети для разных runlevels - отдельно для дома, отдельно для универа. Так можно удобно переключать сервисы по rc home, rc eduroam (использую stacked runlevels). Сделал симлинки /etc/init.d :

# ls -alh | grep net
lrwxrwxrwx   1 root root   18 Feb  8 22:30 net-edu.enp2s0 -> /etc/init.d/net.lo*
lrwxrwxrwx   1 root root   18 Feb  8 22:30 net-edu.wlp8s0 -> /etc/init.d/net.lo*
lrwxrwxrwx   1 root root    6 Jan 21  2013 net.enp2s0 -> net.lo*
-rwxr-xr-x   1 root root  18K Nov 25 04:35 net.lo*
lrwxrwxrwx   1 root root    6 Jan 21  2013 net.wlp8s0 -> net.lo*

Также сделал для конфига

# ls -alh /etc/conf.d | grep net
-rw-r--r--   1 root root  863 Mar 11 09:56 net
-rw-r--r--   1 root root  841 Mar 18 14:38 net-edu

Stacked runlevels настроил согласно вики, но при этом всплыл баг. Из net-edu.wlp8s0 не запускается dhcpd. Кусок конфига /etc/conf.d/net-edu:

wpa_supplicant_wlp8s0="-Dwext"
config_wlp8s0="dhcp"
Возможно мешает вот-эта секция /etc/wpa_supplicant/wpa_cli.sh
EXEC="/etc/init.d/net.${INTERFACE} --quiet" 
По rc-status видно, что кроме net-edu.wlp8s0 запустился дополнительно net.wlp8s0 в runlevel manual.

Отсюда вопросы:

  • Как корректно настроить сеть в такой ситуации?
  • Можно-ли рассчитывать на то, что конфиг для для сервиса xxx.yyy будет подхватываться из /etc/xxx, или вся идея моего конфига в корне неправильная?

cast qnikst


Ни разу сам так не делал, вот идея, сделать вложенные runlevels:

mkdir /etc/runlevels/default-edu
mkdir /etc/runlevels/default-home
rc-update -s default default-edu default-home
rc-update net.enp2s0 default-home
rc-update net.wlp8s0 default-home
rc-update net-edu.enp2s0 default-edu
rc-update net-edu.wlp8s0 default-edu

дальше можно выбирать куда грузиться в default-edu или default-home.

Возможно есть варианты и лучше, напр хранить в env или ещё где значение текущей сети и делать source соотв конфига в /etc/conf.d/net.

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

Спасибо. Я так и сделал (stacked runlevels же), просто при этом всплыл баг взаимодействия netifrc и /etc/wpa_supplicant/wpa_cli.sh. Сейчас посмотрел какие переменные среды передаются /etc/conf.d/net, настроил все немного по-другому:

  • Вложеные runlevels home, eduroam остались.
  • Сервис net.wlp8s0 добавлен в home и eduroam, net-edu.* удалены. Конфиги enp2s0 оказались одинаковыми, я переместил его в runlevel default.
  • Кусок /etc/conf.d/net:
modules="iproute2 !wpa_supplicant !iwconfig"
if [ "${RC_RUNLEVEL}" = "home" ]; then
    config_wlp8s0="192.168.1.1/24"
else
    modules="iproute2 wpa_supplicant !iwconfig"
    wpa_supplicant_wlp8s0="-Dwext"
    config_wlp8s0="dhcp"
fi

preup() {
    if [ "${IFACE}" = "wlp8s0" ]; then
	rfkill unblock wifi
    fi
    return 0
}

Небольшой недостаток такого решения в том, что нужно делать rc default && rc eduroam, так как OpenRC не делает рестарт сервису net.wlp8s0 при прямом переключении с home на eduroam, но это уже чисто косметическое.

Array
() автор топика
Ответ на: комментарий от qnikst

К сожалению, здесь я уже не знаю что можно сделать. При непосредственном переключении даже preup() не активируется. Завтра возможно из /etc/init.d/local что-то попытаюсь пришаманить, возможно подправлю и подружу его из runlevel'ами. Но вообще я доволен и тем, что есть сейчас.

Array
() автор топика
Ответ на: комментарий от qnikst

Я накостылял используя /etc/init.d/local небольшой сервис. Теперь сделал:

mkdir -p /etc/local.d/default /etc/local.d/home /etc/local.d/edu
rc-update -u
rc-update del local default
rc-update add extlocal default
ln -s /etc/init.d/extlocal /etc/init.d/extlocal.home
ln -s /etc/init.d/extlocal /etc/init.d/extlocal.edu
rc-update add extlocal.edu eduroam
rc-update add extlocal.home home
mv /etc/local.d/*.start /etc/local.d/default
mv /etc/local.d/*.stop /etc/local.d/default
У /etc/local.d/home и /etc/local.d/edu - wifi.stop который останавливает net.wlp8s0. Работает как часы.

Но вообще это костыль. Это фактически поддержка preup(), postdown(), только на уровне runlevel'a, а не сервиса.

Array
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.