sstea備忘録

日々のPCライフのメモ、備忘録、及びそれに類推する何か。
記載内容に間違い等を発見された場合はコッソリ教えてください... → sstea<a>aol.jp (<a> を @ に変えてください)


Raspberry Pi のカーネルをクロスビルドする

前回までは設定をいじってましたが、今回はLinuxカーネルを差し替えます。

こちらの記事で最新のRaspbianのカーネルを差し替えてますので、そちらも参考までに。

◆VirtualBox上でクロスコンパイルする

特にカーネルを差し替える必要はないのかもしれませんが、自己満足コンフィグレーションの最適化のため、何となく自家製Myカーネルに差し替えたいと思います。愛着もわきますし。

Raspberry Piのターゲット上でカーネルをビルドをすることも可能ですが、カーネルビルドするにはRaspberry Piでは非力で、とても時間がかかってしまうため、VirtualBox上に構築したLinux Mintでクロスコンパイルしようと思います。

VirtualBox上にLinux Mintの構築方法はこちらを参照。

以下はVirtualBox上のLinux Mintでの操作です。

◆Raspberry Pi用クロスコンパイラを取得する
コンパイラもカーネルソースもgitで公開されています。

  GitHub (https://github.com/raspberrypi/)

gitがインストールされていない場合は、インストールしておきます。
$ sudo apt-get install git

まずはTerminalを起動し、適当な作業ディレクトリを作成します。
以降、作業ディレクトリを ${HOME}/raspi/ として記述します。
$ cd ${HOME}/raspi/
$ git clone https://github.com/raspberrypi/tools.git

取得してきた中を見ると tools/arm-bcm2708/ に以下の4つのツールチェーンがあります。
- arm-bcm2708-linux-gnueabi
- arm-bcm2708hardfp-linux-gnueabi
- gcc-linaro-arm-linux-gnueabihf-raspbian
- gcc-linaro-arm-linux-gnueabihf-raspbian-x64

どれを使うべきか、、、
自分は 32bit版 Linux Mint をインストールしているので 64bit版はそもそも実行できません。
これで残りの候補は3つ。(64bitマシンならこれ一択でいい気もします)
それぞれの gcc で --version を実行した結果が下記です。
$ arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi-gcc --version
arm-bcm2708-linux-gnueabi-gcc (crosstool-NG 1.15.2) 4.7.1 20120402 (prerelease)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-gcc --version
arm-bcm2708hardfp-linux-gnueabi-gcc (crosstool-NG 1.15.2) 4.7.1 20120402 (prerelease)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) 4.8.3 20140106 (prerelease)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
gcc-linaro-arm-linux-gnueabihf-raspbian がGCCバージョン4.8.3 で一番新しいので、これを使うことにします。
(安易ですが、OSSは最新であれば最新ほどいい、が自分のモットーですので。)

.bashrc の最後に
PATH=${HOME}/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:${PATH}
とでも付け加えて、パスを通しておきます。

# 新しいTerminalを使うか ". ~/.bashrc" と実行しないと、まだ反映はされていませんので注意。

◆Raspberry Pi用Linuxカーネルのソースコードを取得
$ cd ${HOME}/raspi/
$ git clone https://github.com/raspberrypi/linux.git
それなりに時間かかると思います。

◆Raspberry Pi用のカーネルコンフィグを最適化する
カーネルコンフィグは Raspberry Pi 上で
$ sudo zcat /proc/config.gz > raspi.config
とすれば、今 Raspberry Pi で動いているLinuxカーネルのカーネルコンフィグが取得できます。

今回は自分がデフォルトのコンフィグをベースに変更を加えたこのコンフィグを使用します。
カーネルバージョンは 3.12.31 です。

# もっと最新のカーネルがいいという方はもっと↓を参照。

変更点は下記の通りです。
- デバッグ関連のコンフィグを無効化
(ダンプ 吐かれても別に原因解析する気ないなー、と思ったのでCOREDUMP、GDB、KPROBEとか全部切ってます。)
- プロファイル関連のコンフィグを無効化
- IPv6 の無効化(元々ローダブルモジュールだったのでそのままでもいいのですが)
- ROOT_NFS の無効化
- カーネル圧縮形式をlz4に変更
- ログバッファサイズとかその他、何点か微修正

カーネルイメージの省サイズ化、及びオーバーヘッド軽減を目的としたものなので、デフォルトのコンフィグから機能的には変わっていないはずです。(nfs root を使用する場合を除き)

上記コンフィグを.config として linux ディレクトリ直下に置きます。
$ curl http://sstea.blog.jp/raspi/kbuild/kconfig-rpi-3.12.31 > .config

◆Raspberry Pi用のカーネルをビルド(再構築)する
今回、カーネル圧縮形式をlz4にしているので下記をインストールしておきます。
$ sudo apt-get install liblz4-tool

ついでに、カーネルビルドに必要なパッケージが未インストールなら入れておきます。
$ sudo apt-get install build-essential libncurses5-dev

環境変数を設定します。
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabihf-
カーネルコンフィグを変えたい場合は変えます。(変えないならmenuconfigは不要です。)
$ cd ${HOME}/raspi/linux/
$ make menuconfig
カーネルをビルドします。
$ make
カーネルモジュールのビルド&インストールを行います。(インストール先はテンポラリなのでどこでもいいです。../mod-3.12.31である必要はありません。)
$ make modules
$ make modules_install INSTALL_MOD_PATH=../mod-3.12.31/  INSTALL_MOD_STRIP=--strip-unneeded

ビルドが完了したなら、linux/arch/arm/boot/zImage がカーネルイメージになります。
これを kernel.img とリネームし、Raspberry Pi の /boot/kernel.img と置換することで新カーネルに差し替えることが出来ます。

ちなみに、元のカーネルイメージはgzip圧縮形式で 3.3MBほどでした。
今回のカーネルイメージはlz4圧縮形式で3.0MBほどで、シュリンク出来ています。
(同じgizp圧縮形式なら2.6MBまで縮みましたが、展開速度が高速なlz4を採用しています。)

あと、${HOME}/raspi/mod-3.12.31/ というのが出来ているはずなのでこの中の lib/modules/3.12.31+/ をRaspberry Pi の /lib/modules/ 以下に置いてあげるのも忘れずに。

ちなみに、../mod-3.12.31/lib/firmware/ にもいろいろファイルが出来ているのですが、
Raspberry Pi の /lib/firmware/ にあるファイルと一つも被っていないのが謎。
たぶんなくてもいい気もしますが、念のために ../mod-3.12.31/lib/firmware/ 以下のファイルも Raspberry Pi の /lib/firmware/ 以下にコピーしておくことにします。

◆Raspberry Pi用のチャキチャキの最近カーネルを使用する
と、ここで終わってもいいのですが、せっかくビルドまでして自家製カーネルを使うのだから、最新バージョンのカーネルを使用したいと思います。
現在の最新バージョンは 3.17.2 ですので、3.17.2 のカーネルにしましょう。

git でLinuxカーネルのソースを取得する所までは同じです。
(または、3.12.31 のツリーが不要なら make distclean してそれを流用しましょう。)
$ cd ${HOME}/raspi/linux/
$ git checkout -b rpi-3.17.y remotes/origin/rpi-3.17.y

3.17.2 のカーネルコンフィグにはこのコンフィグを使用します。
デフォルトコンフィグからの変更点は 3.12.31 の時と同様です。

ビルド方法等は 3.12.31 と同様です。

カーネルイメージを差し替えて、リブート後 Raspberry Pi 上で
$ uname -r
とし、3.17.2 と表示されていれば成功です。

◆カーネルイメージのファイル名を変更する
今回はカーネルを自家製カーネルに置き換えました。
ファームアップデート等を行なうと、本家のカーネルイメージに置き換えられてしまいます。

カーネルイメージのファイル名をデフォルト(kernel.img) から変更することで、これを回避することができます。

/boot/config.txt に下記を追記します。
$ kernel=kernel-3.17.img

カーネルイメージのファイル名をリネームします。
$ sudo mv /boot/kernel.img /boot/kernel-3.17.img

◆おまけ1
カーネルのオーバーヘッド軽減を目指してカーネルコンフィグをいじりましたが、効果は出ているのでしょうか?

printk で表示できる時間はカーネル起動からの時間のため、カーネル省サイズ下によるブートローダーの展開時間削減の効果は残念ながら正確な確認方法がありません。(体感できるレベルでなければ)

カーネル起動後であればカーネルログで確認できますので、今回の確認方法としてはカーネルログのrootfsのマウントまでの時間("EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)"とういうログの出力時間)を指標としたいと思います。
以前の記事でquietの効果確認を行なったのと同じ方法です。)

オリジナルconfig
raspberrypi kernel: [   13.000215] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
変更config
raspberrypi kernel: [   12.670055] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)

一応オリジナルより早くなってそうです。体感できないと思いますが。
小さなことからコツコツと!!

◆おまけ2

initramfsを使用してみます。

# 結局使用しない構成に戻しましたが。

現状のブートシーケンスはbootloader→kernel→rootfsの順に起動しますが、
bootloader→kernel→initramfs→rootfsの順に起動させる事ができます。

このinitramfsで先に起動させておきたいデーモン等やモジュールのロード等を済ませれば、rootfsの起動スクリプトの処理が遅かろうが関係ありません。
$ sudo apt-get install initramfs-tools
$ sudo update-initramfs -c -k $(uname -r)
で /boot/ 以下に initrd.img-3.17.2+ というファイルが出来ているはずです。

/boot/config.txt に以下を追記すれば、initramfsを使用したブートシーケンスになります。
initramfs initrd.img-3.17.2+
ただこのままだと、純粋にinitramfsを経由するようになった分だけ起動時間が少し遅くなっただけでメリットはありません。

initramfsの中身をいじくるためにこのファイルを VirtualBox の Linux Mint 上に持っていきます。
以下は ${WORKDIR} にファイルを持ってきたとして記載します。

ファイル名を変更し、ディレクトリを作成しておきます。
$ mv initrd.img-3.17.2+ initrd.img-3.17.2+.orig.gz
$ mkdir -p ${WORKDIR}/initramfs/
展開します。
$ cd ${WORKDIR}/initramfs/
$ gunzip -c -9 ../initrd.img-3.17.2+.orig.gz | cpio -i -d -H newc
お好きにいじくってください。

満足したら、再びinitramfsイメージにします。
$ cd ${WORKDIR}/initramfs/
$ find . | cpio -o -H newc | gzip > ../initrd.img-3.17.2.+
これを raspberry pi の /boot/ 以下においてあげてください。


次回はいったんこの環境をバックアップしようと思います。

Raspberry Pi の更なる最適化を試みる

前回、いろいろな最適化にトライしました。
今回は更なる最適化をはかりたいと思います。

◆電源投入~カーネルまで


そもそもLinuxカーネルのログ出力が開始されるまでで、8秒程かかっているように感じます。
つまりLinuxカーネル到達前のブートローダ部分でそれだけかかっている?

NOOBS は便利で高機能ですが、それゆえに起動時間の足を引っ張っている可能性はあります。

以前の記事では NOOBS を使って Raspbian をインストールしましたが、NOOBS を経由せず Raspbian を起動させてみて、起動時間が短縮されるか見てみたいと思います。

http://www.raspberrypi.org/downloads/ から今度は Raspbian のイメージファイル(2014-09-09-wheezy-raspbian.zip)をダウンロードします。

Win32DiskImager (http://sourceforge.jp/projects/sfnet_win32diskimager/) をダンロード&インストールし、ダウンロードしたイメージファイルを展開し microSD 書き込みます。、

※ microSD の内容は全て消去されます。ご注意を!!


で、電源投入すると、、、
前より明らかに早いです!!

4秒くらいは早くLinuxカーネルに到達出来ている気がします。
パーティションも2個とスッキリしました。(NOOBSを使用したインストール時はパーティションが6個くらい出来ていました。)

こちらの環境をベース環境としたいと思います。
前記事で行なった初期設定最適化等を再度行ないます。。。(面倒くさいですが)

◆カーネル起動~ログインプロンプト表示まで

気を取り直して、、、

起動時にカーネルログがベロベロ出ますが、見てますか?特に見ませんよね?
なので、あのカーネルログ出力を抑制しようと思います。
下記のように、カーネルコマンドラインに quiet を追加するだけです。

/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait quiet
起動してみると、ログインプロンプト到達までが 1, 2秒短縮されたような気がします。

コンソールへの出力を抑制するだけで、内部的にはきちんとログ出力はされているので、
どうしても見たいという場合は
$ cat /var/log/syslog
とすれば、ブート時のカーネルログを確認することが出来ます。

実際に、/var/log/syslog 内のルートファイルシステムのマウント箇所のログが下記ですが、
quiet を付ける事で、ログ出力のタイミングが 1.3s 程早くなっている事が確認できます。
高速化は気のせいではなかったようです。よかった。よかった。

quiet なし
    : (略)
raspberrypi kernel: [   13.90288] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
quiet あり
    : (略)
raspberrypi kernel: [   12.670055] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)

◆オーバークロック
早く動かしたいならクロックを早くする。道理です。真理です。
やはり手っ取り早いのはオーバークロックでしょう。
$ sudo raspi-config
で、"7 Overclock" を選択します。
とはいいつつも、不安定になっては元も子もないので、とりあえず中間のやつにしときます。
Medium 900MHz ARM, 250MHz core, 450MHz SDRAM, 2 overvolt

◆fsckチェックの抑制

起動時のfsckチェックを省いてみます。

/etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       0
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       0
tmpfs           /tmp            tmpfs   defaults,size=32m 0       0
tmpfs           /var/log        tmpfs   defaults,size=32m 0       0

リブートしてみましたが、、、
あんまり、早くなったような感じはないです。体感的には分かりません。

これは諸刃の剣でもあるので、ここは変更しなくてもいいかもしれません。
自分は、毎回でなくてもたまにfsckするくらいでいいかな、というのと、ファイルシステム破損に対しては"ディスクイメージ自体のバックアップ"で対処しようと思っていますので、このままで行ってみます。

◆起動時のスクリプトは...(よく分からないので)現状維持
起動時間のボトルネックの大半はユーザー空間の起動スクリプトのように(体感では)思いますが、あのあたりのスクリプトは何をしてるのか自分はよく分かってないので、今は触らずに置いておきます。今度は(もやは自己満足ですが)カーネルをいじくって最適化をはかりたいと思います。(自分はこっちが本業なので)

次回はカーネルを自前ビルドし、差し替えたいと思います。

VirtualBox 上の Linux Mint の初期設定を行う

前回、Linux Mintのインストールまでを行ないましたので、今回は初期設定を行ないます。

◆Linux Mintをインストールして最初に行う事


以下、アカウント名 mint として書いています。

(1) Linux MintへのGUEST ADDITIONSのインストール
  ホスト側とのクリップボードの共有や共有フォルダ等、仮想環境としての利便性を高めるために、GUEST ADDITIONSをインストールします。
  VirtualBoxのウィンドウメニューから[デバイス][Guest AdditionsのCDイメージを挿入]を選択。

  左下のMenuから Terminal を起動し、以下を実行。
  (Terminal は今後もお世話になるので、パネルに追加しておいてもいいと思います。)
$ cd /media/mint/VBOXADDITIONS_4.3.18_96516/
$ sudo ./VBoxLinuxAdditions.run
  完了したなら、デスクトップ上の VBOXADDITIONS_4.3.18_96516 のアイコンを右クリックし「取り出す」を選択します。
  (/media/mint/VBOXADDITIONS_4.3.18_96516/ 下にいる場合は取り出しに失敗します。
    cd で適当な所に移動してください。)

  デフォルトでは、共有フォルダは root:vboxsf 権限が設定されており、一般ユーザからはアクセス出来ません。
  それでは不便極まりないので、vboxsf グループにユーザアカウントを追加します。
$ sudo gpasswd -a mint vboxsf
  ここまで完了したなら、一旦リブートします。

(Windows の C:\tools\VirtualBox\shared/ と Linux Mint の /media/sf_shared/ にてファイルのやりとりが出来るようになります。)

(2) プロキシ設定(使用しないなら不要、社内ネットワーク内とかならたぶん要る)
  左下のMenuから[コントロールセンター][ネットワークのプロキシ]を選択し、適宜設定。

  .bashrc あたりに追記。
export ftp_proxy="http://プロキシIPアドレス:ポート番号/"
export http_proxy="http://プロキシIPアドレス:ポート番号/"
export https_proxy="http://プロキシIPアドレス:ポート番号/"

apt のプロキシ設定
  /etc/apt/apt.conf.d/80proxy を新規作成
Acquire::ftp::proxy "ftp://プロキシIPアドレス:ポート番号/";
Acquire::http::proxy "http://プロキシIPアドレス:ポート番号/";
Acquire::https::proxy "https://プロキシIPアドレス:ポート番号/";


プロキシ経由でgitを使う場合の追加設定
  .bashrc あたりに追記。
export GIT_PROXY_COMMAND=/usr/local/bin/git-proxy.sh

  /usr/local/bin/git-proxy.sh を新規作成。
#!/bin/sh
corkscrew プロキシIPアドレス ポート番号 $1 $2


  実行権限付与と、corkscrew のインストール。
$ sudo chmod 755 /usr/local/bin/git-proxy.sh
$ sudo apt-get install corkscrew


(3) apt 関連の設定
  左下のMenuから[コントロールセンター][ソフトウェアソース]を選択。

  ミラーのMain, Base をそれぞれ日本のサーバーに変更します。

  [キャッシュをアップデート]ボタンを押す。

sudo apt-get upgrade
  で最新パッケージに更新。

(4) 日本語化(特に英語で問題なければ不要)
日本語表示
  以下を実行。
$ wget -q http://packages.linuxmint-jp.net/linuxmint-ja-archive-keyring.gpg -O- | sudo apt-key add -
$ sudo wget http://packages.linuxmint-jp.net/sources.list.d/linuxmint-ja.list -O /etc/apt/sources.list.d /linuxmint-ja.list
  Linux Mint 17 MATE の場合
$ sudo apt-get install mint-gnome-ja --install-recommends
(LMDEの場合)
$ sudo apt-get install mint-lmde-ja --install-recommends

日本語入力

$ sudo apt-get install ibus-mozc

(5) おまけ(個人的追加設定。お好みで)
Terminal のログが消えないようにする
  Terminal のウィンドウメニュー[編集][プロファイル設定]を選択。
  [スクロール]タブの[スクロールバックのサイズ]にある「無制限にする」をチェック

無操作時に画面がブラックアウトしないようにする
  左下のMenuから[コントロールセンター][スクリーンセーバー]を選択。
  「アイドル状態になったらスクリーンセーバーを起動する」をオフ。

  左下のMenuから[コントロールセンター][電源管理]を選択。
  アクション、ディスプレイのスリープを「しない」に。

やっぱり emacs のインストール
$ sudo apt-get install emacs

VirtualBox で Linux Mint の仮想環境を構築する

VirtualBoxでLinux Mintの仮想環境をWindows上に構築したいと思います。

◆ホスト側にVirtualBoxをインストール

まずはVirtualBoxのインストーラをダウンロードします。(現時点の最新は 4.3.18 でした。)
エクステンションパックもダウンロードしておきます。

・VirtualBox (https://www.virtualbox.org/wiki/Downloads)

- VirtualBox-4.3.18-96516-Win.exe
- Oracle_VM_VirtualBox_Extension_Pack-4.3.18-96516.vbox-extpack

ダウンロードしたらファイルを実行しインストールします。

◆Linux Mint の iso イメージをダウンロード
Unityにどうにも慣れる事が出来ず、Ubuntuの代替としてしばらく前からLinux Mintを使い始めました。
Unityには慣れませんでしたがUbuntuが嫌いなわけでもなかったので、UbuntuベースのLinux Mintになったわけです。

4GB USBメモリが余っていたのですが、Linux Mint 17は正規の手順でインストールするには4GB以上を要求されインストール出来なかったので、イレギュラーなLive USBとして使用していましたが、アップデート出来ない(いや、出来るんですが容量溢れるのでしない、が正しいです)ため、仮想環境にインストールしてみる事にしました。
仮想環境だとサイズに縛られる事もないので(HDD容量によりますが)。

・Linux Mint ISOイメージ (http://www.linuxmint.com/download.php)

Linux Mint 17 と言ってもいろいろなエディション(?)があります。
まあ、どれでもお好みでいいと思います。自分は32bit版 MATE を使用しています。

No codecs とかいうのもありますが、そこもお好みで。
(メルチメディア関連不要なら No codecs 版でもいいと思います。その分、サイズ小さくなるので。)

codecsを含んでいると、配布する上で法律的に問題のある国もあるので(日本もその一つです)、No codecs版が用意されているだけです。ダウンロードしたり、インストールする分には、codecs版でも全然問題ないらしいです。

Linux Mint Debian Edition(LMDE)と言うのもあります。
あまり自分も詳しくないのですがLinux Mint 17がUbuntu 14.04 LTSベースなのに対して、LMDEはDebianベースのディストリビューションになります。
ただUbuntu自体もDebianベースのはずで、個人的にも使用感に大した違いを感じません。
(それぞれのパッケージのバージョン等々は微妙に異なるのでしょうが。)

# LMDEにも32bit版、64bit版がありますが、これは64bit版の方をお薦めします。
# 最初32bit版の方をインストールしたんですが、LMDE 32bit版はデフォルトではマルチCPU未サポートっぽかったので。
# Virtualboxの設定でCPU数2にしたのに、システムモニターで1つしか表示されてないので、何故だろうと思っていたのです。
#(Known problems in Linux Mint Debian に何やら記述がありました。一応コマンド叩けば解決するのかも?)

Linux Mint 17とLMDEではどちらが良いか、ですが、、、お好きな方をお好みで。。。(またか)
# 仮想環境なので、気楽にどちらもインストールしてみては?(自分はそうしました)

◆Linux MintをインストールするためのVirtualBoxの設定
以下、Linux Mint 17 MATE 32bit版のインストールを想定して説明します。

(A) VirtualBoxの初期設定
(A-1) VirtualBox を起動します。
ss_vbox_setting_001

(A-2) ウィンドウメニューから[ファイル][環境設定] で設定ウィンドウを開きます。
     [一般] を選択し、仮想マシンフォルダーのパスをお好みに変更します。(デフォルトでも別に問題ないです。)
ss_vbox_setting_002

(A-3) [機能拡張] を選択し、右端の青いアイコンをクリックすると、ファイル選択ダイアログボックスが開きますので、ダウンロードしておいたVirtualBoxのエクステンションパックを選択します。
ss_vbox_setting_003

    拡張パッケージが追加されます。
ss_vbox_setting_004

    [OK]で終了します。

(B) 仮想マシンの追加
    [新規] ボタンにより仮想マシンを新規追加します。

  マシン名はお好みで。
  タイプは「Linux」。
  バージョンもお好みで。(「Ubuntu(32bit)」でいいと思います)

  メモリーサイズもホストマシンのメモリ搭載量に応じてお好みで。
  (自分はホストマシンが16GB搭載なので 3072MB にしてます。)

  ハードドライブは「仮想ハードドライブを作成する」「VDI(VirtualBox Disk Image)」「可変サイズ」で問題ないと思います。
  サイズはホストマシンのHDD容量にもよりますが、10GBは欲しいですね。
  (後から増やす事も出来るのでエイヤで決めてください。デフォルトの8GBでもいいです。)

ss_vbox_vm01

(C) 仮想マシンの設定
(C-1) ISOイメージのセット
    [設定] ボタンを押して、設定ウィンドウを開きます。
    [ストレージ] を選択し、「空」と書かれた真ん中あたりのCDっぽいアイコン付近をクリック。
    一番右端のCDっぽいアイコンをクリックし、「仮想CD/DVDディスクファイルの選択」を選択。
ss_vbox_vm02

    ダウンロードしておいたLinux Mint ISOイメージファイルを選択します。
ss_vbox_vm03

(C-2) 後でもいいのですが、ついでなので、共有まわりの設定も行っておきます。
    [一般] を選択し、[高度]タブを選択します。
    [クリップボートの共有]と[ドラッグ&ドロップ]を「双方向」にします。
ss_vbox_vm04

(C-3) 共有フォルダの設定
    [共有フォルダー] を選択し、右端の青いフォルダアイコンをクリックし、お好みのフォルダを選択し新規共有フォルダを追加します。[自動マウント]のチェックも付けておきます。
ss_vbox_vm05

(C-4) おまけ。
    [システム] を選択し、[アクセラレーション]タブを選択します。
    [VT-x/AMD-Vを有効化]にチェックが入っているか確認します。
    チェックが入っていない場合は、チェックします。

  チェックしない場合でもちゃんと動くと思いますが激重になると思います。
  グレーアウトされていてチェック出来ない、という場合はハードとして仮想化支援機能がないか、BIOSで無効になっている可能性があります。
  一度BIOS設定を確認してみてください。
ss_vbox_vm08

仮想化支援機能が有効で、ホストがマルチプロセッサの場合は、仮想マシンもマルチプロセッサにすることで、サクサクになるかもしれません。
[プロセッサー]タブを選択し、プロセッサー数を変更します。
ss_vbox_vm07

プロセッサ数を2以上にする事で「無効な設定が見つかりました」と出る場合は、[マザーボード]タブを選択し、[I/O APICを有効化]をチェックします。
ss_vbox_vm06

    [OK]で終了します。

◆VirtualBoxを使用してLinux Mintをインストール
上記で作成/設定した仮想マシンを「起動」すれば、Linux Mintが起動すると思いますので、起動完了後にデスクトップにあるインストール用のアイコンをクリックすればインストール出来ます。

インストールが完了した後の初期設定については次回

Raspberry Pi の最適化を試みる

前回、初期設定まで行ないましたので、今回は最適化を行ないます。

◆不要パッケージを削除

何をするにもディスク容量が逼迫しているので、ディスク容量をまず空けようと思います。
ただし方針としては、最小構成を目指すつもりはありません。
GUI 使わない方が、そりゃ最小になりますが、GUI 使わないかは人によるでしょうし。
なので X window 関連をバッサリ削除、というような事は(今は)しません。という意味です。

デフォルトの機能を削る事なく、機能面を維持した上での最小の構成を目指します。
(GUIが立ち上がる、音がなる、ネットワークに繋がる等)
当たり障りがあまりないであろうパッケージのみを削除します。

まずは、プリインストールの以下を削除します。(後ろ髪引かれる思いですが、ここは心を鬼にして)
もちろん、使用予定があるものは置いておいていいと思います。
- Wolfram Alpah
- Scratch
- Python Games
- Pi Store
- Sonic-pi
- Minecraft
- IDLE, IDEL 3
- Webブラウザ(NetSurf, Epiphany, Dillo)のどれか2つ
→ Webブラウザ 3つもいらんので、1つ残して、それ以外は削除しようと思います。
    NetSurf を残そうと思いましたが、日本語入力できなかったので、Epiphany の方を残すことにします。
- Debian リファレンス

$ sudo apt-get autoremove -y wolfram-engine
$ sudo apt-get autoremove -y scratch
$ sudo apt-get autoremove -y python-pygame
$ sudo apt-get autoremove -y pistore
$ sudo apt-get autoremove -y sonic-pi
$ sudo apt-get autoremove -y python-minecraftpi
$ sudo apt-get autoremove -y idle idle3
$ sudo apt-get autoremove -y netsurf-common dillo
$ sudo apt-get autoremove -y debian-reference-common
$ sudo apt-get autoremove -y libraspberrypi-doc
これで 1GB くらい空きました。

Python Games 関連のはこれだけだと残ってるのもあるので、手動削除しておきます。
$ rm -rf /home/pi/python_games/
$ sudo rmdir /usr/local/games/
$ sudo rmdir /usr/games/

後、個人的に要らんかな、と思うのを削除します。
- man
→ 使い方が分からん場合は、-h か --help で大概ヘルプが表示される。
    それでも分からん場合は、ググるので、man は自分はあまり見ない。
- git
→ Raspberry Pi 上でのコンパイルは軽いのはするかもしれないが、ガッツリはしないと思う。
     その場合はクロスコンパイルするので。
- galculator
→ そもそもWindowsでもGUIの電卓は使わない。
    そもそも電卓(電子卓上計算機)の親玉であるPC(電子計算機)で、なんで電卓のエミュレートしてんのかと悲しくなる。
$ sudo apt-get autoremove -y man manpages
$ sudo apt-get autoremove -y git git-man
$ sudo apt-get autoremove -y galculator

◆アップデート

ある程度、4GBのmicroSDカードにも容量に余裕が出来たので、パッケージとファームウェアをアップデートしときます。
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update

◆不要デーモンを無効化する
まずはデーモン管理用に chkconfig パッケージをインストールします。
(自分が慣れてるのがこのやり方なだけですが)
$ sudo apt-get install chkconfig

下記で無効化。
$ sudo chkconfig motd off
$ sudo chkconfig triggerhappy off
$ sudo chkconfig alsa-utils off
$ sudo chkconfig lightdm off
$ sudo chkconfig plymouth off

◆RAMディスクを使用する
一時ファイルとか、ログとかは、(自分は)別に蓄積しなくていいので電源落せばクリーンになるように、RAMディスクを使用するようにします。
(厳密にはRAMディスクではなく tmpfs です。)

# 最近知りましたが tmpfs は結構よく出来ているようです。
# tmpfs ではサイズ指定はしていますが、別にメモリ上にそのサイズが確保されるわけではなく、
# 上限サイズとなるだけのようです。(使用部分だけメモリを消費します)
# tmpfs として使用していない部分は、普通のメモリとして使えます。
# またメモリが足りなくなった場合には、tmpfs のファイルはスワップアウトする事ができます。

/etc/fstab に以下を追加(サイズはユースケースに応じて任意に変更してください)
tmpfs           /tmp            tmpfs   defaults,size=64m 0       0
tmpfs           /var/log        tmpfs   defaults,size=32m 0       0

# このままだと、マウントされてる現在の /tmp, /var/log 下のファイルがゴミとして残ってしまいそう。。。
# 一応 rm -rf /tmp/*, rm -rf /var/log/* しといた方がいいかも。)

この状態でリブートすると起動時に、「ディレクトリがない」とか、「ファイルがない」と怒られましたので、起動時に空ディレクトリや空ファイルを作成するようにしときます。

/etc/init.d/init-ramdisk を新たに作成しましょう。
#!/bin/sh
### BEGIN INIT INFO
# Provides:       init-ramdisk
# Required-Start: $local_fs
# Required-Stop:  $local_fs
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
### END INIT INFO

chmod 775 /var/log
mkdir -p /var/log/ConsoleKit/
mkdir -p /var/log/fsck/
mkdir -p /var/log/apt/
mkdir -p /var/log/ntpstats/
mkdir -p /var/log/samba/
chown root.ntp /var/log/ntpstats/
chown root.adm /var/log/samba/
touch /var/log/lastlog
touch /var/log/wtmp
touch /var/log/btmp
chown root.utmp /var/log/lastlog
chown root.utmp /var/log/wtmp
chown root.utmp /var/log/btmp

上記をコピペするなり、curl コマンドで取るなりします。
$ curl -O http://sstea.blog.jp/raspi/script/init-ramdisk
$ sudo mv init-ramdisk /etc/init.d/init-ramdisk
最後に、起動時に init-ramdisk が実行されるようにします。
$ sudo chmod 755 /etc/init.d/init-ramdisk
$ sudo chkconfig --add init-ramdisk

◆SWAPを無効にする
Raspberry Pi Model B+ はメモリ量 512MB あるんで、SWAPは要らないかな、って。
(一部をRAMディスクとして使用しますし、GPUともシェアするので、実質使えるのはもう少し少ないのですが)
$ sudo apt-get autoremove -y dphys-swapfile
# スワップファイルを使わなくても ZRAM を有効にすれば、ある程度メモリを増やしたのと同程度の効果があります。

次回はもう少し突っ込んだ最適化にトライしてみようと思います。

Raspberry Pi の初期設定をしてみる

前回、OSのインストールまで行いましたので、今回は初期設定を行います。

◆Tera Term によるリモートログイン

raspi-config にてSSHをdisableにしない限りはSSHデーモンが立ち上がっているはずですので、Tera Term にてSSH経由でリモート操作すれば、Raspberry Pi の実機に接続したマウスやキーボードで操作する必要はありません。

実機上で ifconfig が何かでIPアドレスを確認しておき、Tera Term に指定してあげてください。

一応、何回かリブートしても基本は同じIPアドレスになっていると思いますが、デフォルトは DHCP 設定になっているので、ずっと同じIPアドレスである保証はないです。
そこは固定IPにしてあげる必要があります。

◆Raspbian をインストールしてまず行うこと(独断と偏見に基づく)
が、とりあえず自分は emacs がないと何も出来ません。
設定ファイル一ついじるのにも、vi だと手間取ってしまいます。
なので、まず最初にする事は
$ sudo apt-get install emacs
です。(ここは人により不要と思います)

次にするのは、、、
.emacs.el の設定。。。(ここも人により不要と思います)

ファイルを編集する度に、スタートアップメッセージを表示されるのも、~ 付きのバックアップファイルを量産されるのも嫌なので、.emacs.el に
(setq inhibit-startup-message t)
(setq make-backup-files nil)
(setq auto-save-default nil)

としておきます。

ついでに行数の表示や括弧対応等の表示を有効にするため、
(show-paren-mode 1)
(column-number-mode 1)
(line-number-mode 1)

とします。

また、タブ幅を4(Linuxカーネルのソースコードは8だが)にして、インデントをタブで行うようにします。
(setq-default c-basic-offset 4
              tab-width 4
              indent-tabs-mode t)


全角スペースや、行末スペース、タブとスペースの混在検出のため、以下を追加。
(global-font-lock-mode t)

(defface my-face-b-1 '((t (:background "red"))) nil)
(defface my-face-b-2 '((t (:background "gray"))) nil)
(defface my-face-u-1 '((t (:background "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)

(defadvice font-lock-mode (before my-font-lock-mode ())
 (font-lock-add-keywords
  major-mode
  '((" " 0 my-face-b-1 append)
    (    "\t" 0 my-face-b-2 append)
    ("[ \t]+$" 0 my-face-u-1 append)
 )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)

emacs はそれなりに使ってきたんですが、正直、メジャーモードとかマイナーモードとか、Emacs Lispとかはイミフです。
昔、設定例をググって見つけたどこかのをコピペしてきて使い続けてます。

あと、.bashrc に
alias ll='ls -la'
 を追加するのも忘れずに。(ここも人に(以下略))

ようやく各種ファイルをまともに編集出来るようになりましたので、Raspberry Pi の設定をいろいろいじっていきたいと思います。

◆DHCP設定から固定IPに変更する

    /etc/network/interfaces
# iface eth0 inet dhcp

iface eth0 inet static
address 192.168.0.100
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 192.168.0.1

元の設定をコメントアウトし、上記のように追記します。
IP アドレスが 192.168.0.100 である必要はないです。好きに書き換えてください。

◆ホストマシンとファイルやり取り出来るようにする(sambaの設定)
samba をインストールします。
$ sudo apt-get install samba samba-common samba-common-bin

/etc/samba/smb.conf を編集。[global] 以下に追記。
[global]
dos charset = CP932
unix charset = UTF-8

ファイル末尾に以下を追加。
[pi]
path = /home/pi
writable = yes
guest ok = yes
browsable = yes
force user = pi
create mode = 0777
directory mode = 0777

ネットワーク内からなら誰からでも見れてしまうので、それがマズい場合はもう少しちゃんと設定しましょう。

◆NTPの設定
NTPサーバーを日本のサーバーに変更しておきます。

    /etc/ntp.conf

# pool: <http://www.pool.ntp.org/join.html>
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
pool ntp.nict.jp iburst

◆日本語化

それなりの容量消費しますので、英語でも全然違和感ないなら日本語化する必要はないです。
$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

日本語入力

$ sudo apt-get install -y uim uim-anthy

次回はRaspberry Piの最適化にトライしてみます。

Raspberry Pi に Raspbian をインストールしてみる

前回からの続き。

こちらの記事で最新版Raspbianをインストールし、環境を再構築してみました。

◆NOOBS を使用し Raspbian をインストール
# 最終的には、NOOBS を使わずにインストールする方にしましたが。。。

まずはホストPC上の操作。
ダウンロードした NOOBS(NOOBS_v1_3_10.zip)を解凍。
解凍した全ファイルを micro SD にコピー。

次に、micro SD を Raspberry Pi に挿します。
HDMIケーブルでテレビと接続。
LANケーブル、マウス、キーボードもそれぞれ接続する。
んで、最後に電源のmicroUSBケーブルを接続。(接続と同時に電源ONになるので。)

# 自分の場合は、microUSBケーブルをPCのフロントパネルのUSBに接続して電源供給しています。
# PCの方は通電していれば良く、立ち上げておく必要は無いです。

これだけで、何やら画面にGUIが表示されました。ちょっと感動です!!
簡単!!(仕事で少し触ったPandaBoardとかはもっと面倒くさかったです。。。)

インストールするOS(正確にはディストリビューションと言うべきかも)を複数選択する事も出来るようですが、容量の関係で現状は無理なので、素直にRECOMMENDEDされている Raspbian のみをインストールする事とします。
# いずれ全OS、一通りインストールして、どんな感じか見てみますが。

左上の Install ボタンを押して、「SD 書き換えるけど、本当にええねんな?」という確認をかい潜れば、特に何をするでもなく、後は数十分も放っておけばOSのインストールは完了です。
簡単!!(仕事で少し触...(以下略))

OSのインストール完了後、リブートすると、Raspi-config のメニュー画面が出ると思います。
始めは何も変えずに終了でも特に問題ないと思います。
強いて言えば、タイムゾーンとキーボードは日本にローカライズしておいた方がいいかも。
後、自分はパスワードを少し短いものに変えました。毎回打つのが面倒くさかったので。。。
(デフォルトのloginユーザ名はpi、初期パスワードはraspberryです。)

◆Raspbian のデフォルトの状態がどういうものかを確認してみる
まずはデフォルトの状態が、どういう状態か確認してみます。

df コマンド叩いてみます。

インストール直後で既に、4GB のSDの残り容量が数百MBしかないです。
これはなかなか厳しいですね。。。

とりあえずは GUI を立ち上げてみます。
$ startx
とすると、HDMIで接続したテレビの画面にでっかいラズパイを壁紙としたGUIが立ち上がります。
アイコンもいくつかデフォルトで並んでいます。

◆Raspbian のプリインストールソフトを使用してみる
とりあえず、並んでいるアイコンを適当にクリックして使用してみました。

・ Wolfram Alpah
→ よく分かんないです。
・ Scratch
→ なるほど。プログラム学習用ですね。
     昔、小学校の時にやったLOGO(亀動かすやつ)みたいなのかな?
・ Python Games
→ 簡単なテーブルゲームやボードゲーム詰め合わせです。
・ Pi Store
→ ストアですね。いろいろ売ってます。
・ Sonic-pi
→ よく分かりません。音楽とプログラムの勉強が同時に出来る?
・ Minecraft
→ とりあえず適当にキーを押してたら、地面掘り進んで、果てしなく落ちていきました。
・ IDLE, IDEL 3
→ 何これ?エディタ...でもないな。
・ NetSurf, Epiphany, Dillo
→ Web ブラウザ。
    youtube で適当な動画を再生してみる。
    おぉ! HDMI経由でテレビから音出てますねー。
    でも、重たいです。
    3つもいらん。どれか1つでいいや。

うん。はい。満足しました。
これらのソフトのほとんどはもう触らない気がしました。

一旦、左下のメニューからログアウトして GUI は終了させます。


<Raspberry Pi の初期設定は次回

Raspberry Pi Model B+ を購入してみた

◆タイトル通り Raspberry Pi Model B+ を買いました
まさか家でまで組み込みLinuxやARMをいじる事になるとは思っていませんでした。
仕事以外では全く触るつもりもありませんでした。

が、何を思ったのかRaspberry Pi(ラスベリーパイ)を買ってみました。

何か新しいモデル(Model B+)が出たらしいという事から、
「特に今、必要ではないし、何かをするつもりもないけど、いつか必要になるかもしれないから一つ確保しておこう」
という軽い気持ちだったと思います。

ポチッた時には、眠らせておく気満々で、
確保しておくだけで、近々で触るつもりもありませんでした。

が、
「どうせ手元にあるなら、一通り動かしてみるか」
と思い直し、Raspberry Pi が手元に届くまでに、動かすのに必要なものをそろえる事としました。

基本的には、まずは有り物で済まし、必要に応じて買い増す予定です。

Raspberry Pi 本体以外に準備するもの
・micro SDカード
  補助記憶装置。OSのインストール等々に必要
  → 何かのおまけでついていた micro SD(メーカー不明 4GB class4)を使用
#    後日、32GB class10 の micro SDHC(SUPER TALENT ST32MSU1P)を買い足しちゃいました。

・micro USBケーブル
  Raspberry Pi の電源端子がmicro USBのため必要
  → Bluetooth イヤホン(オーディオテクニカ ATH-BT09)の充電用ケーブルを流用
#    後日、ELECOM MPA-AMB2A08WH を買い足しましたが、買わなくてもよかったかも。。。

・HDMIケーブル
  画面出力。インストール時や、直接操作時に必要
  基本的にはSSH経由で操作すると思うので、本質的には不要
  → その辺に余っていたものを使用

・マウス、キーボード
  入力装置。インストール時や、直接操作時に必要
  基本的にはSSH経由で操作すると思うので、本質的には不要
  → 使用中の Logicool MK260 を流用

・LANケーブル
  ネットワークに接続するのに必要
  → その辺に余っていたものを使用

・micro SDカードライター
  micro SDカードへの書き込みに必要
  → 自宅でSDを触る機会などなかったので、存在せず
       どうせイメージ書き込むのにしか使わないと思うので、やっすいのをネットで検索
       micro SD しか読めないのも何なので、複数メディアに対応しているCORE WAVE CW-169CD を購入
#    値段相応の見るからにちゃっちいのが届きましたが、普通に読み書きは出来るので良しとします。

ホストマシン側での準備
・ターミナルエミュレータソフト
  リモート操作のために必要
  → TeraTerm (http://sourceforge.jp/projects/ttssh2/)
       別にどれでもいいのだけど、自分はこれ以外触った事が無いだけ。

・Raspberry Pi 用OS (http://www.raspberrypi.org/downloads/)
  ソフトがないと Raspberry Pi もただのオブジェなので。
  → NOOBS(NOOBS_v1_3_10.zip)というのをダウンロードしておく。
#    最終的には、RASPBIAN(2014-09-09-wheezy-raspbian.zip)の方を使うようになりましたが。。。

おまけ
実はケースも買いました。届くのに、本体に遅れること一ヵ月半かかりましたが。
Raspberry Pi B+ Case, Black

  こんな感じのケースでした。
ss_rpi_case04ss_rpi_case01
ss_rpi_case03ss_rpi_case02


もはや乗りかかった船ですので、一冊、本も買ってしまいました。
・Raspberry Pi で遊ぼう! 改訂第2版(林和孝著)
  絵とか多そう、というだけの理由で選びましたが、それなりに役立ってます。


Raspberry PiへのOSインストールは次回

プライバシーポリシー
当サイトでは、Googleを含む第三者配信事業者や広告ネットワークが配信する広告を掲載しています。
当サイトでは、アクセス情報に基づいた適切な広告表示、及びトラフィックデータ収集のためにCookieを使用しています。
ユーザーはCookieの無効化により、これらの情報の提供を拒否する事ができます。
スポンサーリンク
記事検索
スポンサーリンク