systemctl: systemd нь PID 1 биш гэж байна — тэгвэл яах вэ?
PID 1-ийн тухай мэдэгдэл нь OpenVPN биш, орчны тухай юм. PID 1 болж юу ажиллаж байгааг шалгаж, systemd дэмжигддэг газарт асааж, дараа нь жинхэнэ алдааг уншаарай.
Хэрэв systemctl start openvpn-client@office ажиллуулаад систем systemd-ээр ачаалагдаагүй гэсэн мэдэгдэл ирвэл энэ нь үйлчилгээний гэмтэл мэт харагдана. Энэ нь огт үйлчилгээний гэмтэл биш: таны дуудсан systemctl ярих ажиллаж буй менежер олдохгүй байгаа тул OpenVPN-ийн талаар юу ч шалгагдаагүй. sudo менежер үүсгэхгүй, unit файл суулгах нь ч үүсгэхгүй. Команд болон машин нь хоёр өөр ертөнцөөс ирдэг бөгөөд алдаа нь үүнийг харуулсан цорын ганц газар юм.
Эхлээд команд ажиллаж буй газарт PID 1-ийг аль процесс эзэмшиж байгааг асуугаарай, учир нь энэ хариулт unit-ууд огт байгаа эсэхийг шийднэ.
Алдаа нь OpenVPN биш, орчныг нэрлэдэг
systemctl бол клиент, менежер биш. Энэ нь системийн менежерт socket-оор холбогдож, нөгөө талд менежер байхгүй үед хүмүүсийн форумд хуулж буулгадаг мэдэгдлийг хэвлэдэг. ps -p 1 -o pid=,comm= нь үнэндээ PID 1 болж юу ажиллаж байгааг харуулдаг бөгөөд хариулт нь ихэвчлэн shell, init бүрхүүл эсвэл контейнерийн өөрийн орох цэг байдаг. Ийм нөхцөлд unit файл бүрэн хүчинтэй байж болох ч хэзээ ч уншигдахгүй. Командыг root-оор давтах нь зөвхөн клиентийн нэвтрэх мэдээллийг өөрчилнө.
Эхний мөрөөс өмнө бүх мэдэгдлийг уншаарай. Менежерийн өөрөөс ирсэн алдаа, жишээ нь алга болсон unit эсвэл биелээгүй нөхцөл нь та түүнд хүрсэн гэсэн үг; энэ алдаа нь хүрээгүй гэсэн үг.
WSL: systemd-ийг асаах нь тохиргооны өөрчлөлт
WSL дараагийн хувилбаруудад systemd-ийн дэмжлэг авсан боловч энэ боломж нь түгээлт бүрд тусад нь асаагдаж, суулгасан WSL хувилбар дэмждэг газарт л ажилладаг. wsl --version Windows талд юу байгааг харуулж, түгээлтийн /etc/wsl.conf файл нь [boot] хэсгийг агуулж, дотор нь systemd=true байна. Одоо байгаа хэсгүүдийг устгахгүйгээр тэр файлыг засварлаж, дараа нь өөрчлөлт хүчин төгөлдөр болохын тулд WSL хувилбарыг дахин ажиллуулна уу. wsl --shutdown ажиллаж буй бүх түгээлтийг зогсоодог тул эхлээд ажлаа хадгална уу.
Дахин онгойсны дараа OpenVPN unit-д хүрэхийн өмнө менежерийг баталгаажуулна уу: ps -p 1 -o comm= гэж харуулах ёстой systemd. systemd-ийг асаах нь профайл, нэвтрэх мэдээлэл эсвэл хувилбарын нэрийг өгөхгүй тул дараагийн алдаа нь PID 1 биш, эдгээрийн аль нэгний тухай байх болно.
Контейнерууд unit-уудыг биш, өөрсдийн орох цэгийг ажиллуулдаг
Энгийн контейнер өөрийн орох цэг эсвэл командаас заасан зүйлийг эхлүүлдэг бөгөөд ямар багц суулгасан ч энэ нь systemd-ээр ачаалагдсан машин биш. Зурагт systemctl нэмэхэд холбогдох зүйлгүй клиент л гарна. Community OpenVPN-ийн хувьд дэмжигддэг загвар нь ихэвчлэн урд талд ажиллаж буй процесс, openvpn --config /path/to/client.conf, үүнийг орох цэг эхлүүлж, гаднаас хянадаг. Тэр эзэн нь эхлүүлэх, дохио болон унтраах үйлдлийг хариуцаж, туннелийг удирддаг цорын ганц зүйл байх ёстой.
Тэр туннелийг аль хэдийн удирдаж буй орох цэгийн дэргэд интерактив хуулбарыг хэзээ ч бүү ажиллуул, учир нь хоёр процесс төхөөрөмж болон маршрутын төлөө тэмцэлдэнэ. Контейнер доторх хамгийн бага init процесс хүүхдүүдийг цуглуулж, дохиог дамжуулдаг; энэ нь зургийг unit-тай хост болгодоггүй.
Хэрэв байршуулалт контейнер дотор үнэхээр systemd шаарддаг бол түүнд зориуд зохион бүтээсэн зураг хэрэгтэй, systemctl гомдоллохоо болих хүртэл нэмэгддэг нэмэлт эрх биш.
Менежер байгаа үед дараагийн алдааг уншаарай
Жинхэнэ менежер үйлчилгээг эхлүүлмэгц хэрэгтэй алдаанууд эхэлдэг. Төхөөрөмжийн зөвшөөрлийн алдаа, тохиргооны задлан шинжилгээний алдаа, алга болсон нэвтрэх мэдээлэл, хүрэх боломжгүй түнш — эдгээр нь PID 1-ийн мэдэгдэл хэзээ ч шалгаагүй дөрвөн өөр асуудал юм. Тэдгээрийг unit үүсгэсэн дарааллаар нь уншаарай, journalctl -u openvpn-client@office -n 50 ашиглан systemd хост дээр, эсвэл менежер байхгүй газарт клиентийг урд талд ажиллуулж. Урд талд ажиллуулах нь профайл өөрөө ажиллаж байгаа эсэхийг батлах хамгийн хурдан арга юм.
Тэмдэглэлдээ хоёр орчныг тусад нь хадгалаарай: туннелийг ажиллуулж буй хост, командуудыг бичиж буй газар.