Raspberry Pi 2(Raspbian) 初期設定

性懲りもせずにRaspberry pi2を購入しました。
初代に比べて相当スペックが向上しており、4coreのメモリ1GBです。
さくらのVPSの1GBプランよりはこちらの方が性能が良いかもしれませんね(固定IPがないですが)

今回は以下の流れです。
・OS準備などraspberry piのセットアップ準備
・インストール
・OS初期設定

購入と準備

購入商品一覧

まずは今回私が購入したもの一覧。
raspberry pi2購入物

本体、ケース、電源、SD、無線用USBアダプタになります。
無線用USBは後から見たら150Mbpsでした。ん〜……、このご時世では少し不満。他のにすればよかったと後悔です。
初代のraspberry piであればcpuの貧弱さからこれぐらいでも処理しきれなさそうだからよかったかも?
どちらにせよ、今もI/Oはmicro sdなので案外大丈夫なのかもしれません。

で、今回購入したケースを組み立てたのが以下。
raspberry pi2ケース組み立て

わりとおしゃれです。
5枚くらいのプレートで挟み込む感じでした。CPUに取り付ける柔毛みたいなものも付いていました。
これで熱処理効率がupしますね。
ただこのケース、埃とか普通に入るのでそこのところをどうするか悩みどころです。

もろもろの準備

SDのフォーマットやOSの書き込みなど、まずは準備が必要になります。
細かい準備は初代のraspberry piと同じでしたのでこちらを参照してください。
私自身がいろいろ忘れてて自分の記事を参考にしました。

OS (Raspbian)のインストール

今回はRaspbianをOSとして採用しました。
本当はpidoraがよかったのですが、どうもpidoraの更新が止まっていそうなのと、raspberry pi2にいまいち対応しきれていないという情報を入手しました。
さすがに動作不安定だと設定時に問題の切り分けがしづらいですし、OSレベルで不可能なことがでそうなのでpidoraは諦めます。

では、さっそくRaspbianのインストールを行います。

1. Expand Filesystem <- 選択して/のパーティション拡張  
2. Change User Password <- ユーザのパスワード変更  
3. Enable Boot to Desktop/Scratch <-デフォルトのCUIに  
4. Internationalisation Options <- ja_JP.UTF-8, asia/tokyo  
5. Enable Camera <- 設定しない  
6. Add To Rastrack <-参加しない  
7. Overclock <- 設定しない  
8. Advanced Options <- sshだけ有効化。  
9. About raspi-confing <- 特にみない  

簡素にはなりますが、Raspbianは起動直後にいろいろと自動で進み最終的には設定画面のようなものが開きます。
そこでは上記のようなメニューが表示されており、そこから初期設定を行います。
今回は上にコメントであるような設定を行いました。

簡単にいくつか補足説明をすると
4番でキーボードの設定も可能ですが、私は表示が文字化けしていて何がなんだかわからなかったのと、今後はsshで繋ぐので特に何も設定していません。
6番は、「みんなでraspberry piの位置を登録しようぜ!」っていう団体?への参加らしく、いやなのでしませんでした。
7番のオーバークロックは熱が怖いのと、初期状態の動作を試したかったので特に設定していません。基本やめておいた方がいいんじゃないかなって思います。

またこの画面で設定を忘れてもコンソールから以下のコマンドを入力することで再度表示可能です。

sudo raspi-config  

初期設定

ここから、簡単なOSの初期設定を行います。
redhat (CentOS)に慣れきった私にはややストレスのたまる作業になりました。
ファイルが所定の位置にないこととはこんなにもストレスなのですね。

またここからはsshで接続して行っていますが、初期ではpiというユーザが存在しています。
そのユーザでアクセスしましょう。

ネットワーク(Nic)設定

まずはraspberry piに固定IPを振ります。
今回は自宅の閉じたネットワークに内にあり、publicなネットワークには属さない前提です。

pi@raspberrypi ~ $ sudo cp /etc/network/interfaces /etc/network/interfaces.org  
pi@raspberrypi ~ $ sudo vi /etc/network/interfaces  
pi@raspberrypi ~ $ sudo vi /etc/network/interfaces  
pi@raspberrypi ~ $ diff /etc/network/interfaces.org /etc/network/interfaces  
5,6c5,10  
< allow-hotplug eth0  
< iface eth0 inet manual  
---  
> #allow-hotplug eth0  
> #iface eth0 inet manual  
> iface eth0 inet static  
> address 192.168.aaa.bbb  
> netmask 255.255.255.0  
> gateway 192.168.aaa.1  
  
pi@raspberrypi ~ $ sudo /etc/init.d/netwok restart  

address部にあるaaaは各々の環境に合わせて設定を行ってください。
raspberry pi以外のパソコンでipを確認すると何を設定すればいいのかわかります。
macであればコンソールからifconfigを行った時にでる192.168.aaa.cccの、aaa部分を引用します。(実際には数字)
windowsであればコマンドプロンプトからipconfigです。
bbbの部分は自分で2〜255の間で好きに設定して構いません。

debianにはserviceコマンドみたいなものはないんでしょうかね?
多分あると思うのですが。

パッケージの更新

次はパッケージを更新します。
debian系では初期状態ではapt-getというコマンドがあります。
で、それとは別にaptitudeというコマンドがあるのですが、raspbianではデフォルトでインストールされているようです。
apt-getが基本にあり、それを拡張したaptitudeみたいなイメージです。
大きな違いはアンインストールするときの挙動で、aptitudeの方が関連するパッケージをちゃんと削除してくれます。
ただaptitudeでインストールしたログがないと綺麗に削除できないようなので、新しく使い始めるのであればaptitudeを利用していきましょう。

pi@raspberrypi ~ $ sudo aptitude update  
  
# 以下 2015/10/27追記  
pi@raspberrypi ~ $ sudo aptitude full-upgrade  

さっくりと完了です。
full-upgradeの削除の速度がわりと普通だったので、やはり初代raspberry piに比べて2は相当スペックがあがっているのではないでしょうか。
ストレスありません。

<2015/10/27追記>
updateだけでは更新されてませんでした!
upgradeをしないとパッケージリスト更新しているだけでした!
そりゃ早いわけだ!

ユーザ追加

管理用ユーザを追加します。

pi@raspberrypi ~ $ sudo adduser hogehoge  
ユーザ `hogehoge' を追加しています...  
新しいグループ `hogehoge' (1002) を追加しています...  
新しいユーザ `hogehoge' (1001) をグループ `hogehoge' として追加しています...  
ホームディレクトリ `/home/hogehoge' を作成しています...  
`/etc/skel' からファイルをコピーしています...  
新しいUNIXパスワードを入力してください:  
新しいUNIX パスワードを再入力してください:  
passwd: パスワードは正しく更新されました  
hogehoge のユーザ情報を変更中  
新しい値を入力してください。標準設定値を使うならリターンを押してください  
   フルネーム []:   
   部屋番号 []:   
   職場電話番号 []:   
   自宅電話番号 []:   
   その他 []:   
以上で正しいですか? [Y/n] y  
  
pi@raspberrypi ~ $ sudo /etc/group | grep pi  
adm:x:4:pi  
dialout:x:20:pi  
cdrom:x:24:pi  
sudo:x:27:pi  
audio:x:29:pi  
video:x:44:pi  
plugdev:x:46:pi  
games:x:60:pi  
users:x:100:pi  
pi:x:1000:  
netdev:x:106:pi  
input:x:999:pi  
spi:x:998:pi  
i2c:x:997:pi  
gpio:x:996:pi  
  
pi@raspberrypi ~ $ sudo id pi  
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),106(netdev),999(input),998(spi),997(i2c),996(gpio)  
  
pi@raspberrypi ~ $ sudo usermod -G adm,dialout,cdrom,sudo,audio,plugdev,games,users,netdev,input,spi,i2c,gpio hogehoge  

行数が多いですが、行っているのはユーザの追加とグループの設定です。
piユーザは初期状態でいくつかのグループに入っているようなので、念のため新規に追加した管理ユーザにも同様のグループへ所属させました。

ここでwheelグループがないと気づいたのですが、debian系ではadmグループがwheelグループにあたるものとして利用されているようです。
またsudoグループというものがあり、このグループに所属している場合にsudoが実行可能になります。

root系権限設定

続いてroot系の権限設定です。

pi@raspberrypi ~ $ sudo passwd root  
pi@raspberrypi ~ $ sudo cp /etc/sudoers /etc/sudoers.org  
pi@raspberrypi ~ $ ls -l /etc/sudoers*  
-r--r----- 1 root root  696  57 07:39 /etc/sudoers  
-r--r----- 1 root root  696  920 21:26 /etc/sudoers.org  
pi@raspberrypi ~ $ sudo visudo  
pi@raspberrypi ~ $ diff /etc/sudoers.org /etc/sudoers  
28c28  
< pi ALL=(ALL) NOPASSWD: ALL  
---  
> #pi ALL=(ALL) NOPASSWD: ALL  
  
pi@raspberrypi ~ $ su -  
root@raspberrypi:~# cp /etc/pam.d/su /etc/pam.d/su.org  
root@raspberrypi:~# vi /etc/pam.d/su  
root@raspberrypi:~# diff /etc/pam.d/su.org /etc/pam.d/su  
15a16  
> auth       required   pam_wheel.so group=adm  
  
# 新規追加ユーザでsudo, su -の動作確認  
  
root@raspberrypi:~# adduser test  
root@raspberrypi:~# su - test  
test@raspberrypi ~ $ su -  
パスワード:  
su: 拒否されたパーミッション  
test@raspberrypi ~ $ exit  
ログアウト  
root@raspberrypi:~# userdel -r test  
root@raspberrypi:~# userdel -r pi  

まずrootユーザにパスワードを設定します。
これでsu -でアクセスができるようになります。

sudoersの設定ではpiからパス無しsudo権限を解除しています。
pam.d/suの設定ではadmグループを管理者管理用グループ指定しています。
これでadmグループのユーザはsu -が実行できるようになります。

また、sudoersファイルの中で %sudoと記載されている部分があります。
ここを%admに変更すると、sudoを実行できるのがsudoグループ配下のユーザではなく、adm配下のユーザに切り替わるはずです。お好みに応じてadmに変更したりしてください。

ここまでできたら新しく通常のユーザを作成し、このユーザがsudo, suを実行できないことを確認できたら完了です。

私はpiユーザを削除しましたが、怖いと感じる方は残しておきましょう。
私はpiユーザという広く知られたユーザがサーバにいることの方が気持ち悪かったです。

iptables設定

最後にiptablesの設定です。

root@raspberrypi:~# aptitude install iptables-persistent  
# なんか出てくるが、一から設定するので気にせずOK  
root@raspberrypi:~# /etc/init.d/iptables-persistent restart  
root@raspberrypi:~# cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.org  
root@raspberrypi:~# vi /etc/iptables/rules.v4  
root@raspberrypi:~# diff /etc/iptables/rules.v4.org /etc/iptables/rules.v4  
3,5c3,9  
< :INPUT ACCEPT [13383:1240482]  
< :FORWARD ACCEPT [0:0]  
< :OUTPUT ACCEPT [7305:742584]  
---  
> :INPUT DROP [0:0]  
> :FORWARD DROP [0:0]  
> :OUTPUT ACCEPT [0:0]  
> -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  
> -A INPUT -p icmp -j ACCEPT  
> -A INPUT -i lo -j ACCEPT  
> -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT  
7d10  
< # Completed on Sun Sep 20 22:11:09 2015  
root@raspberrypi:~# /etc/init.d/iptables-persistent restart  

debianではiptables-persistentというのをインストールして利用するみたいです。

今回は内から外は許可して、外から内は全部ドロップ。
22番とping系のみ許可という形にしています。
最小構成っぽい感じですので、あとはお好みに応じて肉付けしてください。

あとがき

本来であればsshの鍵認証設定と、sshd_config周りの設定を行って完了になるのですが、一旦ここまで。
publicに公開するまではこれでも十分だとは思います。

VPSと違ってglobalIPがないので、そういうときの楽しみ方を試行錯誤するのが楽しいですね。
DDNSやルータのポートフォワード設定は簡単だとして、stun,trunサーバを利用したルータ越えの通信設定など行ってみたいです。何かわかってないのでルータ越えにそれが使えるのかすらよくわかりませんが。

少し触っただけですが、raspberry pi2はなかなか動作が軽快です。
学生のサーバ勉強用途としては最強なんではないでしょうか。OSがdebianなのは個人的にはかなり嫌ですがw

購入物

Raspberry Pi 2 Model B (2015年2月発売品)

Raspberry Pi 2 Model B (2015年2月発売品)