CHUWI LarkBoxを購入しました!
クラウドファンディングで超小型PCに出資
この手のクラウドファンディング、やったことがなかったんですが、 小型のx86マシンが欲しくなって、ついつい出資してしまいました。
Indiegogoでちょっと前まで募集中で、結果的に1億円調達したみたいですね。
写真で紹介
外箱、シンプルでいい感じです。
本体。indiegogoのページで野球ボールと比較されてる写真がありますが、やはり小さい!
アッッレーーーーーwww 日本には日本のコンセント形状で送るよ って書いてあったのに!!! となりましたが、外れていつもの形状になりました。
使用感について
定量的な評価についてはおいておいて、個人的な感想を書きます。
定量的な評価は↓のサイトがすごく網羅的に書かれててすごいです。脱帽。
ファンがうるせえ
小型なので仕方ないですが、ファンがとてもうるさいです。 アイドル状態でも結構ファンなってますね・・・
あまり負荷をかけなければファンが止まるので、負荷をかけないよう心がけるのがいいのかもしれません。。。
最悪なのは、ファンが回転し始める温度と停止する温度を周期的に行ったり来たりして、 ファンが回転と停止を繰り返す状態に陥ることがあることです。
M.2も使える
なんとこのマシン、小型ながらM.2のSSDを取り付けられる拡張性があります。
今回取り付けたのはFORESEEのSSDですが、これは i7 Stylus から取り外したものです。
i7 Stylusに付けたのはTranscendのSSDです
Transcend 3D TLC NAND採用 SSD 120GB M.2 2242 SATA-III 6Gb/s TS120GMTS420S
- 発売日: 2017/10/19
- メディア: Personal Computers
Ubuntuもちゃんと動く
対応OSにUbuntuと書いてあったのですが、プリインストールされているのはWindows 10 Homeです。 個人的にはLinuxを入れて遊びたかったので、インストールしてみました。 普通のデスクトップPCにUbuntuを入れる要領で入ります。(BIOSではESCキー連打)
今回は追加で付けたM.2 SSDにWindows 10 Homeをインストールし直し、 もともとWindows 10が入っていたeMMCにUbuntuをインストールしました。
ブートローダーを破壊した気がするけど気にしない。(まだWindows側を起動させていない・・・)
気になるストレージ性能
意外にもeMMCのほうがシーケンシャルWriteが早い結果になりました。 うーん。どっちがいいんだろ?
終わりに
今回は小型PCを買ってみましたが、すごく所有欲は満たされるグッズでした。 適当にリビングにでも転がしておく小型サーバーにしようかなって思ってます。
OpenWRT(LEDE)で HUAWEIのモバイルルーターを使用する
はじめに
家には光ファイバーによる固定回線があるんですが、 公開サーバーを建てるにあたってその固定回線に迷惑がかからないように、 ゲートウェイからセグメントを変えてネット環境を構築したいなと思いました。
そこで目をつけたのが、モバイル回線です。今回はモバイルルーターである、 HUAWEIの「504HW」を使用できるようにしていきます。
LinuxからのHUAWEI製モバイルルーターの利用
基本的にソフトバンク系のPocket WiFiなどで使用されてきた HUAWEI製のLTEモバイルルーターは対応OSがWindows, Macとされていて、 Linux用のドライバは明に公開されていません。
しかし、どうもグローバル版のLinux用ドライバを使用することができるようで、 ググってみると結構情報が出てきます。
500番台のモバイルルーターはどうも「GL04P」などと同じように、 「HUAWEI Data Cards Linux Driver」を使用することでLinux側からも利用可能みたいです。
調べてみるとWiMAXのモバイルルーターはつなぐとRNDISでつながるらしく、 (つまりスマホでテザリングしているのと同じ繋がり方)挿すだけで使えるようになるらしいです。羨ましい。
OpenWRTでスマホのテザリングを使用するのはRNDISのドライバをopkg入れるだけみたいですね。 HUAWEI P9でやってみましたが、ちゃんと使えました。
HUAWEI Data Cards Linux Driverのビルド
ここが鬼門です。今回使用する「WZR-HP-AG300H」という機材はCPUのアーキテクチャがMIPSで、 (気合で突破する方法を除き、)クロスコンパイルする必要があります。 どうも過去の自分の記事を読むとこれを実施しているようですが
手順を残しておらず、呆れ果てました。今回はちゃんと書きます。
使えるKernelのバージョンに制限がある
今回色々と試してみた結果、使えるLinux Kernelのバージョンが4.4あたりまでということです。 つまり、LEDE 17.01.6が限度のようでした。
OpenWRT 18, 19 では Kernel 4.9 や 4.14 を使用しているのでそもそもビルドすることができませんでした。
具体的には、net_deviceの仕様が変わっており、net_device has no member named trans_start
エラーを突破できません。
ググって軽く見つかるワークアラウンドを試してみるとビルドは通るものの、kernel panicでOSごと落ちてしまいました。 カーネルの非互換恐ろしや・・・
LEDE 17.01.6用にビルドする
というわけで、Kernel 4.4を採用しているLEDE 17.01.6用にビルドしていきます。 前回の記事でも確かLEDE 17.01.6を使用していた気がします。
SDKの準備
OpenWRT(LEDE)用のクロスコンパイル環境を整えるのは簡単です。 OpenWRTがすでにビルド済みの環境を提供してくれていて、対応するバージョンのSDKをダウンロードして展開するだけです。
OpenWrt Project: Using the SDK
今回は上記サイトより、
lede-sdk-17.01.6-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz
をダウンロードしました。
使用する機材が WZR-HP-AG300H
なので ar71xx
のsdkをダウンロードしましたが、
ここは機材によって変える必要があります。適宜読み替えてください。
展開する
私はWindowsユーザーなのでWSL2上に環境を構築しました。
tar xvf lede-sdk-17.01.6-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz
として、適当なフォルダに展開しました。この先展開先を /path/to/sdk/
と表します。適宜読み替えてください。
HUAWEIドライバのダウンロード
適当なサイトから「HUAWEI Data Cards Linux Driver」をダウンロードしてください。 もう公式サイトからは提供されていないため、2次配布されているサイトからダウンロードする他ありません。
tar zxf Linux\ Driver\ 4.19.19.00.tar.xz
として、ダウンロードしたドライバを展開します。
すると中に driver/ndis_driver/ndis_src
というフォルダがあるので、
cp -r Linux\ Driver\ 4.19.19.00.tar/driver/ndis_driver/ndis_src ~/
として適当な作業フォルダにコピーします。 今後の作業はこのフォルダにて行います。
cd ~/ndis_src
ソースコードの修正
このままだとクロスコンパイルできないので、クロスコンパイル用に修正していきます。
まずは src/Makefile
KVER := $(shell uname -r) # KDIR := /lib/modules/$(KVER)/build # KDIR := /path/to/sdk/lede-sdk-17.01.6-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/linux-4.4.153 KMISC := /lib/modules/$(KVER)/kernel/drivers/usb/net KEXT := $(shell echo $(KVER) | sed -ne 's/^2\.[567]\..*/k/p')o
Makefile冒頭のmake用の変数を修正していきます。どうせ一度しかビルドしないので直書きしてしまいましたw
modules: #$(PWD)/src/add_header.sh "modules" "$(KDIR)/include/linux/usb" # $(MAKE) -C $(KDIR) SUBDIRS=$(PWD)/src modules $(MAKE) -C $(KDIR) SUBDIRS=$(PWD)/src ARCH=mips CROSS_COMPILE=mips-openwrt-linux- modules strip --strip-debug hw_cdc_driver.$(KEXT)
Makefileのmodules ターゲットを修正しました。
具体的には make を実行する際に ARCH=mips CROSS_COMPILE=mips-openwrt-linux-
オプションを指定します。
次にソースコードです。 src/hw_cdc_driver.c
を修正します。
135行目
// #include <linux/unaligned/access_ok.h>
2718行目
// dbg ("can't kmalloc dev");
それぞれコメントアウトします。
ビルドの実行
ビルドを実行する前に、クロスコンパイル用のgccにPATHを通します。
export PATH=/path/to/sdk/lede-sdk-17.01.6-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.16/bin:$PATH export STAGING_DIR=/path/to/sdk/lede-sdk-17.01.6-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir/
これでビルドできるはずです。 makeしてみましょう
make modules
LEDEへのカーネルモジュールコピー
そして出来上がったカーネルモジュールをコピーします。
scp src/hw_cdc_driver.ko root@XXX.XXX.XXX.XXX:/root/
で、コピーされたファイルを /lib/modules/カーネルバージョン/
フォルダに配置します。(私の場合は /lib/modules/4.4.153/
)
配置が完了したら、
modprobe hw_cdc_driver
でモジュールがロードできたら完了です。
もしかすると mii
が足りないと言われるので、 opkg install kmod-mii
で miiをインストールしてください。
あとは、モバイルルーターが接続されたときにCDROMとしてマウントされてしまうのを防ぐために、
usb_modeswitch
を導入します。
opkg install usb-modeswitch
で導入できます。これでモバイルルーターを接続すると eth2
として認識されるはずです。
完成!モバイルネットワーク環境
こんな感じになりました。 504HWがソフトバンクの4G回線を拾い、LEDEにIPが振られローカルネットワークから出られるようになりました。
2重ルーター(NAT)になるのが気持ち悪いですが、まぁ仕方ない。 (事業者から振られているのがプライベートIPなので更に段数は増えるか?)
終わりに
以前はこの方法でいけたので今回もなぞってやってみました。 ちょっと不安なのがLinuxのカーネルのバージョンの都合上、 サポート切れのLEDEを使用しなければならないことです。
OpenWRTの19系を使用したかったのですが、Linux力が足りず、カーネルモジュールをうまくビルドできませんでした。 (モジュール自体はビルドできたが、使用しようとするとカーネルパニックで落ちる)
まぁあくまで一時的な利用に控えようと思います。
それはそれとして、2年前構築したときはグローバルIPが降ってきてた気がするんですが、 最近ではプライベートIPしか降ってこないんだろうか・・・? 困る・・・