ubuntu22を利用開始

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インストーラ起動がどうしてもできず。

gvis-change2022

8世代目はアカンのかなぁ。TPMはオンにできるけど、セキュアブートを有効にしたらdvd-romからのブートができん。

uefiあきらめて、とりあえずbios起動のままwindows10で動かしとこ。

変更後のpc2はuefi起動できてちゃんとwin11入ってくれた。

gvis-change2022

ubuntu20の退避

さて本題。

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

gvis-change2022

ubuntu22のvm作成

isoイメージダウンロードしておいて、仮想マシンをOSなし状態で作る。

インストールはネットにやり方書いてる人いっぱいいるし、今までと同じようなことするって確認ができたら、何も見なくても普通に入る。

gvis-change2022

なんかロゴ新しくなったな。

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

gvis-change2022

設定に入れてもマウントはしない。

自分はマウントからサービス起動までのシェルをサービス化しているので、OSの設定して1つずつ動きを確認していく。

基本的なサービスの設定ファイル(apache2.confとかsmb.confとか)は、基本そのまま使う。

ubuntu20のときとバージョンが同じなら大丈夫。秘伝のタレみたいなもんやから、設定はコピーするだけ。

IPアドレスの変更

最初はDHCPになってるから、宅内で割り当ててるIPアドレスを設定する。

gvis-change2022

使うサービスの確認と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
gvis-change2022

リモートデスクトップするための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
gvis-change2022

xrdpでguiが使えたら、rcloneとかでgui使って認証したくなったときに使える。

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起動させたときはこんな感じ。

gvis-change2022

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

gvis-change2022

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をつないで共有領域の中身を公開させる。

gvis-change2022

おお、できとる、できとる。

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と同じ見え方できてた。

gvis-change2022

せっかくなので、コンテナ作り直してみた。
docker-composeが2.6になって、コンテナ名が微妙に変わってて、末尾のアンダーバーがハイフンになってた。

変更前)docker-sv_django_1
変更後)docker-sv_django-1

しばらく使ってなかったので気づいてなかったけど、centos8はdockerhubからなくなってた。今度redhat8のイメージ使うように書き換えないと・・・。

google cloud sdkの設定

これ入れないとgooble cloudの中の仮想マシンを起動したり接続したりができない。

ubuntu22になっても、googleのドキュメントどおりやればいい。

Cloud SDK のインストール  |  Google Cloud

gcloudコマンドは、仮想マシンを作ったり壊したりできるので怖い。
gcloud auth loginだけで接続設定は終わる。

gvis-change2022

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

gvis-change2022

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$

デスクトップに起動・停止・バックアップ・ステータス確認のスクリプトへのショートカットあるのでこれもテスト実行。

gvis-change2022
gvis-change2022

起動のスクリプトはttlマクロを呼び出すバッチ処理。
gcloudのコマンドが入った「101_Start-gvis-nalinux.sh」ってスクリプトを呼び出すだけ。

普段はショートカットばっかり使うから中身あんまり意識せんけど、こう書いてる。

gcloud compute instances start focl-fslinux

当たり前やけど、起動したら「実行中」になる。

gvis-change2022

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

gvis-change2022

普段sshはapt updateのときとか、dockerコンテナの操作でしか使わない。
a5sqlでmariadbとか、rdpでxrdpへつないで使ってる。

このときsshトンネルを使う。

VM インスタンスへの安全な接続  |  Compute Engine ドキュメント  |  Google Cloud

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ポートにつないでみる。

gvis-change2022

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

gvis-change2022

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

gvis-change2022

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

gvis-change2022

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

gvis-change2022

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

gvis-change2022

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

gvis-change2022

ローカルlinuxからgcpへの接続できたので、最終的にはgoogle cloudの中のubuntuも20から22に上げた。

バックアップのためのrclone

これもほぼ一発利用OK。

認証設定してrclone lsl GoogleDrive:/ | moreすると、

gvis-change2022

これでクラウドへの退避もOK。

crontabの戻し

1つ1つ確認に1日1時間ずつやって、1週間ほどでubuntu20からubuntu22へ引っ越し完了。

最後にcrontabの定義をコメント化したものを元に戻して完了。

ここまでをバックアップ

作った仮想イメージを圧縮してバックアップ取っておく。
データ量としてはwindowsと違って10GB下回る。

OSだけ入ってるパーティションだけを圧縮するために、ディスク設定を外すのでvmxファイルだけを別にバックアップしておく。

gvis-change2022

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

gvis-change2022

vm起動して圧縮処理動かす。

/bin/vmware-toolbox-cmd disk shrink /

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

gvis-change2022

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

gvis-change2022
gvis-change2022
gvis-change2022

hddのときに比べたらめっちゃ速い。

今回のがええ練習になった。

次はgoogle cloudの中のubuntuをバージョン上げる。

コメント

タイトルとURLをコピーしました