Raspberry Pi セットアップメモ

このページでの手元の作業マシンは Linux を想定しています.Windows でも Cygwin を入れればだいたいは代替できますが, GParted だけはLinux での作業が必要になります.GParted 専用の Live CD/USB が用意されていますので,必要ならこれを使うのがよいでしょう.

一応 Raspberry Pi での設定を記述していますが,たぶん Arch Linux 共通の設定も多く含まれています.

自分の覚書として書いているので安全性や完全性については保証いたしかねます.また,通常の使用では Arch Linux でなく, Debian が推奨されています. Linux に慣れていて腕に覚えがある場合のみ Arch Linux を推奨します.

SDカードの用意

Warning! 間違えるとあなたのハードディスクを上書きしてしまいます./dev/sdbの部分と GParted の部分は特に注意して作業してください.
  1. ArchLinux Arm のサイトからダウンロードする.ダウンロードしたのはarchlinux-hf-2012-09-18.zip
  2. 圧縮ファイルを展開 unzip archlinux-hf-2012-09-18.zip
  3. SDカードに書き込む. sudo dd bs=1M if=archlinux-hf-2012-09-18.img of=/dev/sdb
    • SDカードは2GB以上と書かれているが,以下の設定をするならば8GB以上あると安心.
    • デバイスファイルは要確認.さらにマウントされているパーティションがあればアンマウントしておく.
  4. GParted を使ってパーティションサイズを変更.
    • 1GBをスワップに
    • 残りをext4のパーティションを拡大して埋める

初回起動と設定

  1. Raspberry PiにSDカードをさして起動
  2. SSHでログインする.IP アドレスはDHCP のログから推測.ユーザー名root パスワードroot
  3. root パスワードを変更する passwd
  4. ミラーサーバーを変更する
    • vi /etc/pacman.d/mirrorlist でミラーサーバーの一覧を開き,# Server = http://mirror.archlinuxarm.org/armv6h/$repoをコメントアウトした上でアメリカ合衆国のサーバーをひとつアンコメントする. こうすることでダウンロード時間が大幅に短縮できる
  5. adduser で新規ユーザーを追加
  6. Localeのアップデート
    • vi /etc/locale.genen_US.UTF-8 UTF-8ja_JP.UTF-8 UTF-8 をアンコメント(参考
    • locale-gen
  7. 必要なソフトウエアをインストールし,ついでにシステムのアップデート

    ここではこれ以降の全ての設定を行うことを前提にしているので,必要なものだけをインストールするのが良い.

    pacman -Sy
    pacman -Su vim zsh openvpn nginx emacs-nox avahi python2 sudo python2-virtualenv supervisor tinyproxy tmux ufw mercurial git munin munin-node p7zip motion
    
  8. オーバークロックとメモリの設定を行う

    • 以下のように /boot/config.txt を書き換える.
  1. ssh経由でのrootログインを禁止する.
    • PermitRootLogin no/etc/ssh/sshd_config に書き加える.
  2. sudo の使用を許可する.
    • visudo で設定ファイルを編集する.
    • %wheel ALL=(ALL) ALL をアンコメントしてwheelグループに対して sudo を許可する.
  3. ホスト名を書き換える
    • /etc/hostname を編集
  4. タイムゾーンを書き換える

    cd /etc
    rm localtime
    ln -s /usr/share/zoneinfo/Japan localtime
    
  5. fstab を書き換えてスワップを有効にする.

    /etc/fstab の最後に次の行を追加する.パーティションの切り方が違う場合には適宜変更.

    /dev/mmcblk0p3  swap    swap    defaults    0   0
    
  6. 再起動する

SSH の設定

  1. ローカルで SSH key を作成
    • ssh-keygen -t rsa
  2. SSH key を登録
    • ローカルの ~/.ssh/id_rsa.pub をリモートの ~/.ssh/authorized_keys に追記
    • authorzied_keysが外から見えない Permission にしておく
    • ログインし直して正しく動くことを確認.リモートのパスワードを聞かれずにログインできればOK.秘密鍵のパスワードは聞かれる
  3. パスワードによるログインを禁止.以下を追記する.(コメントを修正でもOK)

    PasswordAuthentication no
    ChallengeResponseAuthentication no
    
  4. sshd を再起動してパスワードでログイン出来ないことを確認.

    • このときに現在の接続を切らずに確認しないと二度とログインできなくなるかもしれないので要注意.
    • sshd の再起動は systemctl restart sshd.service
    • 存在しないユーザー名でログインしようとして Permission denied (publickey). と表示されれば成功.

各種サービスの設定

nginx

nginx は Apache に比べて軽量なウェブサーバーで特にメモリ使用量が少ないので Raspberry Pi のような環境にはおすすめ.インストールは pacman -S nginx

/etc/nginx/nginx.conf を必要に応じて書き換える.ドキュメントを参照する.

設定ファイルの確認は

nginx -t

サービスの起動は

systemctl enable nginx.service
systemctl start nginx.service

munin

munin はシステムの状態を監視するためのツール.インストールはpacman -S munin munin-node

プラグインのインストール.大量のプラグインがインストールされるので取捨選択が必要.

munin-node-configure --shell|sh

Raspberry Pi向けのプラグインをインストール

これらを /etc/munin/plugins に配置し

munin-nodeの開始

systemctl enable munin-node.service
systemctl start munin-node.service

パーティションの修正

chown munin:munin /usr/share/munin/www

Cron の登録

crontab -u munin /etc/munin/munin-cron-entry

あとは nginx の設定を書き換えてブラウザからみれるようにする.必要に応じて Basic 認証をかけると良い.

tinyproxy

tinyproxy は簡易 HTTP Proxy で,公衆無線 LAN などで SSH にポートフォワードさせて使っている.インストールはpacman -S tinyproxy

/etc/tinyproxy/tinyproxy.confを適宜編集.

サービスの起動は

systemctl enable tinyproxy.service
systemctl start tinyproxy.service

公開プロキシにならないように注意.次の項目の ufw でポートを閉じて,SSH のポートフォワードと組み合わせて使うのが安全性からも良い.

ufw

ufw は Ubuntu Firewall の略で難解な iptables の簡易ラッパーである. iptables に比べて設定が大幅に楽なのでお勧め.インストールはpacman -S ufw

以下のように設定.順番を間違えるとSSHにログインできなくなる.許可するポートは用途に応じて変更する.

ufw limit SSH
ufw allow "WWW Full"
systemctl enable ufw
systemctl start ufw
ufw enable

SSHは短期間に何度もログインできないようにした.allow や limit の後ろに使える名前は sudo ufw app list で一覧を得ることが出来る. ufw allow 80/tcp のように直接ポート番号を指定することも出来る.詳しくはman ufw

OpenVPN

OpenVPN はセキュアでセットアップが簡単な VPN . OS の標準サポートがないのでクライアント側にソフトを入れる必要があるが,面倒ではない.セットアップ方法はHOWTO に載っている通りであるが,Arch Linux での注意点をいくつか挙げておく.

  • easy-rsa での作業はローカルでやったほうが無難.できれば専用の USB メモリを用意して CA のキーはインターネットから隔離しておくと安全.
  • easy-rsa は/usr/share/openvpn/にある.
  • 設定ファイルは/etc/openvpnの中に設置する.もし,/etc/openvpn/server.confという名前で保存した場合には

    systemctl enable openvpn@server
    systemctl start openvpn@server
    

    として有効にする.serverの部分は任意に書き換え可能. UDP と TCP の両方に対応させる場合には設定ファイルを二つ用意する必要があるので,systemctlも二回繰り返す.

  • ufw を使用している場合に Packet Forwarding を使いたいときには以下のようにする.

    • /etc/ufw/before.rulesの頭に以下を追記

      *nat
      :POSTROUTING ACCEPT [0:0]
      -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
      
      COMMIT
      

      参考: https://help.ubuntu.com/12.10/serverguide/firewall.html#ip-masquerading

    • /etc/defaults/ufwの編集

      DEFAULT_FORWARD_POLICY="ACCEPT"
      
    • /etc/ufw/sysctl.confの以下の行をUncomment

      net/ipv4/ip_forward=1
      
    • 最後にufw allow 1194/udpでポートを空けた上でufw disable && ufw enableで Firewall を再起動して完了.

Motion

Motion はWebカメラを用いた動体検知プログラムである.カメラに写っているものが動いた場合に録画してくれる.

とりあえず動かしてみるためには以下のコマンドをroot権限で実行する.

motion -sn

設定ファイルは/etc/motion/motion.confにあるが変更すべき箇所は多くない. 359行目付近のtarget_dirを変更するくらいで他は保存するファイル名を必要に応じて変更する. 動体検知されたときにスクリプトを実行することもできるので,検知された際に自動的にTwitterにツイートすることも出来る.