apeescape2.com
  • メイン
  • エンジニアリング管理
  • モバイル
  • プロセスとツール
  • 製品ライフサイクル
バックエンド

NodeOS:JavaScriptベースのオペレーティングシステム

ほとんどのプログラマーは聞いたことがあると思います Node.js 、しかしどうですか NodeOS ?はい、NodeOS、Node.jsで記述されたオペレーティングシステムです。まあ、ちょっと。 NodeOSは、ハードウェアの相互作用など、パフォーマンスが重要なほとんどの処理にLinuxカーネルを使用しますが、それ以外のすべての処理にはNode.jsを使用します。 NodeOSの開発は2年前に始まり、シンプルでありながら興味をそそるアイデアを共有した人々によって作成されました。 「Node.jsのみを使用してオペレーティングシステムを作成することは可能ですか?」

ソフトウェア製品の価格設定方法

ダーウィンの進化チャート

Node.jsのみを使用してオペレーティングシステムを作成することは可能ですか? つぶやき

大したことは何ですか?

まず、Node.jsが短期間で進歩したことを考えてみてください。ここで、オペレーティングシステムで起こっているのと同じことを考えてみましょう。次に、いくつかのクールなものを追加しましょう。



ユーザーごとに独立した分離されたルートファイルシステム

NodeOSは、興味深いパラダイムを導入しました。すべてのユーザーが分離されたファイルシステムを持っている場合、それはユーザーに操作するための単純なファイルシステム階層を提供します。実際、「ホームフォルダー」は独自のファイルシステム階層のルートであるため、特別なアクセス許可を必要とせずにグローバルにパッケージをインストールでき、デフォルトでホームディレクトリにインストールされるため、何も構成する必要はありません。また、かなりのセキュリティを提供します。ハッカーがオペレーティングシステムの特定のアカウントに侵入する方法を見つけた場合、ハッカーがアクセスできる唯一のパーティションはそのユーザーのパーティションです。最終結果はハッカーです できません システム全体を危険にさらします。

Node.jsとNPM

あなたがそれについて考えるならば、Node.jsを使用するオペレーティングシステムは、NPMで利用可能なすべてのパッケージが同時にNodeOSパッケージでもあることを意味します。これを書いている時点では、210,735個のパッケージがあります。 NPMパッケージの数は毎分増加するため、数年以内にNodeOSに100万のアプリケーションがあったとしても不思議ではありません。

Linuxカーネルに基づいています

これは大したことではないように思われるかもしれませんが、Linuxは最も使用されているサーバーオペレーティングシステムです。 NodeOSはLinuxカーネルに基づいているため、最小限の変更で他のLinuxディストリビューション用に作成されたすべてのアプリケーションを実行できます。

欠点

完成したNodeOSが欲しいのですが、まだありません。サーバーオペレーティングシステムの多くの重要な機能がまだ不足しています。たとえば、ps、tail、nano、grepを含むBASHツールセット全体が欠落しています。さらに、GUIがないため、デスクトップオペレーティングシステムとして実行することはできません。確かに、JavaScriptを少し使用すれば、不足している機能のいくつかをかなり簡単に実装できますが、前述のすべての機能がデフォルトで使用できるわけではないという事実は良くありません。

では、どうすればNodeOSを試すことができますか?

Dockerの使用

NodeOSを試す最も簡単で迅速な方法は、次を使用することです。

  1. MacOSXまたはLinuxのいずれかを搭載したコンピューター。 Windowsで動作するかもしれませんが、私は試しませんでした。
  2. Docker。

Dockerをインストールすると、NodeOSのインスタンスを簡単に実行できます。次のコマンドを実行するだけで、Dockerがすべての魔法を実行します。

sudo docker run -t -i nodeos/nodeos

NodeOSを試す最も簡単で迅速な方法は、Dockerを使用することです。

NodeOSを試す最も簡単で迅速な方法は、Dockerを使用することです。 つぶやき

前述のコマンドを実行すると、DockerはNodeOSのディスクイメージをリポジトリから自動的にダウンロードし、仮想マシン内にNodeOSのインストールを実行します。インストールが完了すると、NodeOSシェルへのSSHセッションが開きます。

Dockerなし

Dockerの使用を避けたい理由はいくつかあり、そのうちの1つは最新のNodeOSバージョンです。これを書いている時点では、NodeOSのDockerイメージへの最後の変更は2か月前に行われ、開発バージョンは6日前に更新されました。したがって、最新バージョンを使用する場合は、必ずソースコードを入手する必要があります。それほど難しいことではありませんが、時間がかかります。必要になるだろう:

  1. Linuxを搭載したコンピューター。 OS Xでコンパイルできますが、クロスコンパイルする必要があるため、時間がかかります。同じことがWindowsにも当てはまります。
  2. Linuxビルドユーティリティ(make、g ++、gcc、autoconf)。
  3. Qemu。
  4. 時間。真剣に、たくさん。

すべてが揃ったら、ソースコードのコンパイルに進むことができます。

  1. プロジェクトのソースコードをダウンロードします:bash git clone [email protected] :NodeOS/NodeOS.git。
  2. 次のコマンドを実行してコンパイルします:cd NodeOSおよびnpm install。
  3. 公式文書を一語一語引用します。 「電子レンジ用ポップコーンをいくつか選んで、映画を見に行きます。いいえ、本当にそうします。」 。はい、それだけの時間がかかりますので、その間に何か面白いことをしてください。
  4. 実行bash npm start Qemu内でNodeOSを実行します。

動作していますか?

インストールが完了したら、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など)があります。これは、NodeのNPMに基づいており、使いやすいです。インストール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が正常にインストールされました。

動作しています。しかし、私たちは今OSで何をしていますか?

Ubuntuやその他のLinuxディストリビューションで実行できるのと同じこと(またはそれより少ないこと)を実行できる場合、Node.jsでオペレーティングシステムを作成する意味は何ですか?重要なのは、すべてがNode.jsだけを使用して開発されているということです。それはまた私達ができることを意味します 発展させる Node.jsだけを使用するアプリケーション。たとえば、NodeOSには、他のコマンドのマニュアルページを表示するためにLinuxで使用されるコマンドmanのデフォルトの実装がありません。恐れることはありません。実装は簡単です。どのように、私はあなたが尋ねるのを聞きますか?シンプル。

Node.jsを使用したNodeOSアプリケーションの構築

まず、Hipsterというテキストエディタをインストールして、次のコマンドを実行してファイルを作成および編集できるようにします:npm install -g [email protected] 。このファイルエディタはシンプルで、間違いなく ない 私が他の何かのエディターとして使用するものですが、この場合はそれで十分です。 Hipsterを使用したファイルの作成は非常に簡単で、hip filenameのようにhip package.jsonを実行するだけです。保存するにはCtrl + sを押します終了するには、Ctrl + qを押します。この例では、主要なNodeOS開発者の1人によって開発されたコードを使用しますが、実際には実装していません。この例の元のコードは、にあります。 node-bin-manGitリポジトリ 。

最初の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コレクションは、コマンド名と関連するJavaScriptファイルを含むJSONキー/値オブジェクトです。この例では、manコマンドはファイルman.jsに関連付けられています。コレクションdependenciesには、このアプリケーションを使用するために必要なNPMパッケージのリストが含まれています。この例では、コードの作成者には、Node.js用の高レベルのターミナルインターフェイスAPIを備えた呪いのようなライブラリであるBlessedが含まれていました。

それでは、主要部分である実際のコードに移りましょう。

#!/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の標準的な動作コマンドは、他のコマンドが指定されていない場合に、それ自体についてマニュアルに通知することです。コード例も同じことをしています。2番目のパラメーター(最初は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(); });

方向キーを使用して1行を上下にスクロールし、キー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の最初のカスタムアプリケーションはほぼ完成です。最後の小さなステップは1つだけ残っています。 NodeOSアプリケーションの要件であるため、構成ファイルを作成する必要があります。パス/etc/bin-man/config.jsonにファイルを作成するのと同じくらい簡単です。次の内容で:{}、空のJSONオブジェクト。これで、新しいアプリケーションを試すことができます。実行中man NodeOSシェル内には、前に作成したreadmeファイルが表示されます。

結論

簡単なコード例でわかるように、NodeOSに何かを実装するのは簡単な作業であり、Node.jsを知っているだけで済みます。

NodeOSには多くの可能性があり、追加機能が実装されれば、NodeOSは優れたオペレーティングシステムになる可能性があると思います。まだ作業が必要ですが、Node.jsベースのエコシステム全体が人気を博しているため、すぐに人気のあるオペレーティングシステムになっても驚かないでしょう。あなたはそれについてどう思いますか?コメントで教えてください。

IOS開発者ガイド:Objective-CからSwiftへ

モバイル

IOS開発者ガイド:Objective-CからSwiftへ
Reactフックを使用した再検証中の古いデータフェッチ:ガイド

Reactフックを使用した再検証中の古いデータフェッチ:ガイド

技術

人気の投稿
Sass Mixins:スタイルシートを乾いた状態に保つ
Sass Mixins:スタイルシートを乾いた状態に保つ
Kubernetesとは何ですか?コンテナ化と展開のガイド
Kubernetesとは何ですか?コンテナ化と展開のガイド
説得力と動き–モーションデザインの原則へのガイド
説得力と動き–モーションデザインの原則へのガイド
最高のデータ視覚化ツールの完全な概要
最高のデータ視覚化ツールの完全な概要
BlackBerryに何が起こったのか:ゾンビストックまたはカムバックキング?
BlackBerryに何が起こったのか:ゾンビストックまたはカムバックキング?
 
ウェブサイトの再設計の基礎–ケーススタディ
ウェブサイトの再設計の基礎–ケーススタディ
バイオテクノロジー評価の特異性とベストプラクティス
バイオテクノロジー評価の特異性とベストプラクティス
WebRTCアプリケーションを構築する1年:スタートアップエンジニアリングの教訓
WebRTCアプリケーションを構築する1年:スタートアップエンジニアリングの教訓
ゲシュタルトの設計原則を探る
ゲシュタルトの設計原則を探る
国際送金市場はどのように進化していますか?
国際送金市場はどのように進化していますか?
人気の投稿
  • アンドロイドのPOS
  • c#不和ボットコマンド
  • ビジュアルデザインの原則と要素
  • Androidでm3u8ファイルを再生する方法
  • コンピューターでnode.jsが実行されているのはなぜですか
  • 次のうち、デザインにおけるアイテムの相互関係を意味するのはどれですか?
  • ノードサーバーとは
カテゴリー
バックエンド ライフスタイル 製品ライフサイクル Uiデザイン 設計プロセス その他 Webフロントエンド トレンド Kpiと分析 プロジェクト管理

© 2021 | 全著作権所有

apeescape2.com