ubuntu20をubuntu22へ切り替えしてったんやけど、dockerコンテナのもやりたいなって思ったのでやってみた。
ubuntu22の親ホストで動くdockerコンテナとしてxrdpd稼働させて、リモートデスクトップ接続可能なubuntu22コンテナを作る。
その後、 ubuntu24 での稼働に切り替えた。
結論
dockerhubにあったxrdpコンテナのdockerfileをベースにして自分用に改造し、ubuntu22.04LTSにしたxrdpコンテナが起動できて、windowsから接続できるようになった。
macからもつないで使える(妄想)。
まずは、ビルドして起動した直後。
他にもdjangoやらldapsサーバやらredhat8/9クローンを動かしてる。
GUI含むので、dockerfile使ってビルドするのは20分ぐらい待つ。
ssd使うようにしても、それなりに時間はかかる。

リモートデスクトップ接続して、マウントした永続化領域を開いたとこ。
ubuntu22のJammy jellyfishってなってるし、右上の日付表示も日本語で、タイムゾーンもJSTになってる。

自分向けお決まりの入力をaliasに登録したところ。
source .bashrcってするか、ログインしなおしたらaliasが有効になる。
キーボードレイアウトを日本語にするため「設定マネージャー」を起動してみる。
GUIで見えてるポップアップツリーも、めっちゃ日本語表示してくれてる。

レイアウト変更は「japanese」って表記じゃなくて、いちばん下のほうにある「日本語」ってのを選ぶ。
これでレイアウトを「OADG109A」にして「Generic105-KEY PC」ってキーボード選ぶと「@」とか「:」が日本語レイアウトで使える(特にコロンが入力できないとvimでツライ)。
dockerコンテナの再起動したらlibreofficeの中でもちゃんと記号使えた。

コマンドラインで、パネルの日時表示設定とか日本語キーボード設定やらなあかんのかなぁって思ってたらスンナリ使えるようになった。
あとはベース機能を ubuntuで最初にaptした内容 を使ってvscodeとchrome入れたらこうなった。

これでdjangoのソースいじったり、ローカル環境で必要なときにテストできる。
ついでにlibre officeも最後に入れた。
docker-composeには、こう書いた。
dockerhubにあったxrdpコンテナを扱ってるサイトでベースになるものを引き当てて、ubuntu20で使ってる記述をベースに★箇所について改造して利用。
|
|
ubuntu20の頃
yama07さんが作っておられてて、ubuntu20の頃はこれ使わせてもらってた。
めっちゃ楽にコンテナ作れたけど、dockerfileの中とかスクリプトの中を見るとイマイチわからんかった箇所もある。
ubuntu22が出てしばらく経ったら22のをリリースしてくれるんかなぁってしばらく待ったけど、すぐには出なさそう。
んじゃ自分で作ってみるかってことにした。
最初に挑戦したこと
さっきのyama07さんのdockerfileの1行目を「FROM ubuntu:22.04」って書き換えてビルドしてみたけどあっさり撃沈。
とほほ、やっぱり楽やないなぁ。
ログは捨てたけど、「gosu」ってモジュールのあたりでコケてた。
goはたぶんgo言語のことで、suするときの何かなんかなぁ。
昔centosでxrdpが動くコンテナを作ったことがあるけど、gosuなんてモジュール使わんかったけどなぁ。
深追いするとハマりそうな気がしたからやめといた。
docker hubの中探してみる
dockerhub には世界中のコンテナ作者が登録してくれてる。
イマイチなコンテナもあるけど、xrdpをfedora/centos/amazonlinux/ubuntuのどれでも動かすコンテナってのを作ってる人がいた。
たぶん汎用的に作ってビルドできるようになってるんやろな。
ubuntuはわかるけど、centosとamazonlinuxでも使えるってのは便利そう。
danchitnisさんありがとう。たいへん参考になりました。
このxrdpコンテナにあるdockerfileを書き換え、日本語ロケール設定とか入れたらええんとちゃうかって考え始めた。
dockerコマンドライン起動で動いたけど・・・
説明はdanchitnisさんの登録されたgithubに書いてあった。
なるほど、docker execしてコマンドラインにユーザ名とパスワードと、sudoできるかどうかのyesを書いて起動すればええみたい。
そのままやってみたら、一発で起動できた。
ネズミの壁紙のデスクトップが見えた。
書いてあるとおりやればええんやから、そりゃ起動できるわなぁ。
せやけどこれdocker-compose.ymlに何て書いたらええんかなぁ。
他にもコンテナ使ってるから、起動順位とかコントロールしたいんやけどなぁ。
日本語扱えるようにするのと、ロケールでJST設定
dockerfileに追加して書く。
★印の箇所をいじってった。
追記する内容は、yama07さんのdockerfileにあったapt対象を参考にさせてもらった。
|
|
docker-composeで、そのままでは動かん
danchitnisさんのxrdpコンテナをdocker-composeで扱うを考えたけど、引数を書く方法がイマイチわからんかった。
command:とか書いたらええんかもしらんけど、やる気になれんかった。
もっと直観的にわかって、楽にシンプルにできるんとちゃうか。
dockerfileを見ると、最後に/usr/bin/run.shを起動してる。
そのシェルスクリプトの中を見ると、docker execで渡ってきた引数を処理してて、3つあるか確認処理してる。
|
|
んんん???
見ると/usr/bin/run.shじゃなくてubuntu用にubuntu-run.shってのをコピーしてあって、同じことやってる。
引数処理している箇所を、スクリプト内にベタ書きするよう修正したら使えるやん。
改造して自分用に書き換える
まずは、さっきの引数の数をチェックしている箇所はカット。
3つ処理する必要ないから、引数を順番に処理しているループもコメント化。
引数使ってuseraddやらchpasswdしている箇所を書き換えて、スクリプトの中にベタ書きしたものを処理させてみた。
|
|
これで、引数でユーザ・パスワード・sudo可否を指定するんじゃなくて、書いたそのままで動くようになる。
念のためビルドやりなおさせた。
dockerイメージは1.2GBぐらいになってubuntu20のときより縮んでた。
どっちでもいいけど、lxdeよりxfceのほうが小さいのかも。
|
|
起動させてみる
その上でdocker-composeから起動するようにしたら動いた。
ubuntu22ベースなだけで、普段使うツールとかは入ってない。
rdp接続してからapt-getでvim/curl/git/gthumb/geditを入れといた。
ファイルマネージャでsmb://xxxみたいな書き方したらアドレスバーが赤くなった。
LAN上にsambaサーバあるから、そこからデータ取ってきて編集させたいのに赤くなってつながらんのはアカン。
回避するためにgvfs-backendsってのも入れた。
あとは いつもの手順 から使う箇所だけ選んで、chromeとvscodeとlibre office入れたらホイホイ使えるようになった。

日本語入力できるから処理内にコメントも書ける。
日本語入力
windows使うときは「半角/全角」って左上のキーを使うけど、mac/linuxを使ってると「super + space」って組み合わせを使う。
フルスクリーンでrdp接続すると問題ないけど、解像度を少し下げて1600x900とかの少し小さめスクリーンにすると、windowsやmacがキーストロークを先に拾ってしまうのでubuntu22コンテナの日本語はマウスで切り替えなきゃいけない。
google cloudの中でも同じことやってみた
ローカルPCでできたんやから、そりゃできるわな。
vscodeからgitlabへドキュメント更新のコミット&プッシュして完了。
以下、プッシュしたドキュメントをgit cloneしてるとこ。

基礎確認でgoogle cloudのネットワークの速度計ってみたら、ダウンロード側が3000Mbps超えてた。
ubuntu22とは関係ないけど、なんちゅう速さやねん・・・。

とりあえずubuntu22のxrdpコンテナ使えるようになった。
よかった、よかった。
aptしたときに時間がUTCに戻ってしまう
毎年いろんな脆弱性が出てくる。
よくもまぁそんなにたくさん出てくるもんやと思う。
その中でtzdataってモジュールもときどき変更があって、どうもこのモジュールが更新されると時刻表示がJSTからUTCに変わってまう。
そんなときはこのコマンドラインで戻しておいてdocker-composeからコンテナ再起動するとJSTに戻ってくれる。
|
|
脆弱性対応めんどくさい。
バグ探しのためだけに集まっておられる方もいるらしくて、そんなんがよくぞお金を産むもんやと思う。
そういう方々やグループがあるおかげで、安全にソフトウェアを使い続けることができるから、とても感謝はしてる。
ただ、「こんなバグあんねん」っていう新着情報を追いかけるのは、流行ってる音楽を追いかけるのと同じで体力いる。
できるだけ楽にこなしたいからaptとかdnfとかがあって更新はそれ一発で終わり。
redhatは8あたりから、dnfで競合発生しやすくなったようになった気がする。
コレめっちゃ面倒やから、個人利用ではredhatとはサヨナラした。
じゃぁubuntuだったらいいのかっていうと、そうじゃない。
より良いもの出てきたらそっちに変えていく。