ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ выпуск минималистичной систСмы ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Nitro

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ выпуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Nitro, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ систСму ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ c функциями контроля Π½Π°Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ процСссов. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Лия НойкирхСн (Leah Neukirchen), ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² дистрибутивС Void Linux. Код написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ 0BSD.

Nitro ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π² качСствС init-процСсса (pid 1), Ρ‚Π°ΠΊ ΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ процСсса, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ бСспСрСбойноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² случаС сбоСв. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Π² Linux ΠΈ FreeBSD, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² окруТСниях Π½Π° Π±Π°Π·Π΅ стандартной Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Musl. Π’ качСствС областСй примСнСния ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ встраиваСмыС систСмы, ΠΎΠ±Ρ€Π°Π·Ρ‹ ram-дисков (initramfs), ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ (Docker/Podman/LXC/Kubernetes), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ станции ΠΈ сСрвСрныС систСмы. Для управлСния Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ сСрвисов ΠΈ взаимодСйствия с init-процСссом поставляСтся ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки nitroctl.

ВмСсто составных скриптов ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Nitro примСняСтся модСль Π½Π° основС выноса ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ скрипт. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСрвиса Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ /etc/nitro создаётся ΠΏΠΎΠ΄ΠΊΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ скрипты: setup β€” содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, выполняСмыС Π΄ΠΎ запуска сСрвиса; run β€” опрСдСляСт сцСнарий запуска сСрвиса; finish β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, выполняСмыС послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сСрвиса. Для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ вСдСния Π»ΠΎΠ³Π° примСняСтся символичСская ссылка с ΠΈΠΌΠ΅Π½Π΅ΠΌ log, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄. Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ автозапуска сСрвиса достаточно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«downΒ», Π° для игнорирования сСрвиса слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ символ Β«@Β» ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

Автором ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ достоинства Nitro ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ систСмами ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • Всё состояниС хранятся Π² ΠžΠ—Π£, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² окруТСниях c дисковыми Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.
  • Архитиктура Π½Π° основС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ опрос Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ»ΠΈΠ½Π³Π° (polling).
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ выдСлСния памяти Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ (всС Π±ΡƒΡ„Π΅Ρ€Ρ‹ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ запускС).
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ использованиС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹.
  • ΠŸΠΎΡΡ‚Π°Π²ΠΊΠ° Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ самодостаточного исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для управлСния систСмой.
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ стадий компиляции ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ β€” Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвиса ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ простыС скрипты Π² связанном с сСрвисом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.
  • НаличиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСзапуска сСрвисов послС сбоя.
  • НаличиС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° вСдСния Π»ΠΎΠ³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… сСрвисов.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ построСния Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π»ΠΎΠ³Π°, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ нСсколько сСрвисов.
  • Π Π°Π±ΠΎΡ‚Π° Π½Π΅ зависит ΠΎΡ‚ точности выставлСния систСмных часов.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° запуска Π²ΠΎ FreeBSD Ρ‡Π΅Ρ€Π΅Π· /etc/ttys.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сборки Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½ΠΎΠ³ΠΎ статичСски скомпилированного исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ использовании musl libc.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ