T480sの充電を速くする方法

画面を閉じてスリープ状態にすると充電が速くなるようだ。Innergieの60W充電器が手に入ったのでACアダプタ側に接続するタイプの電流計(本体側のType-Cコネクタに接続してはINとOUTが逆なので測れなかった)を挟んで眺めてみたら、起動状態よりスリープ状態の方が流れる電流が多かった。

再び試してみたら変わらなかった。

新しいstrongswanにVPN接続してもパケットが通らなかった

自宅のネットワークにアクセスできるようにIPSec/L2TPのVPNサーバーを使っていた。strongswanとxl2tpdを利用している。

Debian JessieだったかStretchで使っていた設定ファイルをArch Linux ARMにそのまま移した。最新版では使えなくなった設定があるのでsudo journalctl -fで出てくるエラーをつぶして、サービスが動くようにした。

しかし、パケットが通らない。サーバーからpingを打っても、Destination Host Unreachableだった。

LANのip address rangeが192.168.0.0/24で、xl2tpdのip range =  192.168.0.200-192.168.0.220 から 192.168.2.200-192.168.2.220 sudo iptables に変えた。(local ipも合わせる)そして、sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE でNAT通すようにしたら、LANにアクセスできるようになった。

しかし、昔の設定が使えないのは謎なので、さらに調べていたら、どうもルーティングテーブルがおかしい。ip rangeを192.168.0.0/24にしている状態で、VPN接続を行う。そして、ip route get 192.168.0.200を実行すると

$ ip route get 192.168.0.200
192.168.0.200 dev eth0 table 220 src 192.168.0.25 uid 1001
cache

このようになる。

なんかよくわからないtable 220にppp0ではなくeth0経由で通信しようするように設定されている。とりあえず、ip route flush table 220(違ったかも)でルーティングテーブルのこのエントリを消すことで正しくVPNで接続したiPhoneにpingが通るようになった。

https://wiki.strongswan.org/issues/248

If I let charon (and not updown.sh) install the routes (install_routes=yes), this is what happens (10.32.32.200 is the ‘other side’):

とあるので、install_routesというキーワードをヒントに検索したら、次のような設定があることが判明した。

https://wiki.strongswan.org/projects/strongswan/wiki/StrongswanConf

charon.install_routes yes Install routes into a separate routing table for established IPsec tunnels. If disabled a more efficient lookup for source and next-hop addresses is used since 5.5.2.

デフォルトではyesになっているのをnoに変更したら直った。設定ファイルは /etc/strongswan.d/charon.confにあった。

これで、なんとか使えるようになった。

Raspberry Piで新しめのLIRCを使う

Arch Linux ARMとRaspberry Pi 3で使おうとしたが、以下のようなエラーが出て使えなかった。

$ irrecord --device=/dev/lirc0 MyRecord
Using driver devinput on device /dev/lirc0
Driver `devinput' not found (wrong or missing -U/--plugindir?).
accent           alsa_usb         asusdh           atilibusb
atwf83           audio_alsa       awlibusb         bte
bw6130           commandir        creative         creative_infracd
default          dfclibusb        dsp              dvico
ea65             file             ftdi             ftdix
girs             i2cuser          irlink           irtoy
livedrive_midi   livedrive_seq    logitech         macmini
mouseremote      mouseremote_ps2  mp3anywhere      mplay
mplay2           pcmak            pinsys           pixelview
samsung          sb0540           silitek          sonyir
srm7500libusb    tira             tira_raw         udp
uirt2            uirt2_raw        usb_uirt_raw     usbx
zotac

/etc/lirc/lirc_options.confのdriverをからdevinputからdefaultに変更すると使えるようになる。

# These are the default options to lircd, if installed as
# /etc/lirc/lirc_options.conf. See the lircd(8) and lircmd(8)
# manpages for info on the different options.
#
# Some tools including mode2 and irw uses values such as
# driver, device, plugindir and loglevel as fallback values
# in not defined elsewhere.

[lircd]
nodaemon        = False
driver          = default
device          = auto
output          = /var/run/lirc/lircd
pidfile         = /var/run/lirc/lircd.pid
plugindir       = /usr/lib/lirc/plugins
permission      = 666
allow-simulate  = No
repeat-max      = 600
#effective-user =
#listen         = [address:]port
#connect        = host[:port]
#loglevel       = 6
#release        = true
#release_suffix = _EVUP
#logfile        = ...
#driver-options = ...

Raspberry Pi 3をaarch64で動かす

cpuinfoとopenssl speedの結果から見るに、aesアクセラレーターは無いっぽい?あるいは認識されていないのか。パフォーマンスも案の定32bitと比べて悪い様だ。これは、A53が64bit命令を実行できるようにしているのはbig.LITTLEとして使っている場合、突然パフォーマンスコアから省電力コアに切り替わる際に64bit命令が実行できなくて不正な命令になってしまうのを防ぐためで、高速に実行できるかどうかは考えていないためだったはず。

[alarm@alarm ~]$ cat /proc/cpuinfo
processor       : 0
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 1
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 2
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 3
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

[alarm@alarm ~]$ openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 4187159 aes-128 cbc's in 2.99s
Doing aes-128 cbc for 3s on 64 size blocks: 1135520 aes-128 cbc's in 2.99s
Doing aes-128 cbc for 3s on 256 size blocks: 291828 aes-128 cbc's in 2.99s
Doing aes-128 cbc for 3s on 1024 size blocks: 73494 aes-128 cbc's in 2.98s
Doing aes-128 cbc for 3s on 8192 size blocks: 9211 aes-128 cbc's in 2.99s
Doing aes-128 cbc for 3s on 16384 size blocks: 4600 aes-128 cbc's in 2.99s
OpenSSL 1.1.0i  14 Aug 2018
built on: reproducible build, date unspecified
options:bn(64,64) rc4(char) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/etc/ssl\"" -DENGINESDIR="\"/usr/lib/engines-1.1\""  -Wa,--noexecstack -D_FORTIFY_SOURCE=2 -march=armv8-a -O2 -pipe -fstack-protector-strong -fno-plt -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128 cbc      22406.20k    24305.44k    24985.94k    25254.31k    25236.29k    25206.15k

Raspberry Pi上のArch Linux ARMでAURのAsteriskをdistccで素早くビルドする

distccを使って、AURパッケージをビルドしようとしていた。しかし、何故かローカルでビルドされて、どうやってもスレーブにコンパイルが振られなかった。結局のところ、-march=nativeがgccの引数に与えられていたのが原因だった模様だった。menuselectでBUILD_NATIVEを無効にすることでビルドすることができた。Ryzen 7 1700を積んでいるPCではHyper-Vを使って8コア割り当てて、仮想マシン上でArch Linuxを走らせて、distccdを動かしている。x86_64 CPUを8コア利用することビルドは10分以内で終わった。configureに2,3分、圧縮にも同じくらいかかっているので、コンパイル自体は5,6分くらいだろうか。Raspberry Pi 3だけでビルドすると20分はかかった。ヒートシンクを取り付けていないので加熱でサーマルスロットリングがかかって遅かったかもしれない。

スレーブ側(PC)

こちらで紹介されているAURパッケージを入れる。/etc/conf.d/distccdを編集して、ローカルネットワークからジョブを送り込めるようにする。そして、 sudo systemctl start distccd-armv7hを実行して、distccdを走らせておく。

マスター側(Raspberry Pi)

~/distccd/hosts

192.168.0.XX:3635,lzo,cpp

trizen -S asteriskを実行した。

pkgbuildを編集するか聞かれたら編集するを選んで、下記のようにする。

build() {
cd ${pkgname}-${pkgver}
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --sbindir=/usr/bin
make menuselect
menuselect/menuselect --disable BUILD_NATIVE
make -j12
}

あとは適当に続行すればよい。

 

追記:日本語音声を入れ忘れていた。

make menuselect
menuselect/menuselect --enable CORE-SOUNDS-JA-WAV --enable CORE-SOUNDS-JA-ULAW
make -j4

Raspberry PiでiSCSIターゲットを利用したい場合Archを使うと楽かも

ArchLinux ARMのRaspberry Pi向けのカーネルには、iSCSIターゲットのカーネルモジュールが用意されているようだ(tar.xzの中身を見たら入っていた)。Raspbianを使わないでArchを使えば簡単にiSCSIターゲットを作れるかもしれない。

Debianの.bashrcは対話的でないと読み込まれない

ふと、.bashrcを見てみたら、次のような記載があった。

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

環境変数の設定をするためにcrontabでスクリプトを走らせるときに.bashrcを読み込んでいたが、無駄なことをしていたようだ。

Windowsでopensslクレートを使う

opensslクレートをGNU ABIで使おうとして苦労した。

MSVC ABIの場合は、特に苦労せず、すんなりとビルドできて、実行もできた。

MSYS2が必要

choco install msys2で入れた。chocolatey使っていなければ、普通にMSYS2をダウンロードしてインストールすればよいと思う。なお、今回はx86_64を使った。

MINGW64と同じOpenSSLが必要

こちらのサイトからダウンロードした。MSYS2に入っているOpenSSLとバージョンを合わせる必要がある。今回はWin64 OpenSSL v1.0.2pを利用した。v1.1系を入れると次のようなエラーが出てビルドできない。

$ OPENSSL_LIB_DIR=/c/OpenSSL-Win64 OPENSSL_INCLUDE_DIR=/c/OpenSSL-Win64/include /c/Users/Akimasa/.cargo/bin/cargo run
   Compiling openssl-sys v0.9.35
error: failed to run custom build command for `openssl-sys v0.9.35`
process didn't exit successfully: `C:\Users\Akimasa\Documents\src\rust_openssl\target\debug\build\openssl-sys-8515c615cbb8f8fa\build-script-main` (exit code: 101)
--- stdout
cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_GNU_OPENSSL_LIB_DIR
cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_GNU_OPENSSL_INCLUDE_DIR
cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
cargo:rustc-link-search=native=C:/OpenSSL-Win64
cargo:include=C:/OpenSSL-Win64/include
OPT_LEVEL = Some("0")
TARGET = Some("x86_64-pc-windows-gnu")
HOST = Some("x86_64-pc-windows-gnu")
TARGET = Some("x86_64-pc-windows-gnu")
TARGET = Some("x86_64-pc-windows-gnu")
HOST = Some("x86_64-pc-windows-gnu")
CC_x86_64-pc-windows-gnu = None
CC_x86_64_pc_windows_gnu = None
HOST_CC = None
CC = None
TARGET = Some("x86_64-pc-windows-gnu")
HOST = Some("x86_64-pc-windows-gnu")
CFLAGS_x86_64-pc-windows-gnu = None
CFLAGS_x86_64_pc_windows_gnu = None
HOST_CFLAGS = None
CFLAGS = None
DEBUG = Some("true")
TARGET = Some("x86_64-pc-windows-gnu")
HOST = Some("x86_64-pc-windows-gnu")
CFLAGS_x86_64-pc-windows-gnu = None
CFLAGS_x86_64_pc_windows_gnu = None
HOST_CFLAGS = None
CFLAGS = None
TARGET = Some("x86_64-pc-windows-gnu")
HOST = Some("x86_64-pc-windows-gnu")
CFLAGS_x86_64-pc-windows-gnu = None
CFLAGS_x86_64_pc_windows_gnu = None
HOST_CFLAGS = None
CFLAGS = None
running: "gcc.exe" "-O0" "-ffunction-sections" "-fdata-sections" "-g" "-fno-omit-frame-pointer" "-m64" "-I" "C:/OpenSSL-Win64/include" "-Wall" "-Wextra" "-E" "C:\\Users\\Akimasa\\Documents\\src\\rust_openssl\\target\\debug\\build\\openssl-sys-e711f0916b783511\\out\\expando.c"
exit code: 0
cargo:rustc-cfg=osslconf="OPENSSL_NO_SSL3_METHOD"
cargo:conf=OPENSSL_NO_SSL3_METHOD
cargo:rustc-cfg=ossl101
cargo:rustc-cfg=ossl102
cargo:rustc-cfg=ossl102h
cargo:rustc-cfg=ossl110
cargo:rustc-cfg=ossl110f
cargo:rustc-cfg=ossl110g
cargo:version_number=1010009f
cargo:version=110
cargo:patch=f
cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_GNU_OPENSSL_LIBS
cargo:rerun-if-env-changed=OPENSSL_LIBS
cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_GNU_OPENSSL_STATIC
cargo:rerun-if-env-changed=OPENSSL_STATIC

--- stderr
thread 'main' panicked at 'OpenSSL libdir at `C:/OpenSSL-Win64` does not contain the required files to either statically or dynamically link OpenSSL', C:\Users\Akimasa\.cargo\registry\src\github.com-1ecc6299db9ec823\openssl-sys-0.9.35\build/main.rs:595:13
note: Run with `RUST_BACKTRACE=1` for a backtrace.

ビルドする

普通にVisual Studio CodeのPowerShellからcargo buildでビルドしたが…

 Running `target\debug\rust_openssl.exe`
error: process didn't exit successfully: `target\debug\rust_openssl.exe` (exit code: 3221225477)

こんなエラーが出て実行できないバイナリが出てくる。

$ OPENSSL_LIB_DIR=/c/OpenSSL-Win64 OPENSSL_INCLUDE_DIR=/c/OpenSSL-Win64/include /c/Users/Akimasa/.cargo/bin/cargo run

先ほどにも出てきたが、MINGW64を使って上記のコマンドを実行する必要がある。

こちらの投稿が参考になった

念のためもう一度試したら、PowerShellでもビルドが通って、実行もできたので頭を抱えている。

下記のようにOPENSSL_LIB_DIRとOPENSSL_INCLUDE_DIRを指定する必要がある。あと、MINGW64(自分の場合は”C:\tools\msys64\mingw64\bin”だった)へPATHを通す必要もある。

$env:OPENSSL_LIB_DIR="C:\OpenSSL-Win64\"
$env:OPENSSL_INCLUDE_DIR="C:\OpenSSL-Win64\include"
$env:PATH="$env:PATH;C:\tools\msys64\mingw64\bin

 

ThinkPad T480sを入手した

USB-Cポートが怪しげな感じで、サポートも改善するつもりが無いポリシーだという点以外、特に不満は無い。USB-Cが採用されて日が浅いので、仕方がない。(なお、この記事は必要に応じて加筆・修正されている。最終更新:8/22 部品販売について追記)

良かった点

Windows Helloの顔認証

結構早い。開いたら瞬時にログインされる。

高解像度ディスプレイ

Retina Displayみたいな奴。フルHDの通常のモデルよりも発色が良いとレビューサイトに書いてあった。sRGBのほとんどをカバーしていたとか。

NVMe SSD(OPAL対応)

常に暗号化されている。パスワードをかけて安全に使うことができる。普段はパスワードをかけていなくても、常に暗号化されているので、暗号鍵を破棄することで瞬時に全体を消すことができる。これは便利。修理に出すときに全セクタ書き込みとかしなくても瞬時に消去できる。ただ普通のSSDでもSecure Eraseできれば、それで充分ではあるが…

保証期間

到着まで時間がかかるからか、少し保証期間に余裕がある。1年2か月だった。

また、保証期間内なら後からアップグレードできる。1万円ちょい足せば1年保証を3年保証にできたりする。

修理

PC Watchの記事によれば、NEC PC群馬事業所で修理されるとのことだ。到着して1時間半ほどで修理が終わった例もあるようだ。自分の場合は首都圏から出したが、引き取りの翌日の8/15に到着して、8/20に修理完了し発送、8/21には手元に戻ってきた。ちなみに、修理に出したが問題は解決していない。技術サポートではポリシーで周辺機器の相性は保証できないといわれたが、リペアセンターではiPhoneを使った動作確認を行ったようだ。この点は評価したい。非常に良いと思う。が、一貫しないポリシーだとも感じた。

CRU

キーボードなどはパーツを送ってきてもらって自分で修理できるというIBM時代からのCRUの制度が今も続いているはず。キーボードなどはパーツを送ってきてもらって自分で修理できる。参考までに2004年の記事を挙げておく

封印シールが無い

SSD、メモリを増設しても保証が切れない(はず)。裏蓋に封印シールなどは無く、特殊なねじでもなく、普通のドライバーで開けられる。ただ、修理に出すときは増設したパーツは元に戻した方が良さそうだ。それと、ナイロン被覆ねじが使われていて、緩みにくいようになっているらしいので、ねじの再利用は控えた方がよいのかもしれない。

修理用部品販売

パーツを買って自分で修理することもできる。保守マニュアルも公開されていて、簡単にパーツを交換できるようになっている。

2018年8月現在、発送手数料は1部品につき1500円(税抜)かかるようだ。スマートセンターの修理窓口から見積もりの請求をしてもらった。利用する人が多いからか、対応はスムーズだった。見積書は郵送、FAX、メールの3種類から選べる。メールで送ってもらった。家のT450sのキーボードが消耗しているので交換しようと思って見積もってもらったが、部品代が13000円弱(税抜)でこれに加えて発送手数料がかかる。AliExpressや米Amazonのマーケットプレイスみたいな怪しげな所だと30ドルくらいで手に入りそう。米国のIBM部品販売では価格が1500ドルと出ていた。誤植なのか、希少なので値上がりしているのか不明だ。代替品だと60ドル台だった。これに加えて発送手数料は15ドルかかるようだ。スマートセンターから購入すると少し高い印象だが、純正部品を国内から安全に購入できるのでありがたい。

キーボードの打ち心地

ノートPCの新品のキーボードを使うのは久しぶりなので、打った感覚が少し新鮮だった。なんとなく、再生品で即日返品したSurface Bookに近い感じな気がする。非常にいい感じだ。

無線の安定性

以前使っていた、T430と比較して、Bluetoothが安定している気がする。距離が離れてもBluetoothヘッドホンが音飛びしない。

耐久性

MIL規格を通るといわれている頑丈さ。昔のモデルの方が頑丈だとか言う声も聞くが、昔(T430)も今(T480s)も剛性は充分に思える。指で押してみた限りでは、今の方がへこまない気がする。昔のは、表面がプラスチックで中にロールケージがある構造からか、押すと少しへこむ。

ただ、キーボードは排水構造が無くなっているので、もしかすると耐水性が落ちているのかもしれない。YouTubeに実際に水を掛けたら壊れた映像があった。

微妙な点

NEC品質?のサポート

あまりサポートを受けたことがないので、よくあることなのかもしれない。サードパーティのデバイスとの相性については保証外というポリシーだった。以前にもNEC系列のサポートを受けた時に同じような対応だった。

以前、AtermでRaspberry Piとの相性問題が発生したことがあった。再現方法等詳細を送ったが、対応するつもりは無い様だった。

今回はThinkPadとNECのLAVIE Direct NEXT, LAVIE Direct NSでもiPhoneを認識しない問題を確認できた。しかし、NECレノボ以外の多数のメーカー(東芝、富士通、LG、VAIO、ASUS)では何も問題が起こらなかった。このことを伝えたが、他社の周辺機器については保証しないサポートポリシーなので、対応するつもりは無い様だ。

サードパーティの製品についてサポートを行わないのは、ある程度理解できる。中国の聞いたことも無いメーカーが出しているデバイスを認識しないとか言われても困る。しかし、iPhoneという日本では半数近くの人が使っているデバイスで起こる問題すら対応しないというのは、どうかと思う。しかも、NECレノボに限って問題が起こっていて、他社製品では起こらない問題だ。自分の製品がおかしいとは思わないのだろうか。そもそも、今時、相性問題なんて起こして恥ずかしくないんだろうか。もっとも、iPhoneがUSBデバイスとしておかしい可能性も考えられるが…

USB Type-Cポートが相性問題を起こしやすい

USB-Cケーブルで手元にあるEssential Phone PH-1とiPhone SEを接続したが、両方とも充電はされるが、デバイスとして認識されない結果となった。著名ライターがDPケーブルでトラブったという話を聞いたことがある。そのため、USBケーブルが怪しいのではないかと思い、買い足した。しかし、ケーブルを変えても依然、問題は解決せずに電話が認識されない。また、手元にある2台の電話を各種他社製のPCに接続したところ、正常に認識されて、写真のアクセスができる。ThinkPad T480sのUSB-Cポートは充電や純正ドックとの接続くらいしか期待できないものだと考えた方が良さそうだ。

USB-CにはAlternate Modeというのが存在するらしく、ThunderboltやDisplayPort、HDMIの信号も通すことが可能らしいが、これらについてはテストできていない。いずれ、試そうと思う。

納期が長い。そして、変動する

自分の場合は届くまで2週間ちょいかかった。変動することはなかったが、1か月以上待つ人もいるとかいないとか。14日以上出荷されない場合はキャンセルが可能だったはずなので、必要に応じて利用するとよいかもしれない。