ローカルlinuxをubuntu26にバージョン上げたので、本番環境として利用しているgoogle cloudの分も準備。
Google cloud分を作成#
computer engineの画面でイメージの名前選ぶところにある。
resoluteってあるのがそうかな。
正式名称はresolute raccoon(堅固なアライグマ)っていう。
形容詞外した名前で普通に作ってみた。
ssh鍵作成と接続のための準備#
いっつもlinuxで作ってたのを、今回はmacで作ってみる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
nari@gvis-mac ~ % ssh-keygen -t rsa -b 4096 -f ~/.ssh/gcp_key -C "nari"
Generating public/private rsa key pair.
Enter passphrase for "/Users/nari/.ssh/gcp_key" ( empty for no passphrase) :
Enter same passphrase again:
Your identification has been saved in /Users/nari/.ssh/gcp_key
Your public key has been saved in /Users/nari/.ssh/gcp_key.pub
:(中略)
The key's randomart image is:
+---[RSA 4096]----+
:(中略)
+----[SHA256]-----+
nari@gvis-mac ~ % nari@gvis-mac ~ % ssh-keygen -t rsa -b 4096 -f ~/.ssh/gcp_key -C "naritomitsukasa"
Generating public/private rsa key pair.
Enter passphrase for "/Users/nari/.ssh/gcp_key" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/nari/.ssh/gcp_key
Your public key has been saved in /Users/nari/.ssh/gcp_key.pub
:(中略)
The key' s randomart image is:
+---[ RSA 3072] ----+
:(中略)
+----[ SHA256] -----+
nari@gvis-mac ~ %
鍵作ってgoogle cloudのコンソールで登録した。
teratermで使えるようにしてくんやけど、鍵ファイル作る時のパススレーズ勘違いしててすぐにはつながらんかった。
teratermはバージョン5以降、鍵ファイルは.pubじゃないほうを指定できてることと、UTF8でLF改行保存できているか目視せなアカンで。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
include 'Y:\94_connect\connect\teraIni\gvis.ini' ⭐️インクルードファイルちゃんと書き換えとこ
; --- 接続 --------------
; connect 'gcp-gvis-nalinux.intra.gavann-it.com /ssh /auth=publickey /passwd=gngor5207& /user=naritomitsukasa /keyfile=Y:\94_connect\connect\GCP\key\20191018-privateKEY /F=Y:\94_connect\connect\teraIni\blue.ini'
conSTR = 'xx.xx.xx.xx /ssh /auth=publickey /user=naritomitsukasa /passwd='
strconcat conSTR gvis_MAIN ⭐️自分的にここ注意
strconcat conSTR ' /keyfile='
strconcat conSTR gvis_KY2
strconcat conSTR ' /F='
strconcat conSTR gvis_iPTH
strconcat conSTR 'Blue.ini '
strconcat conSTR '/timeout='
strconcat conSTR gvis_TOUT
; ---debug --------------
messagebox conSTR 'info'
connect conSTR
if result <> 2 goto end
wait gvis_wS1
sendln "df -h | grep -v tmpfs" ⭐️.bashrcにエイリアス書いたらdffに変更
wait gvis_wS1
sendln "w"
:end
OS設定#
ちょっとずつやってく。
uid=1000のユーザ名を変更#
google cloudでOS動かすとデフォルトのユーザが作成される。
ubuntuの場合はubuntuってユーザがid=1000で作成されるんやけど、ローカルlinuxとファイルの所有権をそろえたい。
gemini先生に相談しながら、過去のメモと見比べてユーザIDをそろえてく。
前回までは
自分でググって調べてやってた
。
今回はgemini先生に相談してみる。
■相談
1
2
3
4
5
6
7
google cloudのcompute engineでubuntu26のホストを作成した。
しかし、nariというユーザのuid/gidが1003:1004となっている。
ローカルlinuxの「nari:x:1000:1000:nari:/home/nari:/bin/bash」にそろえる方法を教えて。
rsa-key-20190112:x:1001:1002::/home/rsa-key-20190112:/bin/bash
naritomitsukasa:x:1002:1003::/home/naritomitsukasa:/bin/bash
nari:x:1003:1004::/home/nari:/bin/bash ⭐️これをローカルlinuxの「nari:x:1000:1000:nari:/home/nari:/bin/bash」にそろえたい
答えが戻る。OS Loginを有効化してたら設定が巻き戻ることあるのは知らんかった。
■回答
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Google Cloud Engine (GCE) の Linux インスタンス(OS Login などを有効にしている場合含む)では、GCP アカウント連携によって UID/GID が 1000 以降で自動採番されるため、希望する UID/GID とズレてしまうことがよくあります。
既存の /etc/passwd を見ると、すでに ubuntu ユーザーが 1000:1000 を使用しているため、単に nari の UID/GID を変更するだけではなく、ubuntu ユーザーの UID/GID を退避させて空きを作る手順が必要です。
以下の手順で安全に変更できます。
:(中略)
[!WARNING]
GCP OS Login 機能に関する注意
もし GCP プロジェクトで OS Login を有効化している場合、
GCP 側の Daemons(google-oslogin-control)がインスタンス起動時やログイン時に
/etc/passwd の UID/GID を元の値(1003:1004 など)に自動的に
上書き・巻き戻してしまうことがあります。 ⭐️なんですと!!
その場合は、GCP 側で OS Login を無効にするか、
メタデータ (sysprep / metadata) で UID を指定する必要があります。
通常の SSH キー登録運用であれば上記手順で恒久的に固定されます。
提示された手順はid更新とその結果確認で問題なさそうやったから、そのままやってみた。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
naritomitsukasa@raccoon-fslinux:~$ sudo su - ⭐️rootになって作業
root@raccoon-fslinux:~#
root@raccoon-fslinux:~# ps -ef | grep ubuntu ⭐️オーナーとして稼働しているプロセスないか確認
root 1573 1530 0 22:15 pts/1 00:00:00 grep --color= auto ubuntu
root@raccoon-fslinux:~# ps -ef | grep nari ⭐️オーナーとして稼働しているプロセスないか確認( naritomitsukasaは存在するから多少はヒット)
root 1340 1004 0 21:54 ? 00:00:00 sshd-session: naritomitsukasa [ priv]
naritom+ 1345 1 0 21:54 ? 00:00:00 /usr/lib/systemd/systemd --user
naritom+ 1349 1345 0 21:54 ? 00:00:00 ( sd-pam)
naritom+ 1431 1340 0 21:54 ? 00:00:00 sshd-session: naritomitsukasa@pts/0
naritom+ 1436 1431 0 21:54 pts/0 00:00:00 -bash
root 1584 1530 0 22:15 pts/1 00:00:00 grep --color= auto nari
root@raccoon-fslinux:~# groupmod -g 2000 ubuntu ⭐️グループIDを変更
root@raccoon-fslinux:~# usermod -u 2000 -g 2000 ubuntu ⭐️ユーザーIDを変更
root@raccoon-fslinux:~# chown -R 2000:2000 /home/ubuntu ⭐️ホームディレクトリの所有権を新しいIDに追従させる
root@raccoon-fslinux:~# groupmod -g 1000 nari ⭐️グループIDを 1000 に変更
root@raccoon-fslinux:~# usermod -u 1000 -g 1000 nari ⭐️ユーザーIDを 1000 に変更(プライマリグループも 1000 に)
root@raccoon-fslinux:~# chown -R 1000:1000 /home/nari ⭐️ホームディレクトリ内の所有権を新しいIDに修正
root@raccoon-fslinux:~# ls -l /home ⭐️フォルダのアカウント名が表示され、uid/gidが表示されてないか確認
total 16
drwxr-x--- 3 nari nari 4096 Aug 14 20:34 nari
drwxr-x--- 4 naritomitsukasa naritomitsukasa 4096 Aug 14 21:54 naritomitsukasa
drwxr-x--- 3 rsa-key-20190112 rsa-key-20190112 4096 Aug 14 20:34 rsa-key-20190112
drwxr-x--- 3 ubuntu ubuntu 4096 Aug 14 20:34 ubuntu
root@raccoon-fslinux:~# find / -uid 1003 -exec chown 1000 {} + 2>/dev/null ⭐️旧UID( 1003) のファイルを新UID( 1000) に変更
root@raccoon-fslinux:~# find /gid 1004 -exec chgrp 1000 {} + 2>/dev/null ⭐️旧GID( 1004) のファイルを新GID( 1000) に変更
root@raccoon-fslinux:~# grep -E 'ubuntu|nari' /etc/passwd ⭐️結果確認
ubuntu:x:2000:2000:Ubuntu:/home/ubuntu:/bin/bash
naritomitsukasa:x:1002:1003::/home/naritomitsukasa:/bin/bash
nari:x:1000:1000::/home/nari:/bin/bash ⭐️できとる
root@raccoon-fslinux:~#
普段使いのユーザで接続するteratermマクロも用意して接続してみた。
sudoもできるな。
GCP OS Login機能が勝手に巻き戻すことあるって注意もあったから、それが何なのか、どう扱うのかは少し聞いてみた。
有効化されているかを確認する方法をgemini先生が教えてくれたので、ローカルubuntu26からgcloudコマンド使ってみた。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nari@nafslinux-ubu26:~$ gcloud compute instances describe raccoon-fslinux \
--zone= us-east1-b \
--format= "yaml(metadata.items)"
metadata:
items:
- key: ssh-keys ⭐️enable-oslogin の指定がなくssh-keysってあるから勝手に巻き戻らん
value: |-
nari:ssh-rsa
:(中略)
naritomitsukasa:ssh-rsa
:(中略)
To take a quick anonymous survey, run:
$ gcloud survey
nari@nafslinux-ubu26:~$
gemini先生に相談すると、調査と設定の時間が半分かそれ以下に縮む。
google drive使うためのOSユーザ作成#
これがいないとバックアップでrcloneできん。
1
2
3
4
5
6
7
nari@raccoon-fslinux:~$ sudo groupadd -g 1005 gavannitsales
nari@raccoon-fslinux:~$ sudo useradd -u 1005 -g 1005 -m -d /home/gavannitsales -s /bin/sh gavannitsales
nari@raccoon-fslinux:~$ sudo passwd gavannitsales
New password:
Retype new password:
passwd: password updated successfully
nari@raccoon-fslinux:~$
モジュール追加#
ローカルのubuntu26でやった設定
をやっとく。ログは割愛。
日本語化できた。
1
2
3
4
5
root@raccoon-fslinux:~# echo $LANG
ja_JP.UTF-8
root@raccoon-fslinux:~# date
2026年 8月 16日 日曜日 05:07:49 JST
root@raccoon-fslinux:~#
基本的なモジュール追加もやってく。
vmwareの中で動かすんやないからopen-vm-toolsはインストールせん。
最終的に入ったモジュール数は473。ローカルubuntu26より200個少ないな。
root@gcp-gvis-dklinux:/gvis/script# apt list --installed 2> /dev/null | grep -v 'Listing...' | wc -l ⭐️これぐらいか
473
root@gcp-gvis-dklinux:/gvis/script# apt list --installed 2>/dev/null | grep -v 'Listing...' | grep libreof ⭐️コンテナ側にはある
root@gcp-gvis-dklinux:/gvis/script# apt list --installed 2>/dev/null | grep -v 'Listing...' | grep cups ⭐️いらん
root@gcp-gvis-dklinux:/gvis/script# apt list --installed 2>/dev/null | grep -v 'Listing...' | grep modem ⭐️いらん
root@gcp-gvis-dklinux:/gvis/script# apt list --installed 2>/dev/null | grep -v 'Listing...' | grep ppp ⭐️いらん
root@gcp-gvis-dklinux:/gvis/script# apt list --installed 2>/dev/null | grep -v 'Listing...' | grep usb- ⭐️クラウドでなんでusbあるねん?
libusb-1.0-0/resolute,now 2:1.0.29-2build1 amd64 [インストール済み、自動]
root@gcp-gvis-dklinux:/gvis/script# apt list --installed 2>/dev/null | grep -v 'Listing...' | grep wireless ⭐️クラウドで何に使うねん?
root@gcp-gvis-dklinux:/gvis/script#
今度ローカルubuntu26のと比べてdiffして調べるか。
クラウドの中でのNTP同期先#
ntpも設定するんやけど、google cloudのus-eastにあるホストで時刻同期先に利用すべきntpサーバはどこなのかをgemini先生に聞いてみた。
■相談
1
2
gcpのubuntu26がus-east-bで稼働している。
ntpで時刻同期したいが、どのntpサーバ使えばいいか。
■回答
1
2
3
4
5
6
7
8
9
10
11
12
13
ゾーン(us-east1-b や us-central1-b など)に関わらず、
GCP(Compute Engine)上の VM では Google 内部の NTP サーバー である
metadata.google.internal を使用します。
1. なぜ metadata.google.internal なのか?
超低遅延・高信頼性VPC 内部のメタデータサーバー経由で同期するため、
外部インターネットを経由せず、最もレイテンシが低く安全に同期できます。
2. Leap Smearing(うるう秒の処理)
Google の NTP は「うるう秒」が発生した際、
24 時間かけて少しずつ時間をずらす(Leap Smearing)処理を行ないます。
外部の NTP サーバーと混ぜて使うと時刻がズレる原因になるため、
Google 内部 NTP のみに絞るのが公式の推奨です。
:(中略)
なるほど、google cloud内部の同期先を使えっていうことね。
時刻同期先は教えてもらったものを使う。
/etc/systemd/timesyncd.conf
1
2
3
:(中略)
NTP=metadata.google.internal
FallbackNTP=time.google.com
設定してみるとちゃんと動く。
1
2
3
4
5
6
7
8
9
10
11
12
13
root@raccoon-fslinux:~# tail -2 /etc/systemd/timesyncd.conf
NTP= metadata.google.internal
FallbackNTP= time.google.com
root@raccoon-fslinux:~# systemctl restart systemd-timesyncd
root@raccoon-fslinux:~# journalctl -u systemd-timesyncd -n 5 --no-pager
8月 16 05:35:29 raccoon-fslinux systemd[ 1] : Stopped systemd-timesyncd.service - Network Time Synchronization.
8月 16 05:35:29 raccoon-fslinux systemd[ 1] : Starting systemd-timesyncd.service - Network Time Synchronization...
8月 16 05:35:29 raccoon-fslinux systemd[ 1] : Started systemd-timesyncd.service - Network Time Synchronization.
8月 16 05:35:29 raccoon-fslinux systemd-timesyncd[ 8824] : Contacted time server 169.254.169.254:123 ( metadata.google.internal) .
8月 16 05:35:29 raccoon-fslinux systemd-timesyncd[ 8824] : Initial clock synchronization to Sun 2026-08-16 05:35:29.781131 JST.
root@raccoon-fslinux:~# date
2026年 8月 16日 日曜日 05:38:48 JST
root@raccoon-fslinux:~#
.bashrcにエイリアス入れとく#
最後の行に貼り付けとく。今のところ、google drive使うためのgavannitsalesユーザには必要ない。
/root/.bashrc
1
2
3
4
5
6
7
8
:(中略)
alias doc='cd /gvis/nari/nariDocs'
alias sc='cd /gvis/script'
alias dk='cd /gvis/nari/nariDocs/Docker'
alias tree="pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g'"
PATH=/gvis/script/proc:$PATH:$HOME/bin
alias dff='df -h | grep -v DockerSys | grep -v "dev/loop" | grep -v tmpfs | grep -v credentials'
export PATH
/home/nari/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
:(中略)
alias doc='cd /gvis/nari/nariDocs'
alias sc='cd /gvis/script'
alias dk='cd /gvis/nari/nariDocs/Docker'
alias tree="pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g'"
alias dff='df -h | grep -v DockerSys | grep -v "dev/loop" | grep -v tmpfs | grep -v credentials'
# 配下の.DS_Storeと._xxx を削除
function removegomi () {
find . \( -name '.DS_Store' -or -name '._*' -or -name '.smbdelete*' \) -delete -print;
}
alias rmgomi=removegomi
PATH=/gvis/script/proc:$PATH:$HOME/bin
export PATH
本番環境のフォルダ構成#
データ置き場の基礎フォルダgvisとnariを作成する。
1
2
3
4
nari@raccoon-fslinux:~$ sudo mkdir /gvis
nari@raccoon-fslinux:~$ sudo mkdir /gvis/nari
nari@raccoon-fslinux:~$ sudo ln -s /gvis/nari /nari
nari@raccoon-fslinux:~$
見比べたらこうなる。赤い背景がubuntu24-numbatで青い背景がubuntu26-raccoon。
スクリプトの流し込み#
本番環境のフォルダのパーミッションそろえる。nariってフォルダはマウントポイントとして使ってて、データディスクを後でマウントする。
nari2はデータ移行のときに使うんやけど、作るの忘れたから後で足しとこか。
gvis_conf/log/scriptはそのままtar.gzしてteratermのscp機能使ってダウンロードしておき、raccoon側にコピーする。
パーミッションそろってそうやな。
確認忘れてたから後で見たけど、バックアップでgoogle driveへアップロードするときの処理フォルダもパーミッション崩れてへんかった。
OSユーザ名gavannitsalesがファイル名のオーナーに設定されてたらOKや。
1
2
3
4
5
6
7
8
9
nari@raccoon-fslinux:/gvis/script/gdr-gavannitsales$ pwd
/gvis/script/gdr-gavannitsales
nari@raccoon-fslinux:/gvis/script/gdr-gavannitsales$ ls -l
total 2380
-rwxr-xr-x 1 gavannitsales gavannitsales 860 Dec 9 2020 001_DirList.sh
-rw-r--r-- 1 gavannitsales gavannitsales 2422932 Jan 21 2021 001_DirList.sh.txt
-rwxr-xr-x 1 gavannitsales gavannitsales 1172 Dec 9 2020 002_SyncFolder.sh
-rwxr-xr-x 1 gavannitsales gavannitsales 1410 Jul 2 2024 003_SyncGavannitsales.sh
nari@raccoon-fslinux:/gvis/script/gdr-gavannitsales$
システムの起動にかかる時間#
ローカルubuntu26作るときも確認したけど、google cloudの中のubuntu26でもやってみよか。
gcpのubuntu24での起動
1
2
3
4
root@gcp-gvis-dklinux:~# systemd-analyze
Startup finished in 1.585s (kernel) + 16.607s (userspace) = 18.193s
graphical.target reached after 16.190s in userspace. ⭐️ありゃりゃ。ローカルubuntu26のときと同じでgraphical.targetってなってる
root@gcp-gvis-dklinux:~#
gcpのubuntu26での起動
1
2
3
4
root@raccoon-fslinux:~# systemd-analyze
Startup finished in 1.784s (kernel) + 44.849s (userspace) = 46.634s
graphical.target reached after 44.343s in userspace. ⭐️なんで44秒もかかっとんねん?
root@raccoon-fslinux:~#
gcpのubuntu26で修正
1
2
3
4
5
6
7
8
root@raccoon-fslinux:~# systemctl get-default ⭐️どないなっとるか確認
graphical.target ⭐️ありゃりゃ
root@raccoon-fslinux:~# systemctl set-default multi-user.target ⭐️昔で言うランレベル3に変更
Created symlink '/etc/systemd/system/default.target' → '/usr/lib/systemd/system/multi-user.target'.
root@raccoon-fslinux:~# systemd-analyze
Startup finished in 1.872s (kernel) + 14.591s (userspace) = 16.464s
multi-user.target reached after 14.070s in userspace. ⭐️変更できたけどローカルubuntu26に比べたら時間長い
root@raccoon-fslinux:~#
14秒は長いな。ローカルubuntu26は3秒で終わってるから、もう少し設定してってから原因探るかな。
必要モジュールの設定#
本番環境の機能をセットアップする。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apt-get update
apt-get upgrade
apt install apache2
apt install rclone
apt-get update
apt-get install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update ⭐️忘れんように!
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker run hello-world ⭐️テスト!
インストール箇所は割愛してdocker確認のあたりはこうなる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
root@raccoon-fslinux:/gvis/script# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
d5e71e642bf5: Download complete
Digest: sha256:5dd0d3e6e255913fc30f90b9f2b1d359cc2cbdb48090cc4b65f1676e203243cc
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
( amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
root@raccoon-fslinux:/gvis/script#
一般ユーザでdocker操作できる設定入れる。
1
2
nari@raccoon-fslinux:~$ sudo usermod -aG docker $USER
nari@raccoon-fslinux:~$
ログインしなおすと101(lxd),988(docker)が所属に増えとる。
1
2
3
nari@raccoon-fslinux:~$ id
uid= 1000( nari) gid= 1000( nari) groups= 1000( nari) ,4( adm) ,20( dialout) ,24( cdrom) ,25( floppy) ,29( audio) ,30( dip) ,44( video) ,46( plugdev) ,101( lxd) ,104( netdev) ,988( docker) ,1001( google-sudoers) ,2000( ubuntu)
nari@raccoon-fslinux:~$
apache2/dockerは起動スクリプト使うからsystemdtlのサービスとしては停止してdisabledにしとかなアカンで。
1
2
sudo systemctl disable --now apache2
sudo systemctl disable --now docker.service docker.socket
コマンドラインでsystemctl status apache2 docker.service docker.socketってやったらこうなる。
1
2
3
4
5
6
7
8
9
10
11
○ apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled; preset: enabled) ⭐️disabledになっとる
Active: inactive (dead) since Sun 2026-08-16 06:46:08 JST; 1min 2s ago
Duration: 12min 35.579s
:(中略)
○ docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; preset: enabled) ⭐️disabledになっとる
Active: inactive (dead)
TriggeredBy: ○ docker.socket
Docs: https://docs.docker.com
:(中略)
rcloneの設定#
設定ファイルの$HOME/.config/rclone/rclone.cnfををコピって使う。
lslしてみたらリスト取れてるってことね。
1
2
3
root@raccoon-fslinux:~# rclone --config /home/gavannitsales/.config/rclone/rclone.conf lsl gvisDrive:/ | wc -l
21207
root@raccoon-fslinux:~#
ここはうまくいったんやけど、rcloneでgoogle driveへアップロードするときに失敗した。パーミッションちゃんと確認せなアカンで。
root@gcp-gvis-dklinux:/home/gavannitsales/.config/rclone# ll
total 12
drwxrwxr-x 2 gavannitsales gavannitsales 4096 Aug 16 07:48 ./
drwxrwxr-x 3 gavannitsales gavannitsales 4096 Aug 16 07:44 ../
-rw------- 1 root gavannitsales 529 Aug 16 07:48 rclone.conf ⭐️所有権がrootになってしもてたらアカン
root@gcp-gvis-dklinux:/home/gavannitsales/.config/rclone# chown gavannitsales:gavannitsales ./rclone.conf
root@gcp-gvis-dklinux:/home/gavannitsales/.config/rclone# ll
total 12
drwxrwxr-x 2 gavannitsales gavannitsales 4096 Aug 16 07:48 ./
drwxrwxr-x 3 gavannitsales gavannitsales 4096 Aug 16 07:44 ../
-rw------- 1 gavannitsales gavannitsales 529 Aug 16 07:48 rclone.conf ⭐️これでええ
root@gcp-gvis-dklinux:/home/gavannitsales/.config/rclone#
gcloudは最初から入ってる#
クラウド側でホスト作成してるんやし、そら入っとるわな。
1
2
3
4
5
6
7
8
9
10
11
root@raccoon-fslinux:~# gcloud config list
[ core]
account = xxxxxxxxxxxx-compute@developer.gserviceaccount.com
disable_usage_reporting = True
project = gvis-xxxxxxxxxxxx
universe_domain = googleapis.com
[ metrics]
environment = snap_google_cloud_cli_amd64
Your active configuration is: [ default]
root@raccoon-fslinux:~#
postfixでメール飛ばす設定#
ローカルubuntu26でやったこのあたり
の設定を見ながら設定する。
syslogdがなくなったからjournalctlでログ確認する。
1
2
3
4
5
sudo journalctl -u postfix ⭐️全ログ確認
sudo journalctl -u postfix -n 100 --no-pager ⭐️最新100行をページングなしで確認
sudo journalctl -u postfix --since today ⭐️今日のログ確認
sudo journalctl -u postfix --since "1 hour ago" ⭐️1時間以内のログ確認
sudo journalctl -u postfix -p err ⭐️エラーログのみ確認
ログをjournalctl -u postfix -fって見てみたら、正常に送信できてるみたい。
8月 17 05:48:43 raccoon-fslinux postfix/pickup[979]: 006227C92E: uid=1000 from=<nari@raccoon-fslinux.us-east1-b.c.gvis-3579.internal>
8月 17 05:48:43 raccoon-fslinux postfix/cleanup[1868]: 006227C92E: message-id=<20260816204843.006227C92E@gcp-raccoon-fslinux.intra.gavann-it.com>
8月 17 05:48:43 raccoon-fslinux postfix/qmgr[980]: 006227C92E: from=<nari@raccoon-fslinux.us-east1-b.c.gvis-xxxxxx.internal>, size=652, nrcpt=1 (queue active)
8月 17 05:48:45 raccoon-fslinux postfix/smtp[1874]: 006227C92E: to=<xxxxx@gavann-it.com>, relay=smtp.lolipop.jp[157.7.107.234]:587, delay=2.7, delays=0.02/0.01/1.6/1.1, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as D28D01402FA32)
8月 17 05:48:45 raccoon-fslinux postfix/qmgr[980]: 006227C92E: removed
メールも来てたで。
logroate忘れてた#
google gloudの中では今まで完全に忘れてた。
ローカルubuntu26の設定をアレンジして入れといた。あと/etc/logrotate.confはcompressって有効にしといた。
root@gcp-gvis-dklinux:/etc/logrotate.d# cat gvislog
/gvis/log/001_sysBackup.log
{
missingok
create 0664 nari nari
su nari nari
}
/gvis/log/002_makeTar.log
{
size 50000000
missingok
create 0664 nari nari
su nari nari
}
/gvis/log/004_gdr.log
{
missingok
create 0664 gavannitsales gavannitsales
su nari nari
}
root@gcp-gvis-dklinux:/etc/logrotate.d# cat /etc/logrotate.conf | grep compress
# uncomment this if you want your log files compressed
compress ⭐️圧縮してや
root@gcp-gvis-dklinux:/etc/logrotate.d#
その後でsudo systemctl restart rsyslogしてsudo logrotate -f /etc/logrotate.confって強制ローテート。
root@gcp-gvis-dklinux:/gvis/log# ll
total 2852
drwxr-xr-x 2 nari nari 4096 Aug 21 06:30 ./
drwxr-xr-x 7 root root 4096 Aug 16 06:23 ../
-rw-rw-r-- 1 nari nari 0 Aug 21 06:30 001_sysBackup.log
-rw-rw-r-- 1 nari nari 20 Aug 21 06:26 001_sysBackup.log.1.gz
-rw-r--r-- 1 nari nari 855887 Aug 19 06:26 001_sysBackup.log.2.gz
-rw-rw-r-- 1 nari nari 0 Aug 21 06:30 002_makeTar.log
-rw-rw-r-- 1 nari nari 20 Aug 21 06:26 002_makeTar.log.1.gz
-rw-r--r-- 1 nari nari 1989891 Aug 19 06:26 002_makeTar.log.2.gz
-rw-rw-r-- 1 nari nari 0 Aug 21 06:30 004_gdr.log
-rw-rw-rw- 1 nari nari 2037 Aug 19 06:51 004_gdr.log.1.gz
-rw-r--r-- 1 root root 4884 Aug 21 05:50 200_http.log
-rw-r--r-- 1 root root 41747 Aug 21 05:50 300_docker.log
root@gcp-gvis-dklinux:/gvis/log#
バックアップのログがめっちゃデカいな。
データ用ディスクのマウント#
ubuntu24/26のOS停止して、データディスク接続を移動する。
ubuntu24-numbatはcpuとメモリの数も減らしておいてディスクを外す。
ubuntu26を本番環境用にディスクを追加する。
OS起動したらcpuの状態みてみる。ちょっと長い。
root@raccoon-fslinux:~# lscpu
アーキテクチャ: x86_64
CPU 操作モード: 32-bit, 64-bit
アドレスサイズ: 48 bits physical, 48 bits virtual
バイト順序: Little Endian
CPU: 8
オンラインになっている CPU のリスト: 0-7 ⭐️8コアある
ベンダー ID: AuthenticAMD
モデル名: AMD EPYC 7B12
CPU ファミリー: 23
モデル: 49
コアあたりのスレッド数: 2
ソケットあたりのコア数: 4
ソケット数: 1
ステッピング: 0
:(中略)
ちょっと長い。もっと直感的にわかるnmon使う。8コアあるのとメモリ16GBある。
マウント対象になってるか確認する。lsblkってやったらloopってのが見えるのはgoogle cloud特有ってか。
1
2
3
4
5
6
7
8
9
10
11
12
13
nari@raccoon-fslinux:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 66.8M 1 loop /snap/core24/1643
loop1 7:1 0 344.6M 1 loop /snap/google-cloud-cli/481
loop2 7:2 0 50.1M 1 loop /snap/snapd/27406
loop3 7:3 0 50.1M 1 loop /snap/snapd/27710
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 28.9G 0 part /
├─sda13 8:13 0 1023M 0 part /boot
├─sda14 8:14 0 4M 0 part
└─sda15 8:15 0 106M 0 part /boot/efi
sdb 8:16 0 150G 0 disk ⭐️見えとるな
nari@raccoon-fslinux:~$
sdbのディスク見えてるからマウントのスクリプト使える。
前にxfsでサイズ半分に作り直したデータディスクを1回だけリペア処理しとこか。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@raccoon-fslinux:/gvis/script# xfs_repair /dev/sdb
Phase 1 - find and verify superblock...
Phase 2 - using internal log
:(中略)
Phase 3 - for each AG...
:(中略)
Phase 4 - check for duplicate blocks...
:(中略)
clearing reflink flag on inodes when possible
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
:(中略)
Phase 7 - verify and correct link counts...
done
root@raccoon-fslinux:/gvis/script# sh ./006_mount_xfs.sh ⭐️マウントする
root@raccoon-fslinux:/gvis/script# dff
Filesystem Size Used Avail Use% Mounted on
/dev/root 28G 3.0G 26G 11% /
efivarfs 256K 32K 220K 13% /sys/firmware/efi/efivars
/dev/sda13 989M 54M 868M 6% /boot
/dev/sda15 105M 6.3M 99M 7% /boot/efi
/dev/sdb 150G 97G 53G 65% /gvis/nari ⭐️つながった
root@raccoon-fslinux:/gvis/script#
apache2とdocker稼働#
ホストOSでの設定は毎回手動でやってる。
apache2#
データが見えるようになったところで、apache2の稼働設定入れる。
/etc/apache2/apache2.confへ追記
1
2
3
4
5
6
7
8
9
10
11
12
### gvis
<Directory "/nari/nariDocs/smb"> ⭐️使ってちょ
Options Includes Indexes ExecCGI FollowSymLinks
AllowOverride All
Require all granted
AddType text/html .html
AddOutputFilter INCLUDES .html
</Directory>
<IfModule mod_userdir.c>
UserDir nariDocs
</IfModule>
IndexOptions Charset=UTF-8 NameWidth=*
/etc/apache2/sites-available/000-default.confを更新
1
DocumentRoot /nari/nariDocs/smb ⭐️使ってちょ
起動ログをjournalctl -xeu apache2.serviceで確認する。
8月 18 03:53:03 raccoon-fslinux systemd[1]: Starting apache2.service - The Apache HTTP Server...
░░ Subject: A start job for unit apache2.service has begun execution
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit apache2.service has begun execution.
░░
░░ The job identifier is 2253.
8月 18 03:53:03 raccoon-fslinux systemd[1]: Started apache2.service - The Apache HTTP Server.
░░ Subject: A start job for unit apache2.service has finished successfully
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit apache2.service has finished successfully. ⭐️いけたかな
░░
░░ The job identifier is 2253.
lines 14-47/47 (END)
動作確認はxrdpコンテナ起動せんとできんな。
後で忘れてることに気づいた。SSIを実行させてるからコマンドラインで設定する。
root@gcp-gvis-dklinux:/etc/apache2# a2enmod include ⭐️こんなんやったかな
Considering dependency mime for include:
Module mime already enabled
Enabling module include.
To activate the new configuration, you need to run:
systemctl restart apache2
root@gcp-gvis-dklinux:/etc/apache2# systemctl restart apache2
root@gcp-gvis-dklinux:/etc/apache2#
これやっとかんと、コンテナから参照してるhtmlにヘッダ・フッタが読み込まれへんし文字化けもする。
docker#
サービス確認でsystemctl status docker.serviceってやったらこう見える。
○ docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; preset: enabled)
Active: inactive (dead)
:(中略)
この中にある/usr/lib/systemd/system/docker.serviceを編集してマウントしたデータディスクのdocker永続化領域を指定する。
:(中略)
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock --storage-driver=overlay2 --data-root /gvis/nari/nariDocs/Docker/nariDockerSys
:(中略)
その後にデーモン設定をsystemctl daemon-reloadって読み込みしなおさせてdockerサービスだけ起動してみる。
root@raccoon-fslinux:/gvis/nari/nariDocs/Docker# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1a461bee800 gitlab/gitlab-ce:18.7.0-ce.0 "/assets/init-contai…" 7 months ago Exited (137) 22 hours ago docker-SVgitlab2026-1
555631b9ec57 sv_django:5 "supervisord -n" 8 months ago Exited (137) 22 hours ago docker-sv_django-1
06793347b5ea mariadb:11.4-noble "docker-entrypoint.s…" 8 months ago Exited (0) 22 hours ago docker-sv_mariadb1104-1
06474b8deb8e steveltn/https-portal:1 "/init" 8 months ago Exited (137) 22 hours ago docker-sv_https-portal-1
d271630490c4 ubu:24gvis "/usr/bin/run.sh" 8 months ago Exited (0) 22 hours ago docker-cl_ubu24-1
root@raccoon-fslinux:/gvis/nari/nariDocs/Docker#
コンテナ見えたな。ubuntu22から24に切り替えたときは
dockerのコンテナうまく起動できんかった
けど今回もアカンかった。
というか、起動はできたけどsshトンネリングで接続した後につながらんかった。
こういうときはコンテナもイメージも全部作り直す。永続化領域はバックアップあるから、そのまま使う。
xrdpコンテナは母艦でubuntu26のxrdpコンテナ作ったけど、今はubuntu24のdockerfileでビルドして接続確認を先にする。
サービス起動の設定#
サービス開始のスクリプトを
systemctlで管理
させて利用してる。
データディスクをマウントして、gvis.serviceってサービス名から起動するスクリプトを使ってるので稼働させるのに使う。
/gvis/script/000_serviceStart.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
## -------------------------------------------------------------------------
## Script Name : serviceStart.sh
## Created by : T.Naritomi
## on : 2019.10.18
## Updated by : 2023.09.06
## 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----------------------------------------------------------------
sleep 20
/usr/bin/hostnamectl set-hostname gcp-gvis-dklinux
### /bin/sh /gvis/script/006_mount_ext4.sh ⭐️昔はext4使ってたな
/bin/sh /gvis/script/006_mount_xfs.sh
/bin/sh /gvis/script/202_httpdStart.sh
/bin/sh /gvis/script/302_dockerStart.sh
sleep 10
/bin/sh /gvis/script/009_startMail.sh ⭐️OS起動したらメール飛ばす
sleep 50
sync ; sync ; sync
/bin/sh /gvis/nari/nariDocs/Docker/dockerStart.sh
このスクリプトをOS起動時に動くようにしとく。
root@gcp-gvis-dklinux:~# systemctl enable gvis.service
Created symlink '/etc/systemd/system/multi-user.target.wants/gvis.service' → '/etc/systemd/system/gvis.service'.
root@gcp-gvis-dklinux:~# systemctl status gvis.service
○ gvis.service - gvis daemon
Loaded: loaded (/etc/systemd/system/gvis.service; enabled; preset: enabled) ⭐️OS起動するときに呼び出される
Active: inactive (dead) ⭐️動き終わったら終了やから常にdead
root@gcp-gvis-dklinux:~#
dockerコンテナが使える状態になったらメールが来るんやけど、OS起動してから2分程度で届くのは前と同じぐらい。
宅内DNSの変更#
宅内ルータにあるDNS定義を変更。
1
2
3
4
5
6
7
8
9
10
11
+----------------+ +---------------------------------------------+ +-----------------+
|windows11 | |Router | |GCP |
| +------------+ | | +-----------------------------------------+ | | +-------------+ |
| |vm ubuntu26 | | | |DNS | | | | raccoon | |
| +------------+ | -> | | gcp-gvis-dkLinux.intra.gavann-it.com = | | => | | xx.xx.xx.xx | |
| +------------+ | | | xx.xx.xx.xx | | | +-------------+ |
| |vm windows11| | | +-----------------------------------------+ | | +-------------+ |
| +------------+ | | | | | numbat | |
+----------------+ +---------------------------------------------+ | | yy.yy.yy.yy | |
| +-------------+ |
+-----------------+
参照名をgcp-gvis-dkLinux.intra.gavann-it.comって定義してるから、向き先をyy.yy.yy.yyからxx.xx.xx.xxに変更。
tertermマクロに書いてある参照名は同じにしてるから、向き先が変わってくれる。
別ホストになって鍵ファイルが変わるから、macosの${HOME}/.ssh/known_hostsにある記述はいったん削除したら新規登録してくれてつながる。
docker環境の利用#
xrdpのコンテナがないとブラウザ接続とか、ファイル置き場のデータ確認ができんので最初に使える状態作る。
xrdpとdjangoのコンテナ#
母艦では
ubuntu26のxrdpコンテナ
を作ったんやけど、今はgoogle cloudの中の動作確認やからいったんubuntu24のxrdpコンテナでやってく。
xrdpコンテナ使うときのメモ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd /gvis/nari/nariDocs/Docker/nariDockerDat/cl_ubuntu/download/wk_container
git clone https://github.com/danchitnis/container-xrdp.git ⭐️まだ残ってる
cp -p ../../Dockerfile-gcp-gvis.txt ./container-xrdp/ubuntu-xfce/ ⭐️Dockerfileは工夫して使ってる
cd container-xrdp
1)gvis用のxrdpコンテナをビルドする
docker build -f ./ubuntu-xfce/Dockerfile-gcp-gvis.txt -t ubu:24gvis .
2)古いほうのコンテナ停止してからcompose.yml更新して新しいほうのコンテナ起動する
docker stop xxx
docker run -it -v /gvis/nari/nariDocs/Docker/nariDockerDat/cl_ubuntu:/gvis -p 33389:3389 ubu:24gvis nari booboo yes
3)rdpログインしてGUIでの設定をする
※ vscodeは"--no-sandbox"のオプションつきで起動するようにランチャを設定する
※ chromeは"google-chrome --no-sandbox --disable-dev-shm-usage --disable-gpu"のオプションがいる
4)ブラウザのfavoritesに入れる
http://gcp-gvis-dklinux.intra.gavann-it.com/
xrdp環境のフォントやキーボード設定、ブラウザの基本設定とかもやる
5)dockerコンテナから保存イメージを作成して永続化する
docker commit `docker ps | grep 24gvis | awk '{print $NF}'` gvis-ubu24:24gvis
メモ見ながらコンテナをビルドしてcomposeで動かす。
djangoのアプリでmariadbに接続してデータ見えてるのと、ドキュメントもvscodeからgitの履歴参照しながらubuntu24のxrdpコンテナ使えた。
mariadbへの接続#
mariadbへローカルPCからつながるか。linuxでポート転送してるから、ポート53306に向かってつないでみる。
参照できてた。
gitlabのコンテナ#
コンテナ作り直したからか、認証情報が崩れてブラウザでログインできんようになってた。
rootと利用ユーザのパスワード初期化せなつながらん。
gemini先生に教えてもらったコマンドライン打ち込んでみたんやけど、rails環境に入って初期化するんやて。こんなん前にやったかなぁ。
nari@gcp-gvis-dklinux:/gvis/nari/nariDocs/Docker$ docker exec -it 6e37803ea39e gitlab-rails console -e production ⭐️コンテナにログイン
--------------------------------------------------------------------------------
Ruby: ruby 3.2.8 (2025-03-26 revision 13f495dc2c) [x86_64-linux]
GitLab: 18.7.0 (ef8306c4594) FOSS
GitLab Shell: 14.45.5
PostgreSQL: 16.10
-----------------------------------------------------------[ booted in 106.76s ]
Loading production environment (Rails 7.2.3)
gitlab(prod)> user = User.find_by_id(1) ⭐️rootユーザ選ぶ
=> #<User id:1 @root>
gitlab(prod)> user.password = 'xxxxxxxxx' ⭐️パスワード設定
=> "xxxxxxxxx"
gitlab(prod)> user.password_confirmation = 'xxxxxxxxx' ⭐️パスワード確認
=> "xxxxxxxxx"
gitlab(prod)> user.save! ⭐️保存してちょ!
=> true
gitlab(prod)> exit
nari@gcp-gvis-dklinux:/gvis/nari/nariDocs/Docker$
はい、ログインできた。
rootやないユーザのプロジェクトでリポジトリ使えるんか確認。大丈夫そう。
push/pullに問題あったとしてもエクスポートしといたデータあるからなんとかなるやろ。
gitlabは長らく使ってきたけど処理が重たい。pushしたらメモリいっぱい使う。
取り扱いも面倒になってきたし、そもそも脆弱性多すぎ。
1年で何回もバージョンアップあるからすぐ陳腐化する。
来年からはもっと軽快に動いてくれるgitサーバに変えなアカンな。
rcloneでバックアップ#
バックアップ処理で接続に使ってる鍵ファイル(teratermマクロの中でkeyfileとして指定してる箇所)を変更して、バックアップ起動のマクロ動かす。
rsync動くのにかかる時間は20分ぐらいか。
-------Backup Start---- 2026-08-19_06:17:17_
sending incremental file list
./
compose-GVISweb.yml
compose.yml
nariDockerDat/cl_ubuntu/backup/
nariDockerDat/cl_ubuntu/download/
nariDockerDat/cl_ubuntu/download/wk_container/container-xrdp/ubuntu-xfce/
nariDockerDat/cl_ubuntu/download/wk_container/container-xrdp/ubuntu-xfce/Dockerfile-gcp-gvis.txt
:(中略)
nariDockerDat/sv_mariadb11conf/nari/DDLdefine.txt
nariDockerDat/sv_mariadb11conf/nari/MySQLTuner-perl-master/
nariDockerDat/sv_mariadb11conf/nari/MySQLTuner-perl-master/Vagrant/
nariDockerDat/sv_mariadb11conf/nari/MySQLTuner-perl-master/build/
nariDockerDat/sv_mariadb11conf/nari/fullback/
sent 17,122,241 bytes received 2,237 bytes 2,634,535.08 bytes/sec
total size is 3,001,438,746 speedup is 175.27
google cloud側はアップロード処理は、google drive使うためのOSユーザにsudoして実行してるから、rcloneの設定ファイルのパーミッションに気を付ける。
----Start Sync 2026-08-19_06:43:49 -----
/GCP Sync Success... 2026-08-19_06:43:52
/GCP Sync Success... 2026-08-19_06:43:54
/GCP Sync Success... 2026-08-19_06:43:57
/GCP Sync Success... 2026-08-19_06:46:39
/GCP Sync Success... 2026-08-19_06:51:34
----End Sync 2026-08-19_06:51:34 -----
5個アップロードできとるな。
バックアップからローカルlinuxへクローン#
samba経由で使ってる業務データのファイルも本番から持ってくる。
バックアップの直前でmariadbのDDLのみ取得しなおしてる箇所を除いて、内容完全一致ということでOK。
アップロードされたファイルをローカルubuntu26のmariadbコンテナの永続化領域へ展開してからつないでみる。
zipとtarの展開は処理時間5分ぐらいで前と変わらず。SQLでDBのパラメータとか実際の登録レコードとか確認できてOK。
費用感#
毎週末にデータ入力してるから月4回ぐらい使う。月に2回google drive経由でローカル環境へデータ反映して消費税込みで1700円ぐらい。
今日は20日。us-eastリージョン使ってるから午後2時頃に今日の分の費用が反映されるんやけど、それでも毎月使ってるぐらいの課金になっとる。
課金のグラフ見たら13日にraccoonのホスト作ってて、毎日少しずつ作って移してった。
細かいところ確認するのに月末までもう少し使うやろけど、2000円ぐらいで抑えられたらええなぁ。
ubuntu24から26へ引っ越しするときの利用課金は400円アップぐらいで済むってことで。
費用増えるからubuntu24から26へのxrdpコンテナの切り替えは来月にしとこ。
その後#
後始末作業やってく。
ubuntu24の削除#
費用が逼迫してるからさっさと消す。本番環境維持してくれたnumbatごくろー。
IPアドレスも返納。
結局費用は、2500円に膨らんだ。
OS切り替えにかかるのは、普段利用の維持費から1000円ほどアップってことで。
iosから接続#
スマホは画面小さいし見づらいしあんまり使わんけど、前も設定やってたし今回もやってみよか。
まず鍵ファイルをもってくる。
numbatの設定残ってるのを書き換えて、鍵と接続先を指定する。
sshでつないでみる。
パスワード設定してたのになんで聞いてくるんやろな。
はいつながった。