Raspberry Pi - ArchLinuxセットアップガイド

インストレーション   今回はRaspberry Pi用のArchLinuxをSDカードにインストールし終えたところからのスタート.
  1. 認識領域の拡張
  2. パッケージアップデート
  3. 時刻同期
  4. SUDOのインストール
  5. 一般ユーザの追加
  6. Wi-Fi接続セットアップ(任意)
ArchLinuxをインストールしたSDカードは,RPiのSDカードスロットに差し込もう. RPiのLANポートにはLANケーブルを差し込み,自分のネットワークに接続する. SDカードスロット近くにあるミニUSBポートに電源用のUSB端子を差し込んで電源を入れれば準備完了だ! USBポート脇にあるLEDがチカチカと輝いていれば,それは起動中を意味する. 今のうちにお持ちのMacの電源を入れターミナルを開こう.
ssh root@alarmpi.local
なるコマンドでRPiへSSH接続出来る. "alarmpi.local"の部分はRPiに割り当てられたローカルIPアドレスを入力しても全く問題ない(例:ssh root@192.168.11.5). "Are you sure~"という確認メッセージが表示された場合は"yes"と入力しEnterを押下. パスワードは"root"と入力. これでRPiへログイン出来た.
  SSH接続が上手く行かない場合は少し間を置いてから再試行してみる. それでもダメならRPiの電源を入れ直してみるか,ターミナルを一旦終了(Cmd+Q)してから再び立ち上げるかして再試行してみよう.
なお,WindowsからRPiへ接続する場合にはPuTTYというソフトウェアを用いると良い. 実行ファイルをダブルクリックで起動したらRPiのIPアドレス(例:192.168.11.5)を記入してEnterキーを押下,RPiのユーザ名とパスワードをそれぞれ入力することで接続出来るはずだ.

認識領域の拡張
  インストールしたてのArchLinuxは,SDカードの容量を2GBとして認識している. もしあなたのSDカードが2GB以上の記憶領域を持っているならば,認識されていない残りの容量が無駄になってしまう. そこで,SDカードの容量すべてを使えるようにArchLinuxを設定してやる必要がある. なお,上手くパーティションを編集しないと起動出来なくなるので,この作業は慎重に.
fdisk /dev/mmcblk0
これでパーティションの編集を行える. "p"と入力するとパーティションリストが表示される. パーティションの数によって設定方法が異なる. "W95 FAT32"と"Linux"の2つならば2つの設定法を,"W95 FAT32"と"Linux"に加えて"Extended"もある場合は3つの設定法を見よう.

2つの設定法
  "d"と入力しパーティションの削除を行う. "2"と入力してLinuxパーティションを削除. 次に"n"と入力してパーティションを新規作成. "p"を選んでPrimaryパーティションを作成する. 番号は"2"にする. "first sector"と"last sector"はデフォルト値を使用(何も入力せずにEnterだけを押下すればデフォルト値を使用出来る). 最後に"w"で変更を保存. RPiの再起動が必要なので"reboot"と入力し再起動する. SSH接続が途切れるので,RPiの再起動後に再びSSH接続をする.
resize2fs /dev/mmcblk0p2
と入力し変更を適用する.

3つの設定法
  "d"と入力しパーティションの削除を行う. "5"と入力してLinuxパーティションを削除. 再び"d"にて,今度は"2"のExtendedパーティションを削除. 次に"n"と入力しパーティションを新規作成. "e"を選んでExtendedパーティションを作成する . 番号は"2"にする. "first sector"と"last sector"はデフォルト値を使用(何も入力せずにEnterだけを押下すればデフォルト値を使用出来る). 再び"n"で新規作成,今度は"l(エル)"を選んでLogicalパーティションを作成. 番号は"5". こちらも"first sector"と"last sector"はデフォルト値でOK. 最後に"w"で変更を保存. RPiの再起動が必要なので"reboot"と入力し再起動する. SSH接続が途切れるので,RPiの再起動後に再びSSH接続をする.
resize2fs /dev/mmcblk0p5
と入力し変更を適用する.

df -h
と入力することで記憶領域の割り当て具合を確認出来る.
  もし,次回起動時にルートディレクトリがRead-onlyでマウントされてしまったら(書き込みができなくなってしまったら).

パッケージアップデート
  ArchLinuxはその設計思想ゆえ必要最小限のソフトウェアしか持っていない. これからArchLinuxをカスタマイズして行くと新たなソフトウェアのインストールが必要になる. Linuxでは,ソフトウェアはパッケージという単位で配信されている. ArchLinuxでは"Pacman"というパッケージ管理ソフトウェアを備えているので,これを使うことでArchLinux内のソフトウェアを最新の状態にすることが出来る.
pacman -Syu
"Y/n"選択肢では"Y"と入力してEnterを押すか,ただEnterを押下して処理を続行する. 初めてのアップデートでは更新する項目がたくさんあるので時間がかかる. もしerror: failed to commit transaction (conflicting files)のようなエラーが表示されアップデートが終了したら,特定のパッケージを手動でアップデートする必要がある.
error: failed to commit transaction (conflicting files)
ca-certificates-utils: /etc/ssl/certs/ca-certificates.crt exists in filesystem
Errors occurred, no packages were upgraded.
例えば上のような表示の場合,ca-certificates-utilsというパッケージを手動でインストールする必要がある(参照). 次のように. pacman -S --force ca-certificates-utils その後再びpacman -Syuすればアップデートが上手く行くはず. また,アップデート中の表示に,"WARNING: This kernel provides updated config.txt and cmdline.txt files."のようなものを見かけた場合は,古いファイル(config.txtとcmdline.txt)を新しいファイル(ファイル名の最後がpacnewのもの)で上書きもしくは統合する必要があるので,次のコマンドでそれを行う.
DIFFPROG=nano pacdiff
o(オー)と入力してEnterすれば新しいファイルで上書きする. もし新旧両方のファイルの中身を確認/編集したい場合はvと入力してEnterするとnanoエディタが立ち上がるので編集をしてCtrl+x,y,Enterの順に押下することで保存できる. 閲覧しただけならばCtrl+xで次のファイルを閲覧できる. 上書き後は次のコマンドを実行する.
pacman-db-upgrade

HTTPプロキシを経由している場合は,
export http_proxy="プロキシサーバアドレス:ポート"
と入力することでプロキシ設定を行える. アドレスとポート番号は"コロン"で分ける. プロキシサーバへの接続認証が必要な場合は,"ユーザ名:パスワード@プロキシサーバアドレス:ポート"と書けば良い.

時刻同期
  NTP(Network Time Protocol)を使えばRPiのシステム時計を自動的に正しい時刻へ合わせることが出来る. 今回の目的はRPiで監視カメラを作ることなので,なおさら時刻情報の正確さは譲れない. NTPによる時刻合わせは常時起動していた方が良いので,次のコマンドで有効化する. timedatectl set-ntp true 次に設定ファイルを開く. nano /etc/systemd/timesyncd.conf 次のようにNTPとFallbackNTPの前の#を削除しコメントアウトする. NTPには自分の好きなNTPサーバーを列挙することが出来る.

/etc/systemd/timesyncd.conf

...
[Time]
NTP=ntp.nict.jp
FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
終えたらCtrl+x,y,Enterで保存. これでntpが常時起動し,システム時計はいつでも正確な時間を示してくれる. またタイムゾーンを"東京(Asia/Tokyo)"へ設定するために,次のコマンドを入力する.
timedatectl set-timezone Asia/Tokyo

  なお,NTPはUDP123番ポートを利用するサービスなので,HTTPプロキシ下では使えない. そこでHTTPを経由して正確な時刻情報を受信するよう工夫したコマンドを載せる. 次のコマンドを使って,プロキシサーバを設定する.
export http_proxy="プロキシサーバアドレス:ポート"
タイムゾーンとプロキシサーバアドレスを設定した後,下のコマンドを定期的に実行することで,HTTPプロキシ下でも時刻を合わせることが出来る.
date -s "$(curl -s http://ntp-a1.nict.go.jp/cgi-bin/time?Asia/Tokyo)"
これは情報通信研究機構(NICT)の提供するサービスを利用したコマンドで,NTPサーバと同じ時刻情報をHTTP向けに配信しているサーバから,curlコマンドにてダウンロードした時刻情報をシステム時計へ適用している. なお,URIの"?"以降にタイムゾーン(TZ)を指定出来る(例では"東京:Tokyo"とした). ただし,この方法だと時刻同期するのに一回一回上述コマンドを入力する必要がある. NTPのように放っておいても勝手に時刻同期してくれる方が便利だ. もし,このHTTP経由の時刻同期を一定周期で自動的に行わせたい場合はcrontabなるプログラムと,上述のコマンドを組み合わせると良い.
httpTimeSync.sh

01 #!/bin/bash
02 export http_proxy="プロキシサーバアドレス:ポート"
03 date -s "$(curl -s 'http://ntp-a1.nict.go.jp/cgi-bin/time?Asia/Tokyo')"
なるシェルスクリプトを適当なディレクトリに作成し上述のコマンドを一つのスクリプトへまとめる.
chmod 755 httpTimeSync.sh
として実行権を与える. 後は,
EDITOR=nano crontab -e
と実行してcrontabなるスケジュール表を編集する.
01 @reboot httpTimeSync.sh
02 0 0 * * * httpTimeSync.sh
編集内容は上述の通り("Ctrl+X"を押下し"Y"を押す,その後"Enter"で保存して終了). 1行目でRPiの起動時に時刻を合わせ,2行目は毎日0:00に時刻を合わせるようスケジュールを組んだ. 2行目の最初のゼロが分を表し,次のゼロが時を表す. 後ろ3つのアスタリスク"*"は日付を表す(アスタリスクは毎日の意). もし毎日13:00に実行させたい場合は,"00 13 * * * ..."のように入力すれば良い.

timedatectl status
で時刻情報が正しく同期されているか否かを確認出来る.

SUDOのインストール
  SUDO(Super User DO)とは一般ユーザの権限を一時的に管理者へ昇格させるコマンドである. もし一般ユーザにログインした後にシステムへ変更を加えたくなったら,コマンドの先頭に"sudo"と入力するだけで,それ以降のコマンドを管理者の操作として実行できる.
pacman -S sudo
でSUDOをインストール. インストール完了後に,
EDITOR=nano visudo
と入力するとSUDO設定ファイルをテキストエディタ"nano"を使って編集出来る.
次の行頭にある"#"を削除
# %wheel ALL=(ALL) ALL
          から
  %wheel ALL=(ALL) ALL
上述のようにアンコメントする. "Ctrl+X"キー(同時押し)で上書き保存出来る. 選択肢は"y"を選択し,その後Enterを押下すれば上書き保存完了. これでユーザを追加する準備が整った.

一般ユーザの追加
  初期状態ではルートユーザ,すなわち管理者としてしかログイン出来ない. 管理者としてログインすればシステムへの変更を自由に加えられるが,そのRPiを複数人のユーザと共有する事を考えると自由度が高すぎて危険だ. 誰もが簡単にシステムを変更出来る現状は望ましくないので,一般ユーザを追加し,そこからRPiの機能を利用するようにする.
useradd -m ユーザ名
"ユーザ名"のところは好きな名前にする. これで"ユーザ名"の名前で一般ユーザが追加される.
passwd ユーザ名
と入力すれば"ユーザ名"に対しパスワードを登録することが出来る. このパスワードはログイン時とSUDO実行時に必要となるので忘れないように. なお,"ユーザ名"を省くと現在ログイン中のユーザに対しパスワードを登録することが出来る(この場合root管理者に対して). rootのパスワードが初期値"root"のままではよろしくないので,ここで変更しておこう. 設定を終えたら,
gpasswd -a ユーザ名 wheel
としてグループに追加する. これで設定したユーザ名からsudoを利用できるようになった.
logout
コマンドで現在使用中のユーザ(ルート)からログアウトする. SSH接続も切れるので,
ssh ユーザ名@alarmpi.local
で再接続をしよう. ここで先ほど設定したパスワードを入力すれば,"ユーザ名"としてログイン出来る.

  ちなみに,"alarmpi.local"の部分をホスト名と呼ぶ. このホスト名はRPi上で,
sudo nano /etc/hostname
と入力することで編集出来る. ルート(管理者)としてログインしたのならば行頭の"sudo"は必要ない. 一般ユーザならば"sudo"も入力,実行前にパスワードの入力を促されるので登録したパスワードを入力する. SUDOの効力により今だけ管理者と同等の権力を与えられ,ホスト名"alarmpi.local"の.local以前を好きな文字列へ変更出来る. 変更したらCtrl+Xで上書き保存しsudo rebootする. 変更後にSSH接続する際は,
ssh ユーザ名@ホスト名.local
と入力する. なお,ホスト名は他のネットワーク機器と同じにならないように注意する.
  ホスト名を変更した後にSSH接続を試みると"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"と警告されることがある. これはRPiの識別子(公開鍵)が何かをきっかけに変わってしまった場合に表示される. 識別子が違うからもしかすると間違ったサーバーに接続しているんじゃないの?というお知らせだ. 接続先が間違いなく自分のRPiであるならば,まず " ssh-keygen -R ホスト名 " とコマンドを入力して古い識別子を削除(Remove)し,もう一度接続を試みてみよう. うまく行くかもしれない.
今後は特別な理由が無い限り,今追加した一般ユーザとしてログインするように心がけよう.

Wi-Fi接続セットアップ(任意)
  見出しにあるように,この項目は任意である. RPiにはWi-Fiアンテナが内蔵されていないので,Wi-Fi接続したい場合はUSB接続のWi-Fiドングルを別途購入する必要がある(Amazonを見る). しかし,USBドングルを接続するだけでLANケーブルを張り巡らさずに済むのはありがたい. では順序良く. Wi-FiドングルをUSBポートへ接続してからLANケーブルを接続,そしてRPiの電源を入れよう. この時点ではまだ有線LANしか機能していないので,LANケーブル経由でSSH接続する.
sudo wifi-menu -o
(最後の-oは小文字のオー)と入力すると接続されているWi-Fiドングルを認識して,近くのWi-Fiスポットを探してくれる. もしお望みのWi-Fiスポットが一覧に表示されない場合はWi-Fiルータ(アクセスポイント)の設定がブロードキャストに成っているかを確認しよう. 十字キーで接続したいSSID(電波の名前)を選択してEnterを押下,プロファイル名はデフォルトwlan0-SSID(SSIDの部分は接続したWi-Fiスポット名)のままでOK. パスワードが設定されているWi-Fiスポットへ接続している場合は続けてそのパスワードも入力する. アクセスランプ付きのWi-Fiドングルなら,この時点でランプが点滅するはず. これで"wlan0-SSID"という名前のプロファイル(設定情報)が作成される. この段階ではまだ有線LANでSSH接続しているので,LANケーブルはまだ抜かないように.
sudo netctl start wlan0-SSID
でWi-Fi通信を確立できる. また,
sudo netctl enable wlan0-SSID
とすることで次回起動時からWi-Fi通信が自動的に確立されるように成る. これで
sudo reboot
すればWi-Fiドングル経由でネットワークへ接続されるので,以後LANケーブルを抜いてもSSH接続できるようになる. ここまで来るとRPiには電源ケーブル(USB)しか接続されていない状態になる. スマートフォン充電用バッテリーを電源代わりに利用すれば,完全に独立したシステムと成るので空間的な自由度はより一層高まる.

Motion
7437329843775315214 http://www.storange.jp/2014/05/raspberry-pi-archlinux.html http://www.storange.jp/2014/05/raspberry-pi-archlinux.html Raspberry Pi - ArchLinuxセットアップガイド 2014-05-03T16:01:00+09:00 http://www.storange.jp/2014/05/raspberry-pi-archlinux.html Hideyuki Tabata 200 200 72 72