onion pi の作り方3

 onion pi を作って数日。
 SDカードは書き換え回数に制限があるので、データーを書き込む限り、制限に達するのは時間の問題です。1年や2年では達しないと思いますが、通常稼働時は一切のデーターをSDカードに書き込みしないように構築してみました。

 また、前回前々回の構築方法では、電源を切るために、いちいちログインしなければいけないのも面倒です。SDカードを書込み禁止にしておけば、不意の電源断でストレージが壊れる心配も無くなるので、コンセントからプラグを抜いて電源を切ることも大丈夫となります。

 今回はカーネルの再構築があるので作業に半日かかります。
 もっとも、makeを行っている約9時間は何もできないので、寝るしかありません。

 onion pi はこれで完成かな。

Raspberry Pi + PLANEX GW-USNano2

参考:PCリンクス よもやま雑記帳
2回目:Raspberry Pi で使用しないデーモンを停止する
3回目:Raspberry Pi でRAMディスクを使う
4回目:Raspberry Pi でカーネルにaufsを組み込む
9回目:Raspberry Pi でfsprotectを試す

PLANEX GW-USNano2 用手順(俺様用)

Raspberri Pi のダウンロードページから、Raspbian "wheezy"をダウンロードします。
 執筆時点の最新版は 2013-07-26-wheezy-raspbian.zip

Raspbian "wheezy" ダウンロード

・2013-07-26-wheezy-raspbian.zipを解凍します。
 2013-07-26-wheezy-raspbian.imgが解凍されます。

・手持ちの Windows PC で Win32DiskImager.exe を用い、2013-07-26-wheezy-raspbian.img をSDカードに書き込みます。
 ※うちの環境では最新版は動かず、v0.7が正常動作しました。

Win32DiskImager

・Raspberry Pi にSDカードを挿入しケーブルを接続します。

 まず、以下を挿入または接続します。
 2013-07-26-wheezy-raspbian.imgを書き込んだSDカード
 HDMIケーブル
 LANケーブル
 USB用WiFiアダプタ
 USBキーボード

 最後にmicroUSBを接続し、電源を入れます。

・しばらくして、テレビの画面に以下のような表示が現れれば、SDカードへのイメージ書込みは成功です。
raspi-config

・まず最初に、使用しているSDカードの全領域を確保するために、1を選択します。しばらくして、下記の表示が現れれば成功です。
Root partition has been resized.

・次に、地域設定を行うため、4を選択します。
Internationalisation Options

・言語設定を行うため、1を選択します。
Change Locale
・画面をスクロールし、下記二つの言語を選択し OK を押します。
 [*] en_GB.UTF-8 UTF-8
 [*] ja_JP.UTF-8 UTF-8

Configuring locales

・デフォルトの言語は、ja_JP.UTF-8 UTF-8 を選択し、OK を押します。
Configuring locales

・いったん、トップページに戻りますが、再度4を選択します。
raspi-config

・標準時の設定を行うため、2を選択します。
Change Timezone

・Geographic area から Asia を選択し、Time zone として、Tokyo を選択します。
Geographic area
Time zone

・トップ画面で8を選択します。
Advanced Options

・ホスト名を設定するため、2を選択します。
Hostname

・ホスト名、命名の注意をよく読みましょう。
Hostname

・新しいホスト名を設定します。下図では onionpi としています。
Please enter a Hostname

・トップ画面で8を選択します。
Advanced Options

・グラフィックに割り当てるメモリの設定を行うため、3を設定します。
Memory Split

・最小の 16 を割り当てます。
How much memory should the GPU have?

・トップ画面で Finish を選択し、再起動を促されるので、再起動します。
raspi-config
Would you like to reboot now?

IPアドレスを確認します。
 再起動が終わり、ログインプロンプトがでたとき、その上に、IPアドレスが表示されています。

[ ok ] Starting system message bus: dbus.
[ ok ] starting NTP server: ntpd.
[ ok ] Starting OpenBSD Secure Shell server: sshd.
My IP address is 192.168.xxx.xxx

Debian GNU/Linux 7 onionpi tty1

onionpi login: _


Raspberry Pi 本体からキーボードを外す

ログインします。
 ここからはテレビの画面は使いません。別のPCで作業を行います。
 テレビの画面に表示されたIPアドレスへPCからTeraTerm等でSSHで接続します。通常のパスワード認証です。
 ID : pi
 Password : raspberry

rootパスワードを作成します。

pi@onionpi ~ $ sudo passwd root
新しいUNIXパスワードを入力してください:
新しいUNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました

rootになります。

pi@onionpi ~ $ su -
パスワード:

ユーザー onion を作成し、パスワードを設定します。

root@onionpi:~# useradd -m -s /bin/bash onion

root@onionpi:~# passwd onion
新しいUNIXパスワードを入力してください:
新しいUNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました

rootログイン禁止、パスワード認証禁止、チャレンジレスポンス認証を許可します。

root@onionpi:~# cp -ip /etc/ssh/sshd_config /etc/ssh/sshd_config.org

root@onionpi:~# cat /etc/ssh/sshd_config.org | sed -e 's/PermitRootLogin yes/PermitRootLogin no/' | sed -e 's/#PasswordAuthentication yes/PasswordAuthentication no/' | sed -e 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' > /etc/ssh/sshd_config

root@onionpi:~# diff /etc/ssh/sshd_config /etc/ssh/sshd_config.org
27c27
< PermitRootLogin no
---
> PermitRootLogin yes
48c48
< ChallengeResponseAuthentication yes
---
> ChallengeResponseAuthentication no
51c51
< PasswordAuthentication no
---
> #PasswordAuthentication yes

sshdを再起動します。

root@onionpi:~# service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

キーボード設定を変更します。

root@onionpi:~# cp -ip /etc/default/keyboard /etc/default/keyboard.org

root@onionpi:~# vi /etc/default/keyboard

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="jp106"
XKBLAYOUT="jp"

ll ( ls -l ) を利用可能にします。

root@onionpi:~# cd
root@onionpi:~# vi .bashrc
下記行先頭の # を外す
# alias ll='ls $LS_OPTIONS -l'
root@onionpi:~# vi /home/onion/.bashrc
下記行先頭の # を外す
#alias ll='ls -l'

仮想端末の一部を無効化します。

root@onionpi:~# cp -ip /etc/inittab /etc/inittab.org

root@onionpi:~# vi /etc/inittab

※下記記述行をコメントアウト
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
root@onionpi:~# diff /etc/inittab /etc/inittab.org
55,59c55,59
< #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
---
> 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

パケット転送許可

root@onionpi:~# cp -ip /etc/sysctl.conf /etc/sysctl.conf.org

root@onionpi:~# vi /etc/sysctl.conf

28行目を有効にします。
net.ipv4.ip_forward=1
root@onionpi:~# diff /etc/sysctl.conf /etc/sysctl.conf.org
28c28
< net.ipv4.ip_forward=1
---
> #net.ipv4.ip_forward=1

fstab変更 fsckをしないように。さらに、/tmp等を tmpfsへ

root@onionpi:~# cp -ip /etc/fstab /etc/fstab.org

root@onionpi:~# vi /etc/fstab

/dev/mmcblk0p1及び/dev/mmcblk0p2はfsckを行わない設定へ。
/dev/mmcblk0p1  /boot           vfat    defaults          0       0
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       0
さらに、下記を追記
tmpfs           /tmp            tmpfs   defaults,size=32m 0       0
tmpfs           /var/tmp        tmpfs   defaults,size=16m 0       0
tmpfs           /var/log        tmpfs   defaults,size=32m 0       0
root@onionpi:~# diff /etc/fstab /etc/fstab.org
2,3c2,3
< /dev/mmcblk0p1  /boot           vfat    defaults          0       0
< /dev/mmcblk0p2  /               ext4    defaults,noatime  0       0
---
> /dev/mmcblk0p1  /boot           vfat    defaults          0       2
> /dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
5,6d4
< tmpfs           /tmp            tmpfs   defaults,size=32m 0       0
< tmpfs           /var/tmp        tmpfs   defaults,size=16m 0       0
< tmpfs           /var/log        tmpfs   defaults,size=32m 0       0

仮想メモリ使用停止

root@onionpi:~# free
             total       used       free     shared    buffers     cached
Mem:        497544      66660     430884          0      10376      30592
-/+ buffers/cache:      25692     471852
Swap:       102396          0     102396

root@onionpi:~# dphys-swapfile swapoff

root@onionpi:~# free
             total       used       free     shared    buffers     cached
Mem:        497544      66528     431016          0      10376      30592
-/+ buffers/cache:      25560     471984
Swap:            0          0          0

root@onionpi:~# update-rc.d dphys-swapfile disable
update-rc.d: using dependency based boot sequencing
insserv: warning: current start runlevel(s) (empty) of script `dphys-swapfile' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (2 3 4 5) of script `dphys-swapfile' overrides LSB defaults (empty).

不要サービス自動起動停止

root@onionpi:~# update-rc.d dbus disable
update-rc.d: using dependency based boot sequencing
insserv: warning: current start runlevel(s) (empty) of script `dbus' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (2 3 4 5) of script `dbus' overrides LSB defaults (empty).

root@onionpi:~# update-rc.d triggerhappy disable
update-rc.d: using dependency based boot sequencing
insserv: warning: current start runlevel(s) (empty) of script `triggerhappy' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `triggerhappy' overrides LSB defaults (0 1 6).

root@onionpi:~# update-rc.d alsa-utils disable
update-rc.d: using dependency based boot sequencing
insserv: warning: current start runlevel(s) (empty) of script `alsa-utils' overrides LSB defaults (S).
insserv: warning: current stop runlevel(s) (0 1 6 S) of script `alsa-utils' overrides LSB defaults (0 1 6).

root@onionpi:~# update-rc.d lightdm disable
update-rc.d: using dependency based boot sequencing
insserv: warning: current start runlevel(s) (empty) of script `lightdm' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `lightdm' overrides LSB defaults (0 1 6).

root@onionpi:~# update-rc.d motd disable
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: disable action will have no effect on runlevel 1
insserv: warning: current start runlevel(s) (1) of script `motd' overrides LSB defaults (1 2 3 4 5).
insserv: warning: current stop runlevel(s) (2 3 4 5) of script `motd' overrides LSB defaults (empty).

root@onionpi:~# update-rc.d plymouth disable
update-rc.d: using dependency based boot sequencing
insserv: warning: current start runlevel(s) (empty) of script `plymouth' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 2 3 4 5 6) of script `plymouth' overrides LSB defaults (0 6).

ntpdドリフトファイルを/tmpへ配置します。

root@onionpi:~# cp -ip /etc/ntp.conf /etc/ntp.conf.org

root@onionpi:~# cat /etc/ntp.conf.org | sed -e 's/\/var\/lib\/ntp\/ntp.drift/\/tmp\/ntp.drift/' > /etc/ntp.conf

root@onionpi:~# diff /etc/ntp.conf /etc/ntp.conf.org
3c3
< driftfile /tmp/ntp.drift
---
> driftfile /var/lib/ntp/ntp.drift

syslogを必要最小限にします。

root@onionpi:~# cp -ip /etc/rsyslog.conf /etc/rsyslog.conf.org

root@onionpi:~# vi /etc/rsyslog.conf

下記の行をコメントアウトします。
64~68行目
#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
74~76行目
#mail.info                    -/var/log/mail.info
#mail.warn                    -/var/log/mail.warn
#mail.err                     /var/log/mail.err
81~83行目
#news.crit                    /var/log/news/news.crit
#news.err                     /var/log/news/news.err
#news.notice                  -/var/log/news/news.notice
88~90行目
#*.=debug;\
#     auth,authpriv.none;\
#     news.none;mail.none     -/var/log/debug
root@onionpi:~# diff /etc/rsyslog.conf /etc/rsyslog.conf.org
64,68c64,68
< #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
---
> 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
74,76c74,76
< #mail.info                    -/var/log/mail.info
< #mail.warn                    -/var/log/mail.warn
< #mail.err                     /var/log/mail.err
---
> mail.info                     -/var/log/mail.info
> mail.warn                     -/var/log/mail.warn
> mail.err                      /var/log/mail.err
81,83c81,83
< #news.crit                    /var/log/news/news.crit
< #news.err                     /var/log/news/news.err
< #news.notice                  -/var/log/news/news.notice
---
> news.crit                     /var/log/news/news.crit
> news.err                      /var/log/news/news.err
> news.notice                   -/var/log/news/news.notice
88,90c88,90
< #*.=debug;\
< # auth,authpriv.none;\
< # news.none;mail.none -/var/log/debug
---
> *.=debug;\
> auth,authpriv.none;\
> news.none;mail.none -/var/log/debug

起動時に /var/log へ空ファイルなどを作成します。
root@onionpi:~# cp -ip /etc/rc.local /etc/rc.local.org
root@onionpi:~# vi /etc/rc.local
最下行の exit 0 の上部に下記を挿入します。
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

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

root@onionpi:~# diff /etc/rc.local /etc/rc.local.org
20,34d19
< 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
<
< 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
<

パッケージ管理システムの最新パッケージリストをダウンロードします。

root@onionpi:~# apt-get update
 ・・・(しばらく待つ)・・・
パッケージリストを読み込んでいます... 完了

アップデート可能なパッケージをアップデートします。

root@onionpi:~# apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージはアップグレードされます:
gnupg gpgv libgcrypt11 linux-libc-dev
アップグレード: 4 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
3,192 kB のアーカイブを取得する必要があります。
この操作後に追加で 5,120 B のディスク容量が消費されます。
続行しますか [Y/n]? Y
 ・・・(しばらく待つ)・・・
(データベースを読み込んでいます ... 現在 62264 個のファイルとディレクトリがインストールされています。)
linux-libc-dev:armhf 3.2.41-2+rpi1 を (.../linux-libc-dev_3.2.46-1+rpi1_armhf.deb で) 置換するための準備をしています ...
linux-libc-dev:armhf を展開し、置換しています...
libgcrypt11:armhf (1.5.0-5+deb7u1) を設定しています ...
linux-libc-dev:armhf (3.2.46-1+rpi1) を設定しています ...

DHCPサーバーをインストールします。

root@onionpi:~# apt-get install isc-dhcp-server
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
isc-dhcp-server-ldap
以下のパッケージが新たにインストールされます:
isc-dhcp-server
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
887 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,875 kB のディスク容量が消費されます。
 ・・・(しばらく待つ)・・・
isc-dhcp-server (4.2.2.dfsg.1-5+deb70u6) を設定しています ...
Generating /etc/default/isc-dhcp-server...
[FAIL] Starting ISC DHCP server: dhcpd[....] check syslog for diagnostics. ... failed!
failed!
invoke-rc.d: initscript isc-dhcp-server, action "start" failed.

hostapdをインストールします
 ※apt-getでインストールされるものではPLANEX GW-USNano2に対応していません。

root@onionpi:~# wget -nv https://github.com/jenssegers/RTL8188-hostapd/archive/v1.1.tar.gz
2013-08-20 19:16:30 URL:https://codeload.github.com/jenssegers/RTL8188-hostapd/tar.gz/v1.1 [1939585] -> "v1.1.tar.gz" [1]

root@onionpi:~# ls -l v1.1.tar.gz
-rw-r--r-- 1 root root 1939585 8月 20 19:16 v1.1.tar.gz

root@onionpi:~# tar -zxf v1.1.tar.gz

root@onionpi:~# cd RTL8188-hostapd-1.1/hostapd

root@onionpi:~/RTL8188-hostapd-1.1/hostapd# make
CC main.c
CC config_file.c
CC ../src/ap/hostapd.c
../src/ap/wpa_auth_glue.c: In function 'hostapd_wpa_auth_send_ether':
・・・(処理時間約6分)・・・

root@onionpi:~/RTL8188-hostapd-1.1/hostapd# make install

root@onionpi:~/RTL8188-hostapd-1.1/hostapd# cd

root@onionpi:~#

WiFi向けのDHCP設定を行います。

root@onionpi:~# cp -ip /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.org

root@onionpi:~# vi /etc/dhcp/dhcpd.conf

13,14行目をコメントアウトします。
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
21行目を有効にします。
authoritative;
最下行に追記します。
subnet 192.168.42.0 netmask 255.255.255.0 {
range 192.168.42.10 192.168.42.50;
option broadcast-address 192.168.42.255;
option routers 192.168.42.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
root@onionpi:~# diff /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.org
13,14c13,14
< #option domain-name "example.org";
< #option domain-name-servers ns1.example.org, ns2.example.org;
---
> option domain-name "example.org";
> option domain-name-servers ns1.example.org, ns2.example.org;
21c21
< authoritative;
---
> #authoritative;
108,116d107
< subnet 192.168.42.0 netmask 255.255.255.0 {
< range 192.168.42.10 192.168.42.50;
< option broadcast-address 192.168.42.255;
< option routers 192.168.42.1;
< default-lease-time 600;
< max-lease-time 7200;
< option domain-name "local";
< option domain-name-servers 8.8.8.8, 8.8.4.4;
< }

root@onionpi:~# cp -ip /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.org

root@onionpi:~# vi /etc/default/isc-dhcp-server

21行目を下記にします。
INTERFACES="wlan0"
root@onionpi:~# diff /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.org
21c21
< INTERFACES="wlan0"
---
> INTERFACES=""

ネットワークインターフェースの設定を行います。

root@onionpi:~# cp -ip /etc/network/interfaces /etc/network/interfaces.org

root@onionpi:~# vi /etc/network/interfaces

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0

iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0

up iptables-restore < /etc/iptables.ipv4.nat

wlan0の動作確認をします。

root@onionpi:~# ifconfig wlan0 192.168.42.1

root@onionpi:~# ifconfig wlan0
wlan0 Link encap:イーサネット ハードウェアアドレス 00:22:cf:xx:xx:xx
inetアドレス:192.168.42.1 ブロードキャスト:192.168.42.255 マスク:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)

WiFiルーターとしての設定を行います。
 ※ PLANEX GW-USNano2 を基に設定しています。
   ssidやwpa_passphraseはお好きな文字列を指定してください。
   決められない場合は、SSIDはMACアドレスをもとに、
   パスキーはランダムに生成した64桁の16進数を設定するのもよいでしょう。

※SSIDなどを決められない場合の参考
root@onionpi:~# echo ssid=`ifconfig wlan0 | grep 'wlan0' | awk '{print$5}' | tr -d : | tr "[:lower:]" "[:upper:]"`
ssid=123456789ABC

root@onionpi:~# echo wpa_psk=`openssl rand -hex 32`
wpa_psk=1234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef


root@onionpi:~# cp -ip /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.org

root@onionpi:~# vi /etc/hostapd/hostapd.conf

interface=wlan0
driver=rtl871xdrv
ssid=【任意のSSID】
country_code=JP
ieee80211d=1
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
ieee80211n=1
wpa=2
## wpa_passphrase または wpa_psk のいずれかを使用
#wpa_passphrase=【8~63文字の英数記号の場合】
#wpa_psk=【64桁の16進数の場合】
##
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
wmm_enabled=1
# Bandwidth 20MHz
#ht_capab=[SHORT-GI-20][SMPS-STATIC][MAX-AMSDU-7935]
ht_capab=[SHORT-GI-20][SMPS-STATIC]
# Bandwidth 40MHz
#ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][SMPS-STATIC][MAX-AMSDU-7935][DSSS_CCK-40]

iptable の設定を行います。

root@onionpi:~# vi /tmp/iptables.sh
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
root@onionpi:~# sh /tmp/iptables.sh &

root@onionpi:~# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -i wlan0 -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -i wlan0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
-A POSTROUTING -o eth0 -j MASQUERADE

root@onionpi:~# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT

root@onionpi:~# iptables-save > /etc/iptables.ipv4.nat

root@onionpi:~# ls -l /etc/iptables.ipv4.nat
-rw-r--r-- 1 root root 727 8月 20 19:56 /etc/iptables.ipv4.nat

root@onionpi:~# cat /etc/iptables.ipv4.nat
# Generated by iptables-save v1.4.14 on Tue Aug 20 19:56:52 2013
*nat
:PREROUTING ACCEPT [4:256]
:INPUT ACCEPT [4:256]
:OUTPUT ACCEPT [1:76]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i wlan0 -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -i wlan0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Aug 20 19:56:52 2013
# Generated by iptables-save v1.4.14 on Tue Aug 20 19:56:52 2013
*filter
:INPUT ACCEPT [66:3980]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [95:13468]
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
COMMIT
# Completed on Tue Aug 20 19:56:52 2013

WiFiルーター起動

root@onionpi:~# service hostapd start
[ ok ] Starting advanced IEEE 802.11 management: hostapd.

root@onionpi:~# service isc-dhcp-server start
[ ok ] Starting ISC DHCP server: dhcpd.

root@onionpi:~# service hostapd status
[ ok ] hostapd is running.

root@onionpi:~# service isc-dhcp-server status
Status of ISC DHCP server: dhcpd is running.

root@onionpi:~# update-rc.d hostapd defaults
update-rc.d: using dependency based boot sequencing

root@onionpi:~# update-rc.d hostapd enable
update-rc.d: using dependency based boot sequencing

root@onionpi:~# update-rc.d isc-dhcp-server enable
update-rc.d: using dependency based boot sequencing

不要ファイル削除

root@onionpi:~# rm /tmp/iptables.sh

root@onionpi:~# ls -l /tmp/iptables.sh
ls: /tmp/iptables.sh にアクセスできません: そのようなファイルやディレクトリはありません

Torインストール

root@onionpi:~# apt-get install tor
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
tor-geoipdb torsocks
提案パッケージ:
mixmaster xul-ext-torbutton socat tor-arm polipo privoxy apparmor-utils
以下のパッケージが新たにインストールされます:
tor tor-geoipdb torsocks
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
2,694 kB のアーカイブを取得する必要があります。
この操作後に追加で 7,386 kB のディスク容量が消費されます。
続行しますか [Y/n]? Y
 ・・・(しばらく待つ)・・・
tor (0.2.3.25-1) を設定しています ...
[ ok ] Starting tor daemon...done.
torsocks (1.2-3) を設定しています ...
tor-geoipdb (0.2.3.25-1) を設定しています ...

root@onionpi:~# cp -ip /etc/tor/torrc /etc/tor/torrc.org

root@onionpi:~# vi /etc/tor/torrc

ファイル先頭に下記を追加
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 192.168.42.1
DNSPort 53
DNSListenAddress 192.168.42.1
RunAsDaemon 1
Log notice stdout
root@onionpi:~# diff /etc/tor/torrc /etc/tor/torrc.org
1,9d0
< VirtualAddrNetwork 10.192.0.0/10
< AutomapHostsSuffixes .onion,.exit
< AutomapHostsOnResolve 1
< TransPort 9040
< TransListenAddress 192.168.42.1
< DNSPort 53
< DNSListenAddress 192.168.42.1
< RunAsDaemon 1
< Log notice stdout

Tor起動

root@onionpi:~# service tor restart
[ ok ] Stopping tor daemon...done.
[....] Starting tor daemon...Aug 22 14:26:21.000 [warn] Can't log to stdout with RunAsDaemon set; skipping stdout
done.

root@onionpi:~# service tor status
[ ok ] tor is running.

root@onionpi:~# update-rc.d tor enable
update-rc.d: using dependency based boot sequencing

ファームウェアバージョン確認

root@onionpi:~# /opt/vc/bin/vcgencmd version
Jun 17 2013 20:43:10
Copyright (c) 2012 Broadcom
version d380dde43fe729f043befb5cf775f99e54586cde (clean) (release)

ファームウェアバージョンアップ

root@onionpi:~# rpi-update
 ・・・(しばらく待つ)・・・
*** Running ldconfig
 *** Storing current firmware revision
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully setup
 *** A reboot is needed to activate the new firmware

再起動します。

root@onionpi:~# reboot

再起動後、新しいユーザーでログインします。
 チャレンジレスポンス認証になっていることに注意
 ID : onion
 Password :

rootになります。

onion@onionpi ~ $ su -
パスワード:

ファームウェアのバージョンが上がっているか確認

root@onionpi:~# /opt/vc/bin/vcgencmd version
Aug 20 2013 00:35:49
Copyright (c) 2012 Broadcom
version 18e3e93a3ae0765ca25e4fe511f59f14396afcaa (clean) (release)

アカウント名 pi をロックします。

root@onionpi:~# passwd -l pi
passwd: パスワード期限切れ情報を変更しました

開発環境一式をインストールします

root@onionpi:~# 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
 ・・・(しばらく待つ)・・・

最新ソースコードの取得

root@onionpi:~# cd /usr/src

root@onionpi:/usr/src# git clone --depth 1 https://github.com/raspberrypi/linux.git
 ・・・(しばらく待つ)・・・

root@onionpi:/usr/src# ln -s linux linux-3.6.11+

root@onionpi:/usr/src# cd linux

root@onionpi:/usr/src/linux# git clone git://aufs.git.sourceforge.net/gitroot/aufs/aufs3-standalone.git

パッチファイルのダウンロード

root@onionpi:/usr/src/linux# cd aufs3-standalone/
root@onionpi:/usr/src/linux/aufs3-standalone# git checkout origin/aufs3.6
Note: checking out 'origin/aufs3.6'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at 35a79fc... aufs3.6 20130325
root@onionpi:/usr/src/linux/aufs3-standalone# ll
合計 76
-rw-r--r-- 1 root root 17990 8月 20 20:00 COPYING
drwxr-xr-x 4 root root 4096 8月 20 20:00 Documentation
-rw-r--r-- 1 root root 1384 8月 20 20:00 Makefile
lrwxrwxrwx 1 root root 39 8月 20 20:00 README -> ./Documentation/filesystems/aufs/README
-rw-r--r-- 1 root root 2902 8月 20 20:00 aufs3-base.patch
-rw-r--r-- 1 root root 957 8月 20 20:00 aufs3-kbuild.patch
-rw-r--r-- 1 root root 8281 8月 20 20:00 aufs3-loopback.patch
-rw-r--r-- 1 root root 6959 8月 20 20:00 aufs3-proc_map.patch
-rw-r--r-- 1 root root 8103 8月 20 20:00 aufs3-standalone.patch
-rw-r--r-- 1 root root 2828 8月 20 20:00 config.mk
drwxr-xr-x 3 root root 4096 8月 20 20:00 fs
drwxr-xr-x 3 root root 4096 8月 20 20:00 include

パッチファイルのコピー

root@onionpi:/usr/src/linux/aufs3-standalone# cp -rp *.patch /usr/src/linux

root@onionpi:/usr/src/linux/aufs3-standalone# cp -rp fs /usr/src/linux

root@onionpi:/usr/src/linux/aufs3-standalone# cp -rp Documentation/ /usr/src/linux

root@onionpi:/usr/src/linux/aufs3-standalone# cp -rp include/linux/aufs_type.h /usr/src/linux/include/linux/

パッチ適用

root@onionpi:/usr/src/linux/aufs3-standalone# cd ..
root@onionpi:/usr/src/linux# patch -p1 < aufs3-kbuild.patch
patching file fs/Kconfig
patching file fs/Makefile
patching file include/linux/Kbuild

root@onionpi:/usr/src/linux# patch -p1 < 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@onionpi:/usr/src/linux# patch -p1 < 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

root@onionpi:/usr/src/linux# patch -p1 < aufs3-standalone.patch
patching file fs/file_table.c
patching file fs/inode.c
Hunk #2 succeeded at 1520 (offset 12 lines).
patching file fs/namespace.c
patching file fs/notify/group.c
patching file fs/notify/mark.c
patching file fs/open.c
patching file fs/splice.c
patching file security/commoncap.c
patching file security/device_cgroup.c
patching file security/security.c

root@onionpi:/usr/src/linux# patch -p1 < aufs3-loopback.patch
patching file drivers/block/loop.c
patching file fs/aufs/f_op.c
patching file fs/aufs/loop.c
patching file fs/aufs/loop.h
patching file fs/aufs/super.c
patching file include/linux/fs.h
patching file include/linux/loop.h

稼働中カーネル設定のコピー

root@onionpi:/usr/src/linux# zcat /proc/config.gz > .config

カーネル設定(aufs有効化設定)

root@onionpi:/usr/src/linux# make menuconfig

・メニュー画面で下にスクロールし Load an Alternate Configuration File を選択します。
Load an Alternate Configuration File

・既存のカーネル設定 .config を読み込みます。
.config - Linux/arm 3.6.11 Kernel Configuration

・トップ画面で General Setup を選択します。
General setup

Initial RAM filesystem and RAM disk (initramfs/initrd) support を選択し、[*]を表示させます。
Initial RAM filesystem and RAM disk (initramfs/initrd) support

・トップ画面に戻り、 File systems を選択します。
File systems

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

< > Aufs (Advanced multi layered unification filesystem) support を選択し <*> を表示させます。
 <M> ではなく、<*> とする点に注意
Aufs (Advanced multi layered unificaion filesystem) support

・さらに下部にスクロールできるようになるので、下記を選択し[*]を表示させます。
 [*] NFS-exportable aufs
 [*] Ramfs(initramfs/rootfs) as an aufs branch
 [*] Fuse fs an sufs branch
 [*] Hfsplus as an aufs branch (NEW) ※選択済

Aufs (Advanced multi layered unificaion filesystem) support

・トップ画面に戻り、 Save an Alternate Configuration File を選択します。
Save an Alternate Configuration File

・.config をセーブします。
.config - Linux/arm 3.6.11 Kernel Configuration

・カーネル設定(aufs有効化設定) を終了します。
.config - Linux/arm 3.6.11 Kernel Configuration

aufs有効設定確認

root@onionpi:/usr/src/linux# grep -E 'CONFIG_BLK_DEV_INITRD|CONFIG_AUFS_FS' .config
CONFIG_BLK_DEV_INITRD=y
CONFIG_AUFS_FS=y

カーネルバージョン修正

root@onionpi:/usr/src/linux# cp -ip Makefile /tmp/Makefile
root@onionpi:/usr/src/linux# vi Makefile
4行目を下記に修正
EXTRAVERSION = -aufs
root@onionpi:/usr/src/linux# diff Makefile /tmp/Makefile
4c4
< EXTRAVERSION = -aufs
---
> EXTRAVERSION =
root@onionpi:/usr/src/linux# rm /tmp/Makefile

カーネル再構築

root@onionpi:/usr/src/linux# make clean

root@onionpi:/usr/src/linux# make
・・・(処理時間約9時間)・・・

モジュールインストール

root@onionpi:/usr/src/linux# mv /lib/modules/3.6.11+ /lib/modules/3.6.11+.bak

root@onionpi:/usr/src/linux# make modules_install

カーネルインストール

root@onionpi:/usr/src/linux# uname -a
Linux raspberrypi 3.6.11+ #524 PREEMPT Thu Aug 15 15:48:48 BST 2013 armv6l GNU/Linux

root@onionpi:/usr/src/linux# mv /boot/kernel.img /boot/kernel.img.bak

root@onionpi:/usr/src/linux# cp arch/arm/boot/Image /boot/kernel.img

再起動します。

root@onionpi:/usr/src/linux# reboot

再起動後、新しいユーザーでログインします。
 チャレンジレスポンス認証になっていることに注意
 ID : onion
 Password :

rootになります。

onion@onionpi ~ $ su -
パスワード:

カーネルバージョン確認

root@onionpi:~# uname -a
Linux onionpi 3.6.11-aufs+ #1 PREEMPT Wed Aug 21 10:09:01 JST 2013 armv6l GNU/Linux

fsprotectをインストールします

root@onionpi:~# apt-get install fsprotect
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
fsprotect
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
79.4 kB のアーカイブを取得する必要があります。
この操作後に追加で 179 kB のディスク容量が消費されます。
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main fsprotect all 1.0.6 [79.4 kB]
79.4 kB を 1秒 で取得しました (58.1 kB/s)
以前に未選択のパッケージ fsprotect を選択しています。
(データベースを読み込んでいます ... 現在 70467 個のファイルとディレクトリがイン ストールされています。)
(.../fsprotect_1.0.6_all.deb から) fsprotect を展開しています...
man-db のトリガを処理しています ...
fsprotect (1.0.6) を設定しています ...
initramfs-tools のトリガを処理しています ...

initramfsイメージファイルを作成し直します。

root@onionpi:~# update-initramfs -c -k $(uname -r)
update-initramfs: Generating /boot/initrd.img-3.6.11-aufs+

書込み禁止設定

root@onionpi:~# cp -ip /boot/cmdline.txt /boot/cmdline.txt.org

root@onionpi:~# vi /boot/cmdline.txt

最後尾に fsprotect を追記する
root@onionpi:~# diff /boot/cmdline.txt /boot/cmdline.txt.org
1c1
< dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fsprotect
---
> dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

initramfsの指定を追加

root@onionpi:~# cp -ip /boot/config.txt /boot/config.txt.org
root@onionpi:~# vi /boot/config.txt
下記を追記する
# aufs
initramfs initrd.img-3.6.11-aufs+
root@onionpi:~# diff /boot/config.txt /boot/config.txt.org
43,45d42
<
< # aufs
< initramfs initrd.img-3.6.11-aufs+

/boot ディレクトリの保護

root@onionpi:~# cp -ip /etc/default/fsprotect /tmp/fsprotect
root@onionpi:~# vi /etc/default/fsprotect
最下行を下記にする
PROTECT="/boot=32M"
root@onionpi:~# diff /etc/default/fsprotect /tmp/fsprotect
11c11
< PROTECT="/boot=32M"
---
> PROTECT=""

再起動します。

root@onionpi:~# reboot


確認
 onion pi に繋がない状態で、自分のIPアドレスを確認。http://www.ipchicken.com/
 onion pi へ 設定した SSID、KEYでつながるか?
 WiFi接続後、もう一度IPアドレスを確認し先ほどとは異なっている事。
 多くのTorの出口ノードのホスト名はtorの文字があるので参考にするとよい。

IPアドレスチェック

再起動後、新しいユーザーでログインします。
 チャレンジレスポンス認証になっていることに注意
 ID : onion
 Password :

rootになります。

onion@onionpi ~ $ su -
パスワード:

シャットダウンします

root@onionpi:~# halt

SDカード書込み禁止スイッチ

  • シャットダウンを確認したら、SDカードを取り外します。

  • 物理的に書き込みしないよう、SDカードの書込み禁止スイッチをrock側にし、再度取り付けてください。

  • 電源を入れます。

SDHC 8GB

以上、完成!

設定変更時の手順 SDカードにデータを書き込むには以下の手順を実施します。
  1. Raspberry Pi 自体の電源オフ
  2. SDカードを取り外し書込み禁止スイッチのロックを解除
  3. SDカードをパソコンに接続
  4. cmdline.txt を編集。fsprotect を nofsprotect にする。
  5. SDカードをRaspberry Pi に接続し、電源オン
  6. Raspberry Pi にログインし、必要なファイルを編集
SDカードのデータを書込み禁止にするには以下の手順を実施します。
  1. /boot/cmdline.txt を編集。最後尾の nofsprotect を fsprotect にする。
  2. Raspberry Pi 自体の電源オフ # halt
  3. SDカードの書込み禁止スイッチをロック側へ
  4. SDカードをRaspberry Pi に接続し、電源オン

書込み禁止時の留意点

起動時の下記表示は気にしなくてよい
[warn] Fast boot enabled, so skipping file system check. ... (warning).

下記表示が出る事
[ ok ] Protecting filesystems:.

シャットダウン時の下記表示は気にしなくてよい
[....] Unmounting temporary filesystem...umount: /fsprotect/fs/boot/tmp: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1)) .

failed.

参考:Onion Pi

2015年1月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

このブログ記事について

このページは、mimizunが2013年8月21日 19:51に書いたブログ記事です。

ひとつ前のブログ記事は「onion pi の作り方2」です。

次のブログ記事は「onion pi をモバイルルーターとして利用する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.2.7

アイテム

  • スカイタイム
  • Ingress 国際通り
  • 確認くん
  • iPhone 設定画面
  • JAL SKY Wi-Fi 接続が完了しました。
  • JAL SKY Wi-Fi パス選択画面
  • JAL SKY Wi-Fi ご利用ガイド
  • JAL SKY Wi-Fi
  • 那覇空港22番ゲート
  • A&W ルートビア