NanoPi R2S+OpenWRT 21.02.0でBIGLOBEのMAP-E接続


5月に「NanoPi R2S+openWRT 21.02.0RCでBIGLOBEのMAP-E接続」にてOpenWRT 21.02.0-RC版での手順を作成した。

しかし、OpenWRT 21.02.0リリース版になってみると、いろいろ設定画面が変更となり、この手順のままでは動作させることができなかった。

ぐぐってみたところ「OpenWrt(21.02)でIPv6インターネットを使う」に手順があったので、参考にしつつ手順を更新した。

前書き

OpenWRTルータを作成するにあたり、いろいろある選択肢からRockchip RK3328のNanoPi R2S と Rockchip RK3399のNanoPi R4S を候補にあげた。

Amazon日本の倉庫に在庫があるというのと、openWRTのページに「FriendlyARM NanoPi R2S」とデバイスに関する個別ページが作成されており、リリース版の提供がされていたので、NanoPi R2Sを買って設定を行った。

画像
画像

ちなみに置き換え対象となったGL-MV1000とのサイズ比較はこんな感じ

画像
画像

OpenWRT 21.02.0-RC版の時代はアップグレードしたら以前の設定を残しておくと起動しなくなるとか問題もありましたが、OpenWRT 21.02.0リリース版を書き込んだあと設定復旧で動作させることができました。

設定手順0: MicroSD作成

friendlyarm_nanopi-r2s-squashfs-sysupgrade.img.gz を展開したものをmicroSDに書き込んでNanoPi R2Sを起動。

設定手順1:パッケージの追加

mapパッケージと日本語UIパッケージ(luci-i18n-base-ja)をインストール

また、後述のニチバン対策を行う場合は iptables-mod-ipopt もインストールする。

GUIの場合、[システム]-[Software]にて、「Update lists」を実行してパッケージ一覧を取得した後に、「Filter」にパッケージ名を入れて、出てきたモジュールを「Install」する。

CLIでインストールする場合は以下を実行

# opkg update
# opkg install luci-i18n-base-ja
# opkg install map
# okpg install iptables-mod-ipopt

インストール後は再起動を行うこと。

再起動しないとluciのネットワーク設定で「プロトコル:MAP / LW4over6」が選択肢に現れません。

設定手順2:WAN6インタフェースの作成

WAN6インタフェースがなければ「プロトコル: DHCPv6クライアント」で作成する

最初はそのまま設定して、有効化し、WAN6インタフェースに割り当てられるIPv6アドレスを確認すること。

↑の画像は使い回しなので、この段階では無いはずの「MAP」インタフェースなどが入ってます

上記のようにWAN6インタフェースに「IPv6」アドレスが確認できたら、そのアドレスをコピーして、notepadにでも貼り付けておきます。

設定手順3:WAN6インタフェースにDHCPv6関連設定

openWRT 21.02.0のリリース版になったらWAN6インタフェースではDHCPv6関連設定がGUIできるようになりました。

[DHCPサーバー]を選択して、下記のようになっている場合は「DHCPサーバーをセットアップ」をクリックします。

クリックしたあと[一般設定]タブは下記のような感じで変更せず

[IPv6設定]タブで下記の設定を行います。

Designated master: チェックを入れる
RA-Service:リレーモード
DHCPv6-サービス: リレーモード
NDP-Proxy: リレーモード
(Learn routesは設定を変更していない)

設定手順4:LANインタフェースにDHCPv6関連設定

LANインタフェースの[DHCPサーバー]-[IPv6設定]で以下の設定を行います。

RA-Service:リレーモード
DHCPv6-サービス: サーバーモード
NDP-Proxy: リレーモード

(マスターにチェックは入れません)

設定手順5: IPv6 PD設定

OpenWRT 21.02.0-RC版だとIPv6 PD設定がWAN6にあったのですが、リリース版だと消えています。

これは別のインタフェースとして作成することで対応するようです。

[インタフェースを新規作成]から下記でインタフェースを作成します。

名前:WAN6PD
プロトコル:静的アドレス
デバイス: WAN6インタフェース(@wan6表記)

詳細設定では手順2で確認したIPv6アドレスを使います。

IPv6アドレスが「IPv6: wwww:xxxx:yyyy:zzzz:aaaa:bbbb:cccc:dddd/64」というようになっているとき、先頭の4カラム「wwww:xxxx:yyyy:zzzz」を使います。

まず、WAN6PDに割り当てる 「wwww:xxxx:yyyy:zzzz::1001」を「IPv6アドレス」に設定します。

「IPv6 ゲートウェイ」には「wwww:xxxx:yyyy:zzzz::1 」を指定します。このアドレスは設定完了後、WAN6PDインタフェースではなく、LANインタフェースに対して割り当てられます。

「IPv6ルートプレフィックス」には「wwww:xxxx:yyyy:zzzz::/56」と指定します。

設定すると上記のような感じです。

設定手順6: MAP-E接続設定

インタフェースの新規作成で「プロトコル:MAP / LW4over6」を作成して、必要な値を入れていきます。今回は「WAN_MAP」で作成しました。

[一般設定]では下記の様にしました。

プロトコル:MAP/LW4over6
タイプ:MAP-E
以後は環境に合わせた値

[詳細設定]では「従来のMAPを使用」にチェックを入れる

設定手順7: 各インタフェースのファイアウォールゾーン設定

wan系のゾーンに「wan_map」と「WAN6PD」を追加します。

設定完了

ひとまずこれで設定完了です。

うまく接続が始まらない場合は、再起動してみてください。

設定:ニチバン対策

ニチバンサイトなど一部でIPv4通信がおかしくなる件について、 https://paste.teknik.io/VeN9r にある手法を使った。

IP4,PSID, TUNDEVは自分の環境に合わせて変更すること
IP4, PSIDがわからない場合は http://ipv4.web.fc2.com/map-e.html で確認すること

TUNDEVは、GUIから設定した名前ではなく、アイコンの下に小さく書かれている方の名前を使う。↑の場合は「map-wan_map」になる。

また、units1とunits2は、BIGLOBEはV6plus相当であるため、数値を変更する。

units1=15 #V6plus:15 OCN:63
units2=4096 #V6plus 4096 OCN:1024
IP4='xxx.xxx.xxx.xxx'
PSID='x'
TUNDEV='map-wan_map'


iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT
iptables -t nat -F POSTROUTING

rule=1
while [ $rule -le $units1  ] ; do
  mark=`expr $rule + 16`
  pn=`expr $rule - 1`
  portl=`expr $rule \* $units2 + $PSID \* 16`
  portr=`expr $portl + 15`

  iptables -t nat -A PREROUTING -m statistic --mode nth --every $units1 --packet $pn -j MARK --set-mark $mark
  iptables -t nat -A OUTPUT -m statistic --mode nth --every $units1 --packet $pn -j MARK --set-mark $mark

  iptables -t nat -A POSTROUTING -p icmp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
  iptables -t nat -A POSTROUTING -p tcp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
  iptables -t nat -A POSTROUTING -p udp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
  rule=`expr $rule + 1`
done

上記をopenwrtの[ネットワーク]-[ファイヤーウォール]-[Custom Rules] (/etc/firewall.user) に記載する。

また、[システム]-[スタートアップ]-[ローカルスタートアップ] (/etc/rc.local)の exit 0よりも前に下記2行を追加する

sleep 30
sh /etc/firewall.user

なお、iptablesのstatisticモジュールはiptables-mod-ipoptに入っているが、標準では導入されていないため、冒頭でインストールしているが、まだの場合は下記のような感じでインストールする。

root@nanopi:~# opkg install iptables-mod-ipopt
Installing iptables-mod-ipopt (1.8.7-1) to root...
Downloading https://downloads.openwrt.org/releases/21.02.0-rc1/targets/rockchip/armv8/packages/iptables-mod-ipopt_1.8.7-1_aarch64_generic.ipk
Installing kmod-ipt-ipopt (5.4.111-1) to root...
Downloading https://downloads.openwrt.org/releases/21.02.0-rc1/targets/rockchip/armv8/packages/kmod-ipt-ipopt_5.4.111-1_aarch64_generic.ipk
Configuring kmod-ipt-ipopt.
Configuring iptables-mod-ipopt.
root@nanopi:~#

これで、とりあえずニチバンもスムースに開けるようになった。


参考資料

/etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fdaf:6014:6f21::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth1'

config device
        option name 'eth1'
        option macaddr '1a:e4:a4:73:0d:0c'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.1.1'

config device
        option name 'eth0'
        option macaddr '1a:e4:a4:73:0d:0b'

config interface 'wan'
        option device 'eth0'
        option proto 'dhcp'
        option auto '0'

config interface 'wan6'
        option device 'eth0'
        option proto 'dhcpv6'
        option reqaddress 'try'
        option reqprefix 'auto'

config interface 'wan_map'
        option proto 'map'
        option maptype 'map-e'
        option peeraddr '2404:9200:225:100::64'
        option ipaddr 'xxx.xxx.xxx.xxx'
        option ip4prefixlen '15'
        option ip6prefix 'wwww:xxxx::'
        option ip6prefixlen '31'
        option ealen '25'
        option psidlen '8'
        option offset '4'
        option legacymap '1'

config interface 'WAN6PD'
        option proto 'static'
        list ip6addr 'wwww:xxxx:yyyy:zzzz::1001'
        option ip6gw 'wwww:xxxx:yyyy:zzzz::1'
        option ip6prefix 'wwww:xxxx:yyyy:zzzz::/56'
        option device '@wan6'

/etc/config/dhcp

config dnsmasq
        option domainneeded '1'
        option boguspriv '1'
        option filterwin2k '0'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option nonegcache '0'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
        option nonwildcard '1'
        option localservice '1'
        option ednspacket_max '1232'

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv4 'server'
        option ra 'relay'
        option ndp 'relay'
        list ra_flags 'none'
        option dhcpv6 'server'

config dhcp 'wan6'
        option dhcpv6 'relay'
        option ra 'relay'
        option ndp 'relay'
        option master '1'
        option interface 'wan6'
        option ignore '1'
        list ra_flags 'none'

iptablesの結果

意図した分散が行われているかを「iptables -t nat -L -v」のPOSTROUTING tcp/udpのpkts/bytesカウントが分散して増加していっているかを確認する。

ちなみに、 /etc/rc.local にsleep 30とsh /etc/firewall.user を入れないと、システムが生成した分散ルールも残って表示される。

root@nanopi:~# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 2756 packets, 474K bytes)
 pkts bytes target     prot opt in     out     source               destination
  185 32012 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
  184 28575 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
  184 31952 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
  184 31323 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
  184 33123 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
  184 36047 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
  184 32939 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
  184 33412 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
  184 29916 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
  184 28526 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
  184 29308 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
  183 32364 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
  183 30150 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
  183 29944 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
  183 34100 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f

Chain INPUT (policy ACCEPT 598 packets, 40818 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 67 packets, 5056 bytes)
 pkts bytes target     prot opt in     out     source               destination
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 MARK set 0x11
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 1 MARK set 0x12
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 2 MARK set 0x13
    5   372 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 3 MARK set 0x14
    5   380 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 4 MARK set 0x15
    5   380 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 5 MARK set 0x16
    5   380 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 6 MARK set 0x17
    4   300 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 7 MARK set 0x18
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 8 MARK set 0x19
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 9 MARK set 0x1a
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 10 MARK set 0x1b
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 11 MARK set 0x1c
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 12 MARK set 0x1d
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 13 MARK set 0x1e
    4   304 MARK       all  --  any    any     anywhere             anywhere             statistic mode nth every 15 packet 14 MARK set 0x1f

Chain POSTROUTING (policy ACCEPT 23 packets, 1064 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   168 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
   41  2607 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
    8   557 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x11 to:xxx.xxx.xxx.xxx:5856-5871
    4   336 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
   50  3503 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
   13   868 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x12 to:xxx.xxx.xxx.xxx:9952-9967
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
   46  2981 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
   11   771 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x13 to:xxx.xxx.xxx.xxx:14048-14063
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
   33  1991 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
   10   709 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x14 to:xxx.xxx.xxx.xxx:18144-18159
    2   168 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
   38  2280 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
   13   950 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x15 to:xxx.xxx.xxx.xxx:22240-22255
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
   42  3095 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
   11   831 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x16 to:xxx.xxx.xxx.xxx:26336-26351
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
   51  3838 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
   11   823 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x17 to:xxx.xxx.xxx.xxx:30432-30447
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
   41  2564 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
    9   656 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x18 to:xxx.xxx.xxx.xxx:34528-34543
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
   44  2665 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
    9   629 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x19 to:xxx.xxx.xxx.xxx:38624-38639
    0     0 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
   55  3841 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
   11   762 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1a to:xxx.xxx.xxx.xxx:42720-42735
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
   53  3161 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
   10   699 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1b to:xxx.xxx.xxx.xxx:46816-46831
    2   168 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
   46  2965 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
    9   632 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1c to:xxx.xxx.xxx.xxx:50912-50927
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
   45  2700 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
   10   671 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1d to:xxx.xxx.xxx.xxx:55008-55023
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
   48  2992 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
   15  1003 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1e to:xxx.xxx.xxx.xxx:59104-59119
    1    84 SNAT       icmp --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215
   38  2280 SNAT       tcp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215
    9   615 SNAT       udp  --  any    map-wan_map  anywhere             anywhere             mark match 0x1f to:xxx.xxx.xxx.xxx:63200-63215

Chain postrouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_rule (0 references)
 pkts bytes target     prot opt in     out     source               destination

Chain postrouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_lan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_rule (0 references)
 pkts bytes target     prot opt in     out     source               destination

Chain prerouting_wan_rule (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain zone_lan_postrouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 postrouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan postrouting rule chain */

Chain zone_lan_prerouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
  389 44358 prerouting_lan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom lan prerouting rule chain */

Chain zone_wan_postrouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 postrouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan postrouting rule chain */
    0     0 MASQUERADE  all  --  any    any     anywhere             anywhere             /* !fw3 */

Chain zone_wan_prerouting (0 references)
 pkts bytes target     prot opt in     out     source               destination
    6   786 prerouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan prerouting rule chain */
root@nanopi:~#

Linksys E8450 AX3200はEasyMeshでバッファローの子機にもできるけど5GHzが4チャンネルしか使えない


LinksysのWi-Fiルータ E7350とE8450がEasyMeshに対応した、というニュースを見た

https://twitter.com/JapanLinksys/status/1431251402114969605

Amazonで見てみたら、Amazonアウトレット扱いでE7350が4791円、E8450が6204円だった。

というわけでLinksys E8450 AX3200を買って、firmwareを1.0.01.101415から1.1.00.180912へアップデートしてからいろいろやってみた。

W52周波数帯しか使えない問題

ウィザード形式の設定を飛ばして、設定画面を見てみると、なんと5GHzで使用できるチャネル設定が36,40,44,48chの4つしかない。

この4chはW52と呼ばれる周波数帯で、2021年現在の日本では他にW53の52,56,60,64ch、と、W56の100,104,108,112,116,120,124,128,132,136,140chが使えるのが普通である。

サポートに問い合わせて見たが、2021/09/10時点ではW52しか選択できない件について明確な回答は得られていない。

さて、今回このLinksys E8450はEasyMeshの子機として使うために購入した。

既存環境はバッファローのWSR-1800AX4で、2021年6月に「バッファローWSR-1800AX4をEasyMesh対応にしてみた」で書いたように構成したものとなる。

この環境にE8450を子機として設定する手順は「LinksysデュアルバンドEasyMeshWiFiルーターへの子ノードの追加方法」にある「WPSボタンを使用してEasyMesh子ノードを追加する方法」を使用した。

親機となるバッファローWSR-1800AX4の管理画面からWPSボタンを押した後、E7450背面のWPSボタン(物理)を3秒押して、電源ランプが点滅するのを確認して手を放します。

しばらくすると、子機の電源ランプとインターネットランプが青で点灯します。

そして、親機のWSR-1800AX4の管理画面上では「機器名:Other」として登録されているのが確認出来ます。

・・・接続帯域が「2.4G」となっていますね。

これは既存環境のWSR-1800AX4で使っている5GHz帯が140chチャンネルで、E8450がサポートしていないチャンネルであるから接続出来なかったようです。

試しにWSR-1800AX4のチャンネルを40chに変更してから再試行すると、ちゃんと「接続帯域:5G」となります。

念のためW53の60chでも試してみたところ2.4GHz接続となり、E8450ではW52以外のチャンネルは使用できないようです。

EasyMesh子機の管理画面にアクセスできない

結構な問題だと思うのですが、E8450をEasyMesh子機とした場合、そのE8450の管理画面にアクセスできなくなります。

英語のLivechatサポートに確認したところ、子機の管理画面は親機となるE8450から一括管理できる、という話で、メーカー違いの場合は管理できないようです。

このため、実は上記で親機のチャンネル変更を行った場合、E8450が設定をアップデートとかしてくれなかったので、毎回E8450を初期化して、1から設定をやり直していました。

Linksysメッシュルーターを工場出荷時のデフォルト設定にリセットする」にあるように、E8450が起動状態にあるときにリセットボタンを10秒ぐらい押しつづけ、赤点滅をしはじめて処理がはじまったところで、ボタンを放すと初期化が開始されます。

異機種混在はメーカ保証対象外なんでしょうけど、単体で設定出来る手法は用意してほしかったものです・・・

Xperia XZsにGSIイメージを書き込んだ


秋葉原でXperia XZs G8232を4400円で入手した。

調べて見るとGSIイメージを書き込むという手法があるようでFIRE & TECH「Xperia XZs の ROM 焼き」で紹介されていた。

ファイルの配布元はxda-forumの「[10.0] Project Treble for Xperia XZs [2020.03.18]」で、どういうことをやっているのかは「Fake Treble for Xperia XZ」に書かれている。

まずはXperia XZsのbootloader unlockをするために、設定画面から「OEMロック解除」を有効にする。

で、IMEI調べて、sonyの「Unlock Bootloader」でbootloader unlockのコードを申請して入手。

電源オフ状態でボリューム↑ボタンを押しながらUSBケーブルでパソコンに接続すると、fastbootモードで起動します。

起動するとXZs左上のランプが青く点灯し、パソコンから「fastboot devices」を実行するとデバイスが表示されます。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot.exe devices
BH9011Gxxxx      fastboot

C:\Program Files (x86)\Android\android-sdk\platform-tools>

続いて申請して表示された文字列の先頭に0xを付け加えて「fastboot oem unlock 0x~」と入力します。

最初間違えて0xをつけないで実行してしまったのでエラーになっています。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot oem unlock 570C856D14FAxxxx
                                                   FAILED (remote: 'Incorrect format for unlock data. Should be on the form "0x')
fastboot: error: Command failed

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot oem unlock 0x570C856D14FAxxxx
                                                   OKAY [  2.055s]
Finished. Total time: 2.059s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

Treble-10.0-keyaki-4.9-sjll-V2.10.zipのHow-to-flash.txtは下記の様に書いてあります。

Format Data
fastboot flash oem vendor.img
fastboot flash boot boot.img
fastboot flash system <GSI Image>

GSI should be A/B type, Never use A-Only!

For XZs, you can use the twrp of X Performance or XZ's.

NEVER, NEVER flash Sony Open devices oem image!!!!!!

まずは「Format Data」ということで「fastboot -w」(Wipe)を実行します。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w
Erasing 'userdata'                                 OKAY [  0.385s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 13089792 4k blocks and 3276800 inodes
Filesystem UUID: f9136b0e-0b12-11ec-a6fc-fda6154f283e
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done

Sending 'userdata' (4396 KB)                       OKAY [  0.144s]
Writing 'userdata'                                 OKAY [  0.059s]
Erasing 'cache'                                    OKAY [  0.026s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 65536 4k blocks and 65536 inodes
Filesystem UUID: f96341ce-0b12-11ec-b52e-2ff551a4869a
Superblock backups stored on blocks:
        32768

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Sending 'cache' (120 KB)                           OKAY [  0.025s]
Writing 'cache'                                    OKAY [  0.026s]
Finished. Total time: 1.213s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

続いて Treble-10.0-keyaki-4.9-sjll-V2.10.zipの vendor.imgをOEM領域に書き込みます。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash oem F:\download\android\xperia-xzs\vendor.img
Sending 'oem' (248608 KB)                          OKAY [  6.827s]
Writing 'oem'                                      OKAY [  1.871s]
Finished. Total time: 8.853s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

Treble-10.0-keyaki-4.9-sjll-V2.10.zipのHow-to-flash.txt の boot.imgをboot領域に書き込みます。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash boot F:\download\android\xperia-xzs\boot.img
Sending 'boot' (12368 KB)                          OKAY [  0.366s]
Writing 'boot'                                     OKAY [  0.110s]
Finished. Total time: 0.530s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

最後にGSIイメージをsystem領域に書き込みます。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android10\system-quack-arm64-ab-gapps_v222.img
Invalid sparse file format at header magic
error: write_sparse_skip_chunk: don't care size 480526784 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 212095424 is not a multiple of the block size 4096
Sending sparse 'system' 1/3 (262140 KB)            error: write_sparse_skip_chunk: don't care size 480526784 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 480526784 is not a multiple of the block size 4096
OKAY [  7.512s]
Writing 'system'                                   FAILED (remote: 'buffer overreads occured due to invalid sparse header')
fastboot: error: Command failed

C:\Program Files (x86)\Android\android-sdk\platform-tools>

エラーとなりました。

よく調べてみたところ、img.xzのはずなのですが、imgとしてファイルが保存されていたための問題でした。

xzファイルを展開して再チャレンジ

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android10\system-quack-arm64-ab-gapps_v222.img
Sending sparse 'system' 1/9 (262140 KB)            OKAY [  7.497s]
Writing 'system'                                   OKAY [  2.023s]
Sending sparse 'system' 2/9 (262140 KB)            OKAY [  7.572s]
Writing 'system'                                   OKAY [  2.050s]
Sending sparse 'system' 3/9 (262140 KB)            OKAY [  7.548s]
Writing 'system'                                   OKAY [  2.035s]
Sending sparse 'system' 4/9 (262140 KB)            OKAY [  7.650s]
Writing 'system'                                   OKAY [  2.101s]
Sending sparse 'system' 5/9 (262140 KB)            OKAY [  7.672s]
Writing 'system'                                   OKAY [  2.102s]
Sending sparse 'system' 6/9 (262140 KB)            OKAY [  7.673s]
Writing 'system'                                   OKAY [  2.060s]
Sending sparse 'system' 7/9 (262140 KB)            OKAY [  7.645s]
Writing 'system'                                   OKAY [  1.984s]
Sending sparse 'system' 8/9 (262140 KB)            OKAY [  7.641s]
Writing 'system'                                   OKAY [  2.068s]
Sending sparse 'system' 9/9 (183260 KB)            OKAY [  5.354s]
Writing 'system'                                   OKAY [  1.434s]
Finished. Total time: 91.779s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

今度は成功です。

再起動します。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot
Rebooting                                          OKAY [  0.002s]
Finished. Total time: 0.003s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

で・・・Android 10で起動しました。

続いて、Android 11のGSIが使えるのか確認。

「fastboot -w」でフォーマット

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot devices
BH9011Gxxx      fastboot

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w
Erasing 'userdata'                                 OKAY [  1.073s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 13089792 4k blocks and 3276800 inodes
Filesystem UUID: 4150c0de-0b17-11ec-9cae-af9c3c428626
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done

Sending 'userdata' (4396 KB)                       OKAY [  0.156s]
Writing 'userdata'                                 OKAY [  0.061s]
Erasing 'cache'                                    OKAY [  0.030s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 65536 4k blocks and 65536 inodes
Filesystem UUID: 41a1c326-0b17-11ec-a365-bd86ad12ab05
Superblock backups stored on blocks:
        32768

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Sending 'cache' (120 KB)                           OKAY [  0.022s]
Writing 'cache'                                    OKAY [  0.024s]
Finished. Total time: 1.819s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

続いてGSIをsystem領域に書き込みます。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android11\system-roar-arm-ab-gogapps_v312.img
Sending sparse 'system' 1/6 (262140 KB)            OKAY [  7.562s]
Writing 'system'                                   OKAY [  1.975s]
Sending sparse 'system' 2/6 (262140 KB)            OKAY [  7.591s]
Writing 'system'                                   OKAY [  2.083s]
Sending sparse 'system' 3/6 (262140 KB)            OKAY [  7.653s]
Writing 'system'                                   OKAY [  2.028s]
Sending sparse 'system' 4/6 (262140 KB)            OKAY [  7.713s]
Writing 'system'                                   OKAY [  2.085s]
Sending sparse 'system' 5/6 (262140 KB)            OKAY [  7.679s]
Writing 'system'                                   OKAY [  2.018s]
Sending sparse 'system' 6/6 (243672 KB)            OKAY [  7.158s]
Writing 'system'                                   OKAY [  1.923s]
Finished. Total time: 61.099s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

再起動

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot
Rebooting                                          OKAY [  0.010s]
Finished. Total time: 0.013s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

Xperiaロゴが出たあと、電源が切れ、再びfastbootモードになってしまいました。

今度は省略したところも全て再実行

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w
Erasing ‘userdata’ OKAY [ 1.073s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 13089792 4k blocks and 3276800 inodes
Filesystem UUID: 4150c0de-0b17-11ec-9cae-af9c3c428626
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done

Sending ‘userdata’ (4396 KB) OKAY [ 0.156s]
Writing ‘userdata’ OKAY [ 0.061s]
Erasing ‘cache’ OKAY [ 0.030s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 65536 4k blocks and 65536 inodes
Filesystem UUID: 41a1c326-0b17-11ec-a365-bd86ad12ab05
Superblock backups stored on blocks:
32768

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Sending ‘cache’ (120 KB) OKAY [ 0.022s]
Writing ‘cache’ OKAY [ 0.024s]
Finished. Total time: 1.819s

C:\Program Files (x86)\Android\android-sdk\platform-tools>
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android11\system-roar-arm-ab-gogapps_v312.img
Sending sparse ‘system’ 1/6 (262140 KB) OKAY [ 7.562s]
Writing ‘system’ OKAY [ 1.975s]
Sending sparse ‘system’ 2/6 (262140 KB) OKAY [ 7.591s]
Writing ‘system’ OKAY [ 2.083s]
Sending sparse ‘system’ 3/6 (262140 KB) OKAY [ 7.653s]
Writing ‘system’ OKAY [ 2.028s]
Sending sparse ‘system’ 4/6 (262140 KB) OKAY [ 7.713s]
Writing ‘system’ OKAY [ 2.085s]
Sending sparse ‘system’ 5/6 (262140 KB) OKAY [ 7.679s]
Writing ‘system’ OKAY [ 2.018s]
Sending sparse ‘system’ 6/6 (243672 KB) OKAY [ 7.158s]
Writing ‘system’ OKAY [ 1.923s]
Finished. Total time: 61.099s

C:\Program Files (x86)\Android\android-sdk\platform-tools>
C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot
Rebooting OKAY [ 0.010s]
Finished. Total time: 0.013s

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot devices
BH9011G172 fastboot

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot -w
Erasing ‘userdata’ OKAY [ 0.722s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 13089792 4k blocks and 3276800 inodes
Filesystem UUID: e9ea269a-0b17-11ec-8cba-a17b44c778c4
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done

Sending ‘userdata’ (4396 KB) OKAY [ 0.145s]
Writing ‘userdata’ OKAY [ 0.061s]
Erasing ‘cache’ OKAY [ 0.026s]
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 65536 4k blocks and 65536 inodes
Filesystem UUID: ea381fe4-0b17-11ec-b1f1-f1b13df9e489
Superblock backups stored on blocks:
32768

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Sending ‘cache’ (120 KB) OKAY [ 0.023s]
Writing ‘cache’ OKAY [ 0.026s]
Finished. Total time: 1.443s

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash oem F:\download\android\xperia-xzs\vendor.img
Sending ‘oem’ (248608 KB) OKAY [ 6.746s]
Writing ‘oem’ OKAY [ 1.910s]
Finished. Total time: 8.825s

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash boot F:\download\android\xperia-xzs\boot.img
Sending ‘boot’ (12368 KB) OKAY [ 0.426s]
Writing ‘boot’ OKAY [ 0.116s]
Finished. Total time: 1.085s

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android11\system-roar-arm-ab-gogapps_v312.img
Sending sparse ‘system’ 1/6 (262140 KB) OKAY [ 7.523s]
Writing ‘system’ OKAY [ 2.121s]
Sending sparse ‘system’ 2/6 (262140 KB) OKAY [ 7.584s]
Writing ‘system’ OKAY [ 2.055s]
Sending sparse ‘system’ 3/6 (262140 KB) OKAY [ 7.543s]
Writing ‘system’ OKAY [ 2.071s]
Sending sparse ‘system’ 4/6 (262140 KB) OKAY [ 8.527s]
Writing ‘system’ OKAY [ 2.036s]
Sending sparse ‘system’ 5/6 (262140 KB) OKAY [ 7.556s]
Writing ‘system’ OKAY [ 2.058s]
Sending sparse ‘system’ 6/6 (243672 KB) OKAY [ 7.044s]
Writing ‘system’ OKAY [ 1.945s]
Finished. Total time: 61.023s

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot
Rebooting OKAY [ 0.002s]
Finished. Total time: 0.005s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

….やっぱりダメですね。

2021/09/04追記:よく見たらarmイメージを書き込んでいました。arm64じゃん・・・

Google配布のAndroid 12のGSIイメージを書き込めるかもチャレンジ

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash system F:\download\android\xperia-xzs\GSI-Android12\system.img
Invalid sparse file format at header magic
Sending sparse 'system' 1/10 (262104 KB)           OKAY [  7.717s]
Writing 'system'                                   OKAY [  2.124s]
Sending sparse 'system' 2/10 (262128 KB)           OKAY [  7.544s]
Writing 'system'                                   OKAY [  2.070s]
Sending sparse 'system' 3/10 (262112 KB)           OKAY [  7.527s]
Writing 'system'                                   OKAY [  2.053s]
Sending sparse 'system' 4/10 (262128 KB)           OKAY [  7.672s]
Writing 'system'                                   OKAY [  2.073s]
Sending sparse 'system' 5/10 (262124 KB)           OKAY [  7.563s]
Writing 'system'                                   OKAY [  2.073s]
Sending sparse 'system' 6/10 (262124 KB)           OKAY [  7.524s]
Writing 'system'                                   OKAY [  2.021s]
Sending sparse 'system' 7/10 (262116 KB)           OKAY [  7.516s]
Writing 'system'                                   OKAY [  2.044s]
Sending sparse 'system' 8/10 (262084 KB)           OKAY [  7.550s]
Writing 'system'                                   OKAY [  2.147s]
Sending sparse 'system' 9/10 (262128 KB)           OKAY [  7.798s]
Writing 'system'                                   OKAY [  2.051s]
Sending sparse 'system' 10/10 (126492 KB)          OKAY [  3.675s]
Writing 'system'                                   OKAY [  6.845s]
Finished. Total time: 104.423s

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot reboot
Rebooting                                          OKAY [  0.003s]
Finished. Total time: 0.007s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

SONYロゴのままハングアップ。電源ボタン長押しでのoffも出来なくなりました。

ということで、Xperia XZsのfake GSIで使えるのはAndroid 10のみということですね。


TWRPを書き込めるか確認:twrp-q-V1.img

fastbootモードにしてからrecovery領域に書き込んだ。

C:\Program Files (x86)\Android\android-sdk\platform-tools>fastboot flash recovery F:\download\android\xperia-xzs\twrp-q-V1.img
Sending 'recovery' (20056 KB)                      OKAY [  0.706s]
Writing 'recovery'                                 OKAY [  0.158s]
Finished. Total time: 1.418s

C:\Program Files (x86)\Android\android-sdk\platform-tools>

Androidが起動してからadb reboot recoveryでTWRPが起動することを確認

C:\Program Files (x86)\Android\android-sdk\platform-tools>adb reboot recovery

C:\Program Files (x86)\Android\android-sdk\platform-tools>

なお、ボリューム↓+電源ボタンで起動してもTWRPが起動する。

Andy Yan’s personal builds // GSI にあるLineageOS 17.1のテストと、GAppが書き込めるか確認

きちんと書き込めて、TWRP経由でNikGAppsのNikGapps-stock-arm64-10-20210815-signed.zipを書き込み、Lineage OS 17.1上でGappsが使えることを確認しました。


Android 11 Custom Rom for the Xperia XZs に下記のAndroid11を試した、という話が書かれていた。
 Pixel Experience Plus and non-Plus
 Corvus OS
 Havoc OS

開発者向け資料のGeneric System Imageを確認すると、/system/etc/ld.config.数字.txt 内の[vendor]セクションで「namespace.default.isolated=true」となっていれば、いいらしい。

Vendor Native Development Kit(VNDK)のバージョンは 下記の様に26~29 で定義されていた。

keyaki:/ $ ls -l /system/etc/ld*
-rw-r--r-- 1 root root 34755 2020-08-06 05:16 /system/etc/ld.config.26.txt
-rw-r--r-- 1 root root 39324 2020-08-06 05:16 /system/etc/ld.config.27.txt
-rw-r--r-- 1 root root 39844 2020-08-06 05:16 /system/etc/ld.config.28.txt
-rw-r--r-- 1 root root 40252 2020-08-06 05:16 /system/etc/ld.config.29.txt
-rw-r--r-- 1 root root 27897 2020-08-06 05:16 /system/etc/ld.config.vndk_lite.txt
keyaki:/ $

一番新しい 29 というのはAndroid 10ということらしい。このため、少なくともAndroid 10のGSIは使える、ということになる。

それ以降のバージョンを使えるかを /system/etc/ld.config.29.txt の該当部分を確認すると下記のようになっていた。

<略>
[vendor]
additional.namespaces = runtime,system,vndk

###############################################################################
# "default" namespace
#
# This is the default linker namespace for a vendor process (a process started
# from /vendor/bin/*). The main executable and the libs under /vendor/lib[64]
# are loaded directly into this namespace. However, other libs under the system
# partition (VNDK and LLNDK libraries) are not loaded here but from the
# separate namespace 'system'. The delegation to the system namespace is done
# via the 'namespace.default.link.system.shared_libs' property below.
#
# '#VNDK27#' TAG is only for building ld.config.27.txt for backward
# compatibility. (TODO:b/123390078) Move them to a separate file.
###############################################################################
namespace.default.isolated = true
namespace.default.visible = true
<略>

namespace.default.isolated = true となっているので、使えてもおかしくはないはず、ということになりそうだ。

次に、こちらでは Phhusson’s AOSP で試したが、動いたとしているGSIは Pixel Experience Plus and non-Plus, Corvus OS, Havoc OSとの差を考察してみる。

Pixel Experience Plus and non-Plus はPhhusson’s AOSPをベースとしているが配布イメージに vndkliteとついているバージョンがある。


Corvus OS にもvndkliteバージョンがある。

Havoc OSにはvndkliteバージョンがない。そして2020/12/30と更新が古い。

違い?と想定されるVNDK Liteについて調べると、開発者向け資料に記載があった。

Android10については今回使用しているvendorイメージがAndroid 10向けに作成したものなのでVNDKイメージが使用できているが、それ以外については、元々はXperia XZsはAndroid 8.xデバイスなのでVNDK Lite構成でないと動かない、ということではないか、という仮説を立てた。

はたして?

CHUWEI HiPad Proを買ったらがっかりペンタブレットだった件


スナドラ662で、メモリ8GB、ストレージ128GBというスペックにひかれてCHUWEI HiPad Proをペン付きで購入してみました。

8月5日に発送連絡があって、到着したのが8月17日でした。

追加送料払ってなかったのでもっと時間がかかるのかと思っていたら2週間かからないという予想外の到着でした。

ペン付きで買ったので2つ届きました。

裏面は綺麗な感じですね

添付のペンはHiPen H6とありました。

起動後の初期設定は普通のAndroidなので飛ばして、firmware updateを行います。

ここ、メッセージを読み飛ばしていたのですが、アップデート後の再起動でかならず下記の画面でブート失敗します。

画像

ボリュームの下ボタンを押して「Factory data Reset」を実行して初期化をする必要がある、ということです。

なので、ファームウェアアップデートが完了するまでGoogleアカウントの登録などの詳しい設定を行ってはいけない、ということですね。

さて、とりあえず原神を起動して様子見・・・

うーん・・・いまいち

次・・・ペンの動作がどうか確認。

手持ちにWacom Bamboo Inkペンがあったので、今回買ったHiPen H6を並べて見る。

だいたい同じサイズ。

画像

ペン先のサイズがちょっと違うっぽい(なお、Bamboo Inkのが斜めにみえるのは、曲げてしまってしまったため)

HiPad ProはMPP(Microsoft Pen Protocol)採用という話なので、Bamboo InkをMPPモードで電源を入れると使える様になる。

Bamboo Inkで書いた時と

HiPen H6で書いた時と比べると結構筆圧動作が違ってて興味深かったです。

・・・ここまではそんなに問題なさそうに見えますよね

ところが・・・

見ての通りに

ペンの動きに対して、描画が遅すぎる

この動作、CLIP STUDIOだけでなくKritaでも、筆圧検知自体は出来ているけど、遅延が酷い状態でした。

画像

よって、絵描き用途としてまったく向かない感じでした。

このCHUWEI HiPad Proですが、事前にAmazon PrimeがHDで見れる、というのもあったのですが、ChinaR「【CHUWI HiPad Proレビュー】WideVine L1認証済みのCHUWI HiPad ProはAmazonプライムビデオのHD再生に非対応(CHUWI HiPad Pro Don’t Support HD On Amazon Prime Video, Although Got WideVIne L1)」にあるように対応できてない、とかいう問題もあります。

とりあえず、うちのHiPad Proは2万円分のネタになってもらえるように、他の人に貸し出して楽しんでもらうつもりです

pythonのtwitterモジュールで特定ユーザの発言を取得する


twitterのspaceによる音声配信は、m3u8ファイルを使用してのhttpsによるaacファイルの配布という形で実現されている。

streamlinkにm3u8ファイルのURLを与えると音声ファイルが取得できるので、これを自動化できないか検討している。

まず第1歩として、指定したユーザのタイムラインでspace配信のURLがあった場合に検出できないかを確認。

単純にwgetやcurlで「curl -s https://twitter.com/niselog/」とやっても発言は拾えない。

python-twitterのマニュアルを見ながらpythonスクリプトを作成

#!/usr/bin/python

import os
import twitter

token='文字列'
token_secret='文字列'
consumer_key = '文字列'
consumer_secret='文字列'

t = twitter.Api(consumer_key=consumer_key,
        consumer_secret=consumer_secret,
        access_token_key=token,
        access_token_secret=token_secret)

for line in t.GetUserTimeline(screen_name="niselog"):
        print line

これを実行すると、下記の様な出力になる

-bash-4.2$ ./test3.py |tail -2
{"created_at": "Sat May 14 08:13:22 +0000 2016", "hashtags": [{"text": "\u30b1\u30eb\u30d9\u30ed\u30b9\u30d6\u30ec\u30a4\u30c9"}], "id": 731396977758339072, "id_str": "731396977758339072", "lang": "ja", "source": "<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>", "text": "\u507d\u30ed\u30b0 for #\u30b1\u30eb\u30d9\u30ed\u30b9\u30d6\u30ec\u30a4\u30c9 \u306f\u30b1\u30eb\u30d9\u30ed\u30b9\u8d85\u4f1a\u8b70\u306e\u4e00\u89a7\u30da\u30fc\u30b8\u306b\u5bfe\u5fdc\u3057\u307e\u3057\u305f https://t.co/gDlRyiFWC3", "urls": [{"expanded_url": "http://tw5.niselog.jp/", "url": "https://t.co/gDlRyiFWC3"}], "user": {"created_at": "Mon Mar 01 05:51:23 +0000 2010", "default_profile": true, "default_profile_image": true, "description": "\u30c8\u30df\u30fc\u30a6\u30a9\u30fc\u30ab\u30fcPBW \u7121\u9650\u306e\u30d5\u30a1\u30f3\u30bf\u30b8\u30a2/\u30b7\u30eb\u30d0\u30fc\u30ec\u30a4\u30f3/\u30a8\u30f3\u30c9\u30d6\u30ec\u30a4\u30ab\u30fc\uff01/\u30b5\u30a4\u30ad\u30c3\u30af\u30cf\u30fc\u30c4\u3078\u306e\u643a\u5e2f\u5411\u3051\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u30b5\u30fc\u30d3\u30b9\u300c\u507d\u30ed\u30b0\u300d\u306e\u7ba1\u7406\u8005\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3059\u3002 http://t.co/QMKlQjzjSI http://t.co/YEiNJUvGdU", "followers_count": 40, "id": 118604209, "id_str": "118604209", "listed_count": 5, "name": "niselog \u7ba1\u7406\u8005", "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_image_url": "http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png", "profile_image_url_https": "https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png", "profile_link_color": "1DA1F2", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "screen_name": "niselog", "statuses_count": 340, "url": "http://t.co/QMKlQjzjSI", "withheld_in_countries": []}, "user_mentions": []}
{"created_at": "Sat May 14 07:02:08 +0000 2016", "hashtags": [], "id": 731379051852505088, "id_str": "731379051852505088", "lang": "ja", "retweet_count": 2, "source": "<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>", "text": "\u7121\u9650\u306e\u30d5\u30a1\u30f3\u30bf\u30b8\u30a2\u3001\u30b7\u30eb\u30d0\u30fc\u30ec\u30a4\u30f3\u3001\u30a8\u30f3\u30c9\u30d6\u30ec\u30a4\u30ab\u30fc\u5411\u3051\u306e\u507d\u30ed\u30b0 https://t.co/QMKlQjzjSI \u3067\u3059\u304c\u3001\u590f\u9803\u306b\u5b8c\u5168\u505c\u6b62\u3059\u308b\u4e88\u5b9a\u3067\u3059\u3002(URL\u306f\u6b8b\u308a\u307e\u3059\u304c)", "urls": [{"expanded_url": "http://niselog.jp/", "url": "https://t.co/QMKlQjzjSI"}], "user": {"created_at": "Mon Mar 01 05:51:23 +0000 2010", "default_profile": true, "default_profile_image": true, "description": "\u30c8\u30df\u30fc\u30a6\u30a9\u30fc\u30ab\u30fcPBW \u7121\u9650\u306e\u30d5\u30a1\u30f3\u30bf\u30b8\u30a2/\u30b7\u30eb\u30d0\u30fc\u30ec\u30a4\u30f3/\u30a8\u30f3\u30c9\u30d6\u30ec\u30a4\u30ab\u30fc\uff01/\u30b5\u30a4\u30ad\u30c3\u30af\u30cf\u30fc\u30c4\u3078\u306e\u643a\u5e2f\u5411\u3051\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u30b5\u30fc\u30d3\u30b9\u300c\u507d\u30ed\u30b0\u300d\u306e\u7ba1\u7406\u8005\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3059\u3002 http://t.co/QMKlQjzjSI http://t.co/YEiNJUvGdU", "followers_count": 40, "id": 118604209, "id_str": "118604209", "listed_count": 5, "name": "niselog \u7ba1\u7406\u8005", "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_image_url": "http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png", "profile_image_url_https": "https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png", "profile_link_color": "1DA1F2", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "screen_name": "niselog", "statuses_count": 340, "url": "http://t.co/QMKlQjzjSI", "withheld_in_countries": []}, "user_mentions": []}
-bash-4.2$

unicode escapeという形式で文字が表示されているので読めない。

全体的にみてみるとJSON形式のデータになっているのでjqコマンドを通して見た。

-bash-4.2$ ./test3.py |tail -2|jq .
{
  "created_at": "Sat May 14 08:13:22 +0000 2016",
  "hashtags": [
    {
      "text": "ケルベロスブレイド"
    }
  ],
  "id": 731396977758339100,
  "id_str": "731396977758339072",
  "lang": "ja",
  "source": "<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>",
  "text": "偽ログ for #ケルベロスブレイド はケルベロス超会議の一覧ページに対応しました https://t.co/gDlRyiFWC3",
  "urls": [
    {
      "expanded_url": "http://tw5.niselog.jp/",
      "url": "https://t.co/gDlRyiFWC3"
    }
  ],
  "user": {
    "created_at": "Mon Mar 01 05:51:23 +0000 2010",
    "default_profile": true,
    "default_profile_image": true,
    "description": "トミーウォーカーPBW 無限のファンタジア/シルバーレイン/エンドブレイカー!/サイキックハーツへの携帯向けゲートウェイサービス「偽ログ」の管理者 アカウントです。 http://t.co/QMKlQjzjSI http://t.co/YEiNJUvGdU",
    "followers_count": 40,
    "id": 118604209,
    "id_str": "118604209",
    "listed_count": 5,
    "name": "niselog 管理者",
    "profile_background_color": "C0DEED",
    "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_image_url": "http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png",
    "profile_image_url_https": "https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png",
    "profile_link_color": "1DA1F2",
    "profile_sidebar_border_color": "C0DEED",
    "profile_sidebar_fill_color": "DDEEF6",
    "profile_text_color": "333333",
    "profile_use_background_image": true,
    "screen_name": "niselog",
    "statuses_count": 340,
    "url": "http://t.co/QMKlQjzjSI",
    "withheld_in_countries": []
  },
  "user_mentions": []
}
{
  "created_at": "Sat May 14 07:02:08 +0000 2016",
  "hashtags": [],
  "id": 731379051852505100,
  "id_str": "731379051852505088",
  "lang": "ja",
  "retweet_count": 2,
  "source": "<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>",
  "text": "無限のファンタジア、シルバーレイン、エンドブレイカー向けの偽ログ https://t.co/QMKlQjzjSI ですが、夏頃に完全停止する予定です。(URLは残りますが)",
  "urls": [
    {
      "expanded_url": "http://niselog.jp/",
      "url": "https://t.co/QMKlQjzjSI"
    }
  ],
  "user": {
    "created_at": "Mon Mar 01 05:51:23 +0000 2010",
    "default_profile": true,
    "default_profile_image": true,
    "description": "トミーウォーカーPBW 無限のファンタジア/シルバーレイン/エンドブレイカー!/サイキックハーツへの携帯向けゲートウェイサービス「偽ログ」の管理者 アカウントです。 http://t.co/QMKlQjzjSI http://t.co/YEiNJUvGdU",
    "followers_count": 40,
    "id": 118604209,
    "id_str": "118604209",
    "listed_count": 5,
    "name": "niselog 管理者",
    "profile_background_color": "C0DEED",
    "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_image_url": "http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png",
    "profile_image_url_https": "https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png",
    "profile_link_color": "1DA1F2",
    "profile_sidebar_border_color": "C0DEED",
    "profile_sidebar_fill_color": "DDEEF6",
    "profile_text_color": "333333",
    "profile_use_background_image": true,
    "screen_name": "niselog",
    "statuses_count": 340,
    "url": "http://t.co/QMKlQjzjSI",
    "withheld_in_countries": []
  },
  "user_mentions": []
}
-bash-4.2$

今度は可読できる状態になった。

で・・・twitter spaceの場合、次のような出力になっていた

{
  "created_at": "Fri Aug 13 02:11:56 +0000 2021",
  "hashtags": [],
  "id": ~,
  "id_str": "~",
  "lang": "ja",
  "source": "<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>",
  "text": "スペース配信開始\nhttps://t.co/~",
  "urls": [
    {
      "expanded_url": "https://twitter.com/i/spaces/~",
      "url": "https://t.co/~"
    }
  ],
  "user": {
<略>
 }
}

urlsにexpanded_urlという項目があり、そこに /i/spaces/~ というtwitter spaceのURLが書かれているという状態であった。

とりあえず、これで、twitter spaceに参加するためのURLは取得できそう。

jqコマンドのオプションを変えて.urlsだけを抜き出して見る

-bash-4.2$ ./test3.py|jq '.urls'
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[
  {
    "expanded_url": "https://twitter.com/i/spaces/~",
    "url": "https://t.co/~"
  }
]
[
  {
    "expanded_url": "https://~",
    "url": "https://t.co/~"
  }
]
[]
[]
[]
[]
[]
[]
[]
[]
-bash-4.

中身が入ってないものまで表示されてしまう。

jq コマンドを使う日常のご紹介」になかなかいい参考事例を発見

-bash-4.2$ ./test3.py|jq -r '.urls[] '
{
  "expanded_url": "https://twitter.com/i/spaces/~",
  "url": "https://t.co/~"
}
{
  "expanded_url": "https://~",
  "url": "https://t.co/~"
}
-bash-4.2$

これでURLがある場合だけ結果が出た。

もう1歩すすめてjqコマンドマニュアルみつつselectで完全一致だけ出力

-bash-4.2$ ./test3.py|jq -r '.urls[] |select(.expanded_url == "https://twitter.com/i/spaces/~")'
{
  "expanded_url": "https://twitter.com/i/spaces/~",
  "url": "https://t.co/~"
}
-bash-4.2$

部分一致を探すとstartswith,endswithで指定文字列で始まる場合/終わる場合を条件にできた

-bash-4.2$ ./test3.py|jq -r '.urls[] | select(.expanded_url | startswith("https://twitter.com/i/spaces/"))'
{
  "expanded_url": "https://twitter.com/i/spaces/~",
  "url": "https://t.co/~"
}
-bash-4.2$

含まれる場合は containsでいけた

-bash-4.2$ ./test3.py|jq -r '.urls[] | select(.expanded_url | contains("https://
twitter.com/i/spaces/"))'
{
  "expanded_url": "https://twitter.com/i/spaces/~",
  "url": "https://t.co/~"
}
-bash-4.2$