chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

Mac 上で Ubuntu / java を走らせたい

課題:Mac上でDockerを走らせ、Docker上でUbuntu / javaを走らせたい*1
結果:これがベストかどうかわからないが以下で入った。入ったイメージはaarch64(Arm64bit)である。

% docker pull ubuntu
% docker run -it ubuntu

jdk-19_linux-aarch64_bin.tar.gz をDLして、Docker内の/usr/local/javaを作って展開した。結果、javaを入れられた。本当の目標は、Ubuntu/Java上でJavaMinecraftを走らせることだったが、アーキの壁を超えられずこの取り組みは諦めた。
詳細:
Dockerは走らせた。情報は以下、OS/Archは darwin/arm64になっている

% docker version
Client:
 Cloud integration: v1.0.24
 Version:           20.10.14
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 24 01:49:20 2022
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.8.2 (79419)
 Engine:
  Version:          20.10.14
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.15
  Git commit:       87a90dc
  Built:            Thu Mar 24 01:45:44 2022
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.5.11
  GitCommit:        3df54a852345ae127d1fa3092b95168e4a88e2f8
 runc:
  Version:          1.0.3
  GitCommit:        v1.0.3-0-gf46b6ba
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

X86アーキのイメージもqemuによるエミュレーションで動かせるらしい。ただ、エミュレートするので実行が遅くなる。できればネイティブで動くArmイメージを選択するのが良いらしい。だから、、Ubuntu ARM版をPullすればいいのかと。
何も指定せずにpullしてみる

% docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
56a2caa6b2c6: Pull complete 
Digest: sha256:7cfe75438fc77c9d7235ae502bf229b15ca86647ac01c844b272b56326d56184
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

% docker images
REPOSITORY     TAG       IMAGE ID       CREATED        SIZE
ubuntu         latest    53f68adfb4a9   3 days ago     69.2MB

どんな素性のUbuntuが落とされたのか不明。
起動してみる。aarch64となっており、 ARM Archtecture 64bit版であることがわかる。だから、、特に指定せずとも普通の操作でARM版のOSが入るようであった。

% docker run -it ubuntu
root@62911f950342:/# hostname
62911f950342
root@62911f950342:/# uname -a
Linux 62911f950342 5.10.104-linuxkit #1 SMP PREEMPT Thu Mar 17 17:05:54 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
root@62911f950342:/etc# cat os-release 
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

Arm用のUbuntuを導入できたので、次はJavaを入れてみる。

JDKインストレーション・ガイドより
Linuxプラットフォームに64ビットJDKをインストール
Linux aarch64 (64ビットARM)システム: jdk-16.interim.update.patch_linux-aarch64_bin.tar.gz

上記をUbuntuに入れたらいいのだろうか。

LinuxプラットフォームでのJDKのインストール

Java 19 and Java 17 available now

Arm 64 Compressed Archive	179.90 MB	
https://download.oracle.com/java/19/latest/jdk-19_linux-aarch64_bin.tar.gz ( sha256)

Java Downloads | Oracle 日本

コンテナにcopy

docker cp jdk-19_linux-aarch64_bin.tar.gz  62911f950342:/usr/local/java

コンテナで展開、実行確認

#  cd /usr/local/java/
#  tar xvfz jdk-19_linux-aarch64_bin.tar.gz 

root@62911f950342:/usr/local/java/jdk-19.0.1/bin# pwd
/usr/local/java/jdk-19.0.1/bin

root@62911f950342:/usr/local/java/jdk-19.0.1/bin# ./java --version
java 19.0.1 2022-10-18
Java(TM) SE Runtime Environment (build 19.0.1+10-21)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)

上記の通り動かすことができて、Java実行環境もできた。ということで、MinecraftJava版(他の Linux ; Minecraft.tar.gz) を入手して展開、起動してみた。すると、Java版と言いながら、x86アーキとなっているようで、x86用のlibが無いと怒られる*2

root@62911f950342:/usr/local/Minecraft/minecraft-launcher# ls
minecraft-launcher
root@62911f950342:/usr/local/Minecraft/minecraft-launcher# file minecraft-launcher 
minecraft-launcher: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=13e4acebc63a3d601754a6481f297389a4d5bc73, stripped
root@62911f950342:/usr/local/Minecraft/minecraft-launcher# ./minecraft-launcher 
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory

上記よりJava/Linux版はx86アーキ前提のようである。走らせるには、qemuによるエミュレーションが必要になる。動くのは動くだろうが、遅くなるだろう。エミュレーションが不要なarm用アーキのMinecraftMac用というやつだろう(この場合、普段使っている環境に入れることになる。なお、OSは違うがAndroid版はARMアーキらしい)。M1 MAC用のMinecraftがあるのかどうか不明。自分はネイティブの環境を汚したく無いので、できればややこしいソフトはDocker内で走らせたいのだが。

隔離されたDocker環境にMinecraftをインストールしたかったが、アーキの壁を解消できず、ネイティブの環境(普通につかっているMacOS)に入れることにした。MAC用のMinecraftをDLしてインストールすると普通に動いた(当たり前だが)。ただ、、このアプリがどういう素性で動いているのか不明。Java版だからアーキには依存しないと言えそうだが、Java Runtimeがx86だとエミュレーションしながら動いていることになる。
以下はMacOS上で動いている画面。多分エミュレートしながら動いてるのだろう。(と思ったらこれはラウンチャーだった。ここから実行したいバージョンを選択して本体を起動することになる。。ふむふむ) (現在のバージョンは1.19.2)


Download options for Minecraft | Minecraft

■追記
もう一台のPCはWindows環境で、WSL上でUbuntuが走る。こっちのUbuntux86アーキなので問題なくラウンチャ―が走って、Java版のMinecraftは走った。10年ぐらい前のノート(CF-F10)なので非常に遅い。だが、、動くには動く。

*1:最終的にはLinuxMineCraftを走らせたい

*2:javaのランタイムが同梱されており、ランタイムがx86なのだそうだ。だが、、minecraft-launcherのサイズは1.6Mと非常に小さく、これが本体とは思えないのだが