読者です 読者をやめる 読者になる 読者になる

黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

Raspberry Piにpidoraインストールして、ついでに無線LANを有効にしてみる。

Raspberry Pi

ついに買っちゃったRaspberry Pi

ずーっと欲しいと思ってたのですが、先週の土日に思い立ってポチっちゃいました。
RSオンラインではないのでちょっと割高でしたが…

Type-Bを買ったので、さっそくOSインストール。

OSインストールあれこれ

巷ではRaspbianをインストールされている方が多いようですが、RedHatCentOSFedoraな私は、パッケージ管理も黄色いお猿さんにお願いしたいのでFedoraの派生ディストリビューションであるpidoraをインストールしてみました。

Raspberry PiにはHDDとか記憶領域はSDカードを挿すことで実現します。
とりあえず、以下のことを実施しました。

困った無線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

成功するようであれば、上記コマンドをバックグラウンドで実行した状態dhcpIPアドレスをもらいます。

#  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に参加してくれました。。。長かった。