Olen varma, että useimmat ohjelmoijat ovat kuulleet Node.js , Entä NodeOS ? Kyllä, NodeOS, Node.js: ään kirjoitettu käyttöjärjestelmä. No, sellainen. NodeOS käyttää Linux-ydintä useimpiin suorituskykykriittisiin asioihin, kuten esimerkiksi laitteistovaikutuksiin, mutta kaikkeen muuhun se käyttää Node.js-tiedostoa. NodeOS-kehitys alkoi kaksi vuotta sitten, ja sen loivat ihmiset, joilla oli yksinkertainen, mutta kiehtova idea: 'Onko mahdollista luoda käyttöjärjestelmä vain Node.js: n avulla?'
Ajattele ensinnäkin Node.js: n edistymistä lyhyessä ajassa. Ajattele nyt samaa, mitä tapahtuu käyttöjärjestelmässä. Sitten lisätään siihen hienoja juttuja.
NodeOS esitteli mielenkiintoisen paradigman: Jos kaikilla käyttäjillä on eristetty tiedostojärjestelmä, se antaa heille yksinkertaisen tiedostojärjestelmähierarkian työskennellä. Koska heidän 'kotikansionsa' on itse asiassa heidän oman tiedostojärjestelmänsä hierarkian juuret, he voivat asentaa paketteja maailmanlaajuisesti tarvitsematta erityisiä käyttöoikeuksia eikä heidän tarvitse määrittää mitään, koska ne asennetaan oletusarvoisesti kotihakemistoonsa. Lisäksi se tarjoaa paljon turvallisuutta; jos hakkeri löytää tavan päästä tiettyyn tiliin käyttöjärjestelmässä, ainoa osio, johon hän pääsee, on kyseisen käyttäjän osio. Lopputulos on hakkeri ei voi vaarantaa koko järjestelmän.
Jos ajattelet sitä, Node.js: ää käyttävä käyttöjärjestelmä tarkoittaa, että mikä tahansa NPM: ssä saatavilla oleva paketti on samalla myös NodeOS-paketti. Kirjoitushetkellä on 210735 pakettia; Koska NPM-pakettien määrä kasvaa joka minuutti, ei ole outoa, jos muutamassa vuodessa NodeOSilla on miljoona sovellusta.
Tämä ei ehkä näytä kovin suurelta, mutta Linux on eniten käytetty palvelimen käyttöjärjestelmä. Koska NodeOS perustuu Linux-ytimeen, voit suorittaa kaikki muut Linux-jakeluille kirjoitetut sovellukset minimaalisilla muutoksilla.
Niin paljon kuin haluaisin valmiin NodeOS: n, sitä ei vielä ole. Sieltä puuttuu edelleen monia palvelimen käyttöjärjestelmän avaintoimintoja. Esimerkiksi koko BASH-työkalusarja puuttuu, mukaan lukien ps, häntä, nano ja grep. Et myöskään voi käyttää sitä työpöydän käyttöjärjestelmänä, koska sillä ei ole käyttöliittymää. Toki, voit toteuttaa joitain puuttuvia ominaisuuksia melko helposti käyttämällä hieman JavaScriptiä, mutta se, että kaikki mainitut ominaisuudet eivät ole oletusarvoisesti käytettävissä, ei ole hyvä.
Helpoin ja nopein tapa kokeilla NodeOSia on käyttää seuraavaa:
Kun olet asentanut Dockerin, NodeOS-ilmentymän suorittaminen on helppoa. Sinun tarvitsee vain suorittaa seuraava komento, ja Docker tekee kaiken taikuuden:
sudo docker run -t -i nodeos/nodeos
Kun suoritat yllä mainitun komennon, Docker lataa NodeOS-levykuvan automaattisesti arkistosta ja suorittaa NodeOS-asennuksen virtuaalikoneessa. Kun asennus on valmis, se avaa SSH-istunnon NodeOS-kuoreen.
On joitain syitä, miksi haluat välttää Dockerin käyttöä, ja yksi on uusin NodeOS-versio. Kirjoitushetkellä viimeinen muutos NodeOS: n Docker-kuvaan tehtiin kaksi kuukautta sitten, kun taas kehitysversio päivitettiin kuusi päivää sitten. Joten, jos haluat käyttää uusinta versiota, sinun on ehdottomasti hankittava lähdekoodi. Se ei ole liian vaikeaa, mutta se kestää kauan. Tarvitset:
Kun sinulla on kaikki, voit jatkaa lähdekoodien kokoamista:
bash git clone [email protected] :NodeOS/NodeOS.git
.cd NodeOS
ja npm install
.bash npm start
suorittaa NodeOS Qemun sisällä.Kun asennus on valmis, voimme tarkistaa, toimiiko se suorittamalla NodeOS-kuoren sisällä komennon ls
Tämänkaltaisen tuloksen pitäisi näkyä:
[ 'etc', 'lib', 'lib64', 'root', 'bin', 'sys', 'usr', 'share', 'proc' ]
Jos se toimii, se tarkoittaa, että jotkut peruskomennot toimivat. Entä jos haluamme näyttää verkkokortin IP-osoitteen? Linuxissa on komento nimeltä ifconfig
se tekee juuri niin; kokeillaan:
command not found: ifconfig
Näyttää siltä, että komento ifconfig
puuttuu. Tämä johtuu siitä, että NodeOS: lla ei ole oletusarvoa ifconfig
komento. Mitä nyt? No, se on yksinkertaista; NodeOS: lla on integroitu paketinhallinta (kuten apt
tai yum
), nimeltään npkg
, joka perustuu Solmun NPM: ään ja on helppokäyttöinen. Asennetaan ifconfig
on yhtä yksinkertainen kuin seuraavan komennon suorittaminen:
npkg install bin-ifconfig
Jos kaikki meni hyvin, komento ifconfig
pitäisi nyt olla saatavilla kuoressa. Jos yritämme suorittaa sen uudelleen, tällainen tulos näkyy (laitoin satunnaisen MAC-osoitteen ja IP-osoitteen ilmeisistä syistä):
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
Jos tulos näyttää sellaiselta, se toimii. Olet asentanut ensimmäisen NodeOS-sovelluksen: ifconfig
.
Mitä järkeä on, että käyttöjärjestelmä on kirjoitettu Node.js-tiedostoon, jos voit tehdä samoja asioita (tai jopa vähemmän asioita) kuin Ubuntussa tai muussa Linux-jakelussa? No, koko asia on, että kaikki on kehitetty käyttämällä muuta kuin Node.js. Se tarkoittaa myös, että voimme kehittää sovelluksissamme, jotka eivät käytä muuta kuin Node.js. Esimerkiksi NodeOS: lla ei ole oletusasetusta komennolle man
, jota käytetään Linuxissa muiden komentojen manuaalisten sivujen näyttämiseen. Älä pelkää, sen toteuttaminen on helppoa. Kuinka, kuulen sinun kysyvän? Yksinkertainen.
Asennetaan ensin tekstieditori nimeltä Hipster, jotta voimme luoda ja muokata tiedostoja suorittamalla seuraavan komennon: npm install -g [email protected]
Tämä tiedostojen muokkausohjelma on yksinkertainen ja ehdottomasti ei jotain, jota käytän muokkaajana mihinkään muuhun, mutta se on tässä tapauksessa tarpeeksi hyvä. Tiedostojen luominen Hipsterillä on todella yksinkertaista, suorita vain hip filename
, kuten hip package.json
; tallenna painamalla Ctrl + s
ja poistuaksesi paina Ctrl + q
. Tässä esimerkissä aion käyttää koodia, jonka on kehittänyt yksi tärkeimmistä NodeOS-kehittäjistä, en itse ole itse ottanut sitä käyttöön. Esimerkkimme alkuperäinen koodi löytyy osoitteesta solmu-bin-man Git -tietovarasto .
Palataan ensimmäisen NodeOS-sovelluksen luomiseen. Kuten jokaisessa Node.js-sovelluksessa (tai NPM-paketissa), aloitamme luomalla package.json
tiedosto, kuten seuraavassa esimerkissä:
{ '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' } }
Parametrit name
, version
, author
, repository
, license
ja description
ovat itsestään selviä. bin
kokoelma on JSON-avain / arvo-objekti, joka sisältää komennon nimen ja siihen liittyvän JavaScript-tiedoston. Esimerkissämme man
komento liittyy tiedostoon man.js
Kokoelma dependencies
sisältää luettelon NPM-paketeista, joita tarvitaan tämän sovelluksen käyttämiseen. Esimerkissämme koodin kirjoittaja sisälsi kirouksen kaltaisen kirouksen kaltaisen kirjaston, jolla on korkean tason päätelaitteiden rajapinta Node.js: lle.
Mennään nyt pääosaan, varsinaiseen koodiin.
#!/usr/bin/env node
Tätä osaa kutsutaan 'shebangiksi'. NodeOS ei todellakaan vaadi sitä, mutta se kertoo käyttöjärjestelmälle, kuinka seuraava koodi suoritetaan. Meidän tapauksessamme se kertoo tulkkille, että kaikki on suoritettava komennolla /usr/bin/env node
.
var fs = require('fs'); var blessed = require('blessed');
Aivan kuten Node.js: ssä, funktio require()
lataa valitun paketin muistiin ja tallentaa sen määritettyyn muuttujaan.
var arg = process.argv[2] || 'bin-man';
man
: N vakiokäyttäytyminen komento on kertoa käyttöoppaasta itsestään, jos muuta komentoa ei ole määritetty. Koodiesimerkkimme tekee samoin: Jos toiselle parametrille (ensimmäinen on ihminen itse) ei määritetä argumenttia, se on oletuksena 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); }
Tässä vaiheessa ohjelma tarkistaa, onko annetulle sovellukselle readme-tiedosto. NodeOSissa jokaisen sovelluksen asennuspolku on kotihakemisto (tai /
), jota seuraa hakemisto lib/node_modules
. Jos tiedosto README.md
on olemassa, se tallentaa sisällön muuttujaan readme
. Muussa tapauksessa se näyttää virheen ja sulkee prosessin.
// 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);
Siunatulla on todella yksinkertainen sovellusliittymä; tiedoston sisällön näyttäminen on yhtä helppoa kuin käskeminen luoda box
ja sisällön lataaminen.
screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); });
Luodaan nyt tapa poistua man
-sivulta sovellus. Yhdistämme näppäimet escape
, q
tai emacs-tyylinen yhdistelmä C-c
poistuaksesi prosessista.
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(); });
Selataan suuntanäppäimiä ylös tai alas yhdellä rivillä ja näppäimet space
, f
, j
tai n
vierittää sivua alaspäin (niin monta riviä kuin näytöllä on). Käytä b
, k
tai p
tehdä päinvastoin.
box.focus(); screen.render();
Lopuksi käskemme sovelluksen keskittymään box
loimme ja renderöimme kaiken. Laitetaan nuo tiedostot hakemistoon /lib/node_modules/bin-man
ja lisätään yksinkertainen README.md
, jotain tällaista:
# Man Author: @groundwater ## Install npkg install bin-man ## Usage ``` Usage: man PKGNAME Display a packages README.md file ```
Ensimmäisen mukautetun NodeOS-sovelluksen käyttö on melkein valmis. Vain yksi viimeinen pieni askel on jäljellä; meidän on luotava asetustiedosto, koska se on vaatimus NodeOS-sovelluksille. Se on yhtä yksinkertaista kuin luoda tiedosto polulle /etc/bin-man/config.json
seuraavalla sisällöllä: {}
, tyhjä JSON-objekti. Nyt voimme kokeilla uutta sovellustamme. Juoksu man
NodeOS-kuoren sisällä pitäisi näkyä aiemmin luoma readme-tiedosto.
Kuten voit nähdä yksinkertaisen koodiesimerkkimme avulla, minkä tahansa toteuttaminen NodeOSissa on helppo tehtävä, sinun tarvitsee vain tietää Node.js.
NodeOS: lla on runsaasti potentiaalia, ja mielestäni siitä voi tulla loistava käyttöjärjestelmä, kun lisäominaisuudet otetaan käyttöön. Se tarvitsee edelleen työtä, mutta koko Node.js-pohjaisen ekosysteemin suosion vuoksi en olisi yllättynyt, jos siitä tulisi nopeasti suosittu käyttöjärjestelmä. Mitä mieltä olet siitä? Kerro minulle kommenteissa.