PCリンクスでは、パソコンの設定・修理から組込み機器の受託開発まで承ります。

 

Raspberry Pi でカーネルにaufsを組み込む

4回目の今回は、Raspberry Piでaufsをカーネルに組み込み、再構築を行います。

Raspberry Piでは、HDDの代わりにSDカードにOS(Raspbian)を格納しています。
SDカードは、価格も安く、小さくて良いことずくめのようですが、書き換え寿命というものが存在します。

このSDカードのウィークポイントを回避して、信頼性を高める方策として、最終的には、ファイルシステムをリードオンリーとしてマウントします。(fsprotectパッケージをインストールして対応する予定です)
その為の準備作業として、ちょっと大変な作業となりますが、aufs(AnotherUnionFS) をカーネルに組み込み再構築を行います。
※リードオンリーでマウントすると、突然の電源断によるファイルシステムの破損の可能性もなくなります。

 

カーネルのコンパイル環境の整備

最初に、uptadeとupgradeを実行します。

[root@ms03 ~]# apt-get update
[root@ms03 ~]# apt-get upgrade

次に、カーネルコンパイル環境を整えるために、開発環境をまとめてインストールします。

[root@ms03 ~]# apt-get -y install libncurses5-dev libxml2-dev subversion libssl-dev libspandsp-dev libsqlite3-dev sqlite3 libgtk2.0-dev libslang2-dev libnewt-dev libghc-zlib-dev libkrb5-dev git libreadline6-dev

 

カーネル再構築の準備

fsprotectパッケージを動作させるためには、aufsがカーネルに組み込まれている必要がありますので、カーネルを再構築します。
※aufsとは、ReadOnlyのファイルシステムとReadWriteのファイルシステムをマージして、ひとつの読み書き可能なファイルシステムのように見せかけるものです。

ソースコードのダウンロード先へ移動して、githubからraspberry Pi 用の最新版のソースコードを取得します。

[root@ms03 ~]# cd /usr/src
[root@ms03 src]# git clone --depth 1 https://github.com/raspberrypi/linux.git

作成されたlinuxディレクトリにシンボリックリンクを張ります。

[root@ms03 src]# ln -s linux linux-3.6.11+

linuxディレクトリへ移動して、aufsのパッチを入手します。

[root@ms03 linux]# git clone git://aufs.git.sourceforge.net/gitroot/aufs/aufs3-standalone.git

aufs3-standaloneディレクトリへ移動して、git checkout origin/aufs3.6 を実行します。

[root@ms03 linux]# cd aufs3-standalone/
[root@ms03 aufs3-standalone]# git checkout origin/aufs3.6

パッチファイルがダウンロードされていることを確認します。

[root@ms03 aufs3-standalone]# ll
-rw-r--r-- 1 root root 17990  3月  2 17:55 COPYING
drwxr-xr-x 4 root root  4096  3月  2 17:55 Documentation
-rw-r--r-- 1 root root  1384  3月  2 17:55 Makefile
lrwxrwxrwx 1 root root    39  3月  2 17:55 README -> ./Documentation/filesystems/aufs/README
-rw-r--r-- 1 root root  2902  3月  2 17:55 aufs3-base.patch
-rw-r--r-- 1 root root   957  3月  2 17:55 aufs3-kbuild.patch
-rw-r--r-- 1 root root  8281  3月  2 17:55 aufs3-loopback.patch
-rw-r--r-- 1 root root  6959  3月  2 17:55 aufs3-proc_map.patch
-rw-r--r-- 1 root root  8103  3月  2 17:55 aufs3-standalone.patch
-rw-r--r-- 1 root root  2828  3月  2 17:55 config.mk
drwxr-xr-x 3 root root  4096  3月  2 17:55 fs
drwxr-xr-x 3 root root  4096  3月  2 17:55 include

fs ,Documentation , includeディレクトリを1つ上のlinuxディレクトリへコピーします。

[root@ms03 aufs3-standalone]# cp -rp fs /usr/src/linux
[root@ms03 aufs3-standalone]# cp -rp Documentation/ /usr/src/linux
[root@ms03 aufs3-standalone]# cp -rp include/linux/aufs_type.h /usr/src/linux/include/linux/

1つ上のlinuxディレクトリへ移動して、パッチを適用します。
※aufs3-standalone.patchは、aufsをモジュールとしてカーネルに組み込む場合に適用するパッチなので、今回は適用しません。

[root@ms03 aufs3-standalone]# cd ..

[root@ms03 linux]# patch -p1 < aufs3-standalone/aufs3-kbuild.patch
patching file fs/Kconfig
patching file fs/Makefile
patching file include/linux/Kbuild

[root@ms03 linux]# patch -p1 < aufs3-standalone/aufs3-base.patch
patching file fs/inode.c
Hunk #1 succeeded at 1503 (offset 12 lines).
patching file fs/splice.c
patching file include/linux/fs.h
patching file include/linux/splice.h

[root@ms03 linux]# patch -p1 < aufs3-standalone/aufs3-proc_map.patch
patching file fs/buffer.c
Hunk #1 succeeded at 2355 with fuzz 2 (offset 38 lines).
patching file fs/proc/nommu.c
patching file fs/proc/task_mmu.c
patching file fs/proc/task_nommu.c
patching file include/linux/mm_types.h
patching file kernel/fork.c
patching file mm/memory.c
patching file mm/mmap.c
patching file mm/nommu.c


稼働中のカーネル設定を.configファイルにコピーします。

[root@ms03 linux]# zcat /proc/config.gz > .config

設定メニュー「make menuconfig」を実行して、aufsを有効化させます。
※aufsはモジュール化せずに、静的にカーネルへ組み込むようにします。

[root@ms03 linux]# make menuconfig

メニュー画面で「Load an Alternate Configuration File」選択します。

kernel config 01 Raspberry Piでカーネル再構築

既存のカーネル設定「.config」を読み込んでからaufsを有効化します。

kernel config 02 Raspberry Piでカーネル再構築

initramfsの設定を行います。
# General Setup
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support を選択して [*] を表示させます。

kernel config 03 Raspberry Piでカーネル再構築

File system を選択します。

kernel config 04 Raspberry Piでカーネル再構築

[*] Miscellaneous filesystems を選択します。

kernel config 05 Raspberry Piでカーネル再構築

<*> Aufs (Advanced multi layered unification filesystem) support を追加します。
[*] NFS-exportable aufs , Rams(initramfs/rootfs) as an aufs branch , Fuse fs an sufs branch を追加します。

kernel config 06 Raspberry Piでカーネル再構築

変更内容をsaveします。

kernel config 07 Raspberry Piでカーネル再構築

.configをセーブ(上書き)します。

kernel config 08 Raspberry Piでカーネル再構築

 

.config設定の変更が正しく実施できたことを確認します。
※CONFIG_BLK_DEV_INITRD=y , CONFIG_AUFS_FS=y ならOKです。

[admin@ms03 linux]# cat .config |grep CONFIG_BLK_DEV_INITRD
CONFIG_BLK_DEV_INITRD=y

[admin@ms03 linux]# cat .config |grep CONFIG_AUFS_FS
CONFIG_AUFS_FS=y

aufsをカーネルに組み込むので、カーネルカーネルバージョンを設定し、修正履歴を残すようにします。
EXTRAVERSION = に適当な表示を追加します。今回の例では”-aufs”を追加しています。

[root@ms03 linux]# pico Makefile
VERSION = 3
PATCHLEVEL = 6
SUBLEVEL = 11
EXTRAVERSION = -aufs
NAME = Terrified Chipmunk

 

カーネルの再構築(ビルド)

コンパイルを実行する前に、make cleanを実行しておきます。

[root@ms03 linux]# make clean

makeコマンドで、設定したコンフィギュレーションを元に、カーネルとモジュールをコンパイルします。
コンパイルは、1GHz動作で約5時間(700MHz動作時は約8時間)程かかりますので、気長に待ちます。
※コンパイルされたカーネルは、arch/arm/bootへ”Image”という名称で配置されます。
※コンパイルされたモジュールは、各サブディレクトリの下に配置されます。

[root@ms03 linux]# make

 

モジュールのインストール

すでにmakeコマンドで各サブディレクトリ配下にモジュールが作成されていますので、各モジュールをインストールします。

既にmodulesディレクトリには、3.6.11+ディレクトリが存在していますので、バックアップしておきます。

[root@ms03 linux]# mv /lib/modules/3.6.11+ /lib/modules/3.6.11+.bak

make modules_installコマンドで、モジュールを所定のディレクトリ(/lib)へインストールします。

[root@ms03 linux]# make modules_install

 

カーネルのインストール

ビルドした新しいカーネルイメージを /boot にコピーします。
古いカーネルは、バックアップしておきます。

[root@ms03 linux]# uname -a
Linux ms03 3.6.11+ #371 PREEMPT Thu Feb 7 16:31:35 GMT 2013 armv6l GNU/Linux

[root@ms03 linux]# mv /boot/kernel.img /boot/kernel.img.bak

[root@ms03 linux]# cp arch/arm/boot/Image /boot/kernel.img

ここで、OSを再起動させると、新しいカーネルで起動しますので、カーネルバージョンを確認しておきます。

[root@ms03 linux]# reboot

[root@ms03 ~]# uname –a
Linux ms03 3.6.11-aufs+ #1 PREEMPT Sun Mar 3 01:32:00 JST 2013 armv6l GNU/Linux

 

ファームウェアとブートローダーのアップデート

GPUのファームウェア(start.elf)とブートローダー(bootcode.bin)をアップデートする場合は、下記の手順で、アップデートを行います。
※aufsを組み込んだカーネルを再構築していますので、rpi-update コマンドでのアップデートは禁止です。

現在のファームウェアバージョンを確認しておきます。

[root@ms03 ~]# /opt/vc/bin/vcgencmd version
Feb  7 2013 16:40:41
Copyright (c) 2012 Broadcom
version 367973 (release)

ファームウェア格納先へ移動して、gitコマンドで必要なファイルをダウンロードします。

[root@ms03 ~]# cd /usr/src
[root@ms03 src]# git clone https://github.com/raspberrypi/firmware.git
Cloning into 'firmware'...
remote: Counting objects: 31625, done.
remote: Compressing objects: 100% (7437/7437), done.
remote: Total 31625 (delta 21858), reused 31210 (delta 21456)
Receiving objects: 100% (31625/31625), 980.82 MiB | 84 KiB/s, done.
Resolving deltas: 100% (21858/21858), done.
Checking out files: 100% (1679/1679), done.

書き換え予定のファイルをバックアップした後、ダウンロードしたstart.elfと、bootcode.binを /boot へコピーします。

[root@ms03 src]# cp /boot/bootcode.bin /boot/bootcode.bin.bak
[root@ms03 src]# cp /boot/start.elf /boot/start.elf.bak

[root@ms03 src]# cp firmware/boot/start.elf /boot/start.elf
cp: `/boot/start.elf' を上書きしますか? y

[root@ms03 src]# cp firmware/boot/bootcode.bin /boot/
cp: `/boot/bootcode.bin' を上書きしますか? y

ここで、一旦、OSを再起動させて、ファームウェアのバージョンを確認します。

[root@ms03 src]# reboot

[root@ms03 ~]# /opt/vc/bin/vcgencmd version
Feb  7 2013 16:40:41
Copyright (c) 2012 Broadcom
version 367973 (release) 

 

以上で、「Raspberry Pi でカーネルにaufsを組み込む」を終了します。

 

Raspberry Pi でRAMディスクを使う

3回目の今回は、Raspberry Piでtmpディレクトリやログファイルの格納先として、RAMディスクを使用するよに対応します。

SDカードは、データの書き込み回数制限があり、ハードディスクドライブに比べて寿命が短いので、延命対策としてRAMディスクを使用するようにします。

デジカメで撮影した写真の保存先としてSDカードを使用するのであれば、なんら問題は無いのですが、今回のように、24時間動作のサーバ用途に、HDDの代わりとしてSDカードを使うためには、RAMディスクを使用するなどの、対応が必要となります。
※最終的には、fsprotectパッケージを採用して、ファイルシステムをリードオンリーとして使用するようにします。

安価なSSDの詳細は、こちら 安易なSSD導入がもたらす「猛毒」の正体 をご参照ください。(こわ~)

SDメモリーカードに使用されているNANDフラッシュメモリには、1つのセルに1bitのデータを記録するSLC (Single Level Cell)と、2bit以上のデータを記録するMLC (Multi Level Cell)タイプがあります。

toshiba sd8gb 300x276 Raspberry PiでRAMDiskを使う

 <SDカードのパッケージ写真>

 価格重視の一般的なSDカードでは、
 MLCタイプのNANDフラッシュが採用されています。
 (今回購入した東芝のSDカードはMLCタイプです)

 信頼性を重視する用途では、
 SLCタイプのNANDフラッシュが採用されています。
 (価格はMLCの10倍くらいします…)
 

 

swapファイルの対応

最初に、dphys-swapfileの自動起動設定をoffして、SDカード上にswapファイルを作成することをやめます。

[root@ms03 ~]# chkconfig dphys-swapfile off
[root@ms03 ~]# chkconfig dphys-swapfile --list
dphys-swapfile            0:off  1:off  2:off  3:off  4:off  5:off  6:off

 

tmpファイルの対応

OSの起動時、/tmpディレクトリと/var/tmpディレクトリは、RAMディスク上にマウントするように変更します。

[root@ms03 ~]# pico /etc/fstab
proc                    /proc           proc    defaults                0       0
/dev/mmcblk0p1          /boot           vfat    defaults                0       2
/dev/mmcblk0p2          /               ext4    defaults,noatime        0       1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off$
# tmpファイルはRAMディスク上に保管する
tmpfs                   /tmp            tmpfs    defaults,size=32m,noatime,mode=1777      0       0
tmpfs                   /var/tmp        tmpfs    defaults,size=16m,noatime,mode=1777      0       0

ここで、一旦、再起動して、マウント状況を確認します

[root@ms03 ~]# reboot
[root@ms03 ~]# df -h
ファイルシス      サイズ  使用     残り    使用%   マウント位置
rootfs           7.2G   1.5G    5.5G    21%     /
/dev/root        7.2G   1.5G    5.5G    21%     /
devtmpfs         235M   0       235M    0%      /dev
tmpfs            49M    204K    49M     1%      /run
tmpfs            5.0M   0       5.0M    0%      /run/lock
tmpfs            98M    0       98M     0%      /run/shm
/dev/mmcblk0p1   56M    19M     38M     34%     /boot
tmpfs            32M    0       32M     0%      /tmp
tmpfs            16M    0       16M     0%      /var/tmp

 

ログファイルの対応

rsyslogで記録するログは、RAMディスク上に記録させて、SDカードには記録させないようにします。

OS起動時、/var/logディレクトリは、RAMディスク上にマウントするように変更します。

[root@ms03 ~]# pico /etc/fstab
proc                    /proc           proc    defaults                0       0
/dev/mmcblk0p1          /boot           vfat    defaults                0       2
/dev/mmcblk0p2          /               ext4    defaults,noatime        0       1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off$
# tmpファイルはRAMディスク上に保管する
tmpfs                   /tmp            tmpfs    defaults,size=32m,noatime,mode=1777      0       0
tmpfs                   /var/tmp        tmpfs    defaults,size=16m,noatime,mode=1777      0       0
# /var/logディレクトリはRAMディスク上に配置する
tmpfs                  /var/log         tmpfs    defaults,size=32m,noatime,mode=0755      0       0

マウント状況を確認します。

[root@ms03 ~]# mount /var/log
[root@ms03 ~]# df -h
ファイルシス      サイズ  使用     残り    使用%   マウント位置
rootfs           7.2G   1.5G    5.5G    21%     /
/dev/root        7.2G   1.5G    5.5G    21%     /
devtmpfs         235M   0       235M    0%      /dev
tmpfs            49M    204K    49M     1%      /run
tmpfs            5.0M   0       5.0M    0%      /run/lock
tmpfs            98M    0       98M     0%      /run/shm
/dev/mmcblk0p1   56M    19M     38M     34%     /boot
tmpfs            32M    0       32M     0%      /tmp
tmpfs            16M    0       16M     0%      /var/tmp
tmpfs            32M    0       32M     0%      /var/log

 

rsyslog設定の変更

rsyslogでは、必要最小限のログ(auth , syslogとmessages)のみを、記録させるようにして、RAMディスク容量を節約するようにします。
また、ログを直接吐き出すアプリでは、/var/log 配下にサブディレクトリが存在しないと、エラーとなる場合がありますので、rc.localファイルで、起動時に自動的にディレクトリを作成するようにします。

rsyslog.confの初期状態では、下記のログファイルが作成されています。

[root@ms03 ~]# ll /var/log
-rw-r----- 1 	root adm    701  3月  2 14:55 	auth.log
-rw-r----- 1 	root adm    180  3月  2 14:55 	daemon.log
-rw-r----- 1 	root adm    949  3月  2 14:54 	debug
-rw-r--r-- 1 	root adm  12155  3月  2 14:54 	dmesg
-rw-r----- 1 	root adm  17863  3月  2 14:54 	kern.log
-rw-r----- 1 	root adm      0  3月  2 14:54 	lpr.log
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.err
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.info
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.log
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.warn
-rw-r----- 1 	root adm  17044  3月  2 14:54 	messages
drwxr-xr-x 2 	root root   100  3月  2 14:54 	news
-rw-r----- 1 	root adm  18391  3月  2 14:55 	syslog
-rw-r----- 1 	root adm      0  3月  2 14:54 	user.log 

rsyslogの設定ファイル(rsyslog.conf)を修正して、最小限のログのみを記録するように変更します。

[root@ms03 ~]# pico /etc/rsyslog.conf
(略)
###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 	/var/log/auth.log
*.*;auth,authpriv.none          	-/var/log/syslog
# cron.*                         	/var/log/cron.log
# daemon.*                      	-/var/log/daemon.log
# kern.*                         	-/var/log/kern.log
# lpr.*                          	-/var/log/lpr.log
# mail.*                         	-/var/log/mail.log
# user.*                         	-/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
# mail.info                       	-/var/log/mail.info
# mail.warn                     	-/var/log/mail.warn
# mail.err                       	/var/log/mail.err

#
# Logging for INN news system.
#
# news.crit                      	/var/log/news/news.crit
# news.err                       	/var/log/news/news.err
# news.notice                    	-/var/log/news/news.notice

#
# Some "catch-all" log files.
#
# *.=debug;\
#        auth,authpriv.none;\
#        news.none;mail.none     	-/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          	-/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         	:omusrmsg:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#       news.=crit;news.=err;news.=notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       	/dev/tty8

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
#
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
daemon.*;mail.*;\
        news.err;\
        *.=debug;*.=info;\
        *.=notice;*.=warn       	|/dev/xconsole

ログを直接吐き出すプログラムでは、ディレクトリが無いとエラーとなる場合がありますので、rc.localに追記し、OS起動時、自動でディレクトリを作成するようにします。

[root@ms03 ~]# pico /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# 起動時、自動的にディレクトリを作成
mkdir -p /var/log/ConsoleKit
mkdir -p /var/log/samba
mkdir -p /var/log/fsck
mkdir -p /var/log/apt
mkdir -p /var/log/ntpstats
chown root.ntp /var/log/ntpstats
chown root.adm /var/log/samba

# 起動時、自動的にLastlogとwtmp,btmpファイルの空ファイルを作成
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

exit 0

ここで、一旦、OSを再起動させて、/var/logを確認します。
※RAMディスク上のログファイルは、電源をオフすると、すべて消えてしまいますので、消えてしまって困るログは、事前にバックアップしておきます。

[root@ms03 ~]# reboot
[root@ms03 ~]# ll /var/log/
drwxr-xr-x 2 	root 	root     	40  	3月  2 15:02 	ConsoleKit
drwxr-xr-x 2 	root 	root     	40  	3月  2 15:02 	apt
-rw-r----- 1 	root 	adm     	483  	3月  2 15:03 	auth.log
-rw-r--r-- 1 	root 	utmp     	0   	3月  2 15:02 	btmp
-rw-r--r-- 1 	root 	adm   		12155  	3月  2 15:02 	dmesg
drwxr-xr-x 2 	root 	root     	40  	3月  2 15:02 	fsck
-rw-r--r-- 1 	root 	utmp 		292584 	3月  2 15:03 	lastlog
-rw-r----- 1 	root 	adm   		17044  	3月  2 15:02 	messages
drwxr-xr-x 2 	root 	ntp      	40  	3月  2 15:02 	ntpstats
drwxr-xr-x 2 	root 	adm      	40  	3月  2 15:02 	samba
-rw-r----- 1 	root 	adm   		18389  	3月  2 15:03 	syslog
-rw-r--r-- 1 	root 	utmp   		3072  	3月  2 15:03 	wtmp

 

以上で、「Raspberry Pi でRAMディスクを使う」を終了します。

 

Raspberry Pi で使用しないデーモンを停止する

2回目の今回は、使用しないデーモンを停止させます。また、ntpdateをインストールして1時間ごとに時刻合わせを実施するようにします。

 

不要なサービスを削除

メモリ節約の一つとして、コンソール端末のみ有効とし、tty2からtty6 を無効化します。

[root@ms03 ~]# pico /etc/inittab
# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
#  :::
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
# コンソールは使用可能とするのでtty1は生かし、tty2~tty6をコメント行に変更
1:2345:respawn:/sbin/getty --noclear 38400 tty1
# 2:23:respawn:/sbin/getty 38400 tty2
# 3:23:respawn:/sbin/getty 38400 tty3
# 4:23:respawn:/sbin/getty 38400 tty4
# 5:23:respawn:/sbin/getty 38400 tty5
# 6:23:respawn:/sbin/getty 38400 tty6

 

デーモンの自動起動設定の確認

最初に、使い慣れた”chkconfig”パッケージをインストールします。

[root@ms03 ~]# apt-get install chkconfig

電源投入時、自動起動設定がonにセットされているデーモンを確認します。

[root@ms03 ~]# chkconfig --list
alsa-utils              0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
bootlogs                0:off  1:on   2:on   3:on   4:on   5:on   6:off
bootmisc.sh             0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
checkfs.sh              0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
checkroot-bootclean.sh  0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
checkroot.sh            0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
console-setup           0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
cron                   	0:off  1:off  2:on   3:on   4:on   5:on   6:off
dbus                   	0:off  1:off  2:on   3:on   4:on   5:on   6:off
dphys-swapfile          0:off  1:off  2:on   3:on   4:on   5:on   6:off
fake-hwclock            0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
hostname.sh             0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
hwclock.sh              0:off  1:off  2:off  3:off  4:off  5:off  6:off
ifplugd                 0:off  1:off  2:on   3:on   4:on   5:on   6:off
kbd                    	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
keyboard-setup          0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
killprocs               0:off  1:on   2:off  3:off  4:off  5:off  6:off
kmod                   	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
lightdm                 0:off  1:off  2:off  3:on   4:on   5:on   6:off
motd                   	0:off  1:on   2:on   3:on   4:on   5:on   6:off
mountall-bootclean.sh   0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
mountall.sh             0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
mountdevsubfs.sh        0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
mountkernfs.sh          0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
mountnfs-bootclean.sh   0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
mountnfs.sh             0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
mtab.sh                	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
networking              0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
nfs-common            	0:off  1:off  2:off  3:off  4:off  5:off  6:off
ntp                    	0:off  1:off  2:on   3:on   4:on   5:on   6:off
plymouth               	0:off  1:off  2:on   3:on   4:on   5:on   6:off
plymouth-log            0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
procps                 	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
rc.local                0:off  1:off  2:on   3:on   4:on   5:on   6:off
rcS                    	0:off  1:off  2:off  3:off  4:off  5:off  6:off
resolvconf              0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
rmnologin               0:off  1:off  2:on   3:on   4:on   5:on   6:off
rpcbind                 0:off  1:off  2:off  3:off  4:off  5:off  6:off
rsyslog                 0:off  1:off  2:on   3:on   4:on   5:on   6:off
sendsigs               	0:off  1:off  2:off  3:off  4:off  5:off  6:off
ssh                    	0:off  1:off  2:on   3:on   4:on   5:on   6:off
sudo                   	0:off  1:off  2:on   3:on   4:on   5:on   6:off
switch_cpu_governor     0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
triggerhappy            0:off  1:off  2:on   3:on   4:on   5:on   6:off
udev                   	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
udev-mtab              	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
umountfs               	0:off  1:off  2:off  3:off  4:off  5:off  6:off
umountnfs.sh            0:off  1:off  2:off  3:off  4:off  5:off  6:off
umountroot             	0:off  1:off  2:off  3:off  4:off  5:off  6:off
urandom                	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on
x11-common            	0:off  1:off  2:off  3:off  4:off  5:off  6:off  	S:on

 

使用しないデーモンの停止

使用しないデーモンの自動起動をoffします。

[root@ms03 ~]# chkconfig dbus off 
[root@ms03 ~]# chkconfig triggerhappy off
[root@ms03 ~]# chkconfig alsa-utils off
[root@ms03 ~]# chkconfig lightdm off
[root@ms03 ~]# chkconfig motd off
[root@ms03 ~]# chkconfig plymouth off
[root@ms03 ~]# chkconfig ntp off

 

ntpdateパッケージのインストール

ntpdateパッケージをインストールします。

[root@ms03 ~]# aptitude install ntpdate

次に、1時間ごとに時刻あわせを行うようにcronを設定します。

[root@ms03 ~]# crontab -e
# 1時間ごと(毎時0分)に、時刻合わせを行う
0 * * * * /etc/network/if-up.d/ntpdate > /dev/null 2>&1

ntpサーバは、国内の公開ntpサーバを使用するようにntpdateファイルの設定を変更します。

[root@ms03 ~]# pico /etc/default/ntpdate

# The settings in this file are used by the program ntpdate-debian, but not
# by the upstream program ntpdate.

# Set to "yes" to take the server list from /etc/ntp.conf, from package ntp,
# so you only have to keep it in one place.
NTPDATE_USE_NTP_CONF=yes

# List of NTP servers to use  (Separate multiple servers with spaces.)
# Not used if NTPDATE_USE_NTP_CONF is yes.
# 国内の公開NTPサーバを指定する
# NTPSERVERS="0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org"
NTPSERVERS="ntp.nict.jp ntp.jst.mfeed.ad.jp ntp.ring.gr.jp"

# Additional options to pass to ntpdate
NTPOPTIONS=""

一旦、再起動を行い、起動時の時刻合わせが実行されていることをログファイル(syslog)で確認します。
※1時間ごとの時刻合わせは、毎時0分に実行され、結果はログファイルに記録されます。

[root@ms03 ~]# cat /var/log/syslog
Mar  2 14:25:36 ms03 ntpdate[1455]: step time server 203.152.216.74 offset 24.962704 sec
Mar  2 14:25:48 ms03 ntpdate[1843]: adjust time server 203.152.216.74 offset 0.002556 sec

 

以上で、「Raspberry Pi で使用しないデーモンを停止する」を終了します。

 

Raspberry Pi でOSのインストールと初期設定を行う

クレジットカードサイズのボードコンピュータである”Raspberry Pi”に、SoftEther VPN , Asteriskとfsprotectをインストールして、SoftEther VPN & IP-PBX専用機を構築します。
※外出先のiPhoneなどからVPN接続し、自宅(または職場)のひかり電話を利用することを目指します。

たった2,950円の基板(RSコンポーネンツ)ですが、Linuxを搭載したサーバを構築することができます。
使い心地は、AMD Athlon™ II NEO N40L 1.5GHz プロセッサを搭載したMicroServerと同じ感覚で使えます。
※キーボード、マウスとモニタを接続すれば、GUIを搭載した”パソコン”としても使えますが、当方は、LANケーブルのみを接続して、サーバ専用機として使用します。

Raspberry Pi 01 300x238 Raspberry PiでOSをインストール

 CPU : Broadcom BCM2835 (ARM1176JZFS , 1GHz)

 GPU : Dual Core VideoCore IV (OpenGL ES 2.0)

 Memory : 512MB (Model B 2012年10月15日以降より)

 Network : SMSC LAN9512 10/100BaseT Ethernet

 Size : 85.0 x 56.0 mm

処理能力はだいぶ劣りますが、HP社のMicroServerで実現していたVPNサーバとAsterisk(IP-PBX)の機能を、Raspberry Piで代替させます。
※ハードウェア構成は、出来るだけシンプルな構成とし、不意の停電でもデータが壊れにくいファイルシステムを採用します。

 

Raspbianのインストール

OSは、Windowsではなく、Raspberry Pi に最適化された”Raspbian”というDebian WheezyベースのLinuxデストリビューションをインストールします。

最初に、SDカードにOS(Raspbian)をインストールします。WindowsPCを使用して、OSをダウンロードします。
Raspbianは、こちら Raspberry PiのWebサイト からダウンロードできます。

ダウンロードしたzipファイルを解凍し、checksumを確認しておきます。
checksumを確認するプログラムは、”sha1sum.exe”というフリーソフトを使用します。
sha1sum.exeプログラムは、こちら sourceforge.jpのWebサイト からダウンロードできます。

Raspi setup 00 Raspberry PiでOSをインストール

 シリコンリナックス社のDD for Windows を使用して、OSイメージをSDカードに書き込みます。
書き込みプログラムは、こちら シリコンリナックス社のWebサイト からダウンロードできます。

Raspi setup 01 Raspberry PiでOSをインストール

 

Raspbianの初期設定

OSイメージの書き込みが完了したら、SDカードをRaspberry Piに挿入して、電源を投入します。

今回は、シリアルコンソールを使用して、初期設定を行います。
ターミナルプログラムの設定は、「115Kbps,8bit,non,1stop,フロー制御なし」 を指定します。
※シリアルコンソールケーブルは、3.3Vレベルの信号である必要があります。
  Raspberry PiのRXD入力端子は、5V tolerantではありませんので、5V信号を印加することはできません!

GPIOの詳細は、こちら RPi Low-level peripherals を参照ください。

Raspberry Pi 06 300x225 Raspberry PiでOSをインストール

 <使用する信号>

 6Pin  : GND

 8Pin  : TXD (PCのUARTのRXDと接続します)

 10Pin : RXD (PCのUARTのTXDと接続します)

Raspberry Pi に電源を接続します。

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.6.11+ (dc4@dc4-arm-01) (gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08) ) #371 PREEMPT Thu Feb 7 16:31:35 GMT 2013
[    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
[    0.000000] Machine: BCM2708
[    0.000000] cma: CMA: reserved 16 MiB at 1b000000
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 113792
[    0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1024 bcm2708_fb.fbheight=768 bcm2708.boardrev=0xf bcm2708.serial=0xfebafb3d smsc95xx.macaddr=B8:27:EB:BA:FB:3D sdhci-bcm2708.emmc_clock_freq=100000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 448MB = 448MB total
[    0.000000] Memory: 432264k/432264k available, 26488k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xdc800000 - 0xff000000   ( 552 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xdc000000   ( 448 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc04e5470   (4982 kB)
[    0.000000]       .init : 0xc04e6000 - 0xc0506f24   ( 132 kB)
[    0.000000]       .data : 0xc0508000 - 0xc053c060   ( 209 kB)
[    0.000000]        .bss : 0xc053c084 - 0xc05e4738   ( 674 kB)
[    0.000000] NR_IRQS:330
[    0.000000] sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 4294967ms
[    0.000000] Console: colour dummy device 80x30
[    0.000000] console [tty1] enabled
[    0.001007] Calibrating delay loop... 464.48 BogoMIPS (lpj=2322432)
[    0.060064] pid_max: default: 32768 minimum: 301
[    0.060414] Mount-cache hash table entries: 512
[    0.061175] Initializing cgroup subsys cpuacct
[    0.061229] Initializing cgroup subsys devices
[    0.061263] Initializing cgroup subsys freezer
[    0.061293] Initializing cgroup subsys blkio
[    0.061385] CPU: Testing write buffer coherency: ok
[    0.061719] hw perfevents: enabled with v6 PMU driver, 3 counters available
[    0.061858] Setting up static identity map for 0x39d3f8 - 0x39d454
[    0.063361] devtmpfs: initialized
[    0.074081] NET: Registered protocol family 16
[    0.080517] DMA: preallocated 4096 KiB pool for atomic coherent allocations
[    0.081614] bcm2708.uart_clock = 0
[    0.082972] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers.
[    0.083026] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.083064] mailbox: Broadcom VideoCore Mailbox driver
[    0.083155] bcm2708_vcio: mailbox at f200b880
[    0.083257] bcm_power: Broadcom power driver
[    0.083294] bcm_power_open() -> 0
[    0.083320] bcm_power_request(0, 8)
[    0.584007] bcm_mailbox_read -> 00000080, 0
[    0.584048] bcm_power_request -> 0
[    0.584074] Serial: AMBA PL011 UART driver
[    0.584218] dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
[    0.908034] console [ttyAMA0] enabled
[    0.931538] bio: create slab  at 0
[    0.936413] SCSI subsystem initialized
[    0.940507] usbcore: registered new interface driver usbfs
[    0.946090] usbcore: registered new interface driver hub
[    0.951690] usbcore: registered new device driver usb
[    0.958028] Switching to clocksource stc
[    0.962270] FS-Cache: Loaded
[    0.965412] CacheFiles: Loaded
[    0.980187] NET: Registered protocol family 2
[    0.985466] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
[    0.993200] TCP bind hash table entries: 16384 (order: 4, 65536 bytes)
[    0.999988] TCP: Hash tables configured (established 16384 bind 16384)
[    1.006593] TCP: reno registered
[    1.009845] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    1.015741] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    1.022329] NET: Registered protocol family 1
[    1.027188] RPC: Registered named UNIX socket transport module.
[    1.033233] RPC: Registered udp transport module.
[    1.037957] RPC: Registered tcp transport module.
[    1.042702] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.049810] bcm2708_dma: DMA manager at f2007000
[    1.054593] bcm2708_gpio: bcm2708_gpio_probe c0515d98
[    1.060058] vc-mem: phys_addr:0x00000000 mem_base=0x1ec00000 mem_size:0x20000000(512 MiB)
[    1.069203] audit: initializing netlink socket (disabled)
[    1.074801] type=2000 audit(0.930:1): initialized
[    1.197625] VFS: Disk quotas dquot_6.5.2
[    1.201660] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    1.208721] FS-Cache: Netfs nfs registered for caching
[    1.214467] NFS: Registering the id_resolver key type
[    1.219676] Key type id_resolver registered
[    1.223970] Key type id_legacy registered
[    1.228329] msgmni has been set to 876
[    1.233839] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[    1.241544] io scheduler noop registered
[    1.245590] io scheduler deadline registered (default)
[    1.250773] io scheduler cfq registered
[    1.281991] Console: switching to colour frame buffer device 128x48
[    1.297450] kgdb: Registered I/O driver kgdboc.
[    1.302790] vc-cma: Videocore CMA driver
[    1.306827] vc-cma: vc_cma_base      = 0x00000000
[    1.311633] vc-cma: vc_cma_size      = 0x00000000 (0 MiB)
[    1.317196] vc-cma: vc_cma_initial   = 0x00000000 (0 MiB)
[    1.331614] brd: module loaded
[    1.339735] loop: module loaded
[    1.343402] vchiq: vchiq_init_state: slot_zero = 0xdb000000, is_master = 0
[    1.351167] Loading iSCSI transport class v2.0-870.
[    1.357085] usbcore: registered new interface driver smsc95xx
[    1.363389] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    1.574448] Core Release: 2.80a
[    1.577707] Setting default values for core params
[    1.586422] Finished setting default values for core params
[    1.800830] Using Buffer DMA mode
[    1.807888] Periodic Transfer Interrupt Enhancement - disabled
[    1.817456] Multiprocessor Interrupt Enhancement - disabled
[    1.826756] OTG VER PARAM: 0, OTG VER FLAG: 0
[    1.834807] Dedicated Tx FIFOs mode
[    1.843375] dwc_otg bcm2708_usb: DWC OTG Controller
[    1.852041] dwc_otg bcm2708_usb: new USB bus registered, assigned bus number 1
[    1.863207] dwc_otg bcm2708_usb: irq 32, io mem 0x00000000
[    1.872566] Init: Port Power? op_state=1
[    1.880220] Init: Power Port (0)
[    1.887224] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.897834] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.908845] usb usb1: Product: DWC OTG Controller
[    1.917260] usb usb1: Manufacturer: Linux 3.6.11+ dwc_otg_hcd
[    1.926705] usb usb1: SerialNumber: bcm2708_usb
[    1.935673] hub 1-0:1.0: USB hub found
[    1.943192] hub 1-0:1.0: 1 port detected
[    1.951291] Initializing USB Mass Storage driver...
[    1.960064] usbcore: registered new interface driver usb-storage
[    1.969713] USB Mass Storage support registered.
[    1.978071] usbcore: registered new interface driver libusual
[    1.987792] mousedev: PS/2 mouse device common for all mice
[    1.997871] bcm2835-cpufreq: min=700000 max=700000 cur=700000
[    2.003734] bcm2835-cpufreq: switching to governor powersavebcm2835-cpufreq: switching to governor powersave
[    2.017410] cpuidle: using governor ladder
[    2.028919] cpuidle: using governor menu
[    2.036612] sdhci: Secure Digital Host Controller Interface driver
[    2.046675] sdhci: Copyright(c) Pierre Ossman
[    2.054890] sdhci: Enable low-latency mode
[    2.102312] mmc0: SDHCI controller on BCM2708_Arasan [platform] using platforms DMA
[    2.114169] mmc0: BCM2708 SDHC host at 0x20300000 DMA 2 IRQ 77
[    2.126089] sdhci-pltfm: SDHCI platform and OF driver helper
[    2.141435] usbcore: registered new interface driver usbhid
[    2.151159] Indeed it is in host mode hprt0 = 00021501
[    2.165148] usbhid: USB HID core driver
[    2.192765] TCP: cubic registered
[    2.200013] Initializing XFRM netlink socket
[    2.232182] NET: Registered protocol family 17
[    2.240771] Key type dns_resolver registered
[    2.249030] mmc0: could read SD Status register (SSR) at the 2th attempt
[    2.272606] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
[    2.284684] mmc0: new high speed SDHC card at address f33e
[    2.303449] registered taskstats version 1
[    2.315989] mmcblk0: mmc0:f33e SD08G 7.32 GiB
[    2.327096]  mmcblk0: p1 p2
[    2.349244] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    2.361593] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    2.380544] devtmpfs: mounted
[    2.388057] Freeing init memory: 128K
[    2.432218] usb 1-1: new high-speed USB device number 2 using dwc_otg
[    2.443287] Indeed it is in host mode hprt0 = 00001101
[    2.662580] usb 1-1: New USB device found, idVendor=0424, idProduct=9512
[    2.675514] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    2.688860] hub 1-1:1.0: USB hub found
[    2.696954] hub 1-1:1.0: 3 ports detected
[    2.982412] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[    3.113065] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
[    3.124321] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.140605] smsc95xx v1.0.4
[    3.207108] smsc95xx 1-1.1:1.0: eth0: register smsc95xx at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:xx:xx:xx
[    3.332461] usb 1-1.2: new low-speed USB device number 4 using dwc_otg
[    3.459966] usb 1-1.2: New USB device found, idVendor=056e, idProduct=0037
[    3.481110] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    3.505535] usb 1-1.2: Product: ELECOM PALVO series
[    3.523955] usb 1-1.2: Manufacturer: ELECOM
[    3.557146] input: ELECOM ELECOM PALVO series as /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/input/input0
[    3.582388] hid-generic 0003:056E:0037.0001: input,hidraw0: USB HID v1.10 Mouse [ELECOM ELECOM PALVO series] on usb-bcm2708_usb-1.2/input0
[    3.849265] udevd[142]: starting version 175
[    8.789951] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    9.218173] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    9.923898] bcm2835 ALSA card created!
[    9.941886] bcm2835 ALSA chip created!
[    9.956668] bcm2835 ALSA chip created!
[    9.968394] bcm2835 ALSA chip created!
[    9.980084] bcm2835 ALSA chip created!
[    9.992524] bcm2835 ALSA chip created!
[   10.005198] bcm2835 ALSA chip created!
[   10.015309] bcm2835 ALSA chip created!

Debian GNU/Linux 7.0 raspberrypi ttyAMA0

raspberrypi login:


piユーザでログインすると、「まだ、設定が途中なので、”sudo raspi-config” を実行するように」というメッセージが表示されますので、指示に従います。

Raspi setup 02 Raspberry PiでOSをインストール

sudo raspi-configを実行します。

Raspi setup 04a Raspberry PiでOSをインストール

raspi-config では、以下の項目を設定します。他の項目は、設定ファイル(config.txt)を修正して、対応します。

  • expand_rootfs : SDカードの空き領域を無くします。
  • change_pass : piユーザのパスワードを変更します。
  • change_timezone : タイムゾーンをJSTに変更します。
  • memory_split : GPUにアサインするメモリを16MBに変更します。
  • update : Raspbianを最新版にアップデートします。

 

rootユーザのパスワード設定

rootユーザのパスワードを設定します。

pi@raspberrypi:~$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
pi@raspberrypi:~$

 

キーボードの設定変更

USBキーボードの設定を変更します。当方は、106日本語キーボードを指定しました。

root@raspberrypi:~# pico /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE
 
# Consult the keyboard(5) manual page.
XKBMODEL="jp106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
 
BACKSPACE="guess"

 

ネットワークアドレスの変更

初期状態は、DHCPでアドレスの払い出しを受ける設定になっていますので、固定ipアドレスを割り当てるように変更します。
※wlan0は、使用する予定がありませんので、設定を削除(コメント行)します。

root@raspberrypi:~# pico /etc/network/interfaces
auto lo

iface lo inet loopback
# iface eth0 inet dhcp 
auto eth0
iface eth0 inet static
address 192.168.0.xxx
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

dns-search pc-links.com
dns-nameserver 192.168.0.1

# allow-hotplug wlan0
# iface wlan0 inet manual
# wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
# iface default inet dhcp

 

ホスト名の変更

必要に応じて、/etc/hostname , /etc/hosts ファイルを修正して、ホスト名を適当な名前に変更します。

 

コマンドプロンプト表示の変更

debianでは、カレントディレクトリまでのフルパスで表示され、プロンプト横幅一杯までパスが表示されますので、Redhat 系のプロンプト表示に変更します。また、alias設定も有効にします。

root@ms03:~# pico .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
 
# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[\u@\h \W]\$ '
# umask 022
 
# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
 
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
 
#
# Some more alias to avoid making mistakes:
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

設定変更が完了したら、.bashrcを実行して、変更を反映させます。

root@ms03:~# . .bashrc
[root@ms03 ~]#

 

日本語対応

ロケールを日本に変更し、日本語フォントをインストールして、日本語表示に対応します。
最初に、dpkg-reconfigure locales コマンドを実行して、en_US.UTF-8 UTF-8 , ja_JP.UTF-8 UTF-8 ロケールを追加します。en_GB.UTF.8 UTF-8 ロケールは削除します。

Raspi setup 23 Raspberry PiでOSをインストール

Raspi setup 24 Raspberry PiでOSをインストール

次に、フリーで使用できるフォントをインストールします。

[root@ms03 ~]# apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  xfonts-cjk emacs-intl-fonts
The following NEW packages will be installed:
  ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname
0 upgraded, 4 newly installed, 0 to remove and 57 not upgraded.
Need to get 6008 kB of archives.
After this operation, 11.3 MB of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main ttf-kochi-gothicall 20030809-15 [3142 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main xfonts-intl-japanese all 1.2.1-8 [928 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ wheezy/main xfonts-intl-japanese-big all 1.2.1-8 [655 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian/ wheezy/main xfonts-kaname all 1.1-9.1 [1282 kB]
Fetched 6008 kB in 11s (513 kB/s)
Selecting previously unselected package ttf-kochi-gothic.
(Reading database ... 59216 files and directories currently installed.)
Unpacking ttf-kochi-gothic (from .../ttf-kochi-gothic_20030809-15_all.deb) ...
Selecting previously unselected package xfonts-intl-japanese.
Unpacking xfonts-intl-japanese (from .../xfonts-intl-japanese_1.2.1-8_all.deb)...
Selecting previously unselected package xfonts-intl-japanese-big.
Unpacking xfonts-intl-japanese-big (from .../xfonts-intl-japanese-big_1.2.1-8_all.deb) ...
Selecting previously unselected package xfonts-kaname.
Unpacking xfonts-kaname (from .../xfonts-kaname_1.1-9.1_all.deb) ...
Processing triggers for fontconfig ...
Setting up ttf-kochi-gothic (20030809-15) ...
Setting up xfonts-intl-japanese (1.2.1-8) ...
Setting up xfonts-intl-japanese-big (1.2.1-8) ...
Setting up xfonts-kaname (1.1-9.1) ... 

 

環境設定

ログイン時に、自動的に環境変数LANGをexportするように、.profile に”export LANG=ja_JP.UTF-8″を最終行に、追記しておきます。

[root@ms03 ~]# pico .profile
# ~/.profile: executed by Bourne-compatible login shells.
 
if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi
 
mesg n
export LANG=ja_JP.UTF-8

ここで、一旦、OSを再起動させて、日本語表示を確認しておきます。

[root@ms03 ~]# reboot

Raspi setup 26 Raspberry PiでOSをインストール

 

モニタ設定とオーバークロック設定

config.txtファイルを修正して、使用するモニタの解像度に設定を合わせます。
また、動作スピードを1000MHzに変更(オーバークロック)します。
※ハードウェアの信頼性を確認する目的で、1000MHz(1GHz)での動作試験を実施します。
※2013年10月10日 : 1GHz動作時、稀にOSの起動に失敗する場合があったので、設定値を変更しました。

[root@ms03 ~]# pico /boot/config.txt
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# IBM Model 9511-DW4 XGA(1024x768)/DVI-IF
framebuffer_width=1024
framebuffer_height=768


# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# XGA mode select(1024x768/60Hz)
hdmi_group=2
hdmi_mode=16


# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
#Normal DVI mode (No sound) Select
hdmi_drive=1


# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
# 稀に、OSの起動に失敗 (kernel PANIC) する場合があったので、設定値を見直し
# arm_freq=1000
arm_freq=950

# Disables dynamic cpufreq driver and minimum settings below.
# force_turbo=1

# ブート時40秒経過後にarm_freqを1000MHzに上げるようにする(SDカードデータ破損対応)
initial_turbo=40


# for more options see http://elinux.org/RPi_config.txt
gpu_mem=16

# Minimum value of core_freq used for dynamic clocking. Default 250
# 稀に、OSの起動に失敗 (kernel PANIC) する場合があったので、設定値を見直し
# core_freq=500
core_freq=450

# Minimum value of sdram_freq used for dynamic clocking. Default 400
# 稀に、OSの起動に失敗 (kernel PANIC) する場合があったので、設定値を見直し
# sdram_freq=600
sdram_freq=450

# ARM/GPU core voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps.
# Force_turbo will allow values higher than 6. Default 0 (1.2V)
over_voltage=6

 

SSH接続設定の変更

SSH接続は、ローカルLANからの接続のみを許可するように、アクセス制限を行います。
最初に、hosts.denyファイルを修正します。

[root@ms03 ~]# pico /etc/hosts.deny
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID
#
# アクセス制限を追加
sshd: ALL

hosts.allowファイルを修正します。

[root@ms03 ~]# pico /etc/hosts.allow
# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
# アクセス制限を追加
# ローカルLANからのアクセスのみを許可
sshd: 192.168.0.0/24 127.0.0.0/8 

最後にsshd_configファイルを修正して、rootユーザでのログインを禁止します。

# Authentication:
LoginGraceTime 120

# rootでのログインを禁止
# PermitRootLogin yes
PermitRootLogin no

sshd_configファイルを修正したので、sshを再起動させます。

[root@ms03 ~]# /etc/init.d/ssh restart
Restarting OpenBSD Secure Shell server: sshd.

 

次回からのログインは、シリアルコンソールではなく、SSHを使用してログインするようにします。

 

以上で、「Raspberry Pi でOSのインストールと初期設定を行う」を終了します。

 

PacketiX VPN 4.0 のベータ版(RC1)でtapデバイスを試す

4回目の今回は、Linux(CentOS)でPacketiX VPN 4.0 RC1 のtapデバイスを試します。

LinuxにPacketiX VPN をインストールすると、Linux固有の制限事項により、PacketiX VPN をインストールしたサーバ自身に、クライアントPCからアクセスすることが出来ないという、「困った問題」が発生します。
※サーバにインストールしたWebサーバやAsteriskをVPN接続したクライアントPCから使えません!

詳細は、こちら web版オンラインマニュアル – ローカルブリッジ を参照ください。

この問題に対処するために、PacketiX VPN のtapデバイス機能を使用します。
スピードを重視する場合は、ローカルブリッジ用にLANカード(物理NIC)を追加することが推奨されていますが、tapデバイス(仮想NIC)を使用しても、この問題を回避することが可能ですので、評価を兼ねて試験を行います。

 

tapデバイス使用時の概要

PacketiX VPN 4.00 RC1をLinuxサーバにインストールし、tapデバイスを使用するためには、PacketiX VPNの設定とOSのネットワーク設定の変更が必要となります。

  • PacketiX VPN サーバ管理マネージャで、tapデバイスをローカルブリッジさせる
  • LinuxOS起動時に、物理的なネットワークアダプタ(eth0)を仮想ブリッジにブリッジさせる
  • スタートアップスクリプトを修正し、VPNサーバ起動時に、tapデバイスを仮想ブリッジにブリッジさせる

Linux(CentOS)で、tapデバイスを使用する場合の構成図を以下に示します。

PacketiX tap kouseizu 300x233 PacketiX VPN 4.0 RC1でtap

 

ローカルブリッジ設定の変更

PacketiX VPN サーバ管理マネージャでローカルブリッジをtapデバイスに変更します。

SE VPN Server Manager 01 300x278 PacketiX VPN 4.0 RC1でtap

 

 

 設定済みであるローカルブリッジ設定を削除します。
 ローカルブリッジの削除をクリックします。

SE VPN Server Manager 02 300x278 PacketiX VPN 4.0 RC1でtap

 

 仮想HUBを選択します。

 新しいtapデバイスとのブリッジ接続を選択します。

 新しいtapデバイス名を入力します。

 入力が完了したら、ローカルブリッジを追加をクリックします。

SE VPN Server Manager 03 300x278 PacketiX VPN 4.0 RC1でtap

 

 

 tapデバイスがローカルブリッジされたことを確認して、閉じるをクリックします。

tapデバイスをローカルブリッジに追加すると、仮想ネットワークアダプタとしてにtapデバイスが追加されます。

[root@ms02 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 3C:4A:92:xx:xx:xx
          inet addr:192.168.0.xx  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1454  Metric:1
          RX packets:172 errors:0 dropped:0 overruns:0 frame:0
          TX packets:232 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:27627 (26.9 KiB)  TX bytes:32646 (31.8 KiB)
          Interrupt:169 Memory:fe9f0000-fea00000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3700 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3700 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:152712 (149.1 KiB)  TX bytes:152712 (149.1 KiB)

tap_vlan  Link encap:Ethernet  HWaddr 00:AC:EB:74:DB:23
          UP BROADCAST RUNNING MULTICAST  MTU:1454  Metric:1
          RX packets:56 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:3188 (3.1 KiB)  TX bytes:3137 (3.0 KiB)

 

ネットワーク設定の変更

Linux(CentOS) 側で、仮想ブリッジ (br0) を追加するために、ネットワーク設定を変更します。

最初に、bridge-utilsパッケージをインストールします。

[root@ms02 ~]# yum –y install bridge-utils

次に、ネットワーク設定スクリプト格納先へ移動して、ネットワーク設定を変更します。
オリジナルのifcfg-eth0はバックアップを作成した後、ifcfg-eth0をブリッジ設定(ifcfg-br0)の雛形としてコピーします。

[root@ms02 ~]# cd /etc/sysconfig/network-scripts/
[root@ms02 network-scripts]# cp ifcfg-eth0 ifcfg-eth0.bak
[root@ms02 network-scripts]# cp ifcfg-eth0 ifcfg-br0

ifcfg-eth0を修正します。
物理的なネットワークアダプタ(eth0)を仮想ブリッジ(br0)にブリッジさせるように変更します。また、eth0 にはipアドレスを割り当てないようにします。

[root@ms02 network-scripts ]# pico ifcfg-eth0
# HP Microserver on Board NIC Broadcom NetXtreme BCM5723
# tapデバイス使用時の設定
# eth0 にはIPアドレスを割り当てせずに br0 にブリッジさせる

DEVICE=eth0
TYPE=Ethernet
HWADDR=3C:4A:92:xx:xx:xx
BOOTPROTO=static

ONBOOT=yes
MTU=1454

# br0 にブリッジさせる
BRIDGE=br0

ifcfg-br0を修正し、ブリッジインターフェイスを構成します。
このとき、IPアドレス等の設定は、br0 に割り当てするようにします。

[root@ms02 network-scripts ]# pico ifcfg-br0
# tapデバイス使用時の設定
# br0 にIPアドレスを割り当てする
# br0を介してeth0とtapデバイスをブリッジさせる

DEVICE=br0
TYPE=Bridge

BOOTPROTO=static
ONBOOT=yes
MTU=1454

IPADDR=192.168.0.xx
BROADCAST=192.168.0.255
NETMASK=255.255.255.0
NETWORK=192.168.0.0

GATEWAY=192.168.0.1

 

スタートアップスクリプトの変更

スタートアップスクリプトファイルを修正して、vpnserverを起動時にtapデバイスを仮想ブリッジへブリッジするように変更します。

[root@ms02 ~]# pico /etc/init.d/vpnserver
#!/bin/sh
# chkconfig: 2345 98 01
# description: PacketiX VPN Server 4.0
 
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
 
test -x $DAEMON || exit 0
 
case "$1" in
start)
$DAEMON start
sleep 5
touch $LOCK
# PacketiXで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/usr/sbin/brctl addif br0 $tap
;;
 
stop)
$DAEMON stop
sleep 2
rm $LOCK
;;
 
restart)
$DAEMON stop
sleep 2
 
$DAEMON start
sleep 5
# PacketiXで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/usr/sbin/brctl addif br0 $tap
;;
 
status)
    if [ -e $LOCK ]
    then
        echo "vpnserver is running."
    else
        echo "vpnserver is not running."
    fi
;;
*)
 
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0

ここで、一旦、再起動させて、起動時のネットワーク設定のメッセージを確認します。

[root@ms02 ~]# reboot

Startup massage 01 300x188 PacketiX VPN 4.0 RC1でtap

 

  起動時、eth0 , br0インタフェースが起動しています。
 ※この時点では、また、tapデバイスは起動していません。

Startup massage 02 300x188 PacketiX VPN 4.0 RC1でtap

 

 最後にvpnserverが起動し、tapデバイスをブリッジします。

 

 

ネットワーク設定の確認

ネットワーク設定を確認します。

[root@ms02 ~]# ifconfig
br0       Link encap:Ethernet  HWaddr 00:AC:EB:74:DB:23
          inet addr:192.168.0.xx  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1454  Metric:1
          RX packets:1656 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1304 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:169525 (165.5 KiB)  TX bytes:151971 (148.4 KiB)

eth0      Link encap:Ethernet  HWaddr 3C:4A:92:xx:xx:xx
          UP BROADCAST RUNNING MULTICAST  MTU:1454  Metric:1
          RX packets:2604 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2447 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:281987 (275.3 KiB)  TX bytes:240723 (235.0 KiB)
          Interrupt:169 Memory:fe9f0000-fea00000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:97937 errors:0 dropped:0 overruns:0 frame:0
          TX packets:97937 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3966550 (3.7 MiB)  TX bytes:3966550 (3.7 MiB)

tap_vlan  Link encap:Ethernet  HWaddr 00:AC:EB:74:DB:23
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1504 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1908 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:74520 (72.7 KiB)  TX bytes:150487 (146.9 KiB)

eth0とtap_vlanがブリッジされていることを確認します。
※interfacesにeth0とtap_vlanが表示されていればOKです。

[root@ms02 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.00aceb74db23       no              tap_vlan
                                                        eth0

<注意事項>
networkを再起動させると、tapデバイスのブリッジ設定は、消えてしまいます。
その時は、vpnserverを再起動させることで、tapデバイスのブリッジ設定は復活します。

[root@ms02 ~]# /etc/init.d/network restart
[root@ms02 ~]# /etc/init.d/vpnserver restart

 

VPNサーバへのping動作

VPN接続中のクライアントPCから、PacketiX VPN をインストールしたサーバへpingを打ちます。

PacketiX tap 05 300x159 PacketiX VPN 4.0 RC1でtap

 

 サーバから正しく応答が返ることを確認します。

以上で、「PacketiX VPN 4.0 RC1でtapデバイスを試す」を終了します。

    
2 / 13123...10...最後 »