やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ラズパイ4にwineをインストールするも破損した box86

 Windowsアプリを動かすために。結果、正しくインストールできなくなった。オワタ……。

背景

 一般的なパソコンのCPUアーキテクチャx86である。それで作られたアプリをラズパイのCPUアーキテクチャARMで動作させたい。そのためにはラズパイOSをビルドするときにオプション指定するなどめちゃくちゃ厳しい。かつて断念したことがある。

 ノートPCでやったときは、起動したものの、まともに使えなかった。

 今回はbox86を使って簡単に導入する。

インストール

box86

 まずは以下を実行する。

git clone https://github.com/Botspot/pi-apps
./pi-apps/install

 つぎにマウスで操作する。

  1. デスクトップをみる
  2. Pi Appsアイコンがあるはず
  3. ダブルクリックして実行する
  4. ダイアログにて端末で実行する
  5. ToolsBox86
  6. Install
  7. 端末が出てきてインストールが開始する
  8. 完了すると30秒後に閉じる

 え、タイトルバーでかすぎ? なんか知らんけどある日突然こうなった。治らない。たすけて。

インストール・ログ

Installing Box86 with install-32 script
adding box86 repo...
--2021-08-09 11:34:04--  https://itai-nelken.github.io/weekly-box86-debs/debian/box86.list
itai-nelken.github.io (itai-nelken.github.io) をDNSに問いあわせています... 185.199.110.153, 185.199.111.153, 185.199.108.153, ...
itai-nelken.github.io (itai-nelken.github.io)|185.199.110.153|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 62 [text/plain]
`/etc/apt/sources.list.d/box86.list' に保存中

     0K                                                       100%  900K=0s

2021-08-09 11:34:05 (900 KB/s) - `/etc/apt/sources.list.d/box86.list' へ保存完了 [62/62]

adding key...
Warning: apt-key output should not be parsed (stdout is not a terminal)
OK
running 'sudo apt update'...

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

ヒット:1 http://ftp.jaist.ac.jp/raspbian buster InRelease
ヒット:2 https://download.mono-project.com/repo/debian stable-raspbianbuster InRelease
取得:3 https://itai-nelken.github.io/weekly-box86-debs/debian  InRelease [2,252 B]
ヒット:4 http://archive.raspberrypi.org/debian buster InRelease
取得:5 https://itai-nelken.github.io/weekly-box86-debs/debian  Packages [5,216 B]
7,468 B を 11秒 で取得しました (667 B/s)
パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
状態情報を読み取っています...
アップグレードできるパッケージが 2 個あります。表示するには 'apt list --upgradable' を実行してください。
installing box86...

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
状態情報を読み取っています...
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  gyp libjs-inherits libjs-is-typedarray libnode-dev libnode64 libssl-dev
  libuv1-dev lxplug-volume nodejs-doc python-colorzero
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  box86
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 2 個。
1,464 kB のアーカイブを取得する必要があります。
この操作後に追加で 7,455 kB のディスク容量が消費されます。
取得:1 https://itai-nelken.github.io/weekly-box86-debs/debian  box86 0.2.3+20210808.342ee455-1 [1,464 kB]
1,464 kB を 2秒 で取得しました (974 kB/s)
                                         以前に未選択のパッケージ box86 を選択しています。
(データベースを読み込んでいます ... 現在 205337 個のファイルとディレクトリがインストールされています。)
.../box86_0.2.3+20210808.342ee455-1_armhf.deb を展開する準備をしています ...
box86 (0.2.3+20210808.342ee455-1) を展開しています...
box86 (0.2.3+20210808.342ee455-1) を設定しています ...
restarting systemd-binfmt...

Installed Box86 successfully.

wine, winetricks

wget https://dl.winehq.org/wine-builds/debian/dists/buster/main/binary-i386/wine-devel-i386_5.21~buster_i386.deb
wget https://dl.winehq.org/wine-builds/debian/dists/buster/main/binary-i386/wine-devel_5.21~buster_i386.deb
dpkg-deb -xv wine-devel-i386_5.21~buster_i386.deb wine-installer
dpkg-deb -xv wine-devel_5.21~buster_i386.deb wine-installer
sudo mv wine-installer/opt/wine-devel ~/wine
sudo ln -s ~/wine/bin/wine /usr/local/bin/wine
sudo ln -s ~/wine/bin/winecfg /usr/local/bin/winecfg
sudo ln -s ~/wine/bin/wineserver /usr/local/bin/wineserver
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
sudo chmod +x winetricks
sudo cp winetricks /usr/local/bin
sudo apt-get install cabextract -y 

初期化

box86 wine wineboot

 途中で以下2つのアプリをインストールさせられた。

ログ

$ box86 wine wineboot
Box86 with Dynarec v0.2.3 342ee455 built on Aug  8 2021 09:30:54
Box86 with Dynarec v0.2.3 342ee455 built on Aug  8 2021 09:30:54
wine: created the configuration directory '/home/pi/.wine'
Box86 with Dynarec v0.2.3 342ee455 built on Aug  8 2021 09:30:54
0048:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hr 0x80004002
0048:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, hr 0x80004002
0048:err:ole:apartment_get_local_server_stream Failed: 0x80004002
0050:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hr 0x80004002
0050:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, hr 0x80004002
0050:err:ole:apartment_get_local_server_stream Failed: 0x80004002
0050:err:ole:start_rpcss Failed to open RpcSs service
0068:fixme:urlmon:InternetBindInfo_GetBindString not supported string type 20
0068:fixme:file:NtLockFile I/O completion on lock not implemented yet
0068:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0068:err:mscoree:LoadLibraryShim error reading registry key for installroot
0068:err:mscoree:LoadLibraryShim error reading registry key for installroot
0068:err:mscoree:LoadLibraryShim error reading registry key for installroot
0068:err:mscoree:LoadLibraryShim error reading registry key for installroot
007c:fixme:file:NtLockFile I/O completion on lock not implemented yet
007c:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
007c:err:mscoree:LoadLibraryShim error reading registry key for installroot
007c:err:mscoree:LoadLibraryShim error reading registry key for installroot
007c:err:mscoree:LoadLibraryShim error reading registry key for installroot
007c:err:mscoree:LoadLibraryShim error reading registry key for installroot
007c:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 5)
007c:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 5)
0068:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0068:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0090:fixme:urlmon:InternetBindInfo_GetBindString not supported string type 20
0090:fixme:file:NtLockFile I/O completion on lock not implemented yet
0090:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0024:err:environ:run_wineboot boot event wait timed out
Box86 with Dynarec v0.2.3 342ee455 built on Aug  8 2021 09:30:54
$ 0090:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0090:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0040:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
00a8:fixme:iphlpapi:NotifyIpInterfaceChange (family 0, callback 0x340f537, context 0x7018f38, init_notify 0, handle 0x7a7fcc4): stub
0040:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0040:err:module:open_builtin_file failed to load .so lib "/home/pi/wine/lib/wine/winegstreamer.dll.so"
wine: configuration in L"/home/pi/.wine" has been updated.

 なんか上記で完了せず停止しているのだが。と思ったらEnterキーを押したらちゃんと$が出て終わった。

 途中で$が出ておかしくなったりもしている。成功しているっぽいので、まあいいか。

インストール確認

 パスを確認する。

$ which box86
/usr/local/bin/box86
$ which wine
/usr/local/bin/wine
$ which wineserver
/usr/local/bin/wineserver

 上記wine, wineserverは、~/wine/bin/配下にある同名ファイルのシンボリックリンクである。

$ ls -l /usr/local/bin | grep wine
lrwxrwxrwx 1 root root       22  89 11:21 wine -> /home/pi/wine/bin/wine
lrwxrwxrwx 1 root root       25  89 11:21 winecfg -> /home/pi/wine/bin/winecfg
lrwxrwxrwx 1 root root       28  89 11:21 wineserver -> /home/pi/wine/bin/wineserver
-rwxr-xr-x 1 root root   885005  89 11:27 winetricks

設定

 以下のスクリプトを実行する。

cd ~/wine/bin/
mv wine __wine
mv wineserver __wineserver
echo '#!/bin/sh' > wine
echo 'box86 ~/wine/bin/wine "$@"' >> wine
echo '#!/bin/sh' > wineserver
echo 'box86 ~/wine/bin/wineserver "$@"' >> wineserver
chmod +x wine
chmod +x wineserver

 やったことは単純。wineとwineserverをBox86経由で呼び出すよう変更しただけ。

~/wine/bin/wine

#!/bin/sh
box86 ~/wine/bin/wine "$@"

~/wine/bin/wineserver

#!/bin/sh
box86 ~/wine/bin/wineserver "$@"

起動

 winetricksはBOX86_NOBANNER=1を付与しないと起動しない。

BOX86_NOBANNER=1 winetricks dotnet20sp2

日本語表示

BOX86_NOBANNER=1 winetricks fakejapanese_ipamona

出力ログ

------------------------------------------------------
warning: Your version of wine  is no longer supported upstream. You should upgrade to 5.x
------------------------------------------------------
Executing mkdir -p /home/pi
------------------------------------------------------
WINEPREFIX INFO:
Drive C: 合計 24
drwxr-xr-x  6 pi pi 4096  89 11:37 .
drwxr-xr-x  4 pi pi 4096  89 11:41 ..
drwxr-xr-x  6 pi pi 4096  89 11:36 Program Files
drwxr-xr-x  3 pi pi 4096  89 11:37 ProgramData
drwxr-xr-x  4 pi pi 4096  89 11:37 users
drwxr-xr-x 17 pi pi 4096  89 11:41 windows

Registry info:
/home/pi/.wine/system.reg:#arch=win32
/home/pi/.wine/user.reg:#arch=win32
/home/pi/.wine/userdef.reg:#arch=win32
------------------------------------------------------
------------------------------------------------------
warning: wine cmd.exe /c echo '%AppData%' returned empty string, error message "" 
------------------------------------------------------

 バージョンが古いってよ。そういえばバージョンなんて気にしなかった。参考URLまんまコピーしたよ。やり直そう。

$ unrar xy '/tmp/work/AKM322 MIDI Editor V0.1 20151023A.rar'
$ wine "/tmp/work/AKM322 MIDI Editor V0.1 20151023A/AKM322 MIDI Editor V0.1 20151023A/AKM322_MIDI_Editor.exe"
Box86 with Dynarec v0.2.3 342ee455 built on Aug  8 2021 09:30:54
Error: reading elf header of /home/pi/wine/bin/wine, try to launch natively instead
Segmentation fault

最新版にしたかったが壊れた

※これ実行したら壊れます!

※これ実行したら壊れます!

※これ実行したら壊れます!

 以下URLから最新版を探す。

 以下スクリプトでバージョン値を含んだファイル名を変更する。

DEB_WINE1=wine-devel-i386_6.14~buster-1_i386.deb
DEB_WINE2=wine-devel_6.14~buster-1_i386.deb
wget https://dl.winehq.org/wine-builds/debian/dists/buster/main/binary-i386/$DEB_WINE1
wget https://dl.winehq.org/wine-builds/debian/dists/buster/main/binary-i386/$DEB_WINE2
dpkg-deb -xv $DEB_WINE1 wine-installer
dpkg-deb -xv $DEB_WINE2 wine-installer
sudo mv wine-installer/opt/wine-devel ~/wine
sudo ln -s ~/wine/bin/wine /usr/local/bin/wine
sudo ln -s ~/wine/bin/winecfg /usr/local/bin/winecfg
sudo ln -s ~/wine/bin/wineserver /usr/local/bin/wineserver

 実行すると以下エラー。犯人はdpkg-deb -xv $DEB_WINE1 wine-installer

...
dpkg-deb (サブプロセス): アーカイブメンバーを 'wine-devel-i386_6.14~buster-1_i386.deb' から伸張パイプにコピーできません: ファイルまたはストリームの予期しない終わりです
dpkg-deb (サブプロセス): アーカイブメンバーを伸張しています: lzma エラー: 予期しない入力の終わりです
tar: アーカイブ中に予期せぬ EOF があります
tar: アーカイブ中に予期せぬ EOF があります
tar: Error is not recoverable: exiting now
dpkg-deb: エラー: tar subprocess returned error exit status 2

 なんか正常にインストールできなかった。

 元のバージョンに戻そうとして再びやったけど、今度はそれされインストールが正常にできなくなってしまった。

 もう元に戻せません。たすけて。

所感

 ぜんぜん簡単じゃなかった。だまされた。

 どんどんバグってゆく。もうやだ。たすけて。

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux