環境構築: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)  
サイドプロジェクト名 説明
TFS ZFSにインスパイアされたFile System
Ion Redox用のShell
Orbital Redox用のディスプレイサーバ(GUI機能)
OrbTK Widgetツールキット(GUI機能)
pkgutils RedoxパッケージマネージメントライブラリおよびCLIフロントエンド
Sodium Viコマンド風のエディタ
ralloc メモリアロケータ
libextra libstdの補足となる機能(例:Hash、Map、乱数)
games-for-redox Redox向けのゲーム
Coreutils

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

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

                  

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

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

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

Coreutilsコマンド Step数 機能説明
cat 269 ファイル閲覧や文字列の連結
chown 91 ファイル・ディレクトリの所有権やグループ変更
clear 34 端末(画面上の文字)をクリア
dd 199 ブロック単位でファイルコピーや変換
df 92 File Systemのディスク容量を表示
du 87 ファイル・ディレクトリの使用量を表示
free 79 メモリ使用量を表示
kill 59 プロセスを終了
ln 66 ファイルのハードリンク・シンボリックリンクを作成
mkdir 51 ディレクトリを作成
ps 36 実行中のプロセス一覧を表示
reset 34 端末を初期化(端末起動直後の状態に変更)
shutdown 44 システムを終了
sort 115 文字列の並べ替え
tail 305 ファイルの最終行から数行表示
test 336 条件式の真偽を判定
time 46 コマンド実行時間の計測
touch 53 タイムスタンプ変更やファイル作成
uname 91 OSまたはHWの情報を表示
uptime 65 システム稼働時間を表示
which 53 実行コマンドの絶対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するため、時間がかかります。

                

おすすめ