Сигурен съм, че повечето програмисти са чували за Node.js , но какво ще кажете за NodeOS ? Да, NodeOS, операционна система, написана в Node.js. Е, нещо като. NodeOS използва ядрото на Linux за повечето критични за производителността неща, като например хардуерни взаимодействия, но за всичко останало използва Node.js. Разработката на NodeOS стартира преди две години и е създадена от хора, които споделят проста, но интригуваща идея: „Възможно ли е да създадете операционна система, използвайки само Node.js?“
интернет на нещата интелигентни устройства
На първо място, помислете за напредъка, който Node.js е постигнал за краткото време, през което е бил. Сега помислете за същото нещо, което се случва с операционна система. След това нека добавим няколко готини неща към него.
NodeOS представи интересна парадигма: Ако всички потребители имат изолирана файлова система, това им дава проста йерархия на файловата система, с която да работят. Тъй като тяхната „домашна папка“ всъщност е коренът на собствената й йерархия на файловата система, те могат да инсталират пакети в световен мащаб, без да изискват специални разрешения и не е необходимо да конфигурират нищо, тъй като те са инсталирани в домашната си директория по подразбиране. Освен това осигурява добра доза сигурност; ако хакер намери начин да влезе в определен акаунт в операционната система, единственият дял, до който той / тя може да има достъп, е дялът на този потребител. Крайният резултат е хакер не мога компрометират цялата система.
Ако се замислите, операционна система, която използва Node.js, означава, че всеки пакет, наличен в NPM, е в същото време и пакет NodeOS. По време на писането има 210 735 пакета; тъй като броят на NPM пакетите нараства всяка минута, не би било странно, ако след няколко години NodeOS има милион приложения.
Това може да не изглежда голяма работа, но Linux е най-използваната сървърна операционна система. Тъй като NodeOS се основава на ядрото на Linux, можете да стартирате всяко приложение, написано за други дистрибуции на Linux с минимални промени.
Колкото и да ми се иска завършен NodeOS, той все още не е там. Все още липсват много ключови функции за сървърна операционна система. Например липсва целият набор от инструменти на BASH, включително ps, tail, nano и grep. Освен това не можете да го стартирате като настолна операционна система, тъй като тя няма GUI. Разбира се, можете да внедрите някои от липсващите функции доста лесно, като използвате малко JavaScript, но фактът, че всички споменати функции не са налични по подразбиране, не е добър.
Най-лесният и бърз начин да изпробвате NodeOS е като използвате следното:
След като инсталирате Docker, стартирането на екземпляр на NodeOS е лесно. Всичко, което трябва да направите, е да изпълните следната команда и Docker прави цялата магия:
sudo docker run -t -i nodeos/nodeos
Когато стартирате гореспоменатата команда, Docker автоматично изтегля образа на диска за NodeOS от хранилище и извършва инсталирането на NodeOS във виртуална машина. След като инсталацията приключи, тя отваря SSH сесия за обвивката NodeOS.
Има няколко причини, поради които бихте искали да избягвате използването на Docker, а една е най-новата версия на NodeOS. По време на писането последната промяна в образа на Docker на NodeOS е извършена преди два месеца, докато версията за разработка е актуализирана преди шест дни. Така че, ако искате да използвате най-новата версия, определено трябва да получите изходния код. Това не е твърде трудно, но отнема много време. Ще имаш нужда:
След като имате всичко, можете да продължите със компилацията на изходния код:
bash git clone [email protected] :NodeOS/NodeOS.git
.cd NodeOS
и npm install
.bash npm start
за да стартирате NodeOS вътре в Qemu.След като инсталацията приключи, можем да проверим дали работи, като изпълним вътре в черупката на NodeOS командата ls
Изход като този трябва да се покаже:
[ 'etc', 'lib', 'lib64', 'root', 'bin', 'sys', 'usr', 'share', 'proc' ]
Ако го направи, това означава, че някои основни команди работят. Но какво, ако искаме да покажем IP адреса на мрежовата карта? Под Linux има команда, наречена ifconfig
това прави точно това; да пробваме:
command not found: ifconfig
Изглежда командата ifconfig
липсва. Това е така, защото NodeOS няма по подразбиране ifconfig
команда. Сега какво? Е, просто е; NodeOS има интегриран мениджър на пакети (като apt
или yum
), наречен npkg
, който се основава на NPM на Node и е лесен за използване. Инсталиране ifconfig
е толкова просто, колкото изпълнението на следната команда:
npkg install bin-ifconfig
Ако всичко е минало добре, командата ifconfig
вече трябва да е наличен в черупката. Ако се опитаме да го изпълним отново, се показва изход като този (поставям произволен MAC адрес и IP адрес по очевидни причини):
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
Ако резултатът ви изглежда по някакъв начин, значи работи. Успешно инсталирахте първото си приложение NodeOS: ifconfig
.
обработка на изключения при пролетно зареждане
Какъв е смисълът да имате операционна система, написана в Node.js, ако можете да правите същите неща (или дори по-малко неща), които можете да правите в Ubuntu или друга дистрибуция на Linux? Е, целият смисъл е, че всичко е разработено, като не се използва нищо повече от Node.js. Това също означава, че можем развиват нашите приложения не използват нищо повече от Node.js. Например NodeOS няма изпълнение по подразбиране за командата man
, която се използва в Linux за показване на ръчни страници на други команди. Не се страхувайте, прилагането му е лесно. Как, чувам как питате? Просто.
Първо, нека инсталираме текстов редактор, наречен Hipster, за да можем да създаваме и редактираме файлове, като изпълняваме следната команда: npm install -g [email protected]
Този файлов редактор е прост и определено не нещо, което бих използвал като редактор за нещо друго, но в случая е достатъчно добро. Създаването на файлове с Hipster е наистина просто, просто изпълнете hip filename
, като hip package.json
; за запазване натиснете Ctrl + s
и за изход натиснете Ctrl + q
. За този пример ще използвам код, разработен от един от основните разработчици на NodeOS, аз всъщност не съм го приложил. Оригиналният код за нашия пример може да бъде намерен в nod-bin-man Git хранилището .
Нека се върнем към създаването на първото ни приложение NodeOS. Както при всяко приложение Node.js (или NPM пакет), ние започваме със създаването на package.json
файл, както е в следния пример:
{ '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' } }
Параметрите name
, version
, author
, repository
, license
и description
са обяснителни. bin
collection е JSON обект ключ / стойност, съдържащ името на командата и асоцииран JavaScript файл. В нашия пример, man
команда е свързана с файла man.js
. Колекцията, dependencies
, съдържа списък на NPM пакетите, необходими за използването на това приложение. В нашия пример авторът на кода включва Blessed, подобна на проклятия библиотека с API за терминален интерфейс на високо ниво за Node.js.
Сега да преминем към основната част, действителният код.
#!/usr/bin/env node
Тази част се нарича „шебанг“. Всъщност не се изисква от NodeOS, но казва на операционната система как да изпълни следния код. В нашия случай той казва на интерпретатора, че всичко трябва да се изпълни с командата /usr/bin/env node
var fs = require('fs'); var blessed = require('blessed');
Точно както в Node.js, функцията require()
зарежда избрания пакет в паметта и го записва в посочената променлива.
var arg = process.argv[2] || 'bin-man';
Стандартното поведение на man
команда е да разкажете ръководство за себе си, ако не е посочена друга команда. Нашият пример за код прави същото: Ако не е посочен аргумент за втория параметър (първият е самият човек), той по подразбиране е 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); }
На този етап програмата проверява дали съществува файл на readme за даденото приложение. В NodeOS пътят за инсталиране на всяко приложение е началната директория (или /
), последвана от директорията lib/node_modules
. Ако файлът README.md
съществува, той запазва съдържанието си в променливата readme
. В противен случай показва грешка и излиза от процеса.
// 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 има наистина прост API; показването на съдържанието на файл е толкова лесно, колкото да му кажете да създаде box
и зареждане на съдържанието.
screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); });
Сега, нека създадем начин за излизане от man
приложение. Комбинираме клавишите escape
, q
или комбинацията в стил emacs C-c
за да излезете от процеса.
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(); });
Използваме клавишите за насочване, за да превъртаме нагоре или надолу един ред и клавишите space
, f
, j
или n
за да превъртите страница надолу (толкова редове, колкото има на екрана). Използвайте b
, k
или p
да се направи обратното.
box.focus(); screen.render();
И накрая, казваме на приложението да се съсредоточи върху box
създадохме и изобразихме цялото нещо. Нека поставим тези файлове в директорията /lib/node_modules/bin-man
и нека добавим прост README.md
, нещо подобно:
# Man Author: @groundwater ## Install npkg install bin-man ## Usage ``` Usage: man PKGNAME Display a packages README.md file ```
Почти приключихме с първото си персонализирано приложение за NodeOS. Остава само една последна малка стъпка; трябва да създадем конфигурационен файл, тъй като това е изискване за NodeOS приложения. Това е толкова просто, колкото създаването на файл по пътя /etc/bin-man/config.json
със следното съдържание: {}
, празен JSON обект. Сега можем да изпробваме новото ни приложение. Изпълнява се man
вътре в черупката NodeOS трябва да показва файла readme, който създадохме по-рано.
Както можете да видите с нашия прост пример с код, внедряването на каквото и да е в NodeOS е лесна задача, трябва само да знаете Node.js.
NodeOS има много потенциал и мисля, че може да се превърне в чудесна операционна система, след като бъдат внедрени допълнителни функции. Все още се нуждае от работа, но в резултат на популярността на цялата екосистема, базирана на Node.js, не бих се изненадал, ако бързо стане популярна операционна система. Какво мислиш за това? Кажете ми в коментарите.