Olen kindel, et enamik programmeerijaid on sellest kuulnud Node.js , aga mis siis NodeOS ? Jah, NodeOS, operatsioonisüsteem, mis on kirjutatud Node.js-s. Noh, selline. NodeOS kasutab Linuxi kernelit enamiku jõudluskriitiliste asjade jaoks, näiteks riistvara interaktsioonide jaoks, kuid kõige muu jaoks kasutab Node.js. NodeOSi arendamine algas kaks aastat tagasi ja selle lõid inimesed, kes jagasid lihtsat, kuid intrigeerivat ideed: 'Kas operatsioonisüsteemi on võimalik luua ainult Node.js abil?'
monte carlo simulatsiooni aegrida
Kõigepealt mõelge Node.js-i tehtud edusammudele selle lühikese aja jooksul. Mõelge nüüd sellele, mis juhtub operatsioonisüsteemiga. Seejärel lisame sellele lahedaid asju.
NodeOS tutvustas huvitavat paradigmat: kui kõigil kasutajatel on eraldatud failisüsteem, annab see neile töötamiseks lihtsa failisüsteemi hierarhia. Kuna nende 'kodukataloog' on tegelikult nende endi failisüsteemi hierarhia juur, saavad nad pakette installida ülemaailmselt ilma erilisi õigusi nõudmata ega pea midagi konfigureerima, kuna need on vaikimisi oma kodukataloogi installitud. Samuti pakub see palju turvalisust; kui häkker leiab viisi operatsioonisüsteemis konkreetse konto sisenemiseks, on ainus partitsioon, millele tal on juurdepääs, selle kasutaja partitsioon. Lõpptulemuseks on häkker ei saa kompromiteerida kogu süsteemi.
Kui järele mõelda, tähendab Node.js-i kasutav operatsioonisüsteem seda, et mis tahes NPM-is saadaval olev pakett on samal ajal ka NodeOS-i pakett. Kirjutamise ajal on 210 735 paketti; kuna NPM-i pakettide arv kasvab iga minutiga, poleks imelik, kui mõne aasta pärast oleks NodeOS-il miljon rakendust.
See ei pruugi tunduda suurem asi, kuid Linux on enimkasutatav serveri operatsioonisüsteem. Kuna NodeOS põhineb Linuxi kernelil, võiksite minimaalsete muudatustega käivitada kõiki teisi Linuxi distributsioonidele kirjutatud rakendusi.
Nii palju kui ma tahaksin valmis NodeOS-i, pole seda veel olemas. Sellel puuduvad endiselt paljud serveri operatsioonisüsteemi põhifunktsioonid. Näiteks puudub kogu BASH-i tööriistakomplekt, sealhulgas ps, saba, nano ja grep. Lisaks ei saa te seda käivitada töölaua operatsioonisüsteemina, kuna sellel pole GUI-d. Muidugi saate mõned puuduvad funktsioonid üsna hõlpsalt rakendada, kasutades natuke JavaScripti, kuid see, et kõik mainitud funktsioonid pole vaikimisi saadaval, pole hea.
Lihtsaim ja kiireim viis NodeOSi proovimiseks on järgmine:
Kui olete Dockeri installinud, on NodeOS-i eksemplari käivitamine lihtne. Kõik, mida peate tegema, on käivitada järgmine käsk ja Docker teeb kogu maagia:
sudo docker run -t -i nodeos/nodeos
Eelnimetatud käsu käivitamisel laadib Docker automaatselt hoidlast alla NodeOS-i kettapildi ja teostab NodeOS-i installimise virtuaalmasinas. Kui installimine on lõpule jõudnud, avab see SSH-seansi NodeOS-i kestale.
On mõned põhjused, miks soovite Dockeri kasutamist vältida, ja üks neist on uusim NodeOS-i versioon. Kirjutamise ajal tehti viimane muudatus NodeOS-i Dockeri pildile kaks kuud tagasi, arendusversiooni värskendati aga kuus päeva tagasi. Seega, kui soovite kasutada uusimat versiooni, peaksite kindlasti hankima lähtekoodi. See pole liiga keeruline, kuid see võtab kaua aega. Sa vajad:
Kui kõik on käes, saate jätkata lähtekoodi kompileerimist:
bash git clone [email protected] :NodeOS/NodeOS.git
.cd NodeOS
ja npm install
.bash npm start
Qemu sees NodeOS-i käivitamiseks.Kui installimine on lõpule jõudnud, saame selle toimimist kontrollida, käivitades NodeOS-i kestas käsu ls
Selline väljund peaks ilmuma:
[ 'etc', 'lib', 'lib64', 'root', 'bin', 'sys', 'usr', 'share', 'proc' ]
Kui see töötab, tähendab see, et mõned põhikäsklused töötavad. Aga mis siis, kui tahame kuvada võrgukaardi IP-aadressi? Linuxi all on käsk nimega ifconfig
see teeb just seda; proovime seda:
command not found: ifconfig
Näib, et käsk ifconfig
on kadunud. Seda seetõttu, et NodeOS-il pole vaikimisi ifconfig
käsk. Mis nüüd? Noh, see on lihtne; NodeOSil on integreeritud paketihaldur (nt apt
või yum
), nimega npkg
, mis põhineb Node'i NPM-il ja on hõlpsasti kasutatav. ifconfig
Installimine on sama lihtne kui järgmise käsu käivitamine:
npkg install bin-ifconfig
Kui kõik läks hästi, käsk ifconfig
peaks nüüd olema kestas saadaval. Kui proovime seda uuesti käivitada, kuvatakse selline väljund (ilmselgetel põhjustel panin juhusliku MAC-aadressi ja IP-aadressi):
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
Kui teie väljund näeb välja selline, siis see töötab. Olete edukalt installinud oma esimese NodeOS-i rakenduse: ifconfig
.
Mis mõtet on operatsioonisüsteemil kirjutada Node.js-sse, kui saate teha samu asju (või isegi vähem asju), mida saate teha Ubuntus või mõnes muus Linuxi jaotuses? Noh, kogu mõte on selles, et kõik on välja töötatud ainult Node.js abil. See tähendab ka, et saame arenema meie rakendused ei kasuta muud kui Node.js. Näiteks pole NodeOS-il vaikimisi rakendust käsule man
, mida Linuxis kasutatakse teiste käskude käsitsi lehtede kuvamiseks. Ära karda, selle rakendamine on lihtne. Kuidas, ma kuulen, kuidas sa küsid? Lihtne.
Kõigepealt installime tekstiredaktori nimega Hipster, et saaksime faile luua ja redigeerida, käivitades järgmise käsu: npm install -g [email protected]
. See failiredaktor on lihtne ja kindlasti mitte midagi, mida ma muudeks toimetajateks kasutaksin, kuid see on antud juhul piisavalt hea. Hipsteriga failide loomine on tõesti lihtne, lihtsalt käivitage hip filename
, nagu hip package.json
; salvestamiseks vajutage Ctrl + s
ja väljumiseks vajutage Ctrl + q
. Selle näite jaoks kasutan koodi, mille on välja töötanud üks peamisi NodeOS-i arendajaid, ma pole seda tegelikult ise rakendanud. Meie näite originaalkoodi leiate aadressilt sõlme-bin-man Giti hoidla .
Naaseme oma esimese NodeOS-i rakenduse loomise juurde. Nagu iga rakenduse Node.js (või NPM-i paketi) puhul, alustame ka package.json
loomisega faili, nagu järgmises näites:
{ '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' } }
Parameetrid name
, version
, author
, repository
, license
ja description
on iseenesestmõistetavad. bin
kogu on JSON-i võtme- / väärtusobjekt, mis sisaldab käsu nime ja sellega seotud JavaScripti faili. Meie näites on man
käsk on seotud failiga man.js
. Kogumik dependencies
sisaldab loendit NPM-i pakettidest, mida on vaja selle rakenduse kasutamiseks. Meie näites lisas koodi autor Blode, needusetaolise teegi, millel on Node.js-i kõrgetasemelise terminaliliidese API-ga.
Nüüd läheme põhiosa, tegeliku koodi juurde.
#!/usr/bin/env node
Seda osa nimetatakse “shebangiks”. NodeOS seda tegelikult ei nõua, kuid see annab operatsioonisüsteemile teada, kuidas järgmist koodi käivitada. Meie puhul ütleb see tõlgile, et kõik tuleb täita käsuga /usr/bin/env node
.
kui suur on veinitööstus
var fs = require('fs'); var blessed = require('blessed');
Täpselt nagu Node.js-s, on funktsioon require()
laadib valitud paketi mällu ja salvestab selle määratud muutujasse.
var arg = process.argv[2] || 'bin-man';
A man
standardkäitumine käsk on käsiraamatust endast teada anda, kui muud käsku pole määratud. Sama teeb ka meie koodinäide: kui teisele parameetrile (esimene on inimene ise) pole ühtegi argumenti määratud, on see vaikimisi 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); }
Siinkohal kontrollib programm, kas antud rakenduse jaoks on olemas readme-fail. NodeOS-is on iga rakenduse installitee kodukataloog (või /
), millele järgneb kataloog lib/node_modules
. Kui fail README.md
on olemas, salvestab see muutuja readme
sisse. Vastasel juhul näitab see viga ja väljub protsessist.
// 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);
Blessedil on tõeliselt lihtne API; faili sisu näitamine on sama lihtne kui käsk luua box
ja sisu laadimine.
screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); });
Nüüd loome võimaluse man
-ist väljumiseks rakendus. Ühendame võtmed escape
, q
või emacsi stiilis kombinatsioon C-c
protsessist väljumiseks.
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(); });
Ühe rea üles või alla kerimiseks kasutame suunaklahve ja klahve space
, f
, j
või n
lehe alla kerimiseks (nii palju ridu kui ekraanil on). Kasutage b
, k
või p
teha vastupidist.
box.focus(); screen.render();
Lõpuks käskime rakendusel keskenduda box
-le lõime ja renderdasime kogu asja. Paneme need failid kataloogi /lib/node_modules/bin-man
ja lisame lihtsa README.md
, umbes nii:
# Man Author: @groundwater ## Install npkg install bin-man ## Usage ``` Usage: man PKGNAME Display a packages README.md file ```
Oleme oma esimese kohandatud rakendusega NodeOS peaaegu valmis. Alles on jäänud üks viimane väike samm; peame looma konfiguratsioonifaili, kuna see on NodeOS-i rakenduste nõue. See on sama lihtne kui faili loomine teele /etc/bin-man/config.json
järgmise sisuga: {}
, tühi JSON-objekt. Nüüd saame proovida oma uut rakendust. Jooksmine man
NodeOS-i kest peaks näitama varem loodud readme-faili.
Nagu näete meie lihtsa koodinäite abil, on NodeOS-is mis tahes rakendamine lihtne ülesanne, peate teadma ainult Node.js-i.
NodeOSil on palju potentsiaali ja ma arvan, et see võib saada suurepäraseks operatsioonisüsteemiks, kui lisafunktsioonid on rakendatud. See vajab veel tööd, kuid kogu Node.js-põhise ökosüsteemi populaarsuse tulemusel ei oleks ma üllatunud, kui sellest saaks kiiresti populaarne operatsioonisüsteem. Mis sa sellest arvad? Andke mulle kommentaarides teada.