2021年5月31日月曜日

Linux版 UnityHub の headless に対応した Docker image

Linux 版 Unity 使いたいので UnityHub CLI でインストールしようと思ったらめんどくさかったので備忘録。

Feedback - Headless Mode Isn't Really Headless - Unity Forum

なにが面倒だったというと、 headless モードが headless モードじゃなくて docker とか VM とかでディスプレイない環境だと起動ができないのです。

こんな感じのエラーで起動できません。

(unityhub-bin:919): Gtk-WARNING **: 08:08:17.580: cannot open display: 

で、xvfb で回避できるのですが、すでに回避策を講じた Docker image を同僚に教えてもらいました。このイメージを使ったら Unity のインストールとかの自動化も簡単にできそうです。
https://hub.docker.com/u/unityci

Dockerfile はこれ
https://github.com/game-ci/docker/blob/main/hub/Dockerfile

中身を読むとわかりますが、AppImage をばらして xvfb-run してます。
ちょっと気になるのは、ばらした AppImage が / に展開されることくらいですかねぇ。
Docker なら、まぁいいかもしれませんがどこかのインスタンスに入れるなら嫌だなぁと思ったので、自分なりに書き直してみました。

書き直し
イメージ

できあがったイメージと Dockerfile はこちらです。
https://hub.docker.com/r/srzzumix/unityhub
https://github.com/srz-zumix/docker-unityhub

書き直してわかったポイント

PR のコメントとして残してあります。

  • unityci/hub image は APPDIR が未定義なため / で実行されていた
  • zenity がないと unityhub-bin 起動後に進まなかった
  • ~/.config/Unity Hub/eulaAccepted ファイルを作成して EULA 確認をスキップ
  • unityhub.desktop ファイルにバージョンが書いてある
  • Mac 版だと -- --headless help のようにオプションを指定するが Linux 版で -- つけると先に進まない

以上、回避策など取らずに使えるようになってくれると嬉しいですね。では。

2021年5月27日木曜日

[Debian] pyenv install で Missing the OpenSSL lib? で失敗する場合の対応と 3.0~3.10 全部入り Dockerfile 書いた

 「Missing the OpenSSL lib?」で検索するといろいろ対策方法が出てきますが、大体ここに書いてあるので自分の環境に合わせて方法を見れば良いと思います。
https://github.com/pyenv/pyenv/issues/950

本記事では「Debian」環境で対処した方法と、pyenv install で 3 系を全部入れてみた Dockerfile を紹介します。

対処方法

libssl-dev をアンインストールして libssl1.0-dev をインストールする。以上。
apt-get remove -y libssl-dev && apt-get install -y libssl1.0-dev

OpenSSL 1.1 に対応してないかららしいですね。
ちなみに 3.10 系は libssl1.0-dev だと逆にダメでした。

全部入り Dockerfile
# development env

ARG VERSION=3.7-stretch
FROM python:$VERSION
ARG VERSION

LABEL maintainer "srz_zumix <https://github.com/srz-zumix>"

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN apt-get update -q -y && \
    apt-get install -y --no-install-recommends \
        make \
        build-essential \
        libssl-dev \
        zlib1g-dev \
        libbz2-dev \
        libreadline-dev \
        libsqlite3-dev \
        wget \
        curl \
        llvm \
        libncurses5-dev \
        xz-utils \
        tk-dev \
        libxml2-dev \
        libxmlsec1-dev \
        libffi-dev \
        liblzma-dev \
        && \
    apt-get remove -y libssl-dev && \
    apt-get update -q -y && \
    apt-get install -y --no-install-recommends libssl1.0-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ENV PATH="/root/.pyenv/bin:${PATH}"
RUN curl https://pyenv.run | bash && \
    echo "eval $(pyenv init -)" >> ~/.bashrc && \
    echo "eval $(pyenv virtualenv-init -)" >> ~/.bashrc
RUN	pyenv install -s "$(pyenv install -l | grep -e '\s3\.9[^0-9].*' | tail -1 | xargs echo -n)"
RUN	pyenv install -s "$(pyenv install -l | grep -e '\s3\.8[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.7[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.6[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.5[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.4[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.3[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.2[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.1[^0-9].*' | tail -1 | xargs echo -n)"
RUN pyenv install -s "$(pyenv install -l | grep -e '\s3\.0[^0-9].*' | tail -1 | xargs echo -n)"

RUN apt-get remove -y libssl1.0-dev && \
    apt-get update -q -y && \
    apt-get install -y --no-install-recommends libssl-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
RUN pyenv install -s "$(pyenv install -l | grep -v 'dev' | grep -e '\s3\.10[^0-9].*' | tail -1 | xargs echo -n)"  

以上。