ifup, ifdown получают неправильное состояние интерфейса при использовании сетевых пространств имен в Ubuntu и Raspbian

Сводка :Установите предварительно -собранный xfceпакет.


К сожалению, невозможно обойти тот факт, что вам нужно загрузите Xfce и все необходимые зависимости для его сборки , если вы очень хочу установить из исходников.

В OpenBSD в идеале следует установить пакет xfce. Это «метапакет», который устанавливает все необходимое для работы Xfce рабочий стол запущен и работает на OpenBSD.

$ doas pkg_add xfce

В обычной системе OpenBSD это приведет к установке 148 отдельных пакетов, необходимых для запуска Xfce.

Для минимальной рабочей среды Xfce:вместо этого вы можете установить следующие пакеты:

  • xfce4 -панель
  • xfce4 -сеанс
  • xfce4 -настройки
  • xfconf
  • xfdesktop
  • тунар
  • xfwm4

Установка их по отдельности, очевидно, также приведет к установке зависимых пакетов, но, вероятно, не так много, как 148 пакетов.


Для сборки из исходного кода на OpenBSD лучше всего собрать meta/xfceпорт. Вы можете получить все необходимые источники распространения для этого порта в один раз, когда у вас есть хорошее подключение к Интернету, а затем строить, когда вы иметь время. Обратите внимание, что это, вероятно, потребует от вас получить гораздо больше data, чем установка бинарных пакетов, так как он также включает получение источников дистрибутива для зависимостей сборки.

Чтобы получить все исходники для всех портов, необходимых для построения порта meta/xfce, я предполагаю, что у вас есть проверенная файловая иерархия портов в/usr/portsи что вы в целом знакомы с тем, как создавать порты на OpenBSD . Затем вы должны использоватьDistributed Построитель портов , dpb, чтобы получить все необходимые файлы dist -:

$ doas /usr/ports/infrastructure/bin/dpb -F 4 meta/xfce

Это позволит получить все необходимые dist -файлы, по четыре за раз.

После того, как вы все загрузили, вы можете собрать и установить Xfce. вне линии -с

$ cd /usr/ports/meta/xfce
$ doas make install

Вместо того, чтобы делать это на основном мета-порте, вы также можете сделать это на семи портах, необходимых для установки минимального рабочего стола Xfce (, перечисленных выше, но вам нужно будет добавить префикс к каждому один из них сx11/xfce4/).


Если вам действительно необходимо выполнить сборку из собственных исходных кодов Xfce, например, если это более новая версия программного обеспечения, то я настоятельно рекомендую вам связаться с Ландри Брейем (, который является текущий сопровождающий порта ),и сотрудничайте с ним, чтобы обновить порт (и любые зависимости, которые могут потребовать настройки для новой версии Xfce ). Его контактные данные можно найти по адресу

.

$ cd /usr/ports/meta/xfce
$ make show=MAINTAINER

0
21.04.2020, 17:22
1 ответ

Проблема в том, что ip netns addсоздает только постоянное сетевое пространство имен, а ip netns exec...входит в постоянное сетевое пространство имен, одновременно создавая временное пространство имен монтирования. Есть еще вопрос, который задает прямо об этой проблеме, поэтому я ответил на него более подробно там.https://unix.stackexchange.com/a/581618/142686

Мое решение состоит в том, чтобы создать постоянное пространство имен для сети и монтирования, используя unshare. Затем смонтируйте tmpfsповерх /run/networkвнутри пространства имен. Это дает пространству имен отдельную копию для использования ifupи ifdown.

Основной вывод заключается в том, что вместо ip netns execтеперь нужно использовать nsenter, по крайней мере там, где ездовые животные имеют значение.

Создать каталог для пространств имен постоянного монтирования

Это необходимо сделать один раз после загрузки, а НЕ для каждого пространства имен

# Create a dir for persistent mount namespaces
$ mkdir /run/mntns

# Bind mount it with --make-private as required by `unshare --mount=/path`
$ mount --bind --make-private /run/mntns /run/mntns

Создание постоянных пространств имен network+mount

$ NSNAME=testns # give it a name

# Create files for persistent mounts.
# For network namespace use same paths as used by `ip netns` for interoperability
$ touch /run/netns/${NSNAME} /run/mntns/${NSNAME}

# Create persistent mount and network namespaces and
# as part of the setup the command (inside the namespace) adds a mount.
$ unshare --net=/run/netns/${NSNAME} --mount=/run/mntns/${NSNAME} \
    mount -t tmpfs tmpfs /run/network

Используйте

# Bring up the loopback interface, this used to fail.
$ nsenter --net=/run/netns/${NSNAME} --mount=/run/mntns/${NSNAME} \
    ifup lo
# Good.

Больше тестов

Теперь самое важное. Перемещение сетевых интерфейсов в пространство имен. Здесь можно использовать ip.

# Plug a veth interface into the namespace, use the `ip netns link`
$ ip link add veth1a type veth peer name veth1b netns ${NSNAME}

# Verify it is there (although here `ip netns exec` would work just as well)
$ nsenter --net=/run/netns/${NSNAME} --mount=/run/mntns/${NSNAME} \
    ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: veth1b@if17: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether e6:1b:ea:e5:77:b4 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Важно

Этот подход работает, но вместо ip netns execиспользуйте nsenter --net=... --mount=...!

Для перемещения интерфейсов между пространствами имен по-прежнему работает «ip-ссылка».

Недостатком является то, что вы не получаете автоматического связывания /etc/netns/NETNS_NAME/*, предоставляемого ip netns exec NETNS_NAME cmd, которое несложно добавить вручную.

# either during unshare or later as nsenter.
# The important difference is here it is done once and result persists
# unlike with `ip netns exec` which does this every time
NSNAME="${NSNAME}" \
  nsenter --net=/run/netns/${NSNAME} --mount=/run/mntns/${NSNAME} \
  /bin/sh -e -x -c \
  'cd "/etc/netns/${NSNAME}"; for f in *; do mount --bind "/etc/netns/${NSNAME}/${f}" "/etc/${f}"; done;'

Преимущество заключается в том, что вы получаете единообразное монтирование, выполненное один раз, а не каждый раз ip netns exec, которое может варьироваться, если содержимое /etc/netns/NETNS_NAME/меняется между вызовами.

1
19.03.2021, 02:27

Теги

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