u-ryo's blog

various information for coding...

Author: U-ryo

Hostapd After That...

| Comments

何か、不安定ですhostapd。 昨夜は、何故か出勤後の9:58に勝手に謎のrebootしてたし、 今日も帰宅後、NotePCがWiFiで繋がらないから試行錯誤すると、 一旦USB WiFiドングル抜き差ししてhostapdをstop/startしたら、漸く。 でも、1秒毎にreconnectしたりして、もう何だか。 やっぱり、何かWiFi station買ってこないとダメなのかなー。

Current Project I'm Working in

| Comments

今、グループ内会社のAndroidアプリ開発に売られてるんですけど、そこのソフトの作りがひどくてひどくて泣けてきます。

  1. 「結果が表示されなくなった」というので見てみたら、toString()が変わっていたのが原因。より根本的な原因は、toString()というdebug用途のmethodをoverrideしてmainのlogicに使っていること。まぁ、Activity跨ぐstructured dataをParcelableにする時間が無かった、という事情は分かるんですけど、StringBuilder#toStringですら使わずnew String(StringBuilder)とするくらいなのでぼくは。
  2. 「途中で落ちる」というので見てみると、ヌルポが出てました。どうしてかなー、と見ていくと、途中でnullを代入しているmethodが呼ばれています。どうしてこれを呼ぶよう変えたのか聞いてみると、終了処理をちゃんとするようしてる時に、comment outしてあったこのfinishっぽいmethodをcomment inしたんだそう。それがどういう効果を持つのかわからぬまま、そうしたんだって。えーーーっ!?
  3. 極めつけは、今日わかったんですが、HashMapListにしてその0番目を使ってるんですね。えーーーっ! どうしてAndroid 4.4.2ではうまく動かないの? というのを探っていったら、そこに行き着きました。逆に、これまでよく動いていましたねぇ。素晴らしい!! 先月までいた派遣のフリー技術者が書いたcodeの一部でしたけど、わざと書いたならいざ知らず、もし意識せず書いたのなら、恐ろしいです。

Grain on CodeAnywhere

| Comments

ちょっと、やっぱりダメですね。

1
2
3
4
5
6
java.lang.RuntimeException: While executing class com.sysgears.grain.registry.Registry.compile
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        :
        :
Caused by: java.net.SocketTimeoutException: Accept timed out
        at java.net.PlainSocketImpl.socketAccept(Native Method)

といわれて、./grainw generate./grainw gendeployも出来ません。 あーあ、なぁんだ。

Illegal Keysize

| Comments

AndroidでNanoHTTPDを 動かすprogramを開発しているんですが、 WebRTCにするのに、TLSが必要じゃないですか。 そのserver certを普通に作ると、Illegal keysizeと言われて key load時に落ちるのでハマりました。 NanoHTTPDの解説にあるように、

1
$ keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048 -ext SAN=DNS:localhost,IP:127.0.0.1  -validity 9999

と作ってもダメでした。 色々調べると、AndroidにはBouncyCastle(BKS)でないとならないらしく、 証明書は面倒なのでsnakeoilを流用して、

1
2
$ sudo openssl pkcs12 -export -in /etc/ssl/certs/ssl-cert-snakeoil.pem -inkey /etc/ssl/private/ssl-cert-snakeoil.key -out ~/AndroidStudioProjects/SharedEye/ssl-cert-snakeoil.p12 -name ssl-cert-snakeoil
$ /usr/lib/jvm/java-8-oracle/bin/keytool -importkeystore -deststorepass password -destkeypass password -destkeystore snakeoil.jks -srckeystore ssl-cert-snakeoil.p12 -srcstoretype PKCS12 -srcstorepass password -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15-1.46.jar

とすると、

1
Problem importing entry for alias java.security.KeyStoreException: java.io.IOException: Error initialising store of key store: java.security.InvalidKeyException: Illegal key size.

と言われてimport出来ませんでした(→jksが作れませんでした)。 かなり悩んだのですが、結局JavaでAES256を使用できるようにするにあるように、 JCE(Java Cryptography Extension)を落としてきて local_policy.jarを上書きしたら、 jksも出来て、Android側でも何事もなくloadしてくれました。

Revive Hostapd

| Comments

家のオンプレミスサーバが最近五月蝿く、 何か常に3.4GHz近くまでいっていて電気食ってるようなので、 1年弱ぶりに止めてみました。 すると、次、立ち上げた時、 繋げていたPlanexの11/n/g/b Real Portable Wi-Fi Router MZK-RP150N が死にました。 通電はしているようなのですが、 Wi-Fiは繋がらず(ランプも消灯)、resetかけようとマニュアル探して、 その通りにボタン10秒以上長押ししてもPowerランプがつかず。 USB刺してすぐはPowerランプとWirelessランプが暫時点灯するので、 ランプの故障ではない模様。 また、ケーブルがInternet側でもLAN側でも、設定したIP、 defaultのIP、どんなIPでも繋がらず(ping不通)。 ノートPCと直接LANで繋いでpacket captureしても、 packetは漏れてこず。 どうしようもないので、家庭内LANから取り外しました。 けどWi-Fiがないのは不便すぎます。 そこで、余っていたUSB WiFiドングルをオンプレミスサーバに挿し、 実に久し振りにhostapdにしてみました。 21世紀初頭、hostapdで頑張っていたんですが、 設定が面倒臭かったから、MZK-RP150N買ってきたのに、 今はhostapd、凄い簡単になったんですね。 かつてはhostapdが出来るchipから気にしなきゃいけなかったのに、 今やその辺のドングル刺しても大丈夫なんですか。隔世の感。 こういうのは時に応じて調べなきゃならないと思うので、 ここで設定の覚書を書いといても無駄な気がしますけど、一応。

  • apt install hostapd
  • /etc/hostapd/hostapd.confを編集
  • bridgeは必要(ウチの場合)→/etc/network/interfacesbr0の設定要

hostapd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
interface=wlan0
# automatically register wlan0 to br0
bridge=br0
# Wireless LAN adapter driver(fixed value)
driver=nl80211
# SSID name
ssid=...
# 802.11g/a/...
hw_mode=g
# Enable 802.11n
ieee80211n=1
# channel=60 when 802.11a
channel=7
wpa=2 # WPA2
# passphrase for WPA2
wpa_passphrase=...
# stealth
ignore_broadcast_ssid=1
# Mac Address ACL
macaddr_acl=1
# file for Mac Address ACL (permission should be 600)
accept_mac_file=/etc/hostapd/hostapd.accept
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

あと前やったのに書き方忘れてたのが、 /etc/network/interfacesbr0設定。

interfaces

1
2
3
4
5
6
iface br0 inet static
	bridge_ports eth1
	bridge_stp off
	bridge_maxwait 0
	address 192.168.X.X
	netmask 255.255.255.0

iptalesの設定も変更忘れないように。

Planex MZK-RP150NではMac Address制限が出来なかったので、 ちょっぴり安心に。

ですが、hostapd.accept書き換えても sudo service hostapd restartしないと反映されず、 restartするとbr0消えるっぽいので、注意です。 hostapd stopしてifup br0hostapd startするのが正しい手順でしょうか。 その間ノートPCからは接続切れるので、これも気を付けませんと。

それと、 コマンド一発でLinuxマシンを即席無線LANルーターにできる「create_ap」がすごい便利だったは、 別件で使ってみましたが、ホントにすぐにhostapからbridge、 dhcpまで出来て感動モノでした。 今読んで、havegedというのを初めて知りました。 オンプレミスサーバにはentropyが足りなかったので入れてみて、 確かにentropyは上がりましたが、 Wireless LANがホントに早くなるのかどうか... (確かに遅い感じはしてました)。