Orange Pi 3 docker Ubuntu desktop

今回はubuntu IMAGEから前回のdebian同様に学習用desktopコンテナを作成してみたいと思います。

今回からは一般ユーザーを登録して通常のPC同様に作成したユーザーでログインすることにしました。取り扱い、設定の上でもこのほうが自然でいいと思います。

Orange Pi 3

$ uname -a
Linux orangepi3 5.1.16-sunxi64 #5.91.190708 SMP Tue Jul 9 00:38:37 CEST 2019 aarch64 GNU/Linux
$ docker -v
Docker version 19.03.0, build aeac949

armbianではこのところ更新が止まっていますね。190705busterベースのdebian ubuntuとも起動はするのですがハングアップしてしまいます。cpuクロック制御(?)に苦心していると睨んでいます。
このためstretchイメージをインストール/bootのsun50i-h6-orangepi-3.dtbを5.1.5.img(190601)のものと置き換えてアップグレードしています。(apt-mark hold sun50i-h6-orangepi-3.dtbしておく)
stretchは安定していてコンテナを起動してもアイドル時はcpu 480MHz Load averageは0.0n台に治まっています。(デバイスのサポートはまだまだですが)

ubuntu openssh server

ubuntuもdebianベースなので前回debianの手法でインストールしていきます。
Dockerfile

$ docker build -t ubuntu-sshserver ./

rootとuser(pi)のパスワードは適当に。user idは1000番から割り当てられます。
ホストのuserと合わせるときは useradd -u 1001 username のように!

FROM ubuntu:latest
RUN apt-get update && apt-get -y upgrade && \
apt-get -y install apt-utils openssh-server locales tzdata vim sudo language-pack-ja
RUN mkdir /var/run/sshd
RUN echo "root:xxxxxxxx" | chpasswd
RUN useradd pi -p raspberry
RUN sed -i "33i PermitRootLogin yes" /etc/ssh/sshd_config
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
update-locale LANG=ja_JP.UTF-8 && update-locale LANGUAGE=ja_JP.UTF-8 && update-locale LC_ALL=ja_JP.UTF-8
CMD ["/usr/sbin/sshd", "-D"]

ubuntu-sshserverをsystemdでrun

$ docker container run -it --name ubuntu_sshserver --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro ubuntu-sshserver /bin/systemd

[  OK  ] Started Update UTMP about System Runlevel Changes.

上記のところで止まるのでコンテナリスタートsshで確認(systemd有効)

$ docker container restart ubuntu_sshserver
$ ssh root@172.17.0.2

登録したユーザーのホームディレクトリは特にDockerfileのuseraddで指定していませんが後から簡単にコピーできるので次に進みます。
コミット

$ docker container commit ubuntu_sshserver ubuntu/openssh-server

Tigervnc server

ubuntuのイメージではTigervnc 1.7.0系がインストールされます。debianの1.9.0は動きませんが1.7.0は動きます。

$ docker build -t ubuntu-tiger ./

Dockerfile
WMはdwmとopenboxで動作確認しています。

FROM ubuntu/openssh-server:latest

RUN apt-get update && apt-get -y upgrade && \
apt-get -y install xserver-xorg x11-xserver-utils xterm dwm \
tigervnc-standalone-server tigervnc-common

CMD ["/bin/systemd"]

run

$ docker container run -it --name ubuntu-X --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro ubuntu-tiger /bin/systemd
[  OK  ] Started Update UTMP about System Runlevel Changes.

$ docker container restart ubuntu-X

ホストでユーザー用のディレクトリを作成して使いやすい設定ファイル(.bashrc vncbootなど)を用意してコピーします。vncserverの設定があればコピー可

$ docker cp pi ubuntu-X:/home

sshでログインして必要な設定をします。最低必要なものはユーザーディレクトリとvncserverの設定です。

$ ssh root@172.17.0.2

Dockerfileでuser shellの指定を忘れたのでここで変更します。

# chsh -s /bin/bash pi

vncの設定がない場合はここで設定します。(ユーザーpiで)

$ vncpasswd

パスワードを設定したら起動、当サイトではポート:2(5902)以降

$ vncserver :2 && vncserver -kill :2

ホームディレクトリには~/.vncができます。
vnc.confの作成(geometryは適当にlocalhost=no”必須)
~/.vnc/vnc.conf

$geometry     = "900x520";
$depth        = 24;
$desktopName  = "Ubuntu";
$localhost    = "no";

vncbootの設定、変更箇所(ポート番号は5に設定) 参考 vncboot

USER=pi
HOME=/home/pi
su $USER -c '/usr/bin/vncserver :5'
su $USER -c '/usr/bin/vncserver -kill :5'

編集が済んだら

# chown root:root vncboot
# chmod 755 vncboot
# cp vncboot /etc/init.d
# systemctl enable vncboot

vncserverを起動

$ vncserver :5

vncviewerで確認(ホストから実行)vnc client

$ vncviewer 172.17.0.2:5

その他

# visudo
pi      ALL=(ALL) NOPASSWD:ALL

いつものフォント設定

# sh font_set.sh

コミットしてIPを振って運用するコンテナを新規作成

$ docker container commit ubuntu-X ubuntu/tigervnc
$ docker container run -it --net=orangepi3-network --ip=172.18.0.35 --name ubuntu_dwm --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro ubuntu/tigervnc /bin/systemd
$ docker container restart ubuntu_dwm

パスワードをコピーして接続してみます。(~/.vncは作成)

$ docker cp ubuntu_dwm:/home/pi/.vnc/passwd ~/.vnc
$ vncviewer -SecurityTypes VncAuth,TLSVnc -passwd ~/.vnc/passwd 172.18.0.35:5 &


設定ファイルは一度作成すればホームディレクトリごとdocker cpでコピーできるので再利用できます。
dwmはコンパイルしたものを利用しています。当サイトの特殊要件としてdwmからdwmを読んでいるのでキーボードからのウインドウ操作ができません。
最低限のメニューとopenboxをインストールして切り替えてみたいと思います。

# apt install openbox python3-tk leafpad psmisc w3m-img less highlight

ubuntuにはpython3.6が含まれています。

# cd /usr/bin && ln -s python3.6 python


ファイラーにはrangerを入れました。以前のとおりインストールはしないで展開してるだけです。テキストビューはroot権限ではできないようです。一般ユーザーでは問題ありません。
左右の境界線はdwmのコンパイル(config.h)で設定できます。


ウインドウマネージャーをopenboxに切り替えるとこんな感じ、普通に使えます。
切り替えは瞬時に可能ですがdwmに戻るときはメニューが左側の大きいウインドウに移動します。
exitボタンは実行中のxtermを終了します。再度xtermを起動するとメニューは右側に追い払われていきます。通常のdwmの使い方では問題は無いのですが!

現在の~/.vnc/xstartup

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid Black
vncconfig nowin=1 &
~/bin/app.sh &
dwm &

~/bin/app.sh 起動時のアプリケーション設定

#!/bin/sh
~/bin/app.py &
sleep 3
cd && xterm &

app.py 参考 メニュー ~/bin/app.py

w3m-imgをインストールするとrangerで画像のビューが可能になります。


タイトルバーのmoodeをクリックするとフロートに切り替えます。
タイル型のWMは隙間なく埋めてくれるので小さい画面(ウインドウ)でも見やすくなります。dwmの中のdwmはかなり制限がありますがなんとか簡単な作業はできそうです。


cpu状態表示はホスト側と同じです。
メモリ使用量は若干増えますが特に重い作業でもしない限り問題なく使用できそうです。
armbianのbusterも早期に解決するといいのですが!