sstea備忘録

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


環境設定

Raspberry Pi のメモリを効率よく使う

今回は Raspberry Pi で ZRAM 機能を有効にしようと思います。

現運用的には、メモリは全然足りています。
通常時では 100MB ほど使用しているだけです。
RAMディスク(厳密にはtmpfs)として使用している /tmp や /var/log の 64MB がフルに使用されても全然余裕です。
$ free
             total       used       free     shared    buffers     cached
Mem:        480852     126700     354152          0       8548      72460
-/+ buffers/cache:      45692     435160

ただ、ガチャガチャいろいろ動かした時には 300MB くらい行くときもありました。
なので、メモリ不足回避のための保険としてSWAPを有効にしようかとも思いましたが、SWAPを有効にすると
・スワップイン、スワップアウト発生時に遅くなる
・SWAP領域(SWAPファイル)分、ディスクスペースを消費する
というデメリットがあります。

特にほぼ使われないのが分かっているのにスワップファイルにディスク容量を取られるのが勿体無いです。
(4GB microSD を使っているので、ディスク空き容量は常に意識していないと。。。)

◆ZRAM機能
Linuxにはメモリの一部を圧縮スワップ領域として使用できるZRAMという機能があります。
簡単に言うと、ディスクスペースを一切消費することなく、500MB しかないメモリを 600MB くらいとして使えるということです。
(圧縮スワップ領域が使用される場合は多少のオーバーヘッドは発生します。)

256MB~512MB 要る、というのであれば、大人しくSWAP領域を確保してください。
今回は保険のために用意しておくだけなので、1, 2割増えれば十分ですので。

◆ZRAM が使用可能かの確認
ZRAM を使用するには、ZRAM 機能が使用可能な Linux カーネルである必要があります。
以下、使用可能かの確認方法をです。(別パターンの確認方法は↓おまけ1参照)

以下のデバイスファイルがあれば ZRAM 機能が使用可能です。
$ ls /dev/zram*
上記デバイスファイルがない場合は、下記ローダブルカーネルモジュールがあるか確認します。
あれば問題ありません。
$ ls /lib/modules/`uname -r`/kernel/drivers/block/zram/zram.ko
どちらも無い場合は、残念ながら ZRAM が使用できない Linux カーネルです。
↓を参考にカーネルコンフィグレーションを変更しカーネルをリビルドする必要があります。

◆ZRAM 機能を有効にするためのLinux カーネルコンフィグレーション
カーネルのビルド、差し替え方法はこちらをご覧ください

[1] CONFIG_ZSMALLOC を有効化(とりあえずローダブルカーネルモジュールにしておきます)
Kernel Features  --->
<M> Memory allocator for compressed pages

[2] CONFIG_ZRAM を有効化(ここもとりあえずローダブルカーネルモジュールにしておきます)
Device Drivers  --->
[*] Block devices  --->
<M>   Compressed RAM block device support
[*]     Enable LZ4 algorithm support
     CONFIG_ZRAM_LZ4_COMPRESS も有効化しておきます。ここはお好みで。
     (デフォルトは LZO 圧縮になります。
       一般的には LZ4 圧縮の方が圧縮率は劣りますが、圧縮、展開速度が高速です。)

# 今回、ZRAM の有効化に合わせて、Linux カーネルを 4.0.4 でリビルドしました。
# 使用したカーネルコンフィグをアップしておきます。

◆initスクリプトの作成

zram.sh
#!/bin/sh
### BEGIN INIT INFO
# Provides:       zram
# Required-Start:
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
### END INIT INFO

case "$1" in
    start)
        modprobe zram

        echo lz4 > /sys/block/zram0/comp_algorithm
        echo 256M > /sys/block/zram0/disksize

        mkswap /dev/zram0
        swapon -p 5 /dev/zram0
        ;;
    stop)
        swapoff /dev/zram0
        sleep 1
        modprobe -r zram
        ;;
    *)
        echo "Usage $0 start | stop "
        ;;
esac
ZRAMをローダブルカーネルモジュールとしている場合は、まず modprobe コマンドでモジュールを組み込む必要があります。

CONFIG_ZRAM_LZ4_COMPRESS を有効にしているので、その後 LZ4 アルゴリズムに変更しています。
コンフィグを有効にしていても、/sys/block/zram0/comp_algorithm を変更しなければ LZO 圧縮のままとなります。("cat /sys/block/zram0/comp_algorithm" で確認できます。)

サイズはお好みで設定してください。(上記の場合は 256MBです。)
メモリサイズの半分を指定するのが一般的(?おまけ2↓参照)のようです。

◆ZRAMの有効化
$ curl -O http://sstea.blog.jp/raspi/script/zram.sh
$ chmod 755 zram.sh
$ sudo mv zram.sh /etc/init.d/
$ sudo chkconfig --add zram.sh
zram.sh を取得し、実行権限を付与し、init スクリプトとして登録します。

再起動するか、"sudo /etc/init.d/zram.sh start" とすると、ZRAM が有効になります。
$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       131068  0       5

ちなみにスワップのし易さは /proc/sys/vm/swappiness に echo で値を書き込む事で設定できます。
(cat を使うと現在の設定値を取得できます。)
0から100の値を設定でき、値が大きいほうがスワップし易いです。

◆おまけ1
CONFIG_IKCONFIG_PROC  が有効になっている Linux カーネルであれば下記で確認可能です。
$ zcat /proc/config.gz | grep CONFIG_ZRAM
で、"CONFIG_ZRAM=y" または "CONFIG_ZRAM=m" と表示されれば、問題ありません。
"m" の場合はZRAMのローダブルカーネルモジュールがあるはずです。

◆おまけ2
Ubuntu 等の場合(勿論 Linux Mint も!!)は、
"sudo apt-get install zram-config" とするだけ(カーネルが対応しているのは前提ですが)で
ZRAM が使えるようになります。

その方法でインストールした場合の /etc/init/zram-config.conf を見ると、
ZRAM デバイスを CPU の数だけ作ります。
そして、一個あたりの ZRAM のサイズは全メモリサイズの半分のサイズをCPUの数で割ったサイズを指定しています。

メモリが1GBでCPUが4つの場合は、128MB(1GB / 2 / 4)の ZRAM を4つ作る(計512MB)という事です。

Raspbian(2015-02)の環境を構築する

Raspbian が何やら新しいバージョンになっているようなので、環境を構築し直してみようと思います。

以下、以前に書いたここや、このあたりを参考にしつつ再構築しました。
(おおっ!? 備忘録として役立っているではないですか)

設定順序等を再構成し、いろいろ補完を行ないリメイクしました。
細かーい説明とかは端折ったりしてるかも。以前の記事も参照のこと。。。

◆新バージョン Raspbian の書き込み
http://www.raspberrypi.org/downloads/ から Raspbian のイメージファイル(2015-02-16-raspbian-wheezy.zip)をダウンロードし、Win32DiskImager (http://sourceforge.jp/projects/sfnet_win32diskimager/) により、microSD に書き込みます。
(とりあえず今回は4GBのmicroSDを使用しました。)

◆初期設定
書き込み後、最初の起動時に、コンフィグレーション画面が立ち上がりますので、

  microSDのパーティションの拡張。
1 Expand Filesystem

  タイムゾーンに日本(東京)を選択。
4 Internationalisation Options
->I2 Change Timezon
  ->Asia
    ->Tokyo

  キーボードレイアウトに日本語キーボードを選択。
4 Internationalisation Options
->I3 Change Keyboard Layout
  ->Generic 105-key (intl) PC
    ->Other
      ->Japanese
        ->Japanese - Japanese (OADG 109A)
    ->The default for the keyboard layout
      ->No compose key
        ->Yes

  オーバークロック(お好みで)
7 Overclock
->Medium

◆不要パッケージの削除

下記がインストール直後の状態です。1GB弱しか空きがありません。
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
rootfs           3671884 2479420    993104  72% /
/dev/root        3671884 2479420    993104  72% /
devtmpfs          218604       0    218604   0% /dev
tmpfs              44576     232     44344   1% /run
tmpfs               5120       0      5120   0% /run/lock
tmpfs              89140       0     89140   0% /run/shm
/dev/mmcblk0p1     57288   14720     42568  26% /boot
基本的には以前、に削除したのと同じパッケージを削除しました。(お好みでどうぞ)
何個か追加で削除してますが。(回路シミュレータの smartsim とか。。。)
(インストールされているパッケージは "dpkg -l" で確認できます。)
$ sudo apt-get autoremove -y wolfram-engine scratch sonic-pi
$ sudo apt-get autoremove -y python-minecraftpi python-pygame
$ sudo apt-get autoremove -y idle idle3
$ sudo apt-get autoremove -y netsurf-common dillo
$ sudo apt-get autoremove -y smartsim
$ sudo apt-get autoremove -y pistore debian-reference-common
$ sudo apt-get autoremove -y libraspberrypi-doc

$ sudo apt-get autoremove -y man manpages man-db
$ sudo apt-get autoremove -y git git-man
$ sudo apt-get autoremove -y galculator
$ sudo apt-get autoremove -y weston
$ sudo apt-get autoremove -y gdb gdbserver
$ rm -rf /home/pi/python_games/
$ sudo rmdir /usr/local/games/ /usr/games/

それなりに空きが出来たと思います。

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
rootfs           3671884 1770044   1702480  52% /
/dev/root        3671884 1770044   1702480  52% /
devtmpfs          218604       0    218604   0% /dev
tmpfs              44576     232     44344   1% /run
tmpfs               5120       0      5120   0% /run/lock
tmpfs              89140       0     89140   0% /run/shm
/dev/mmcblk0p1     57288   14720     42568  26% /boot

◆ファームウェア・カーネル/パッケージのアップデート
2015-02-16-raspbian-wheezy のカーネルバージョンは 3.18.7 のようです。
$ uname -r
3.18.7+
/boot の下を見てみると、デバイスツリーのファイル等が以前より増えています。
(あんまりデバイスツリー好きじゃないんですが、、、世の中の流れですね。。。)

ファームウェアのアップデートを行い、完了後リブートします。
$ sudo rpi-update
$ sudo reboot
リブート後、ちゃんとカーネルバージョンが変わっています。
$ uname -r
3.18.9+

古いバージョンのモジュールは不要なので、削除しておきます。
$ sudo rm -rf /lib/modules/3.18.7+/ /lib/modules/3.18.7-v7+/

サンプルプログラムも削除します。(お好みで。ビルドして一度サンプルを実行してみてもいいと思います。)
$ sudo rm -rf /opt/vc/src/hello_pi/

その他のパッケージもアップデートします。

$ sudo apt-get update
$ sudo apt-get upgrade

まだ半分くらいの空きがあります。
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
rootfs           3671884 1766000   1706524  51% /
/dev/root        3671884 1766000   1706524  51% /
devtmpfs          218644       0    218644   0% /dev
tmpfs              44584     244     44340   1% /run
tmpfs               5120       0      5120   0% /run/lock
tmpfs              89160       0     89160   0% /run/shm
/dev/mmcblk0p1     57288   14760     42528  26% /boot

◆sambaの初期設定
ネットワーク経由で Raspberry Pi とファイルのやりとりを行なうために、sambaの設定を行ないます。
(ホストマシンでクロスビルドしたカーネルイメージを持ってくるためです。)

$ sudo apt-get install samba chkconfig

    /etc/samba/smb.conf を編集。
[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
direcory mode = 0777

次回は 2015-02-16-raspbian-wheezy 用のLinuxカーネルを差し替えます。

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