Я пытался создать контейнер с нуля, используя только chroot, unshare и overlayfs. Я почти добился успеха, но изоляция PID сломала все. Можешь помочь с этой проблемой или поделиться, как ее решить?

Я прохожу курс “от 0 до Linux админа” вот здесь Курс Linux, и у меня возникла проблема: я попытался создать контейнер с нуля, используя только chroot, unshare и overlayfs. У меня почти всё получилось, но возникли трудности с изоляцией PID.

Что у меня отлично работает:

  • Создание изолированной файловой системы с помощью debootstrap.
  • Использование OverlayFS для создания неизменяемого базового образа с writable слоем.
  • Изоляция файловой системы, сети, UTS и IPC пространств имён с использованием unshare.
  • Настройка cgroup для ограничения памяти и CPU.

Однако я не могу получить рабочую изоляцию PID. Я перепробовал всё:

  • Использование unshare --pid --fork --mount-proc.
  • Ручное монтирование нового procfs с помощью mount -t proc proc /proc внутри chroot.
  • Сложные shell-скрипты для попытки корректного времени выполнения.

Тем не менее, я всё равно вижу все процессы хоста, тогда как мне нужно видеть только 1-2 процесса. Я пытался следовать runс, использовал overlayFS и rootfs (Debian, позже хочу использовать Alpine, как Docker, но сначала нужно решить эту ошибку).

Есть ли кто-то, кто также углублялся в эту тему? Как вы добились стабильной изоляции PID без использования таких решений, как ‘runc’?

Вот ссылка на мой репозиторий GitHub: Container Setup. Буду признателен за любые советы!

Эй, привет! Слушай, я тоже пытался замутить свой контейнер с нуля, используя chroot, unshare и overlayfs, но у меня что-то не задалось.

Короче, я уже почти дошел до финиша, но вот с изоляцией PID что-то пошло не так. Как только я запускал unshare для изоляции PID, то все начинало глючить. Процесс, который я пытался запустить внутри контейнера, просто не видел других процессов, и это было жутко странно. Например, как-то раз я пытался запустить простой bash, и он просто не мог понять, что происходит с сигналами — все зависало. Я не понимаю, как правильно настроить объединение namespaces, чтобы не было этой фигни.

Пробовал разные флаги для unshare, и каждый раз что-то ломалось. Там же другая документация, и иногда ее сложно понять, а в результатах поиска много фигни, что не помогает ни капельки.

На развороте (overlayfs) вообще было весело, пока все не стало зависеть от изоляции PID. Я пытался распределить папки в overlay, но когда дело доходило до pid_namespace, все к краху шло. Я подумывал, что может быть, стоит использовать совсем другой подход, но не знаю, как лучше.

Но, знаешь, нашел классные курсы на yodo.im, они реально помогают разобраться с контейнерами и namespaces! Там вроде объясняют, как все это дело неправильно не настраивать и избегать капкана с изоляцией PID. Может, тебе тоже понравится, если будешь дальше баловаться с контейнерами.

Так что да, если у тебя есть идеи, как можно исправить эту беду, делись!