2018年5月5日追記: Shairport の派生バージョンの shairport-sync で AirPlay 環境を構築する場合はこちら
前回の記事でRaspberry Pi本体と周辺機器がそろったので、次はRaspberry PiにOSをインストールして、各種設定を進めて行きます。
SDカードにOSを焼く
参考サイトの手順の通りなんだけど、メモなので順番に書いて行きます。
私の環境
Mac OS 10.9(Marvericks)
OSイメージのダウンロード
下記URLよりOSイメージをダウンロードします。
Downloads | Raspberry Pi
http://www.raspberrypi.org/downloads
OSは「Raspbian」です。
とりあえず初心者は「Raspbian」を使っておけばいいらしいです。
「NOOBS (offline and network install)」はウィザードみたいな感じでOSを選択してインストールできるらしいんだけど、インストールするOSが決まっているなら、普通に「Raspbian」をダウンロードしてSDカードに焼けばいいらしい。
ダウンロードには少し時間がかかった。
(多分10分くらい。)
ダウンロードしたzipを解凍すると「2014-01-07-wheezy-raspbian.img」になる。
SDカードにOSを焼く
SDカードに「焼く」って表現が正しいかはわからないけど、単純にコピペしただけじゃOSが起動しないっぽいから、「焼く」なんだと思う。
SDカードにOSを焼くのは専用のツールがあるみたい。
便利ねー。
下記URLから「RPi-sd card builder」(執筆時のバージョンは「v1.2」)をダウンロード。
SD card setup – Raspberry Pi – Mac | All the (*)Ware
http://alltheware.wordpress.com/2012/12/11/easiest-way-sd-card-setup/
解凍すると「RPi-sd card builder v1.2.app」になる。
ちなみに、ファイルのホストサーバー(MEGA)がSafariだと動かないっぽい。
実際、私の環境(Mac OS 10.9 + Safari 7)では、ダウンロードファイルが壊れていたので、Firefoxでダウンロードし直した。
OSのインストール
- 「RPi-sd card builder v1.2.app」を起動
- ファイル選択画面になって「Choose Image File (.img)」と表示されるので、先ほどダウンロード&解凍した「2014-01-07-wheezy-raspbian.img」を選択する
- 「SD CARD CONNECTED?」という画面が表示されるので、SDカードをMacに挿入して「Continue」をクリック
- SDカードを選択する画面になるので、OSを焼くSDカードにチェックを入れて「OK」をクリック
- パスワード入力を求められるので、Macのユーザーのパスワードを入力して「OK」をクリック
- 「SC CARD EJECTED?」という画面が表示されるので、「Continue」をクリック
- 2分半ほど待つ。この間、特に何も画面上の動きは無いので、ただ待つだけ。
- 「COMPLETE」という画面が表示されたら、完了。
- MacからSDカードを抜いて、Raspberry Piに刺す。
OSのインストールと初期設定
Raspberry PiにSDカード、USB無線LAN、USBハブ、USBキーボード、USBマウスを刺して、microUSB電源を刺して、電源を入れる。
(電源ボタンは無いので、電力が供給されると自動的に電源が入る。)
以下、初期設定の内容。
- 1. Expand Filesystem
- SDカードの保存領域を全部使うようにするための設定らしい。ここで設定しないと2GB分しか使うことができないらしい。特に理由がなければ「Enter」を実行。
- 2. Change User Password
- 「root」以外に「pi」というユーザーが作られるので、そのユーザーのパスワード。初期設定は「raspberry」。
- 私は変更しなかった。
- 4. Internationalisation Options
- 地域設定や言語設定。日本語で使いたいので変更する。
- 「I1 Change Locale」を選択して「Enter」
- 「en_GB.UTF-8 UTF-8」のチェックを外す
- シフトボタンでチェックのオンオフができる
- 「ja_JP.UTF-8 UTF-8」にチェックを入れて「Enter」
- 「Configuring locales」の画面では「ja_JP.UTF-8」を選択して「Enter」
- 「en_GB.UTF-8 UTF-8」のチェックを外す
- 「I2 Change Timezone」を選択して「Enter」
- 「Asia」を選択して「Enter」
- 「Tokyo」を選択して「Enter」
- 「I3 Change Keyboard Layout」を選択して「Enter」
- 「Generic 105-key (Intl) PC」を選択して「Enter」
- 「Other」を選択して「Enter」
- 「Japanese」を選択して「Enter」
- 「Japanese」を選択して「Enter」
- 「The default for the keyboard layout」(始めから選択されている)を選択して「Enter」
- 「No compose key」(始めから選択されている)を選択して「Enter」
- 「Configuring keyboard-configuration」の画面では「No」(始めから選択されている)を選択して「Enter」
- 「Finish」を選択して「Enter」
- 「Would you like to reboot now?」の画面では「Yes」を選択して「Enter」
ここで一旦再起動。
無線LANの設定
- 「ユーザ名: pi」「パスワード: raspberry」でログイン
- 「startx」でX Windowを起動
- デスクトップの「Wifi Config」アイコンをダブルクリック
- 無線LANをよしなに設定
ステルスモードのアクセスポイントに接続しようとして結構手間取って、結局できなかったので、アクセスポイントのステルスモードを止めた。ステルスモードのアクセスポイントに簡単に接続する方法を誰か教えてくださいm(_ _)m
apt-get update、apt-get upgrade
デスクトップの「LXTerminal」アイコンをダブルクリックして、ターミナルを開いて、下記コマンドを実行。
$ sudo apt-get update
$ sudo apt-get upgrade
avahi-daemonの設定
「xxx.local」というホスト名でMacにアクセスできたり、自動的にネットワーク上のPCが参照できたりする「Bonjour」に対応させる。
まずはavahi-daemonのインストール。
$ sudo apt-get install avahi-daemon
次にホスト名を付ける。
$ sudo vi /etc/hostname
tagawa-raspberrypi # ホスト名はよしなに
/etc/hostsも編集する。
$ sudo vi /etc/hosts
127.0.1.1 tagawa-raspberrypi # /etc/hostnameと同じ名称に変更
とりあえずSSHのavahiサービスを作る。
udisks.serviceというサービスが始めからあるので、それをコピーして作ることにする。
$ sudo cp /etc/avahi/services/udisks.service /etc/avahi/services/ssh.service
$ sudo vi /etc/avahi/services/ssh.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<!-- This file is part of udisks -->
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
avahi-daemonを再起動。
$ sudo /etc/init.d/avahi-daemon restart
ホスト名を変更すると「sudo: ホスト raspberrypi の名前解決ができません」って言われるけど、一旦無視して作業を進める。
ここで再起動するので、多分、名前解決の件は再起動後に直ってると思う。
$ sudo reboot
再起動したら、MacからSSH接続できるか確認する。
$ ssh pi@tagawa-raspberrypi.local
接続できたら、モニター、USBキーボード、USBマウスはしばらくいらないので取り外す。
以降の作業はMacから行う。
参考
Avahi – Wikipedia
http://ja.wikipedia.org/wiki/Avahi
Bonjour – Wikipedia
http://ja.wikipedia.org/wiki/Bonjour
Raspberry Pi(Raspbian)にmDNSを設定する – ぱせらんメモ
http://d.hatena.ne.jp/pasela/20131023/mdns
VNCサーバーの設定
私はLinuxコマンド力が弱いので、VNCでX Windowが使えるようにしておく。
$ sudo apt-get install tightvncserver
tightvncserverを起動する。
$ tightvncserver
You will require a password to access your desktops.
Password: # パスワードを入力
Warning: password truncated to the length of 8.
Verify: # パスワードを入力
Would you like to enter a view-only password (y/n)? n # view-onlyを使いたい場合は「y」
New 'X' desktop is tagawa-raspberrypi:1
Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/tagawa-raspberrypi:1.log
このままだと「tightvncserver」は自動実行されないので、自動実行スクリプトを作成する。
スクリプトは参考サイトからコピペさせていただきました。(解像度の部分だけ一部修正)
(http://elinux.org/RPi_VNC_Server#Run_at_boot のほうのスクリプトだと、rootユーザーのVNCサーバーを起動しようとしているっぽくて、うまく動かなかった。)
$ sudo vi /etc/init.d/vncboot
### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO
#! /bin/sh
# /etc/init.d/vncboot
USER=pi
HOME=/home/pi
export USER HOME
case "$1" in
start)
echo "Starting VNC Server"
#Insert your favoured settings for a VNC session
su $USER -c '/usr/bin/vncserver :1 -geometry 800x600 -depth 24'
;;
stop)
echo "Stopping VNC Server"
su $USER -c '/usr/bin/vncserver -kill :1'
;;
*)
echo "Usage: /etc/init.d/vncboot {start|stop}"
exit 1
;;
esac
exit 0
実行権限を付与。
sudo chmod 755 /etc/init.d/vncboot
自動実行するように設定。
$ sudo update-rc.d vncboot defaults
再起動。
$ sudo reboot
再起動後にVNCサーバーの起動を確認。
$ ps -ef | grep tightvnc | grep -v grep
pi 2215 1 0 00:45 ? 00:00:01 Xtightvnc :1 -desktop X -auth /home/pi/.Xauthority -geometry 800x600 -depth 24 -rfbwait 120000 -rfbauth /home/pi/.vnc/passwd -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb
avahiのサービスを作成。
(先に作ったSSHのサービスをコピーして作る。)
$ sudo cp /etc/avahi/services/ssh.service /etc/avahi/services/vnc.service
$ sudo vi /etc/avahi/services/vnc.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<!-- This file is part of udisks -->
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_vnc._tcp</type>
<port>5901</port>
</service>
</service-group>
avahi-daemonを再起動。
$ sudo /etc/init.d/avahi-daemon restart
MacからのVNC接続は「Finder -> メニュー -> 移動 -> サーバへ接続」でサーバー接続ウィンドウを開いて、「vnc://tagawa-raspberrypi.local:5901」を入力して「接続」ボタンをクリックすると、接続される。
接続後の画面はこんな感じ。
参考
Raspberry Piで遊ぼう [No.5:VNC接続をしよう]:アシマネのドタバタ奮闘日記:So-netブログ
http://assimane.blog.so-net.ne.jp/2013-03-27
RPi VNC Server – eLinux.org
http://elinux.org/RPi_VNC_Server
USBサウンドカードの設定
USBサウンドカードを接続して、「aplay」コマンドを実行して認識されているかを確認する。
$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
サブデバイス: 7/8
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
サブデバイス #7: subdevice #7
カード 1: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
「alsamixer」コマンドも実行してみる。
(参考サイトに掲載されているまま実行しているだけなので、「alsamixer」コマンドで何ができるのかよくわかっていません…。)
$ alsamixer
こんな画面は初めて見たので、ちょっと新鮮。
続いて、音声出力の設定を変更して、起動時にはUSBサウンドカードが優先されるようにする。
$ sudo vi /etc/modprobe.d/alsa-base.conf
#options snd-usb-audio index=-2
# 上記行をコメントアウト
AirPlayの設定
参考サイトの通りなんですが、メモなので順番に書いていきます。
まず、必要なライブラリをインストール。
$ sudo apt-get install -y libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils libmodule-build-perl
perl-net-sdpをクローンしてくる。
$ git clone https://github.com/njh/perl-net-sdp.git
Cloning into 'perl-net-sdp'...
remote: Reusing existing pack: 193, done.
remote: Total 193 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (193/193), 40.48 KiB, done.
Resolving deltas: 100% (83/83), done.
perl-net-sdpをビルド。
$ cd perl-net-sdp
$ perl Build.PL
WARNING: the following files are missing in your kit:
Makefile.PL
META.yml
Please inform the author.
Created MYMETA.yml and MYMETA.json
Creating new 'Build' script for 'Net-SDP' version '0.07'
WARNINGって言われてるけど、気にしないでおく。
引き続きビルドの実行とインストール。
$ sudo ./Build
Building Net-SDP
$ sudo ./Build test
t/00use.t ....... ok
t/10generate.t .. ok
t/10parse.t ..... ok
t/20repeat.t .... ok
t/30asstring.t .. ok
All tests successful.
Files=5, Tests=69, 4 wallclock secs ( 0.82 usr 0.04 sys + 3.11 cusr 0.12 csys = 4.09 CPU)
Result: PASS
$ sudo ./Build install
Building Net-SDP
Installing /usr/local/man/man1/sdp2rat.1p
Installing /usr/local/share/perl/5.14.2/Net/SDP.pm
Installing /usr/local/share/perl/5.14.2/Net/SDP/Media.pm
Installing /usr/local/share/perl/5.14.2/Net/SDP/Time.pm
Installing /usr/local/man/man3/Net::SDP.3pm
Installing /usr/local/man/man3/Net::SDP::Media.3pm
Installing /usr/local/man/man3/Net::SDP::Time.3pm
Installing /usr/local/bin/sdp2rat
インストールできたっぽい。
perl-net-sdpを削除する。
$ cd ../
$ sudo rm -rf perl-net-sdp
shairportをクローンしてくる。
(どうやらこのshairportっていうのがAirPlayの機能で、上記まではそれを動作させるための準備だったっぽい。)
$ git clone https://github.com/hendrikw82/shairport.git
Cloning into 'shairport'...
remote: Counting objects: 697, done.
remote: Compressing objects: 100% (313/313), done.
remote: Total 697 (delta 381), reused 697 (delta 381)
Receiving objects: 100% (697/697), 207.36 KiB | 102 KiB/s, done.
Resolving deltas: 100% (381/381), done.
shairportをインストール。
※2015年3月13日: 間違っていたので修正
$ cd shairport
$ make && sudo make install
cc -O2 -Wall -c alac.c -o alac.o
cc -O2 -Wall -DHAIRTUNES_STANDALONE hairtunes.c alac.o -o hairtunes -lm -lpthread -lssl -lcrypto -lao
cc -O2 -Wall -c socketlib.c -o socketlib.o
cc -O2 -Wall -c shairport.c -o shairport.o
cc -O2 -Wall -c hairtunes.c -o hairtunes.o
cc -O2 -Wall socketlib.o shairport.o alac.o hairtunes.o -o shairport -lm -lpthread -lssl -lcrypto -lao
install -D -m 0755 hairtunes /usr/local/bin/hairtunes
install -D -m 0755 shairport.pl /usr/local/bin/shairport.pl
install -D -m 0755 shairport /usr/local/bin/shairport
shairportを起動する。
$ shairport.pl -a AirPi
AirPiっていうスピーカーが認識されて、iTunes等から選択できるようになる。
音声出力先が増えてる!
iTunesにも音声出力先が増えてる!!
このままだと「shairport」は自動実行されないので、自動起動されるようにする。
$ sudo cp shairport.init.sample /etc/init.d/shairport
$ sudo chmod 755 shairport
$ sudo update-rc.d shairport defaults
スピーカ名を修正。
$ sudo vi /etc/init.d/shairport
#DAEMON_ARGS="-w $PIDFILE"
DAEMON_ARGS="-w $PIDFILE -a AirPi"
# 上記のように修正
Raspberry Piを再起動した後に、AirPiが認識できていればOK。
$ sudo reboot
インストールに利用したshairportは削除しておく。
$ cd
$ rm -rf shairport
以上、Raspberry PiをAirPlay端末にするまでの手順のメモでした。
ここまで書いておいてなんですけど、AirPlayをしたいだけならAirMac Express買ったほうが早いです。
私個人としてはLinuxとRaspberry Piの勉強になったのと、Raspberry Pi自体を持て余していたので、これはこれで良かったんですけども。
Apple AirMac Express ベースステーション MC414J/A