Raspberry Pi 2でiPhoneのUSBテザリングを使う

新しい記事をQiitaに書きました。
Raspberry Pi 2/3/Zero でiPhoneのUSBテザリングを使う

Raspbian jessie を使っています。
iPhoneのUSBテザリングについては以下のページに情報がありますが、この方法ではwheezyではうまくいきましたが、jessieではダメでした。
http://www.daveconroy.com/how-to-tether-your-raspberry-pi-with-your-iphone-5
Raspberry Pi How To: Tether to iPhone 5
でもうまくいく方法を見つけました。

準備。

$ sudo apt-get install ipheth-utils libimobiledevice-utils ifuse usbmuxd
$ sudo mkdir /media/iphone

iPhoneをUSBケーブルでつなぎます。私が試したのはiPhone6

$ sudo ifuse /media/iphone

これでテザリングできるようになります。
iPhoneをつなげたときに、自動でifuseを実行するようにするためには上記のページを参考にしてudevのスクリプトを修正すればよいはずです。

以下はメモ

このページの手順をなぞってみる
Raspberry Pi How To: Tether to iPhone 5

$ sudo apt-get install ipheth-utils libimobiledevice-utils ifuse

ここでiphoneをUSBケーブルでつなぐ。

$ ifconfig -s
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0       344      0      0 0           290      0      0      0 BMRU
lo        65536 0       136      0      0 0           136      0      0      0 LRU

インタフェースが増えてない。

$ dmesg |tail 
[   33.030589] cfg80211: Calling CRDA to update world regulatory domain
[   36.190643] cfg80211: Calling CRDA to update world regulatory domain
[   39.350699] cfg80211: Calling CRDA to update world regulatory domain
[   42.510714] cfg80211: Exceeded CRDA call max attempts. Not calling CRDA
[  306.713474] usb 1-1.5: new high-speed USB device number 4 using dwc_otg
[  306.816790] usb 1-1.5: New USB device found, idVendor=05ac, idProduct=12a8
[  306.816816] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  306.816833] usb 1-1.5: Product: iPhone
[  306.816849] usb 1-1.5: Manufacturer: Apple Inc.
[  306.816866] usb 1-1.5: SerialNumber: 4c6f6a8607e5231b47ae51381dc55f2306b1120e

なんか反応が薄い。ipheth が登録されていない。
手動でmodprobeしてみる。

$ sudo modprobe ipheth
$ dmesg |tail
[   36.190643] cfg80211: Calling CRDA to update world regulatory domain
[   39.350699] cfg80211: Calling CRDA to update world regulatory domain
[   42.510714] cfg80211: Exceeded CRDA call max attempts. Not calling CRDA
[  306.713474] usb 1-1.5: new high-speed USB device number 4 using dwc_otg
[  306.816790] usb 1-1.5: New USB device found, idVendor=05ac, idProduct=12a8
[  306.816816] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  306.816833] usb 1-1.5: Product: iPhone
[  306.816849] usb 1-1.5: Manufacturer: Apple Inc.
[  306.816866] usb 1-1.5: SerialNumber: 4c6f6a8607e5231b47ae51381dc55f2306b1120e
[  432.201372] usbcore: registered new interface driver ipheth
$ ifconfig -s
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0       344      0      0 0           290      0      0      0 BMRU
lo        65536 0       136      0      0 0           136      0      0      0 LRU

まだダメ。udevから起動されるはずの/lib/udev/ipheth-pairを手動で動かしてみる。

$ sudo /lib/udev/ipheth-pair 
/lib/udev/ipheth-pair: -3: cannot get default device

なんかエラーになっているので、straceで見てみる。

$ sudo strace -o /tmp/strace.log /lib/udev/ipheth-pair 
/lib/udev/ipheth-pair: -3: cannot get default device
  ... 
 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 0}, ru_stime={0, 20000}, ...}) = 0
 read(3, "\3351\243}]\325\326\202\231\202\337\211\tX%\2626\6\254\230fMp\261\2507\223\310\373\347E1", 32) = 32
 read(3, "#\246\301a\375\336\247N\177\320\277BzhXQ\\2\264\360\206\262(\254\364<\234\307=A*\317", 32) = 32
 read(3, "\214\316\305\352z\":\345", 8)  = 8
 fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
 futex(0x76f4c3a4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
 stat64("/var/run/usbmuxd", 0x7eeb59c8)  = -1 ENOENT (No such file or directory)
 write(2, "/lib/udev/ipheth-pair: -3: canno"..., 53) = 53
 futex(0x76f4c3a8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
 close(3)                                = 0
 exit_group(-1)                          = ?
 +++ exited with 255 +++

"/var/run/usbmuxd"が無いのが直接の原因。ネットでusbmuxdを検索するとそういうパッケージがあることがわかる。

$ sudo apt-get install usbmuxd

このパッケージがインストールされていなかった。
これでiPhoneを抜いて、挿し直すと

$ ifconfig -s
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0       434      0      0 0           358      0      0      0 BMRU
eth1       1500 0         0      0      0 0             3      2      0      0 BMRU
lo        65536 0       136      0      0 0           136      0      0      0 LRU

eth1ができた。

$ sudo mkdir /media/iphone
$ sudo ifuse /media/iphone

iPhoneの画面に「このコンピュータを信頼しますか?」というダイアログが出ているので、とりあえず「信頼する」のボタンを押す。

$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr d2:4f:7e:c4:26:f7  
          inet addr:172.20.10.3  Bcast:172.20.10.15  Mask:255.255.255.240
          inet6 addr: fe80::d04f:7eff:fec4:26f7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:272 errors:0 dropped:1 overruns:0 frame:0
          TX packets:271 errors:17 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:52399 (51.1 KiB)  TX bytes:39804 (38.8 KiB)

使えるようになった。
要するに、usbmuxd も必要だった。