ochalog

RubyとMediaWikiとIRCが好き。

Raspberry Pi: Arch Linux の初期設定(SSH 接続まで)

f:id:ochaochaocha3:20140419181601j:plain

Amazon で頼んでいたかわいい Raspberry Pi のケースが届いたので、早速装着。基板をはめ込んでネジで止めるだけなのでとっても楽。

Raspberry Pi用ケース(ラズベリー色)

Raspberry Pi用ケース(ラズベリー色)

箱に収まったので、セットアップを始めた。

今回の目標

Raspberry Pi で Arch Linux を動かし、

  • NAS
  • DNS サーバー
  • HTTP サーバー
    • Rack アプリを動かせる

といった役割を持たせられたらいいな、と今のところ構想中。

SD カードの準備

家にあった 4 GB の SD カードを使うことにした。

Mac

Mac 上で SD カードの準備を行った。

まず、「Raspberry Pi | Arch Linux ARM」から SD カードのイメージファイルをダウンロードし、解凍した(ここでは ~/Documents/ArchLinuxARM-2014.04-rpi.img)。

SD カードを挿し、アイコンが出たら df で場所を調べた。その結果を使ってアンマウントした。

sudo diskutil unmount /dev/disk3s1

dd でイメージを SD カードに書き込んだ。書き込み先が /dev/rdiskX であることに注意。少し時間がかかるので、気長に待つ。

sudo dd bs=1m if=~/Documents/ArchLinuxARM-2014.04-rpi.img of=/dev/rdisk3

書き込みが終わるとデスクトップにアイコンが現れるので、Finder で開いてみる。ファイルがあるのを確認して、取り出した。

Windows

らぁさん@raa0121)から 「Windows 向けのこともチラッとよろしく」とコメントをいただいたので追記。

  1. Mac と同様に「Raspberry Pi | Arch Linux ARM」から SD カードのイメージファイルをダウンロードし、適当な場所に解凍する。
  2. Win32DiskImager」をインストールする。
  3. Win32DiskImager を使って SD カードにイメージを書き込む。

という手順でいけるらしい。

[Raspberry Pi]SDカードのディスクイメージを複製する | iPhoneAppはじめました」の「書き込み編(.img -> SDカード)」までが分かりやすい。

Raspberry Pi の電源を入れる

準備した SD カードと USB キーボード、ディスプレイ(HDMI ケーブルで)、LAN ケーブルを接続した後、スマホ用充電器をつないで電源を入れた。Gentoo のときのように文字がずらずら出て、あっという間に(CUI の)ログイン画面に。あまりにも簡単で思わず「すげぇ」と叫んでしまった(笑)

ユーザー名、パスワードとも root でログインした。

既存のパッケージの更新

まずインストールされているパッケージを最新の状態に更新した。カーネルの更新も含まれていたので、再起動した。

pacman -Syu # やや時間がかかる
reboot

ネットワークの設定

参考:netctl (日本語) - ArchWiki

LAN 内でサーバーとして使いたいので、IP アドレスを固定することにした。他のブログでは netcfg で設定する例が多く出ていたが、今は後継の netctl が標準で入っているので、そちらで設定すれば良い。

まず ifconfigeth0 の netmask を確認した。うちでは 255.255.240.0(CIDR では /20)とちょっと変えてあったので、これをメモ。もちろん環境によって変わる。

これをもとにプロファイルを作る。もともとあった eth0eth0_dhcp にリネームし、固定 IP アドレスのプロファイル eth0_static を作った。

cd /etc/netctl

mv eth0 eth0_dhcp
cp examples/ethernet-static eth0_static

vi eth0_static
# サンプルファイルを書き換える
# Address=('192.168.1.100/20')
# と設定した

このままでは初期設定である動的 IP アドレスのプロファイルと衝突してしまうので、それを無効化して作ったプロファイルを有効化した。

systemctl | grep netctl
# netctl-ifplugd@eth0.service というものが表示された。
# これが初期設定のプロファイル。
systemctl disable netctl-ifplugd@eth0.service
netctl enable eth0_static

再起動して確認する。うまく設定されていないときは、journalctl -xn でログを見る。自分は上記の衝突の件で苦労した。

reboot

# ログイン後
ifconfig
# eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
#         inet 192.168.1.100  netmask 255.255.240.0  broadcast 192.168.15.255

ホスト名の設定

参考:Network Configuration (日本語)#ホストネームの設定 - ArchWiki

hostnamectl でホスト名を設定した。

hostnamectl set-hostname rpi

/etc/hosts にもホスト名を追加した。

#<ip-address>   <hostname.domain.org>   <hostname>
127.0.0.1       localhost.localdomain   localhost       rpi
::1             localhost.localdomain   localhost       rpi

SD カードの全容量を使えるようにする

参考:Arch Linux on Raspberry Pi - daimatz.hateblo.jp

イメージの都合上、SD カード上のパーティションは 2 GB しかない。容量いっぱいまで使えるようにした。

この作業で失敗すると最初からやり直しになる可能性がある。慎重に作業しましょう。ちなみに私は一度早とちりで失敗し、SD カード作り直しになってしまった(><)

パーティション操作は fdisk で行う。

fdisk /dev/mmcblk0

p コマンドでパーティションテーブルを表示する。後で使うため、パーティション 2(/dev/mmcblk0p2)とパーティション 5(/dev/mmcblk0p5)の開始位置を正確にメモする。自分の環境では以下の通りだった。

Device Start
/dev/mmcblk0p2 186368
/dev/mmcblk0p5 188416

以下の手順でパーティション操作を行った。

  1. d コマンドでパーティション 2 を削除した。
  2. n コマンドで、拡張パーティション(extended)としてパーティション 2 を作った。開始位置は上記 /dev/mmcblk0p2 と合わせ、大きさは最大(両方とも標準のまま)にした。
  3. n コマンドで、論理パーティション(logical)としてパーティション 5 を作った。開始位置は上記 /dev/mmcblk0p5 と合わせ、大きさは最大(両方とも標準のまま)にした。

最後に p コマンドでパーティションテーブルを表示し、パーティションの開始位置が変更されていないことを確認した。変更されていたら q コマンドで変更を破棄し、やり直すこと

問題がないのを確認して w コマンドで変更を書き込んだ。警告メッセージが出たので、指示通り reboot で再起動した。無事再起動できたら、パーティション操作は成功。

ログイン後、ファイルシステムの大きさを調整した。

resize2fs /dev/mmcblk0p5

調整が終わったら、

df -h

/dev/root の容量が増えていることを確認した。

Vim のインストール

vi での設定ファイルいじりが大変そうだったので、Vim をインストールした。

pacman -S vim

.vimrc 等の設定はまた後で。

sshd の設定

root でのログインを無効にする。Vim/etc/ssh/sshd_config を編集し、

PermitRootLogin no

とした。

sudo の設定

sudo をインストールした。

pacman -S sudo

wheel グループが sudo を使えるようにする。visudo を実行し、以下のようにコメントを解除した。

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

一般ユーザーの追加

sudo できるユーザーを追加した。以降はこのユーザーで操作することにする。

useradd -m ochaochaocha3
passwd ochaochaocha3 # ここでパスワード設定
gpasswd -a ochaochaocha3 wheel

ここまでやったら

他の PC から

ssh ochaochaocha3@192.168.1.100

として SSH 接続できるようになった。

次の記事:

ochaochaocha3.hateblo.jp