環境構築:Redox向けcoreutils(Rust)のCode Reading準備およびReading対象コマンド一覧

前書き:Redox版coreutilsを読む理由

Redoxプロジェクトが開発しているcoreutilsを読む理由は、「(Rust初心者の私が)Rustを学習する」ためです。Redoxプロジェクトに関わるコードは、基本的にRustで書かれています。何故、Redox(Kernel)ではなくて、coreutilsを読むのかと言えば、

  • Kernelを読めるほど、私がRustに慣れていない
  • RedoxプロジェクトのCoreutilsは小規模
  • CoreutilsはUnix/Linuxコマンドのため、私が機能を把握済み

という理由です。

Rustは登場してから日が浅い言語のため、日本語情報が少ないです。そのため、私がCode Readingした結果を全て残したいと思います。その第一歩として、本記事では、Redox coreutilsを読むために、「必要な環境構築手順」を説明し、Reading結果へのリンクを残します。

本記事で説明する内容
  • Redoxサイドプロジェクト一覧
  • Reading対象のCoreutilsコマンド一覧(Reading結果一覧)
  • 開発環境
  • Rust(nightly)のインストール
  • Redox版coreutilsのビルド

                       

Redoxのサイドプロジェクト一覧

前提として、Redoxは、Rust言語で書かれたUNIXライクのOSです。Redox(Kernel)を開発するプロジェクトだけでなく、ユーザランド向けアプリケーションを対象としたサイドプロジェクトが多数存在します。現段階で、Redox(再度プロジェクト含む)は下図のように、一般的なディストリビューションのような見た目をしています。

下表(一部抜粋)が、Redoxサイドプロジェクト一覧です。なお、coreutilsは2種類存在しますが、BSDライクをReading対象とします。GNUライク版(uutils)は、BusyBoxに似ていたため、Reading対象としませんでした。

  1. 「BSDライク」かつ「1コマンド=1バイナリ」(coreutils、Reading対象)
  2. 「GNUライク」かつ「全コマンド=1バイナリ」(uutils)  
サイドプロジェクト名説明
TFSZFSにインスパイアされたFile System
IonRedox用のShell
OrbitalRedox用のディスプレイサーバ(GUI機能)
OrbTKWidgetツールキット(GUI機能)
pkgutilsRedoxパッケージマネージメントライブラリおよびCLIフロントエンド
SodiumViコマンド風のエディタ
rallocメモリアロケータ
libextralibstdの補足となる機能(例:Hash、Map、乱数)
games-for-redoxRedox向けのゲーム
Coreutils

Unix系OSで中心的(core)なユーティリティコマンドセット(BSD ベース)

Extrautilsリマインダ、カレンダ➖、スペルチェックなどのユーティリティセット
Binutilsバイナリファイル操作用ユーティリティ
uutils/coreutilsGNU coreutilsをクロスプラットフォーム向けにRustで書き直したコマンドセット
m-labs/smoltcpRedoxで用いられるネットワークスタック

                  

Reading対象のCoreutilsコマンド一覧(Reading結果一覧)

Redox版Coreutilsコマンド全てをReading対象とします。コマンド名称にリンクが貼ってある場合、そのリンク先はReading結果(本サイト内の記事)です。2019年5月3日段階で、まだ未着手です。

Redox版Coreutilsは、数が少なく、低機能(小規模)である事が特徴です。

CoreutilsコマンドStep数機能説明
cat269ファイル閲覧や文字列の連結
chown91ファイル・ディレクトリの所有権やグループ変更
clear34端末(画面上の文字)をクリア
dd199ブロック単位でファイルコピーや変換
df92File Systemのディスク容量を表示
du87ファイル・ディレクトリの使用量を表示
free79メモリ使用量を表示
kill59プロセスを終了
ln66ファイルのハードリンク・シンボリックリンクを作成
mkdir51ディレクトリを作成
ps36実行中のプロセス一覧を表示
reset34端末を初期化(端末起動直後の状態に変更)
shutdown44システムを終了
sort115文字列の並べ替え
tail305ファイルの最終行から数行表示
test336条件式の真偽を判定
time46コマンド実行時間の計測
touch53タイムスタンプ変更やファイル作成
uname91OSまたはHWの情報を表示
uptime65システム稼働時間を表示
which53実行コマンドの絶対PATHを表示

                          

開発環境

開発環境は、Debianを想定しています。

                          

Rust(nightly)のインストール

Rustは、3種類のバージョンが同時期に提供されます。

  • Nightly(2019/5/3時点で、Coreutilsのビルドに必須)
  • Beta
  • Stable

Nightlyリリースは、毎日作成されます。6週間周期で、最新のnightlyリリースが”Beta”に移行します。さらに6週間後、betaは”stable”に移行します。Nightlyリリースは新機能が使えますが、stableまでにその機能が残っている保証がありません。

Redox版coreutilsは、nightlyリリースでのみ提供される機能を使用しているため、stableリリースではビルドが通りません(2019/5/3時点)。そのため、今回の環境構築では、stableリリースを導入後、nightlyリリースに変更します。私のサイトは参考情報として、公式サイト手順を信用して下さい。

まず、stableリリースをインストールします。

次に、Rustのビルドシステムであるcargo向け環境変数を端末起動時に自動で読み込むため、.bashrcに追記をします。

最後に、nightlyリリースのToolchainをインストールし、デフォルトで使用するコンパイラをnightlyにします。その後、Rust開発環境を最新版にアップデートします。

                      

Redox版coreutilsのビルド

まず、Redox版coreutilsのGitHubからRepositoryをクローン(複製)します。

Redox版Coreutilsをビルドします。初回ビルド時に、依存しているcrateをFetchするため、時間がかかります。

                

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です