Raspberry Piにpidoraインストールして、ついでに無線LANを有効にしてみる。
ついに買っちゃったRaspberry Pi
ずーっと欲しいと思ってたのですが、先週の土日に思い立ってポチっちゃいました。
RSオンラインではないのでちょっと割高でしたが…
Type-Bを買ったので、さっそくOSインストール。
OSインストールあれこれ
巷ではRaspbianをインストールされている方が多いようですが、RedHatでCentOSでFedoraな私は、パッケージ管理も黄色いお猿さんにお願いしたいのでFedoraの派生ディストリビューションであるpidoraをインストールしてみました。
Raspberry PiにはHDDとか記憶領域はSDカードを挿すことで実現します。
とりあえず、以下のことを実施しました。
- pidoraのimgファイルを入手
- win32diskimagerでSDカードにpidoraを突っ込む
- microUSB給電につないで初期設定します。キーボードがUS配列でちょっとあれです。
- runlevel3で立ち上げるために
/lib/systemd/system/runlevel3.target
のシンボリックリンクを/etc/systemd/system/default.target
として張る。
困った無線LAN
以前の記事でも書きましたが、我が家のネット回線はwimaxのみです。
加えて引っ越し目前ということもありLANケーブルを全て廃棄してしまっていました。もう無線LANで使うしかありません。義務です。
昔ならいざ知らず、現代のLinuxディストリビューションならアダプタに何を使ってもドライバ関連の問題は起きないだろうと高をくくってIO-DATAの無線LANアダプタ(WN-G150UM)を買ってきました。
隣においてあったBUFFALOにしておけば苦しむこともなかったみたいですが、当たり前のように無線LANアダプタ様を認識してくれません。
... Bus 001 Device 005: ID 04bb:094c I-O Data Device, Inc.
I-O Dataの何かは刺さってるよ?で?状態になってしまっておるようです。
絶望しか感じませんが、世の中には神様がたくさんいらっしゃるのようです。
WN-G150UMを使うためには、
- 「8192cu」というドライバを使う。
- ベンダIDは「04bb」
- デバイスIDは「094c」
とのことです。
まずは8192cuをmodprobeするように以下。
# vi /etc/udev/rules.d/network_drivers.rules ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04bb", ATTR{idProduct}=="094c", RUN+="/sbin/modprobe -qba 8192cu"
次に、ドライバにベンダIDとデバイスIDを突っ込みます。
# vi /etc/modprobe.d/network_drivers.conf install 8192cu /sbin/modprobe --ignore-install 8192cu $CMDLINE_OPTS; /bin/echo "04bb 094c" > /sys/bus/usb/drivers/rtl8192cu/new_id
この後、どうしてもCLIだとうまくできなかったのでGUIからNetworkManagerのお世話になりつつ、無事接続できました。
NetwrokManagerのお世話になり続けるわけにもいかない
別に必要ではないのですが、NetworkManagerのお世話になり続けるのも癪だったので、古き良きnetworkさんにお世話になることにしました。
NW_CONTROLLED
をnoにしたり、service stop NetworkManager
したりしたのですが、このあたり切ってしまうとネットワーク的に死んでしまうことが判明しました。辛い。
service network status
で見てみるとwlan0
はup状態にはなっている様子。
これは認証関連がダメになってしまっているのかしらと、色々調べてみました。
iwconfig wlan0
で見てみると、Access Point
がNot-Asspciatedになっています。
ついでiwlist wlan0 scan
と叩いてみると、繋ぎたいSSIDは見えているようです。WPAでの認証をなんとかしないといけないっぽいみたいです。
WPA/WPA2で認証させてあげる
WPA/WPA2で認証させるためには、wpa_supplicant
を使います。
鍵の情報なりなんなりをファイルに記載しなけらばいけないので、以下。
# wpa_passphrase "接続したいSSID" "そのパスワード" >> /etc/wpa_supplicant/wpa_supplicant.conf # cat /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheel network={ ssid="接続したいSSID" #psk="そのパスワード" psk=暗号化された文字列がぐあーっと。 }
次があまりわからないのですが、以下の通りで良いらしいです。
# vi /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheel network={ ssid="接続したいSSID" key_mgmt=WPA-PSK proto=WPA WPA2 pairwise=CCMP TKIP group=CCMP TKIP WEP104 WEP40 #psk="そのパスワード" psk=暗号化された文字列がぐあーっと。 }
ここまでで問題がなければ、以下のコマンドを実行してテストが成功するはず。
# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -Dwext
成功するようであれば、上記コマンドをバックグラウンドで実行した状態でdhcpにIPアドレスをもらいます。
# dhclient -d wlan0
ifconfig
とか叩いてみると、しっかりIPが振られているかと思います。
wpa_supplicantの設定ファイルを編集する
/etc/sysconfig
配下のwpa_supplicant
というファイルを以下の通りにしました。
# Use the flag "-i" before each of your interfaces, like so: # INTERFACES="-ieth1 -iwlan0" INTERFACES="-i wlan0" # Use the flag "-D" before each driver, like so: # DRIVERS="-Dwext" DRIVERS="-Dwext" # Other arguments # -u Enable the D-Bus interface (required for use with NetworkManager) # -f Log to /var/log/wpa_supplicant.log # -P Write pid file to /var/run/wpa_supplicant.pid # required to return proper codes by init scripts (e.g. double "start" action) # -B to daemonize that has to be used together with -P is already in wpa_supplicant.init.d OTHER_ARGS="-u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid"
wpa_supplicantを自動起動するように設定する
ここが一番ハマったのですが、systemdを採用しているpidoraでは一部のサービスしかchkconfig
が使えないようです。
systemctl enable
で自動起動を有効にできるようなのですが、wpa_supplicant.service
では何故か起動に失敗してしまいます。
じゃあ/etc/rc.d/rc.local
に以下を書いて、raspi起動時に起きてもらえるようにすればいいんじゃね?と思い立ちます。
#!/bin/sh systemctl start wpa_supplicant.service ifup wlan0
が、どうにも起動時にrc.localが読み込まれていない様子。
rc.localについて全く無知な私ですが、調べてみれば出てくるようで、systemdではrc-local.service
が用意されています。
(systemdで使用されているファイルは/etc/systemd/system配下にあって、設定の書き方もあるっぽいので、また後日調べたい。願望。)
このrc-local.service
を自動起動するようにしてあげて、raspiを再起動すると、ちょっと時間はかかりますが無事自動的に無線LANに参加してくれました。。。長かった。