systemd-nspawn / machinectl и macvlan

Являются ли ( и ) операторами, которые группируют команды и создают подоболочку?

Нет, документ ссылается на операторы для группировки выражений с помощью test :

test 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \)

Если они устарели, каковы их замены?

Их заменой являются () и {} , который аналогично группирует команды на уровне оболочки:

test 0 -eq 0 && (test -0 -eq 1 || test 1 -eq 1)
test 0 -eq 0 && { test -0 -eq 1 || test 1 -eq 1; }

Шаблон довольно легко увидеть: каждый оператор, используемый в test для выражений, заменяется эквивалентом команд оболочки.

Следует ли тест "$ 1" -a "$ 2" заменить на тест "$ 1" && тест "$ 2" или на ((тест "$ 1" && test "$ 2")) ?

Его следует заменить на test "$ 1" && test "$ 2" ; (()) используется для арифметического раскрытия и не имеет отношения к статусу выхода команд, так как его цель состоит в том, чтобы оценивать арифметические выражения. Например, это было бы допустимым:

(( $(test 1 -eq 1 && echo $?) && $(test 0 -eq 0 && echo $?) ))

(обратите внимание на подстановки команд, которые заменяются состояниями выхода внутренних команд, 0 и 0 ; вычисленное выражение на самом деле ] ((0 && 0)) ).

Но это вызывает синтаксическую ошибку:

(( test 1 -eq 1 && test 0 -eq 0 ))
$ (( test 1 -eq 1 && test 0 -eq 0 ))
bash: ((: test 1 -eq 1 && test 0 -eq 0 : syntax error in expression (error token is "1 -eq 1 && test 0 -eq 0 ")
1
05.05.2019, 22:36
1 ответ

Одним из возможных решений является следующее:

Все следующие действия должны быть выполнены в контейнере.

Проверьте, использует ли ваш контейнер systemd -networkd. Вы можете проверить, так ли это, выполнив следующую команду

systemctl status systemd-networkd

Если служба не включена и не запущена, вам необходимо включить и запустить ее

systemctl enable systemd-networkd
systemctl start systemd-networkd

Вам также может потребоваться включить и запустить разрешенную службу systemd -, если она не включена и не запущена.

systemctl enable systemd-resolved
systemctl start systemd-resolved

Если вам нужен динамический адрес ipv4, созданный для вас на вашем интерфейсе macvlan, вы можете создать файл настройки сети /etc/systemd/network/mveth0.networkсо следующим содержимым

[Match]
Name=mv-eth0

[Network]
DHCP=ipv4

Если вам нужно установить статический адрес ipv4 для интерфейса macvlan. Например, если у вас есть адрес шлюза 192.168.1.1 и вам нужно установить адрес ipv4 на 192.168.1.14/24, вы можете использовать следующий контент для файла настройки сети /etc/systemd/network/mveth0.network.

[Match]
Name=mv-eth0

[Network]
IPForward=yes
Address=192.168.1.14/24
Gateway=192.168.1.1
# DNS= ?

После создания файла вам потребуется перезапустить сетевую службу systemd -

systemctl restart systemd-networkd

В вашем случае вам может понадобиться использовать sudo для запуска команд

0
28.01.2020, 00:12

Теги

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