Відома проблема в системних дистрибутивах (Arch Linux, OpenSUSE, Fedora).
Systemd замінює sysvinit і забезпечує одну велику перевагу перед цим. У системі sysvinit, коли ви попросите послугу запустити, вона успадковує контекст виконання особи, яка викликає сценарій, який включає змінні середовища, обмежує умови тощо. Система покращує це навпаки, повідомляючи демона, який запустить послугу у чітко визначеній, здоровій та постійній обстановці, де, звичайно, ефективність послуг набагато простіше передбачити, оскільки середовище завжди однакове.
Це означає, що, коли я називаю systemctl зсередини chroot, не має значення, що я перебуваю всередині chroot, оточення, яке буде успадковано, все ще є PID 1, а не моє поточне. Але це стає гірше, ніж це: оскільки комунікаційні розетки розміщені всередині / run / systemd, процес у chroot навіть не зможе поговорити з системою init!
Отже, як ви ходите про chroot'ing у системних дистрибутивах?
Якщо все, що ви хочете зробити, - це контейнер Linux, ця сторінка Arch Wiki розкаже вам, як налаштувати контейнер для Linux менше ніж за 30 секунд завдяки systemd-nspawn
.
Якщо замість цього вам дуже потрібне середовище chroot, ця красива і кришталево чиста веб-сторінка надасть вам два робочих рішення (друга - це модифікована версія тієї, що пропонується у пункті №1).