ARM SBC: 【失敗】Voicepeak体験版をArmbianで動かす
- Voicepeakが体験版は無料で利用できる、
- Raspbeery Piでも実行できる、
という話だったのでチャレンジしてみた。
Voicepeak体験版には、Linux版は入っているがx86-64向けのみ
ということに早速気づいたが、
動かせないかいろいろ試してみた。 (結果は失敗ですけど...)
dockerうまい人なら当然かもしれませんが、
armで x86_64 のバイナリ動かすためにいろいろ準備します。
とりあえず展開
Voicepeakの体験版を展開してファイルを確認する。
必要なのは多分下の2ファイル。
(eulaとかはちゃんと読んだ方がいいと思います...)
-+- Jashinchan-Free-Trial.vppk ... 邪心ちゃんのファイル | +- Linux --+-- Voicepeak-linux64.zip ... Voicepeak本体 | ... (他は省略)
Voicepeak-linux64.zip を解凍すると、こんな感じ
-+- voicepeak ... Voicepeak本体 | +- settings | +- usersettings | ... (他は省略)
voicepeakを動かすのでファイル内容を確認。
当たり前だけどx86-64用。
armbianではそのままでは動かせるわけないのでqemuで動かしてみる。
$ file voicepeak voicepeak: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2d03c539fdecf87c2648ab3f9d60cf0f029d3c09, for GNU/Linux 3.2.0, stripped
Docker準備
最近、よく使うdockerもarmbianに入ってたので簡単にinstall
$ apt install docker-ce docker-ce-cli docker-compose-plugin
x86-64の実行準備
- x86-64を実行するためには、qemuを使うのでinstall
- Debianの案内の通り、bullseyeにするためにbackportを使う
$ sudo apt install qemu-user-static/buster-backport $ sudo update-binfmts --display ... detector = qemu-x86_64 (disabled): package = qemu-user-static type = magic offset = 0 magic = \x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00 mask = \xff\xff\xff\xff\xff\xfe\xfe\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff interpreter = /usr/libexec/qemu-binfmt/x86_64-binfmt-P detector =
- x86-64を示したが、どのfmtもdisabledになっている。
binfmt-miscに対応していないkernel使っているのが原因のよう。
kernelの更新
- qemu入れたときにエラーメッセージが出ていたので対処
(私の場合は古いArmbian使ってたせいでbinfmt-miscが動きませんでした。) - binfmt-miscに対応していないkernelだったので最新版に更新する
(ほんとは linux-source をinstallして自分でビルドするつもりだったが)
(config見てるとbinfmt-miscが有効になってた)
$ apt install linux-image-current-*
- 私のSBCはSDカードで起動できるタイプなのでファイルを書き換えて調整する
(今確認すると、initrdは変更してなかった。動いてるからいいか...)
LABEL Armbian LINUX /vmlinuz-6.1.11-meson64 INITRD /initrd.img-5.9.0-arm-64 FDT /dtb/6-1-11/meson-gxm-q200.dtb ...
- 適用するために再起動。確認したらenabledになっていた。
$ sudo update-binfmts --display ... detector = qemu-x86_64 (enabled): package = qemu-user-static type = magic offset = 0
docker準備
- 公式でアナウンスされている環境であるubuntu 20.04をベースに動作させてみる
- 違うアーキテクチャを明示するのが、ちょっといつもと違う感じ
- docker-compose.yml: platformを明示
- Dockerfile: FROMをamd64/ubuntuでx86を明示
docker-compose.yml:
version: "3.9" services: voicepeak: platform: "x86_64" build: . volumes: - ./Voicepeak:/home/Voicepeak
Dockerfile:
FROM amd64/ubuntu:focal RUN apt update -y RUN apt install -y libasound2 RUN apt install -y libfreetype6 RUN apt install -y libcurl4 RUN apt install -y busybox
- 作成:
/usr/libexec/docker/cli-plugins/docker-compose build
- 実行:
/usr/libexec/docker/cli-plugins/docker-compose run voicepeak /bin/bash
実行したら、voicepeakに必要なものをlddで確認してみる。
(上のDockerfileには反映済み)
root@d7fecc44e7ec:/home/Voicepeak# ldd voicepeak librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00000040033f7000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x0000004003403000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00000040035e5000) libmvec.so.1 => /lib/x86_64-linux-gnu/libmvec.so.1 (0x0000004003734000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x0000004003760000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000000400377b000) /lib64/ld-linux-x86-64.so.2 (0x0000004000000000) libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x000000400396d000) libfreetype.so.6 => not found libcurl.so.4 => not found libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x0000004003a6a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x0000004003a70000)
結果 (動かず)
- 依存性が解決したので、実行してみる
- 邪心ちゃんのファイルを展開する
$ cd Voicepeak $ echo "テストですの" > test.txt $ cd usersettings/storage $ unzip ../../../Jashin*.vppk $ mv sylapck/* . $ /usr/libexec/docker/cli-plugins/docker-compose run voicepeak /bin/bash # cd /home/Voicepeak # ./voicepeak -t test.txt -o test.wav ...
いつまでたっても終了しない。
修正1. Xが実行できるようにする
WSLの方では問題なく実行できたが、
そっちはXが実行可能だった。
こっちでも実行可能にしてみる。
下の修正後、container内で xlogo
とか打つと
ちゃんとプログラムは起動するようになった。
結果は変化なし。
docker-compose.yml:
... voicepeak: ... environment: - DISPLAY=${DISPLAY} volumes: - ./Voicepeak:/home/Voicepeak - /tmp/.X11-unix:/tmp/.X11-unix
Dockerfile:
... RUN apt install -y xserver-xorg-video-dummy x11-apps CMD ["/usr/bin/busybox", "-f", "-h", "/home/wwwroot"]
修正2. Ubuntu-minimalも入れてみる
WSLの方では問題なく実行できたので、もうちょっとUbuntu準拠の環境にしてみる
結果は変化なし。
Dockerfile:
... RUN apt install -y ubuntu-minimal ubuntu-standard CMD ["/usr/bin/busybox", "-f", "-h", "/home/wwwroot"]
修正3. user権限で実行
Dockerfile:
... RUN /usr/sbin/useradd -u 1001 vpeak CMD ["/usr/bin/busybox", "-f", "-h", "/home/wwwroot"]
起動時に指定を増やす。
ファイルの権限とかは変更しておく。
$ /usr/libexec/docker/cli-plugins/docker-compose run -u vpeak \ voicepeak /bin/bash
結果2 (strace)
-
./voicepeak
を実行してると segfault したり
止まったりと、挙動は3通りぐらいあった - hostの方からstraceできたので、
ファイルアクセスなどは走っているのはわかった。 - ファイル書き込みしている場合もあったので、
もしかしたらファイルが出力されるか、と思ったが segfault でファイルが
閉じられないので、途中までの結果も取れない。
もういじるところ思いつかなかったので、ここで終了...
$ /usr/libexec/docker/cli-plugins/docker-compose run -u vpeak voicepeak \ /home/Voicepeak/voicepeak -s a -o /home/Voicepeak/a.wav & $ sudo strace -p $(pgrep voicepeak)
コメント
Comments powered by Disqus