Ubuntu12.04 :Как отключить процесс демона при запуске
At the first glance udev events are supported in the container. But for the sake of optimization, I recommend to not use it as it will trigger the events in all the containers.
В случае, если вышеизложенное неясно, предлагаю убить его огнем . Обычно было бы нежелательно, чтобы udev
внутри контейнера даже думал о прикосновении к sda
и т. д. Обычно не было ничего , что вы хотели бы, чтобы udev делал.
Читая нижеследующее, вы можете догадаться, что мой ответ — придерживаться systemd
партийной линии :-). Судя по всему, у LXC были разные мнения, по крайней мере одно время:https://stgraber.org/2013/12/21/lxc-1-0-your-second-container/#comments
Я полагаю, что комментатор "wwwwww" является псевдонимом (! )ведущего systemd
Леннарта Поттеринга. Либо так, либо кто-то отлично подражал его стилю письма и его позиции по этому вопросу :-).
Возможно, кто-то, более знакомый с LXC, точно знает, какие комбинации настроек udev
и LXC ожидают, что LXC сделает что-то полезное. И какие условия могут генерировать предупреждающее сообщение, подобное этому. В приведенной выше ссылке указан диапазон дат для Ubuntu, в котором утверждается, что исходный выпуск Ubuntu 12.04 должен подойти. Однако он не говорит, выдает ли он какие-либо ложные предупреждения. (Это будет не первая программа, делающая это:-))
Какими бы ни были достоинства, если вам не нужно получать доступ к какому-либо физическому устройству изнутри LXC, отключение udev может показаться простым способом избежать появления предупреждений udev. «Пока мы ждем, пока люди поймут, как именно должно работать пространство имен устройств». Разработчик LXC упоминает, что «это далеко не идеально» :-). Это было в 2013 году, и до сих пор нет пространства имен устройств (в Linux v4.20 ).
Следующий соответствующий комментарий выглядит следующим образом: «Наша конфигурация по умолчанию позволяет udev создавать узлы устройств, но получать доступ только к тем, которые разрешены в конфигурации». В этом смысле ваш LXC работал так, как хотел LXC :, он позволял вам создать узел устройства /dev/sda
, но не позволял вам получить к нему доступ.
Не знаю, почему ваш udev
создает /dev/sda
, (предположительно )не жалуется на невозможность запустить blkid
на нем, но жалуется на то, что его не смотреть.
Ядро (версии 4.20 )не обеспечивает изоляцию устройств. Для устройств нет пространства имен. По сравнению, например. к сетевым пространствам имен, которые позволяют изолировать сетевые интерфейсы. Список пространств имен, которые можно изолировать, смотрите вman 7 namespaces
или man 2 clone
.
Если вам интересно, что может делать принципиальная среда выполнения контейнера , ответ заключается в том, что она может отключить доступ ко всем устройствам (, кроме нескольких виртуальных, таких как /dev/null
, /dev/pts/*
, и т. д. ). Я больше знаком сsystemd-nspawn
(и его документацией ). По крайней мере, с cgroups v1 nspawn использует группу управления устройствами для отключения доступа к устройствам. cgroups v2 в конечном итоге получил эквивалентную функцию. В то же время nspawn предотвращает создание узла устройства с помощью seccomp()
, и это работает очень хорошо. Конечно, это означает, что вы должны быть уверены, что образ файловой системы контейнера не содержит никаких «неправильных» узлов устройств, поэтому решение cgroup лучше.
Текущий systemd-udevd.service
определяет, что он не должен работать, если /sys
смонтирован только для чтения -.
Если вы хотите использовать cut
, вам нужно установить разделитель с опцией-d
:
$ cut -d' ' -f1,4 file
ExperimentOne.5
ExperimentTwo.4
Попробуйте сawk
:
awk '/results/ {print $1,$4}'
или
awk '$2=="results"{print $1,$4}'
Другое решение сsed
:
sed -En 's/results *= *([^ ]+).*$/\1/p' filename.txt
Если вы хотите использовать конвейер grep
+ cut
, вы должны помнить, что cut
предполагает TAB
в качестве разделителя полей, если вы его не укажете. Итак, используйте
grep "results" filename.txt | cut -d' ' -f1,4