COLUMN
【Linux Tipsシリーズ】平凡なソフトウェア開発者が自分Linuxを作ってみた
Linuxといえば、Unix系OSの一つであることは皆さんご存じのことと思います。
今回のコラムは、平々凡々なプログラマが自分Linuxを作ってみるお話です。
そもそも自分Linuxって?
簡単に言ってしまうと、“自分自身の好みにカスタマイズしたLinux”のことです。
例えば、今回は「Ubuntu Desktop 日本語 Remix」を使うのですが、ダウンロードしてきたisoイメージを使って、特に設定を変えることなくインストールすると、「図 1 標準ログイン画面」や「図 2 標準デスクトップ画面」のような画面になるはずです。そして、Ubuntuをインストールした人のほとんどがこの状態で使用しているのではないかと思います。
図 1 標準ログイン画面
図 2 標準デスクトップ画面
一方、私の環境はというと、「図 3 ログイン画面」や「図 4 デスクトップ画面」のような画面となっており、標準とは異なっています。
図 3 ログイン画面
図 4 デスクトップ画面
なぜカスタマイズしたかというと、私のLinux環境はバーチャルマシン上に作っているため、なるべく動作の軽い状態にしたかったからです。
また、ディスク容量も多くはありませんので、オフィス関連やゲーム、その他にも使用しないアプリケーションはアンインストールしています。
このように、自分Linuxとすることにより、使用ディスク容量の削減や、使用メモリの削減などメリットを得ることができるのです。
このコラムでは、RaspberryPi 3 Model B+を対象に自分Linuxを作ってみようと思います。
本来であれば、使用ディスク量や、インストールしておく機能と言った目標のようなものを立てて作業を行うところですが、ここでは、「動作OSを64Bitとし、CUI環境の組込みLinux」にするというかなり大雑把な目標で行きます。
自分Linuxを作るには
自分Linuxを作るといっても、お手軽にやる方法や、かなり面倒くさい方法など、作り方はいくつかあります。(表 1 自分Linux構築方法 参照)
このコラムでは、RaspberryPi3用の組み込みLinuxを作ることにしていますので、組込みLinux向きで手軽にできるBuildrootを使う方法で行こうと思います。
表 1 自分Linux構築方法
構築方法 | 特徴 |
フルスクラッチ |
Linuxのルートファイルシステム等の知識が必要。 Linuxを構成する各ソフトウェアをコンパイルする際の依存関係を把握する必要がある。 |
既存環境のカスタマイズ |
普段使用しているLinuxのクローンを作り、USBメモリを使って起動する。 USBからの起動ができるPCがあれば、普段使用している環境で作業ができる。 |
Yocto | 動的パッケージ管理をサポートしているため、システム構築後の機能拡張が容易。 カスタマイズ性が高い、その反面ある程度のスキルが要求される。 |
Buildroot |
組込みLinux向き。 動的パッケージ管理はサポートしていないため、システム構築後の機能拡張が難しい。 インストールするパッケージの選択などをGUIでできる。 |
Buildrootを使ってお手軽に自分Linuxを作る
自分Linuxを作る手段として、ここではBuildroot(公式HP:https://buildroot.org/)を使います。Buildrootとは、クロスコンパイラを使用してLinuxを構築するプロセスを、簡素化及び自動化してくれるツールです。
-
※
-
クロスコンパイラは、BuildrootがLinuxを構築する際に自動的に作られるため、別途用意しておく必要はありません。
まずは、Buildrootを使用するための環境構築を行います。 Buildrootのドキュメントの「Chapter2. System requirements」を参考に、必要なパッケージを入れていきます。
-
※
-
環境の構築には、Ubuntu Desktop 日本語 Remix(イメージファイル:ubuntu-ja-18.04.1-desktop-amd64.iso)を使用し、Buildrootは、buildroot-2019.02.05.tar.gzを使用しています。
-
※
-
ターゲットのハードウェアはRaspberry Pi 3 Model B+としています。
ビルドツールとして以下のコマンド/パッケージを使うので、必要なパッケージをインストールします。
~$ sudo apt install sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget
-
※
-
中には、バージョンが指定されているものや、構築に使用するLinuxディストリビューション特有のものもありますので、よく確認しましょう。
次に、以下のパッケージはオプション扱いですが、ソースコードを取得する際に使用されることもあるかもしれませんのでインストールしておきます。
~$ sudo apt install bzr cvs git mercurial rsync subversion openssh-client
さらに、こちらもオプション扱いですが、Buildrootの設定やカーネルの構成を変更するのに使うパッケージをインストールします。
~$ sudo apt install libncurses5-dev libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev
必要なパッケージを入れ終えたので、Buildrootをダウンロードしてきます。
-
※
-
このコラムでは、buildroot-2019.02.05.tar.gzを使用します。
ダウンロードしたBuildrootを適当なディレクトリ(ここでは、ホームディレクトリ)に解凍します。
~$ cd
~$ tar vxf buildroot-2019.02.05.tar.gz
Buildrootのディレクトリに移動して、RaspberryPi3用にすでに構成されている設定ファイルがあるか確認します。
~$ cd buildroot-2019.02.5
~/buildroot-2019.02.5$ make list-defconfigs
コマンドを実行すると、サポートしている構成が列挙されます。
aarch64_efi_defconfig | – Build for aarch64_efi |
acmesystems_aria_g25_128mb_defconfig | – Build for acmesystems_aria_g25_128mb |
acmesystems_aria_g25_256mb_defconfig | – Build for acmesystems_aria_g25_256mb |
・ | |
・ | |
raspberrypi0_defconfig | – Build for raspberrypi0 |
raspberrypi0w_defconfig | – Build for raspberrypi0w |
raspberrypi2_defconfig | – Build for raspberrypi2 |
raspberrypi3_64_defconfig | – Build for raspberrypi3_64 |
raspberrypi3_defconfig | – Build for raspberrypi3 |
raspberrypi3_qt5we_defconfig | – Build for raspberrypi3_qt5we |
raspberrypi_defconfig | – Build for raspberrypi |
・ | |
・ | |
zynq_zed_defconfig | – Build for zynq_zed |
zynqmp_zcu106_defconfig | – Build for zynqmp_zcu106 |
RaspberryPi3用の構成ファイルがいくつかありますが、そのうちの「raspberrypi3_64_defconfig」(RaspberryPi3用の64bitOS構成)を使います。
以下のコマンドを入力することで、RaspberryPi3 64bitOS用の構成にしてくれます。
~/buildroot-2019.02.5$ make raspberrypi3_64_defconfig
コマンドを実行すると、以下のような出力がされて、ビルド環境の構築が終了します。
#
# configuration written to ~/buildroot-2019.02.5/.config
#
イメージファイルを作る前に、設定を少々変更して、sshができるようにしておきます。
「make menuconfig」か「make nconfig」、「make xconfig」、「make gconfig」のいずれかを実行して、Buildrootの設定を開き、設定変更を行います。
-
※
-
ここでは、「make xconfig」を使用しています。
-
※
-
sshサーバは、省メモリ版のsshソフトである「dropbear」を使用します。
「Target packages」->「Networking application」と辿り、「dropbear」をインストール対象とします。(図 1 Buildrootの設定(dropbear)参照)
図 5 Buildrootの設定(dropbear)
さらに、“root”ユーザーにパスワードを設定します。
「System configuration」を選択し、「Enable root login with password」にチェックを入れ、「Root password」に“admin”と入力して(図 2 Buildrootの設定(rootパスワード)参照)「保存」して終了します。
図 6 Buildrootの設定(rootパスワード)
カーネルの設定を変更したい場合は、以下のコマンドを入力します。
~/buildroot-2019.02.5$ make linux-menuconfig
コマンドを入力すると、カーネル設定が行えるようになります。(図 3 カーネル設定画面 参照)
図 7 カーネル設定画面
そして、以下のコマンドを入力することで、RaspberryPi3用のイメージファイルが生成されます。
~/buildroot-2019.02.5$ make
-
※
-
イメージファイルの生成には、使用しているPCの性能にもよりますが、数十分~数時間かかります。
以下のような出力がされれば、イメージファイルの生成は終了です。
INFO: hdimage(sdcard.img): adding partition ‘boot’ (in MBR) from ‘boot.vfat’ …
INFO: hdimage(sdcard.img): adding partition ‘rootfs’ (in MBR) from ‘rootfs.ext4’ …
INFO: hdimage(sdcard.img): writing MBR
イメージファイルは、Buildrootのディレクトリ配下の「output/images/」に「sdcard.img」というファイル名で生成されています。
生成されたイメージファイルをマイクロSDに書き込んでRaspberryPiを起動してみましょう。
10秒ほどでCUI環境が起動するはずです。(図 2 Buildroot版 起動画面 参照)
図 8 Buildroot版 起動画面
ログインしてLinuxのシステム情報を表示してみましょう。
このLiniuxを構築する際に、rootのパスワードを設定しましたので、「buildroot login:」の箇所は“root”、「Password:」は“admin”と入力するとログインできます。
ログインしたら、Linuxのシステム情報表示コマンドを実行してみます(図 2 システム情報表示結果参照)。
図 9 システム情報表示結果
「Linux buildroot 4.14.95-v8 ・・・aarch64 GNU/Linux」となっていますので、RaspberryPi3用の64bit版Linuxが起動していることが確認できました。
自分Linuxを作るというタイトルでありながら、ほとんど「raspberrypi3_64_defconfig」のままではありますが、読者の皆さんは Buildrootの設定を変更したり、カーネルの設定を変更したりして自分好みのLinuxを作ってみてください。
個別相談も承っております。下記よりお申し込みください。