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」の箇所をコメント外して何もさせない。
## -------------------------------------------------------------------------
## Script Name : serviceStart.sh
## Created by : T.Naritomi
## on : 2019.10.11
## Updated by :
## on :
## Parameters :
## Return Code : 0=Normal End
## Comments : for gvis.service before os start (os base process and X11,xrdp,sshd)
## systemd require /etc/systemd/system/gvis.service
## -------------------------------------------------------------------------
## ---detail----------------------------------------------------------------
### exit
/bin/sh /gvis/script/006_mount_ext4.sh
/bin/sh /gvis/script/proc/syslogchkReset
/bin/sh /gvis/script/102_SambaStart.sh
/bin/sh /gvis/script/202_httpdStart.sh
/bin/sh /gvis/script/302_dockerStart.sh
sleep 30
/bin/sh /docker/dockerStart.sh
サービス登録はこんなふうにやってる。
crontabはこんな感じなので、いったん全部の行頭に「#」を入れてコメント化しとけば監視処理とかgoogle driveへの同期処理もやらなくなる。
#daily shutdown
59 23 * * * /bin/sh /gvis/script/901_OSstop.sh > /dev/null
59 11 * * 1-5 /bin/sh /gvis/script/901_OSstop.sh > /dev/null
#Timely procdure
00,10,20,30,40,50 * * * * sync
01,11,21,31,41,51 0-23 * * * /bin/sh /gvis/script/903_ping_kanshi.sh 172.16.17.15 Yamaha_rtx1210 > /dev/null
05,15,25,35,45,55 0-23 * * * /bin/sh /gvis/script/802_CHKdiskStat.sh > /dev/null
06,16,26,36,46,56 6-21 * * * /bin/sh /gvis/script/803_CHKonlchkStat.sh > /dev/null
07,17,27,37,47,57 0-23 * * * /bin/sh /gvis/script/804_CHKsyslogStat.sh > /dev/null
09,19,29,39,49,59 6-23 * * * /bin/sh /gvis/script/805_CHKgavann-it.sh > /dev/null
### */2 0-23 * * * /bin/sh /gvis/script/808_CHKnetlogStat.sh > /dev/null
*/2 0-23 * * * /bin/sh /gvis/script/808_CHKnetlogStat2.sh > /dev/null
# Clear trash every Friday morning
28 9 * * 5 /bin/sh /gvis/script/812_clearRecycle.sh > /dev/null
# GoogleDrive every Weekday
30 9 * * 1-5 /bin/sh /gvis/script/gdr/003_SyncNari.sh > /dev/null
#daily Report
11 5 * * * /bin/sh /gvis/script/801_daily_report.sh > /dev/null
11 10 * * * /bin/sh /gvis/script/801_daily_report.sh > /dev/null
#daily rm
00 7 * * * /bin/find /gvis/ -name ".*DS_Store" -print -exec rm {} ";"
01 7 * * * /bin/find /gvis/ -name "Thumbs.db" -print -exec rm {} ";"
02 7 * * * /bin/find /nari/ -name ".*DS_Store" -print -exec rm {} ";"
03 7 * * * /bin/find /nari/ -name "Thumbs.db" -print -exec rm {} ";"
teratermからつなぐためのssh
普通にsshするためのサービス。これはOS起動とともに使えるようにしておく。
sudo apt update && sudo apt upgrade -y
sudo apt install openssh-server -y
sudo systemctl enable --now ssh
sudo systemctl status ssh
sudo systemctl start ssh
リモートデスクトップするためのxrdp
昔はvnc使ってたけど、重たいしvncviewer.exeが要るからやめた。
なんでか知らんけど、vncviewerはアンチウィルスで警告も出るし。
xrdpも普通にインストール。
sudo apt update && sudo apt upgrade -y
sudo apt install xrdp -y
sudo systemctl enable xrdp
sudo systemctl status xrdp
sudo systemctl start xrdp
xrdpでguiが使えたら、rcloneとかでgui使って認証したくなったときに使える。
ややこしいけど、dockerコンテナでubuntu22ベースのxrdpコンテナは後日作った。
djangoとphpとビデオ閲覧のためのhttp
ブラウザの「お気に入り」をほとんど使わない代わりに、URLへのリンクを入れたhtmlをずっと使ってる。
これがあれば、mac/windows/linux/ios/androidを問わず同じURLを参照しに行ける。
それにdockerコンテナの中でdjango/phpのアプリケーションを使うから、URLを宇埋め込んでおけば閲覧テストもしやすい。
それでapache2も入れる。
勝手に起動されると困るので、自動起動はやらないようにしとく。
sudo apt update && sudo apt upgrade -y
sudo apt install apache2 -y
sudo systemctl disable apache2
sudo systemctl status apache2
sudo systemctl start apache2
apache2起動させたときはこんな感じ。
古いムービーもちゃんとブラウザ越しに見えた。
マイケルとKITは今も元気やなぁ。
ubuntu22にUSBhdd1つなぐ
ファイルサーバがないと、viでスクリプトを編集するとかしないといけないし、excelとかpowerpointの文書も使えない。
sudo apt update && sudo apt upgrade -y
sudo apt install samba -y
sudo systemctl disable smbd.service
sudo systemctl disable nmbd.service
sudo systemctl status smbd.service
sudo systemctl status nmbd.service
sudo systemctl start smbd.service
sudo systemctl start nmbd.service
設定をコピーしたら、USBhdd1をつないで共有領域の中身を公開させる。
おお、できとる、できとる。
ubuntu22にssdへコピーしたdockerのvmdkファイルをつなぐ
今まではUSBhdd2にvmdk置いて使ってたのを、ssdにvmdkをコピーして使う。
dockerコンテナのディスクI/O速くなってくれるのを期待。
sudo apt update && sudo apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl disable docker.service
sudo systemctl status docker.service
vi /lib/systemd/system/docker.service
sudo systemctl start docker.service
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になって、コンテナ名が微妙に変わってて、末尾のアンダーバーがハイフンになってた。
変更前)docker-sv_django_1
変更後)docker-sv_django-1
しばらく使ってなかったので気づいてなかったけど、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上に置いた。
nari@nafslinux-ubu22:/gvis/script/gcp$ ls
000_CloudSDKver.sh 201_vpn-tunnelDelete.sh ORG_privateKEY.pub
001_ComputerList.sh 202_vpn-tunnelCreate.sh TunnelStatusRes.txt
002_IPaddreses.sh 203_vpn-tunnelStatus.sh _old
101_Start-gvis-nalinux.sh 301_ssh-tunnelCreate.sh privateKEY
102_Stop-gvis-nalinux.sh ORG_privateKEY privateKEY.pub
nari@nafslinux-ubu22:/gvis/script/gcp$
デスクトップに起動・停止・バックアップ・ステータス確認のスクリプトへのショートカットあるのでこれもテスト実行。
起動のスクリプトはttlマクロを呼び出すバッチ処理。
gcloudのコマンドが入った「101_Start-gvis-nalinux.sh」ってスクリプトを呼び出すだけ。
普段はショートカットばっかり使うから中身あんまり意識せんけど、こう書いてる。
gcloud compute instances start focl-fslinux
当たり前やけど、起動したら「実行中」になる。
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の場合。
## SSH option
## -N : non command-line
## -f : background
## -C : compress
gcloud compute ssh jelly-fslinux \
--project XXXX \
--zone us-XXXX \
--ssh-key-file=/gvis/script/gcp/privateKEY \
-- -N -f -C \
-L nafslinux.intra.gavann-it.com:43306:gcp-gvis-dklinux.intra.gavann-it.com:3306 \
-L nafslinux.intra.gavann-it.com:63389:gcp-gvis-dklinux.intra.gavann-it.com:33389
自前の確認コマンドラインで転送具合を確認。
おお、できとるできとる。
=== SSH Tunnel STATUS===
nafslinux.intra.gavann-it.com:43306:gcp-gvis-dklinux.intra.gavann-it.com:3306
nafslinux.intra.gavann-it.com:63389:gcp-gvis-dklinux.intra.gavann-it.com:33389
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起動して圧縮処理動かす。
/bin/vmware-toolbox-cmd disk shrink /
ディスクにゼロ埋めしはじめて、しばらくしたら圧縮処理が始まる。
ssd使うとこの間、15分もかからない。hddとえらい違いやなぁ。
終わったらvmのos停止してバックアップ領域にコピー。
cドライブのssdからdドライブのssdに入れてみたときのディスクとcpuはこんな感じ。
hddのときに比べたらめっちゃ速い。
今回のがええ練習になった。
次はgoogle cloudの中のubuntuをバージョン上げる。