Я уже писал про LXC-контейнеры и относительно успешный опыт их использования в домашних условиях. Трудятся они до сих пор на Cubieboard2 с двумя ядрами и на гигабайте ОЗУ.
Понадобилось мне тут “отдать” подключенный по USB WiFi-свисток в контейнер. Изучение вопроса показало, что нужно разрешить их в cgroups вроде вот такого:
lxc.cgroup.devices.allow: c 166:* rwm
Ну и дополнительно - сделать mount на устройство в конфиге. Так, если у вас какой-нибудь модем-конвертер, бла бла - пишем вот такое:
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file
И устройство /dev/ttyACM0 магическим образом доступно внутри контейнера.
Так вот с сетевыми интерфейсами всё не совсем так. Сетевую карту (проводную) можно пробросить вот так:
lxc.network.type=phys lxc.network.link=eth3 lxc.network.name=eth1
Так, сетевая карта eth3 будет в контейнере и там к ней можно будет обращаться по имени eth1.
Засада в том, что для WiFi это не работает. И вот здесь написано, почему. Одновременно с этим, пользователи сообщают, что команда вида:
lxc-device -n my_container add wlan0
прекрасно работает. Правда контейнер должен уже работать.
Решение получилось далеко не очень “чистым” - делаем простой шелл скрипт:
#!/bin/sh lxc-wait -n my_container -s RUNNING lxc-device -n my_container add wlan0
В первой строке - дожидаемся, когда контейнер перейдет в состояние “запущен”. Во второй - отдаем устройство. Теперь достаточно прописать в rc.local строку:
/usr/local/bin_lxc_wifi.sh &
Очень важно поставить “&” в конце строки - чтобы скрипт работал в “бэкграунде”.
Когда скрипт запущен - контейнер при старте подхватит устройство. Если забыть запустить скрипт, то контейнер во время загрузки системы “залипнет” в ожидании интерфейса, если конечно он там сконфигурирован.
Да, кстати правила iptables отлично работают в отдельном привелигерованном контейнере без приседаний с виртуализацией модуля ядра (выкуси, OpenVZ!).
Теперь есть ощущение завершенности проекта - сервисы разделены по контейнерам, которые в свою очередь разделены на логические группы. Ну и “посреди гостинной не торчат водопроводные трубы”.