Είμαι βέβαιος ότι έχουν ακούσει οι περισσότεροι προγραμματιστές 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, δεν τον έχω υλοποιήσει. Ο αρχικός κώδικας για το παράδειγμά μας βρίσκεται στο το αποθετήριο Git node-bin-man .
Ας επιστρέψουμε στη δημιουργία της πρώτης εφαρμογής 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
Η συλλογή είναι ένα αντικείμενο κλειδιού / τιμής JSON που περιέχει το όνομα της εντολής και ένα σχετικό αρχείο JavaScript. Στο παράδειγμά μας, το man
Η εντολή σχετίζεται με το αρχείο man.js
. Η συλλογή, dependencies
, περιέχει μια λίστα πακέτων NPM που απαιτούνται για τη χρήση αυτής της εφαρμογής. Στο παράδειγμά μας, ο συντάκτης του κώδικα περιλάμβανε το Blessed, μια βιβλιοθήκη τύπου κατάρας με ένα τερματικό API διεπαφής υψηλού επιπέδου για το Node.js.
Τώρα ας πάμε στο κύριο μέρος, τον πραγματικό κώδικα.
#!/usr/bin/env node
Αυτό το μέρος ονομάζεται 'shebang'. Στην πραγματικότητα δεν απαιτείται από το 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.
llc εναντίον s-corp εναντίον c-corp
Το NodeOS έχει πολλές δυνατότητες και νομίζω ότι θα μπορούσε να γίνει ένα εξαιρετικό λειτουργικό σύστημα μόλις εφαρμοστούν πρόσθετα χαρακτηριστικά. Χρειάζεται ακόμα δουλειά, αλλά ως αποτέλεσμα της δημοτικότητας ολόκληρου του οικοσυστήματος που βασίζεται στο Node.js, δεν θα εκπλαγώ αν γίνει γρήγορα ένα δημοφιλές λειτουργικό σύστημα. Τι πιστεύετε για αυτό; Επιτρέψτε μου να μάθω στα σχόλια.