4 сентября 2013 г.

Как создать bridge на nfs root

Для поднятия сети на одной железке возникла необходимость создать bridge. Но загвоздка в том, что система должна при загрузке монтировать nfs в корень. Данное условие необходимо для возможности быстро изменить что-то в системе без необходимости лезть на флешку. Отладка идет полным ходом. Но основная проблема как раз в том, что при создании bridge сеть придется в любом случае оборвать. Nfs такого пережить не может и отваливается. Соответственно система дальше грузиться не может так как нету корневой файловой системы и сеть также сама вернуться не может.

Я уже думал искать какое-то альтернативное решение: как неожиданно мой коллега натолкнулся на небольшую заметку, в которой описано как обойти указанную проблему.

Сущность данного решения сводиться к тому, что надо все файлы, необходимые для настройки bridge, скопировать в раздел с tmpfs, который будет доступен после обрыва сети. Я, например, использовал /tmp. А потом запустить создание bridge из нового окружения. Данный метод работает на ура, нареканий не заметил.

Вот собственно решение с моими малюсенькими изменениями:

set -x
mount -o remount,exec /tmp
R=/tmp/root
IPADDR=192.168.0.159

mkdir -p "$R/proc"
cp -r /sbin /bin /lib "$R"
cat > "$R/script" <<EOF
mount -t proc none /proc
brctl addbr br0
brctl addif br0 eth0
ifconfig br0 "$IPADDR"
ifconfig eth0 0.0.0.0
umount /proc
EOF

chroot "$R" sh script
rm -r "$R/sbin" "$R/bin" "$R/lib"

В нутрь script в принципе можно вставить все, что вам будет необходимо.

Хорош ли метод? Мне по крайней мере понравился. Есть еще предложения, как возможно решить данный вопрос?

5 комментариев:

sandyWolf комментирует...

~ % wget -O - http://www.ipdeny.com/ipblocks/ 2>/dev/null | grep 'data/countries/..\.zone' | sed -e 's|.*\(data/countries/...zone\).*|http://www.ipdeny.com/ipblocks/\1|' | while read url ; do wget -O - ${url} 2>/dev/null ; done | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | aggregate | egrep '^192\.' | wc -l

1963

RFC соблюдать напрягает? :)

Ilya Zonov комментирует...

2 sandyWolf:
Давай по буквам. Что все это значит? И как помогает моей проблеме? Смысла что-то не видно...

sandyWolf комментирует...

IPADDR=192.168.0.159/8 грубо нарушает RFC1918

При таком назначении Вы блокируете 1963 неаггрегируемых префикса. Прошу заметить, эти префиксы уже кому-то розданы, и в них живут люди ;)

А что касается решения про бридж и нфсный рут... А что тут скажешь, проблема решена => имеет право на жизнь :)

Ilya Zonov комментирует...

Ок, понял )

Анонимный комментирует...

Добрый день. Не могли бы вы подробнее объяснить? Подкскжите, что с этим скриптом нужно делать?