tmytのらくがき

個人の日記レベルです

WSLで32bitなELFが動いた(ただしQEMU)

TL;DR

  • binfmtとQEMUで32bitなELFを実行する
  • WSLのbinfmtはOCフラグがサポートされてない
  • sudo update-binfmts --install qemu-i386 /usr/bin/qemu-i386-static --magic '\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'

背景

はぁ…WSLにbinfmt_miscなんで実装されないんだろ…と思いながらUserVoiceを眺めていたところ、よくよく調べたらWSL空間からWin32のバイナリを呼び出す仕組みを実現するためにRS2の時点で実装されていたのでした。なんと1年以上前…当時Win32 PEを実行するのにMZヘッダが見つかったら/initに実行を委譲するよ。みたいな記事を読んだはずなのにすっかり忘れていた。

binfmtが使えるならi386 ELFのmaskを設定してやれば動くんじゃないの…と思ったのが6時前。思い立ってしまったら気になって眠れなくなったのでやってみました。

手順

  1. qemu-user-staticをインストール
  2. update-binfmtsでハンドラを登録

まずqemu-user-staticをインストール。

$ sudo apt-get install qemu-user-static

qemu-user-static用のbinfmtが自動登録されるけど、これにi386はない*1のでハンドラ手動登録。

$ sudo update-binfmts --install qemu-i386 /usr/bin/qemu-i386-static --magic '\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'

うじゃうじゃたくさん書いてあるのはELFのヘッダを検出するマジックとマスク。ELFの仕様ともともとあったqemu-user-staticのマジックを眺めながらいい感じにしたらこうなりました。

なぜかこうするとうまく動くようになるんですが、どうやらWSLのbinfmt_miscはOCフラグというのに対応していないらしい。こうやってやるといい感じに動くらしい*2

動作確認

せっかくなので32bit ELFなバイナリを作って実行してみる。

$ sudo apt-get install build-essential libc6-dev-i386
$ vi test.c
#include<stdio.h>

int main(){
  puts("Hello World");
  return 0;
}
$ gcc -m32 test.c
$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1e13e8c9bba4368d713095984853243c85b65768, not stripped
$ ./a.out
Hello World

ちなみにupdate-binfmtsしない場合はこうなる。

$ ./a.out
-bash: ./a.out: cannot execute binary file: Exec format error

おまけ

WSLのインスタンスが全部終了するとbinfmtのエントリが消し飛ぶので何らかの方法で復元してください

*1:普通のx86_64ならi386バイナルが直接実行できるので登録する意味がない

*2:https://github.com/Microsoft/WSL/issues/2620#issuecomment-374490404

ChromeからWindows Timelineにアクティビティを登録するアドオンを公開しました

とくになんの下調べもせず、作ったら面白そうなのでつくっただけです。 もしかしたらすでにもっと出来がいいやつがあるかも。

Windows TimelineってのはApril 2018 Updateで追加された新機能で赤丸のところをクリックすると下のほうに出てくるこれです。

f:id:tmyt:20180524234316p:plain

Edge使ってるとここに表示したWebページが追加されていくんですけど、Chromeとかだと当然そういう機能はないので試しに作ってみました。

検索ヒットしないのでURLからどうぞ。

Aristea 2.0.1

新規ダウンロード提供を停止しました。といった次の日に言うのもなんですが、新規ダウンロード終了記念ということでAristea 2.0、本当のUWP版をリリースしました。

さっきGitのログを確認したところ、UWP版プロジェクトがスタートしたのは2015年10月だったので、リリースまで約2年半かかっていることになります。 Windows 10自体のバグとかいろいろあって伸び伸びになっていたわけですね…

UWPになった、また機能強化でいくつか新機能が増えています。

  • ウィンドウへ画像のドラッグドロップ
  • 左のアカウントが並んでいるところの並び替え
  • カラムごとのサムネイル表示非表示
  • 1行表示
  • ペイント画面を独立したウィンドウに変更
  • UWPになって若干のパフォーマンス向上
  • プッシュ通知 (テスト中)のテスト中が外れた*1

これ以外に不具合もちょこちょこ修正しています。 UWPになったことで、ちょこちょこバグと思わしき現象を確認しているのでそれはおいおい修正していきます。

現時点で計画されているアップデートは、8月中頃のUserStream終了に合わせたUserStream機能とイベントカラム、プッシュ通知の削除です。 それ以外の機能追加、不具合修正はこれに限らず随時リリースされる予定です。たぶん。

Aristeaは新規ダウンロードは終了しましたが、8月までは全機能が完全に使用できるままです。その間まではぜひご利用ください。

*1:このままだと最後までテスト中のままな気がしたのでせっかくだから外しました

DellのXPS 13(9370)のBIOSアップデート

2月ごろにXPS 13(9370)を買っていたのですが、キーボードを高速に*1入力すると文字を取りこぼす。という現象に遭遇してました。

もしかしたら単純にタイプミスなのかもしれないけど…と思いつつサポートメールを送信したら、

ゆっくり入力してください

って言われてしまい、Twitterサポートに泣きついたところ、本国の開発部門へエスカしてもらえたようで本日BIOSアップデートが公開されました。

Fixes:
- Skips keys when typing fast
Dell XPS 13 9370 System BIOS | Dell 日本

とあるように、このアップデートをインストールするとキーの取りこぼしが全くなくなりました。見違えるようです。

わけのわからないクレームを本国までエスカしてくださったサポート担当の方に感謝です。

*1:といっても7key/secなのでそんなに早くないです

UserStreamの廃止日確定とAristeaの今後

日本時間2018/5/17付でAccount Activity API(以下AAAPI)がGAとなりました。それに伴い、UserStreamの廃止日が2018/8/16として正式発表されました。

これらの発表により、Aristeaの以下の機能が2018/8/16をもって使用できなくなります。

  • アプリでのUserStream
  • Push通知の受信
  • イベントカラムでの通知履歴

ホームタイムラインへはRESTでの使用は継続して可能ですが、15分15回のアクセスに制限されます。 また、Push通知は現在のサーバ維持費に加え、ユーザ当たり毎月12USDほどの追加費用が必要となるため、2018/8/16以降機能の提供は廃止となります。

また、これらに合わせてストアでの新規ダウンロードを終了しました。現在利用中の方は継続してダウンロード可能です。 残り3か月ですがぜひともご利用ください。

本件に伴う払い戻し等の対応ですが、購入後30日以内であればMicrosoftより払い戻しを受けることが可能なようです*1。 払い戻しをご希望の場合はMicrosoftサポートページを参照のうえ手続きをお願いいたします。

ご購入いただいたみなさま、いままで本当にありがとうございました。

Azureaの凍結が突然解除された話とかそのあたりの話

5月9日未明、Azureaの凍結が突然解除されました。いろいろアクションはしてたんですが、なんか突然解除されました。全く不明。 で、それに伴いいろいろお知らせです。

最初にアプリの使用可能状況についてのお知らせです。

まず、Azureaですが、PC版のトークンが削除となりました。以前からあるMobile版とトークンが統合となっています。Ver1.4.31でトークン統合版になっているので、PC版ご利用の皆様はVer1.4.31に更新のうえ、認証情報を取り直してください。

次に、Aristeaですが、Ver1.6.8でトークンが変更されています。アカウントの登録しなおしで現時点で使用可能となっています。ぜひご利用ください。 また、Ver1.6.8でトースト通知からのリプライなどのアクションが使用できない不具合が発生しています。これは次バージョンで修正されます。

最後に、Amelloidesですが、現時点で凍結中です。Twitterの気分次第で復活の可能性はありますが現状不明です。
追記(2018/5/15): 5/11付けで凍結が解除されていました。

続いて、サポートOS変更のお知らせです。

AristeaのサポートOSが変更となります。

まとめると、PC向けリリースでWindows 10 14393までのバージョンが更新対象外となります。 Mobile向けは歴史的経緯によりもう少しだけサポートされる見込みです。

6月のUserStream廃止が延期されたのでもう少しTwitterを楽しむことができそうですね。

Surface Pro LTE Advancedを買いました

諸事情でSurface BookがJIS配列になったので手放しました。その結果、ペン対応のパソコンがなくなってしまってAristeaのお絵かき機能のデバッグができなくなってしまうのでSurface Pro LTE Advancedを買い足しました。これでペンのデバッグも安心。*1

LTEモデルなので当然SIMが刺さります、ちなみにこれはT-Mobile USAのSIM。このあとDMM MobileのSIMに入れ替えました。

セットアップ中にすでにDoCoMoって出ます。

初期インストールはWindows 10 Proの16299.248でした。

いままでLTEモデムの使えるPCが手元になかったので設定アプリの見たことない画面に出会ったり APNを書いたりしました。

一部MVNO含むキャリアはAPNがプリセットされているみたい。


ここで問題が起きました。

その後Insider PreviewのRelease Previewチャネルにして、17134.5をインストールするもやっぱり問題が起きます。

この時点で、Release Previewをインストールしてから一度Windowsを初期化しています。 しかし、IEが起動できない、ストアが起動できない、イベントビューアのXMLビューを開くとスナップインが例外を吐く、Chromeはエラーで死ぬとさんざんな状態でした。 ここで、コントロールパネルのセキュリティとメンテナンスを見に行くと、ディスクエラーの表示がありました。

この時のログをGistに添付してます。chkdsk.log · GitHub ログを見る感じ、明らかにだめなやつ。ほぼインストール直後の状態でこのような問題が起きているのはSSDの不良なのでは…ということであしたヨドバシカメラへ行ってくる予定です。


ところで、Surface ProシリーズはどうやらSamsung PM971が採用されているはず…なんですが、実際にベンチをとってみるとなんか遅い。

f:id:tmyt:20180507053644p:plain

バイスマネージャからディスクをチェックすると、どうやらIntel SSD PRO 6000P SERIESなSSDが使用されているようです。

f:id:tmyt:20180507053805p:plain

これはいったい…コスト削減なのか、供給できなくてなのか、排熱問題なのか、バッテリ問題なのか…原因は全くわかりませんが、どうやらSamsungではないようです。 評価用の機材なのでまぁいっちゃいいんですが、なんか遅いのはちょっと残念ですよね。


Surface Pro LTE AdvancedにはeSIMが内蔵されています。これを使えば、iPadApple SIMのように通信プランが簡単に購入できるはず…! 通信プランを購入するにはまず設定アプリからSIM 2を選択します。この”SIM 2"ってのがeSIMだそうです。わかりにくい。

f:id:tmyt:20180507054148p:plain

選択すると、いろんなところでデータ通信プランで接続が表示されます。

f:id:tmyt:20180507054326p:plain

これをクリックすると、モバイル通信プランアプリが起動してきて、データ通信契約を購入できる…はず…なんですが、どうやら日本では買えないようです?

f:id:tmyt:20180507054509p:plain

このeSIMはTransatelというキャリアのSIM 901というのがデフォルトで書き込まれているらしく、このキャリアでは日本を含むアジアでのサービスを展開しているようなのですが、 どうやら現時点では日本では使えないみたいです。おとなしくSIMを刺せということでしょう。

しかし、一度はeSIMを使ってみたいのでどこかまたサポートされている国へ出かけるしかないな…と思った今日この頃でした。

*1:ちなみにSurface Dialの画面に置いたときの操作も対応してるのでデバッグ用ととしては最適ですね