2022年のゴールデンウィーク頃にubuntu22が出たって記事を見た。
amazon primeから録画してきた動画が、ubuntu20だとどうしても再生できないのがあって、 windows + vlcやったらちゃんと再生できることがわかった。
業務用(pc1)と予備PC(pc2)は、後で作った予備PCが特にディスク性能の差がある。 予備PCはあくまで予備やからそれほど性能高くなくていいし、週に数回動画見るだけやし。
本マシンと予備マシンをひっくり返して、仮想マシン(vm)の切り替え(ubuntu20⇒ubuntu22)もやってみた。
ハードウェア構成の変更
pc1は8世代のi5。 pc2は10世代のi5。
メモリはどっちも32GBで、usb3接続の外付けhddが2個ある。ssdに比べたら低速やけど、大きなディスク使いたいからしゃぁない。
usbディスクはvmdkファイルを置いて仮想マシンに使わせていて、1つはdockerの領域を置いてる。
変更前) mini pc1 (bios hdd windows10pro + ssd vm(ubuntu20,win11pro)) └─USBhdd1 6TB (dataArea vmdk) └─USBhdd2 1TB (docker vmdk)
mini pc2 (uefi ssd ubuntu20 + ssd vm(空))
変更後) mini pc1 (bios hdd (空) + ssd windows10pro )
mini pc2 (uefi ssd windows11pro,vm( ubuntu22 ,win11pro) + ssd ( docker vmdk ) ) └─USBhdd1 6TB (dataArea vmdk)
例えば練習でoracleとかコンテナとして動かすときに、dockerの領域をssdにしたから、めっちゃ速くなるのを期待。
OSのインストール
pc2は予備PCやからいきなり潰してもOK。 windows11を入れてから、pc1のデータを流し込む。
実際はwindows11のメディア持ってなくて10しかない。 10を入れてからアップグレード。
ssd起動になるから、hddに比べたらめちゃ速くなった。
変更後のpc1はuefi画面は使えるけど、dvd-romからのwin10インストーラ起動がどうしてもできず。

8世代目はアカンのかなぁ。TPMはオンにできるけど、セキュアブートを有効にしたらdvd-romからのブートができん。
uefiあきらめて、とりあえずbios起動のままwindows10で動かしとこ。
変更後のpc2はuefi起動できてちゃんとwin11入ってくれた。

ubuntu20の退避
さて本題。
ちゃんと動くかわからないから、元に戻せるようにvmイメージを退避しておく。 それでubuntu22用のフォルダを作って、その中にvm作る。

ubuntu22のvm作成
isoイメージダウンロードしておいて、仮想マシンをOSなし状態で作る。
インストールはネットにやり方書いてる人いっぱいいるし、今までと同じようなことするって確認ができたら、何も見なくても普通に入る。

なんかロゴ新しくなったな。
あとはUSBhdd1とUSBhdd2も事前にバックアップ取ったものを、設定に入れておく。

設定に入れてもマウントはしない。
自分はマウントからサービス起動までのシェルをサービス化しているので、OSの設定して1つずつ動きを確認していく。
基本的なサービスの設定ファイル(apache2.confとかsmb.confとか)は、基本そのまま使う。
ubuntu20のときとバージョンが同じなら大丈夫。秘伝のタレみたいなもんやから、設定はコピーするだけ。
IPアドレスの変更
最初はDHCPになってるから、宅内で割り当ててるIPアドレスを設定する。

使うサービスの確認とcrontabの一時停止
ディスクのマウントと、ほとんどのサービス起動までは、1つのスクリプトから部品スクリプトを呼び出してる。
コロナ始まる頃にcentosからubuntuに引っ越したけど、dockerを使うようになったこと以外は10年前とほぼ内容変わってない。
最初は「exit」の箇所をコメント外して何もさせない。
|
|
サービス登録は こんなふうに やってる。
crontabはこんな感じなので、いったん全部の行頭に「#」を入れてコメント化しとけば監視処理とかgoogle driveへの同期処理もやらなくなる。
|
|
teratermからつなぐためのssh
普通にsshするためのサービス。これはOS起動とともに使えるようにしておく。
|
|

リモートデスクトップするためのxrdp
昔はvnc使ってたけど、重たいしvncviewer.exeが要るからやめた。 なんでか知らんけど、vncviewerはアンチウィルスで警告も出るし。
xrdpも普通にインストール。
|
|

xrdpでguiが使えたら、rcloneとかでgui使って認証したくなったときに使える。
ややこしいけど、dockerコンテナでubuntu22ベースの xrdpコンテナは後日作った。
djangoとphpとビデオ閲覧のためのhttp
ブラウザの「お気に入り」をほとんど使わない代わりに、URLへのリンクを入れたhtmlをずっと使ってる。
これがあれば、mac/windows/linux/ios/androidを問わず同じURLを参照しに行ける。
それにdockerコンテナの中でdjango/phpのアプリケーションを使うから、URLを宇埋め込んでおけば閲覧テストもしやすい。
それでapache2も入れる。 勝手に起動されると困るので、自動起動はやらないようにしとく。
|
|
apache2起動させたときはこんな感じ。

古いムービーもちゃんとブラウザ越しに見えた。 マイケルとKITは今も元気やなぁ。

ubuntu22にUSBhdd1つなぐ
ファイルサーバがないと、viでスクリプトを編集するとかしないといけないし、excelとかpowerpointの文書も使えない。
|
|
設定をコピーしたら、USBhdd1をつないで共有領域の中身を公開させる。

おお、できとる、できとる。
ubuntu22にssdへコピーしたdockerのvmdkファイルをつなぐ
今まではUSBhdd2にvmdk置いて使ってたのを、ssdにvmdkをコピーして使う。 dockerコンテナのディスクI/O速くなってくれるのを期待。
|
|
dockerは放っておくとルートパーティションにデータ作ってしまう。 回避するためにviでdocker.serviceのファイルを 書き換える 。
こうすることでubuntu20で持ってたdokcer imageを全部そのまま引き継げる。 せっかくやから、あとでコンテナは作り直してキレイにしてみるかな。
結局、djangoのdockerイメージはベースがubuntu20なので、これもubuuntu22に作り変えた。
docker起動
実際はdockerをそのままじゃなく、docker-compose使う。
github見たらバージョン上がってた。
1.29をずっと使ってたから、最新は1.3とか1.4かなってgithub見たら、2.6.0ってのがあった。
えらい進んどるな。
まぁとりあえず ここでやったこと と同じ要領で新しいバージョンで使ってみた。
docker-compose.ymlはそのまま使えたし、コンテナも起動できた。 mariadbとdjangoが動けば、とりあえず仕事はできる。 自前のonlchk処理で確認すると、ubuntu20と同じ見え方できてた。

せっかくなので、コンテナ作り直してみた。 docker-composeが2.6になって、コンテナ名が微妙に変わってて、末尾のアンダーバーがハイフンになってた。
|
|
しばらく使ってなかったので気づいてなかったけど、centos8はdockerhubからなくなってた。今度redhat8のイメージ使うように書き換えないと・・・。
google cloud sdkの設定
これ入れないとgooble cloudの中の仮想マシンを起動したり接続したりができない。
ubuntu22になっても、googleのドキュメントどおりやればいい。
gcloudコマンドは、仮想マシンを作ったり壊したりできるので怖い。
gcloud auth loginだけで接続設定は終わる。

出力されるURLをGUIで開いて続行。

google cloud sdkを使ってく
あとは起動・ポートのトンネリングとか普通に使えるか試す。
トンネリングもスクリプトにして使ってる。 google cloudの中では22番のみをファイアウォールで許可設定してる。
そこを通じてdockerのいくつかのポートをローカルlinuxに対応させておき、sshポート経由でgoogle cloudのリソースを使う。
sshのキーはgoogle cloud操作スクリプト類と一緒にローカルlinux上に置いた。
|
|
デスクトップに起動・停止・バックアップ・ステータス確認のスクリプトへのショートカットあるのでこれもテスト実行。


起動のスクリプトはttlマクロを呼び出すバッチ処理。 gcloudのコマンドが入った「101_Start-gvis-nalinux.sh」ってスクリプトを呼び出すだけ。
普段はショートカットばっかり使うから中身あんまり意識せんけど、こう書いてる。
|
|
当たり前やけど、起動したら「実行中」になる。

ssh接続してみると、いける。

普段sshはapt updateのときとか、dockerコンテナの操作でしか使わない。 a5sqlでmariadbとか、rdpでxrdpへつないで使ってる。
このときsshトンネルを使う。
sshトンネルを有効にしているとき、たとえばローカルPCからローカルlinuxの43306へa5sqlでつなぐと、google cloudの3306で有効にしているmariadbのdockerコンテナにフォワーディングされて接続できる。
ローカルlinuxの63389は、google cloudのxrdpにつなげられるから、そこでほとんどの作業ができる。
以下、nafslinuxがローカルlinuxで、gcp-gvis-dklinuxがgcpの中にあるlinuxの場合。
|
|
自前の確認コマンドラインで転送具合を確認。 おお、できとるできとる。
|
|
a5sqlでローカルPCの43306ポートにつないでみる。

ついでにsql発行してみると、ちゃんと動いてくれる。 3年ぐらい前の預金残高はトホホな数字ですなぁ。

リモートデスクトップはwindowsではmstsc.exeっていう。 そのショートカットに「/v」のオプションくっつけて使う。

実際にxrdpのdockerコンテナへつないでみる。 この画面が表示された時点で、もうssh経由のポート接続はできてるので認証情報入れる。

ハカイダーの壁紙表示があるデスクトップが見えてOK。 いつ見てもカッコええ。 仮想マシンやから空想科学の壁紙がピッタリ。

rdpした先でブラウザ開いてgitlabのdockerコンテナにも接続OK。

vscodeでgitgraphも見れてるので、文書も扱える。

ローカルlinuxからgcpへの接続できたので、最終的にはgoogle cloudの中のubuntuも20から22に上げた。
バックアップのためのrclone
これもほぼ一発利用OK。
認証設定してrclone lsl GoogleDrive:/ | moreすると、

これでクラウドへの退避もOK。
crontabの戻し
1つ1つ確認に1日1時間ずつやって、1週間ほどでubuntu20からubuntu22へ引っ越し完了。
最後にcrontabの定義をコメント化したものを元に戻して完了。
ここまでをバックアップ
作った仮想イメージを圧縮してバックアップ取っておく。 データ量としてはwindowsと違って10GB下回る。
OSだけ入ってるパーティションだけを圧縮するために、ディスク設定を外すのでvmxファイルだけを別にバックアップしておく。

vmwareの設定画面で3つあるハードディスクからルートパーティションのある200GBのディスクのみを残して他2つを外す。

vm起動して圧縮処理動かす。
|
|
ディスクにゼロ埋めしはじめて、しばらくしたら圧縮処理が始まる。 ssd使うとこの間、15分もかからない。hddとえらい違いやなぁ。

終わったらvmのos停止してバックアップ領域にコピー。 cドライブのssdからdドライブのssdに入れてみたときのディスクとcpuはこんな感じ。



hddのときに比べたらめっちゃ速い。
今回のがええ練習になった。
次はgoogle cloudの中のubuntuをバージョン上げる。