Som si istý, že väčšina programátorov o tom už počula Node.js , ale čo z toho NodeOS ? Áno, NodeOS, operačný systém napísaný v Node.js. No, nejako. NodeOS používa jadro Linuxu pre väčšinu vecí dôležitých pre výkon, ako napríklad hardvérové interakcie, ale pre všetko ostatné používa Node.js. Vývoj systému NodeOS sa začal pred dvoma rokmi a vytvorili ho ľudia, ktorí zdieľali jednoduchý, ale zaujímavý nápad: 'Je možné vytvoriť operačný systém iba pomocou Node.js?'
Najskôr sa zamyslite nad pokrokom, ktorý Node.js urobila za krátky čas, ktorý tu bol. Teraz premýšľajte o tom istom, čo sa deje s operačným systémom. Potom k tomu pridajme nejaké super veci.
NodeOS predstavil zaujímavú paradigmu: Ak majú všetci používatelia izolovaný súborový systém, poskytuje im jednoduchú hierarchiu súborového systému, s ktorou môžu pracovať. Pretože ich „domovský priečinok“ je v skutočnosti koreňom ich vlastnej hierarchie súborového systému, môžu inštalovať balíčky globálne bez toho, aby vyžadovali špeciálne oprávnenia a nemuseli nič konfigurovať, pretože sú predvolene nainštalované v domovskom adresári. Poskytuje tiež značnú bezpečnosť; ak hacker nájde spôsob, ako sa dostať do konkrétneho účtu v operačnom systéme, jediný prístup, ku ktorému má prístup, je oddiel daného používateľa. Konečným výsledkom je hacker nemôže kompromitovať celý systém.
Ak sa nad tým zamyslíte, operačný systém, ktorý používa Node.js, znamená, že akýkoľvek balík dostupný v NPM je súčasne aj balíkom NodeOS. V čase písania tohto článku bolo 210 735 balíkov; keďže počet balíkov NPM rastie každú minútu, nebolo by čudné, keby za pár rokov mal NodeOS milión aplikácií.
To sa nemusí javiť ako veľká vec, ale Linux je najpoužívanejší operačný systém pre servery. Pretože NodeOS je založený na jadre Linuxu, mohli by ste každú aplikáciu napísanú pre iné distribúcie Linuxu spustiť s minimálnymi zmenami.
Nakoľko by som chcel hotový NodeOS, ešte tam nie je. Stále mu chýba veľa kľúčových funkcií pre operačný systém servera. Napríklad chýba celá sada nástrojov BASH vrátane ps, tail, nano a grep. Ďalej ho nemôžete spustiť ako operačný systém pre stolné počítače, pretože nemá grafické rozhranie. Iste, niektoré chýbajúce funkcie môžete implementovať pomerne ľahko pomocou trochy JavaScriptu, ale skutočnosť, že všetky spomenuté funkcie nie sú predvolene k dispozícii, nie je dobrá.
Najjednoduchší a najrýchlejší spôsob, ako vyskúšať NodeOS, je použiť nasledovné:
Po nainštalovaní Dockeru je spustenie inštancie NodeOS jednoduché. Všetko, čo musíte urobiť, je vykonať nasledujúci príkaz a Docker vykoná všetko kúzlo:
sudo docker run -t -i nodeos/nodeos
Keď spustíte vyššie uvedený príkaz, Docker automaticky stiahne obraz disku pre NodeOS z úložiska a vykoná inštaláciu NodeOS vo virtuálnom stroji. Po dokončení inštalácie otvorí reláciu SSH v prostredí NodeOS.
Existuje niekoľko dôvodov, prečo by ste sa chceli vyhnúť používaniu Dockeru. Jedným z nich je najnovšia verzia systému NodeOS. V čase písania tohto článku bola posledná zmena obrazu Docker systému NodeOS vykonaná pred dvoma mesiacmi, zatiaľ čo vývojová verzia bola aktualizovaná pred šiestimi dňami. Pokiaľ teda chcete používať najnovšiu verziu, určite by ste si mali zaobstarať zdrojový kód. To nie je príliš ťažké, ale trvá to dlho. Budete potrebovať:
Keď budete mať všetko, môžete pokračovať v kompilácii zdrojového kódu:
bash git clone [email protected] :NodeOS/NodeOS.git
.cd NodeOS
a npm install
.bash npm start
na spustenie NodeOS vo vnútri Qemu.Po dokončení inštalácie môžeme skontrolovať, či funguje, vykonaním príkazu ls
vo vnútri shellu NodeOS. Mal by sa zobraziť takýto výstup:
[ 'etc', 'lib', 'lib64', 'root', 'bin', 'sys', 'usr', 'share', 'proc' ]
Ak áno, znamená to, že niektoré základné príkazy fungujú. Čo však v prípade, že chceme zobraziť adresu IP sieťovej karty? V systéme Linux existuje príkaz s názvom ifconfig
to robí práve to; Poďme to skúsiť:
command not found: ifconfig
Vyzerá to ako príkaz ifconfig
chýba. Je to preto, že NodeOS nemá predvolené ifconfig
príkaz. Teraz čo? Je to jednoduché; NodeOS má integrovaného správcu balíkov (napríklad apt
alebo yum
) s názvom npkg
, ktorý je založený na NPM spoločnosti Node a je ľahko použiteľný. Inštaluje sa ifconfig
je rovnako jednoduché ako spustenie nasledujúceho príkazu:
npkg install bin-ifconfig
Ak všetko prebehlo dobre, príkaz ifconfig
by teraz malo byť k dispozícii v prostredí shell. Ak sa ho pokúsime znova spustiť, zobrazí sa výstup ako tento (zo zrejmých dôvodov som vložil náhodnú MAC adresu a IP adresu):
eth0: flags=8863 mtu 1500 ether 01:23:45:67:89:ab inet6 f0cd::ef01:0203:0405:181%en1 prefixlen 64 scopeid 0x5 inet 192.168.0.21 netmask 0xffffff00 broadcast 192.168.0.21 nd6 options=1 media: autoselect status: active
Ak váš výstup vyzerá nejako tak, potom funguje. Úspešne ste nainštalovali svoju prvú aplikáciu NodeOS: ifconfig
.
Aký zmysel má mať operačný systém napísaný v Node.js, ak môžete robiť rovnaké veci (alebo dokonca menej vecí), ktoré môžete robiť v Ubuntu alebo inej distribúcii Linuxu? Celý bod je, že všetko sa vyvíja pomocou ničoho iného ako Node.js. To tiež znamená, že môžeme rozvíjať naše aplikácie nepoužívajú nič iné ako Node.js. Napríklad NodeOS nemá predvolenú implementáciu príkazu man
, ktorý sa v systéme Linux používa na zobrazenie manuálnych stránok iných príkazov. Nebojte sa, implementácia je jednoduchá. Ako, počujem, že sa pýtaš? Jednoduché.
Najskôr si nainštalujeme textový editor s názvom Hipster, aby sme mohli vytvárať a upravovať súbory vykonaním nasledujúceho príkazu: npm install -g [email protected]
. Tento editor súborov je jednoduchý a určite nie niečo, čo by som použil ako editor pre čokoľvek iné, ale v tomto prípade je to dosť dobré. Vytváranie súborov pomocou aplikácie Hipster je skutočne jednoduché, stačí spustiť hip filename
, ako napríklad hip package.json
; pre uloženie stlačte Ctrl + s
a pre ukončenie stlačte Ctrl + q
. V tomto príklade použijem kód vyvinutý jedným z hlavných vývojárov systému NodeOS, sám som ho vlastne neimplementoval. Originálny kód pre náš príklad nájdete v úložisko Git node-bin-man .
Vráťme sa k vytvoreniu našej prvej aplikácie NodeOS. Ako pri každej aplikácii Node.js (alebo balíku NPM), začneme vytvorením package.json
súbor, ako v nasledujúcom príklade:
{ 'name': 'bin-man', 'version': '0.0.1', 'description': 'Format and display manual pages', 'bin': { 'man': 'man.js' }, 'repository': 'https://github.com/groundwater/node-bin-man', 'author': 'groundwater', 'license': 'MIT', 'dependencies': { 'blessed': '~0.0.22' } }
Parametre name
, version
, author
, repository
, license
a description
sú samozrejmé. The bin
kolekcia je objekt kľúč / hodnota JSON obsahujúci názov príkazu a asociovaný súbor JavaScript. V našom príklade man
príkaz je asociovaný so súborom man.js
. Zbierka dependencies
obsahuje zoznam balíkov NPM, ktoré sú potrebné na používanie tejto aplikácie. V našom príklade bol autorom kódu Blessed, knižnica podobná kliatbám s rozhraním API terminálu na vysokej úrovni pre Node.js.
Teraz poďme k hlavnej časti, skutočnému kódu.
#!/usr/bin/env node
Táto časť sa nazýva „shebang“. NodeOS to v skutočnosti nevyžaduje, ale operačnému systému hovorí, ako vykonať nasledujúci kód. V našom prípade informuje tlmočníka, že všetko je potrebné vykonať príkazom /usr/bin/env node
.
var fs = require('fs'); var blessed = require('blessed');
Rovnako ako v Node.js, aj funkcia require()
načíta vybraný balík do pamäte a uloží ho do zadanej premennej.
var arg = process.argv[2] || 'bin-man';
Štandardné správanie a man
príkaz povie o sebe manuál, ak nie je zadaný iný príkaz. Náš príklad kódu robí to isté: Ak nie je zadaný žiadny argument pre druhý parameter (prvý je samotný človek), použije sa predvolene bin-man.
var path = process.env.HOME + '/lib/node_modules/' + arg + '/README.md'; try{ var readme = fs.readFileSync(path, 'utf-8'); }catch(e){ console.log('No README.md for Package ',arg); process.exit(-1); }
V tomto okamihu program skontroluje, či pre danú aplikáciu existuje súbor readme. V NodeOS je cestou inštalácie každej aplikácie domovský adresár (alebo /
), za ktorým nasleduje adresár lib/node_modules
. Ak súbor README.md
existuje, uloží svoj obsah do premennej readme
. V opačnom prípade zobrazí chybu a ukončí proces.
// Create a screen object. var screen = blessed.screen(); var box = blessed.box({ content: readme, alwaysScroll:true, scrollable: true, }); // Append our box to the screen. screen.append(box);
Blessed má skutočne jednoduché API; zobraziť obsah súboru je také ľahké, ako keď mu poviete, aby vytvoril box
a načítanie obsahu.
screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); });
Poďme si teraz vytvoriť spôsob ukončenia man
žiadosť. Kombinujeme klávesy escape
, q
alebo kombinácia štýlov emacs C-c
ukončiť proces.
screen.key(['space','f','j','n'], function(ch, key) { box.scroll(box.height); screen.render(); }); screen.key(['down'], function(ch, key) { box.scroll(1); screen.render(); }); screen.key(['up'], function(ch, key) { box.scroll(-1); screen.render(); }); screen.key(['b','k','p'], function(ch, key) { box.scroll(-box.height); screen.render(); });
Smerovými klávesmi prechádzame nahor alebo nadol o jeden riadok a klávesmi space
, f
, j
alebo n
posúvanie nadol po stránke (toľko riadkov, koľko je na obrazovke). Použite b
, k
alebo p
urobiť naopak.
box.focus(); screen.render();
Nakoniec povieme aplikácii, aby sa zamerala na box
celú vec sme vytvorili a vykreslili. Umiestnime tieto súbory do adresára /lib/node_modules/bin-man
a pridajme jednoduché README.md
, niečo ako toto:
# Man Author: @groundwater ## Install npkg install bin-man ## Usage ``` Usage: man PKGNAME Display a packages README.md file ```
Naša prvá vlastná aplikácia pre NodeOS je takmer hotová. Ostáva už len posledný malý krok; musíme vytvoriť konfiguračný súbor, pretože je to požiadavka pre aplikácie NodeOS. Je to také jednoduché ako vytvorenie súboru v ceste /etc/bin-man/config.json
s nasledujúcim obsahom: {}
, prázdny objekt JSON. Teraz môžeme vyskúšať našu novú aplikáciu. Beží man
vo vnútri shellu NodeOS by mal zobraziť súbor readme, ktorý sme vytvorili skôr.
Ako vidíte na našom príklade jednoduchého kódu, implementácia všetkého v NodeOS je ľahká úloha, stačí vám vedieť Node.js.
NodeOS má veľa potenciálu a myslím si, že by sa po implementácii ďalších funkcií mohol stať skvelým operačným systémom. Stále to potrebuje prácu, ale v dôsledku popularity celého ekosystému založeného na Node.js by ma neprekvapilo, keby sa rýchlo stal rýchlo obľúbeným operačným systémom. Čo si o tom myslíš? Dajte mi vedieť v komentároch.