Raspberry PiでIoTなシステム開発:ワイヤレスアクセスポイントとして動作させるまで

2016/02/08:追記:下記の一連の記事は諸般の事情により奏効しない可能性が高いです。普通に使うのであればこちらの記事を参照してください。Raspberry PiでIoTなシステム開発:ワイヤレスアクセスポイントとして動作させるまで(改訂版)ネットでいくら事前準備をしてもなかなか一筋縄ではいなかいのがこの世界の常。色々引っかかりましたので、メモを残します。Raspberry Piの場合、設定がスムーズに行くワイヤレスアダプタを使うのが安全です。が、色々と試して見て、起動が安定するのがWN-G150UMだったという過去の経験から、今回もこれを使うことにします。まずPiの最初にすることの定番作業として、アップデートをかけます。sudo apt-get updatesudo apt-get upgradeファイルシステムのサイズがSDにあっていないので拡張します。df -hsudo raspi-configから、expand filesystemを実行。localeは変更しません。timezoneをtokyoに設定。各種記事からするとavahiをインストールするのが定番のようですが、サービスログから割り当てIPがわかるので、サービスを減らす観点から、今回は止めておきます。起動安定化のため/boot/config.txtsafe_mode_gpio=4max_usb_current=1WN-G150UMはドライバの追加インストールは不要だが、デバイスIDの指定が必要ということなので設定ファイルに追記。http://marm.cocolog-nifty.com/jokanaan/2012/12/wn-g150um-on-ra.htmlpi@navio-rpi ~ $ sudo vi /etc/udev/rules.d/network_drivers.rulesACTION==””add””,SUBSYSTEM==””usb””, ATTR{idVendor}==””04bb””, ATTR{idProduct}==””094c””, RUN+=””/sbin/modprobe -qba 8192cu””pi@navio-rpi ~ $ sudo vi /etc/modprobe.d/network_drivers.confinstall 8192cu /sbin/modprobe –ignore-install 8192cu $CMDLINE_OPTS; /bin/echo “”04bb 094c”” > /sys/bus/usb/drivers/rtl8192cu/new_idアクセスポイント化する前にとりあえずクライアントとしてつながるかどうかを確認。pi@navio-rpi ~ $ sudo nano /etc/network/interfacesauto loiface lo inet loopbackiface eth0 inet dhcpauto wlan0iface wlan0 inet dhcpwpa-conf /etc/wpa_supplicant/wpa_supplicant.confpi@navio-rpi ~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.confctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1# Default networknetwork={ssid=””apname””psk=””hogehoge””}IP取れました。pi@navio-rpi ~ $ ifconfigeth0 Link encap:Ethernet HWaddr b8:27:eb:f6:3c:22inet addr:192.168.2.3 Bcast:192.168.2.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:3173 errors:0 dropped:0 overruns:0 frame:0TX packets:1988 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:230514 (225.1 KiB) TX bytes:429332 (419.2 KiB)lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:37 errors:0 dropped:0 overruns:0 frame:0TX packets:37 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:4312 (4.2 KiB) TX bytes:4312 (4.2 KiB)wlan0 Link encap:Ethernet HWaddr 34:76:c5:5d:34:91inet addr:192.168.0.108 Bcast:192.168.0.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:140 errors:0 dropped:345 overruns:0 frame:0TX packets:27 errors:0 dropped:1 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:186351 (181.9 KiB) TX bytes:4399 (4.2 KiB)インターフェースを再起動してつながるか再確認。pi@navio-rpi ~ $ sudo ifdown wlan0pi@navio-rpi ~ $ sudo ifup wlan0pingコマンドはインターフェースを指定できます。pi@navio-rpi ~ $ ping -I wlan0 192.168.0.1同じネットワークにつながっているMacからルーター経由でのpingも通りました。kawauchiyasuo-no-MacBook-Pro:~ yasuo$ ping 192.168.0.108PING 192.168.0.108 (192.168.0.108): 56 data bytesRequest timeout for icmp_seq 0Request timeout for icmp_seq 164 bytes from 192.168.0.108: icmp_seq=2 ttl=64 time=20.403 ms64 bytes from 192.168.0.108: icmp_seq=3 ttl=64 time=4.651 msルーター化のためには8192cuに対応したhostapdをインストールする必要があるらしいです。僕はこの「8192cu対応hostapd」をインストールするだけで良いと思っていて色々手こずったのですが、実際には、公式のhostapdをインストールして本体のバイナリだけ入れ替えるという作業が正しいようです。ドライバもコンパイルする必要があるという情報もありましたが、コンパイルが通りませんでしたし、とりあえずOSに付いている奴で動きました。そのため以下のブラックリスト登録は行っていません。echo “”blacklist rtl8192cu”” >> /etc/modprobe.d/blacklist.confpi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911 $ sudo apt-get install hostapdRealtekのダウンロードサイトでダウンロードしたパッケージをSFTPでホームにアップロードしておきます。pi@navio-rpi ~ $ ls0001-RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip深めの階層にありますので降りていってmakeします。pi@navio-rpi ~ $ cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/pi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911 $ cd wpa_supplicant_hostapd/pi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd $ tar zxvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gzpi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd $ cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/pi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812 $ lsCOPYING README hostapd src wpa_supplicantpi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812 $ cd hostapd/pi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ make出来上がったものをコピー。実際には間違って/usr/sbinにもコピーしてしまいました。pi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ sudo cp hostapd hostapd_cli /usr/local/sbin/設定ファイルの作成。ディレクトリの作成あたりは本家パッケージをインストールして入れば不要かもしれません。pi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ sudo mkdir /etc/hostapdpi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ sudo touch /etc/hostapd/hostapd.confpi@navio-rpi ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ sudo nano /etc/hostapd/hostapd.confssid=piinterface=wlan0driver=rtl871xdrvhw_mode=gchannel=6# 0 = allowed if not in deny listmacaddr_acl=0hw_mode=gwpa=2wpa_passphrase=raspberrywpa_key_mgmt=WPA-PSKwpa_pairwise=CCMPrsn_pairwise=TKIPmax_num_sta=8wpa_group_rekey=86400auth_algs=1ignore_broadcast_ssid=0wlan0に固定IPを割り当て。pi@navio-rpi ~ $ sudo nano /etc/network/interfacesauto loiface lo inet loopbackiface eth0 inet dhcpauto wlan0iface wlan0 inet staticaddress 192.168.10.1netmask 255.255.255.0hostapdの起動に先立ちWPASupplucantを停止しておく必要がある模様。sudo mv /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service ~/ここでhostapdを起動するとwlan0に割り振られているIPが無くなるという問題発生。以下の設定変更でifplugdの挙動を変更して、eth0に限定する。/etc/default/ifplugd変更前INTERFACES=””auto””HOTPLUG_INTERFACES=””all””ARGS=””-q -f -u0 -d10 -w -I””SUSPEND_ACTION=””stop””変更後INTERFACES=””eth0″”HOTPLUG_INTERFACES=””eth0″”ARGS=””-q -f -u0 -d10 -w -I””SUSPEND_ACTION=””stop””起動。-ddでログが多くなります。この時点で他の無線LANデバイスから見えるようになります。DHCPがまだですが固定IPなら接続可に。スクリプトから起動しないとダメという情報もありましたが動いています。sudo hostapd /etc/hostapd/hostapd.conf -ddpi@navio-rpi ~ $ ps ax | grep hostapdデーモンにするための設定。pi@navio-rpi ~ $ sudo nano /etc/default/hostapdDAEMON_CONF=””/etc/hostapd/hostapd.conf””クライアントに都度固定IPを割り振るのは面倒なのでDHCPサーバーをインストールpi@navio-rpi ~ $ sudo apt-get install isc-dhcp-serverこの時点では設定ファイルができていないので起動に失敗するのでは無いかと思います。あと、適用する先のインターフェースにipが設定されていない場合やはり起動に失敗します。サーバー動作させる対象のインターフェースを指定pi@navio-rpi ~ $ sudo nano /etc/default/isc-dhcp-serverINTERFACES=””wlan0″”DHCPサーバーの動作設定pi@navio-rpi ~ $ sudo nano /etc/dhcp/dhcpd.conf以下コメントアウト。#option domain-name “”example.org””;#option domain-name-servers ns1.example.org, ns2.example.org;以下追記ping-check true;subnet 192.168.10.0 netmask 255.255.255.0 {option routers 192.168.10.1;option broadcast-address 192.168.10.255;option subnet-mask 255.255.255.0;option domain-name “”local””;option domain-name-servers 8.8.8.8,8.8.4.4;default-lease-time 600;max-lease-time 7200;range 192.168.10.101 192.168.10.199;}不安定問題はまだ発生していないのですが、もし発生するようならpower managementのオフを設定します。http://unix.stackexchange.com/questions/64392/intermittent-ping-times-on-a-raspberry-pi-wifi-access-point今回の用途はクライアントをインターネットに出さないので、ルーターとしての設定は行いません。再起動後wifiクライアントから接続できれば成功と。”””

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です