背景
- 開発クライアントは以下のような問題があった
- Windows
- WLS2がHyperVのネットワークの問題によって動かなくなった
- そこで、WSL1にダウングレードしたが色々と不便だった
- Mac
- 外国でMacBookの修理費が2倍かかった
- MacBookが壊れつつもAppleの認定国で直す必要があった
- Linux Desktop
- KindleやMS Officeが使えなかったり不便だった
- 結局、開発のクライアントはマルチの開発環境でやるしかない
- なので、結局、開発機もClient-Server方式で構築する事にした
- Client
- Windows, Mac, Android, Linux Desktop
- Server
- そして、LANからはSSH、WANからVPNで接続して開発する
- また、VSCodeを使ってSSH接続し、Client側もOS-freeにする
- これによって外出先、自宅、別PCでも自由に開発ができるようにした
Install USBドライブの作成
- Rufusを利用した
- RufusはOSSの起動USBを作成するツール
- 書き込みの設定はデフォルト
- OSはUbuntu Server 24.04 LTS
ServerへのUbuntuのインストール準備
- BIOS
- BootモードをLegacyに変更
- USBドライブの優先度を一番上に変更
- Boot USBドライブをPCに挿入して起動
ネットワーク情報の確認
ClientのLinux Desktopから、LANの情報を確認する。
ip a
- NICのI/F
- eth0, enp3s0, eno1
- wlan0, wlp3s0
- lo
- IP
inet
に続くのがipアドレス192.168.3.11/24
だった場合192.168.3.11
がipアドレス/24
がサブネットネットマスク
ip r
default via 192.168.3.1 dev eno1
の場合192.168.3.1
がルーターのIPアドレス- これをデフォルトゲートウェイにする
つまり上の場合、固定IPをする時、次のような設定になる。
- Address:
192.168.3.10
(かぶらないのを適当に選ぶ) - Network:
24
or 255.255.255.0
or 192.168.3.0/24
- Gateway:
192.168.3.1
- DNS:
8.8.8.8
ServerへのUbuntu Serverのインストール
WiFiの設定はStaticにする。
StorageはSSDが2枚あるが、1つにUbuntuをインストール
プロファイルの設定
SSHはもちろん有効化し、SSHの公開鍵はGithubからimportする。
ルーターのポートを空けていないので、便宜上形式にPWでログインも許可する。
Snapsのソフトはいらないので、選択しない。
インストールする。
SSHのテスト
Users > mike > .ssh > config
に次のSSHの設定を追加する。
1
2
3
| Host dev
User mike
HostName 192.168.3.10
|
Client(Windows)から接続
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
| PS C:\Users\mike> ssh mike@dev
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-48-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Mon Nov 11 08:49:57 AM UTC 2024
System load: 0.01
Usage of /: 10.7% of 97.87GB
Memory usage: 2%
Swap usage: 0%
Temperature: 36.0 C
Processes: 270
Users logged in: 1
IPv4 address for wlp3s0: 192.168.3.11
IPv6 address for wlp3s0: 2400:2412:3360:4d00:126f:d9ff:fe3c:6ef1
Expanded Security Maintenance for Applications is not enabled.
45 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
Last login: Mon Nov 11 08:46:29 2024 from 192.168.3.4
|
UFWの設定
簡便なのでUFWに切り替える。
1
2
3
4
5
6
7
8
9
10
| $ sudo ufw allow 22
$ sudo ufw enable
$ sudo ufw reload
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
|
SSHの鍵生成とGithubへの登録
Dev Serverのsshキーを生成してGithubに登録する。
1
2
3
4
5
6
| $ wget https://gist.githubusercontent.com/3265/54d0339408e8cd1898af6694b983736f/raw/c57bb85e9133fbd233c78ec58ad33a0044ea6b70/github.sh
$ sudo chmod +x github.sh
$ ./github.sh dev
$ # public keyをgithubに登録する。
$ ssh -T git@github.com
Hi 3265! You've successfully authenticated, but GitHub does not provide shell access.
|
以下がgithub.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
31
32
33
34
35
36
37
38
39
40
41
| #!/bin/bash
# ref: https://stackoverflow.com/questions/43235179/how-to-execute-ssh-keygen-without-prompt
#!/bin/bash
# Check if argument is provided
if [ $# -ne 1 ]; then
echo "Error: Please provide a name for the SSH key"
echo "Usage: $0 <key-name>"
exit 1
fi
KEY_NAME=$1
# Create .ssh directory if it doesn't exist
mkdir -p ~/.ssh/
cd ~/.ssh/
# Generate SSH key
yes | ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_${KEY_NAME}_rsa
if [ $? -ne 0 ]; then
echo "Error: Failed to generate SSH key"
exit 1
fi
# Set proper permissions
sudo chmod -R 700 ~/.ssh/
sudo chmod 600 ~/.ssh/id_${KEY_NAME}_rsa
# Add config entry
cat >> config <<EOF
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_${KEY_NAME}_rsa
EOF
# Display public key
cat ~/.ssh/id_${KEY_NAME}_rsa.pub
|
基本的なパッケージのインスコ
システムの最新化。
1
2
| $ sudo apt update
$ sudo apt upgrade -y
|
Dotfilesのセットアップ
dotfileの初期化に必要な必須パッケージのインスコ。
1
| $ sudo apt install git make -y
|
clone
1
| $ git clone git@github.com:3265/dotfiles.git
|
linuxの定番処理を走らせる。
pythonとnodeのインスコ
1
2
3
4
| $ pyenv install 3.10.10
$ pyenv global 3.10.10
$ nvm install v22.1.0
$ nvm use v22.1.0
|
設定は全てDotfilesにある。
GPGキーの設定
既に設定済みのClientで鍵をExport
1
| $ gpg --export-secret-key -a > secretkey.asc
|
Exportした鍵をServerに持っていって鍵の登録。
1
2
| $ gpg --import secretkey.asc
$ shred --remove secretkey.asc
|
リモートデスクトップ接続の設定
XRDPのインスコ。
1
| $ sudo apt install xrdp -y
|
xrdpの起動とportの設定。
1
2
3
| $ sudo systemctl enable xrdp
$ sudo systemctl start xrdp
$ sudo ufw allow 3389
|
Windows(Client)でRemote Desktop Connectionを立ち上げてLinuxのUserで接続する。
- Computer: 192.163.3.10
- Username: xxx
TODOs
- WireGuardの設定
- RAIDの設定
- fail2banの設定
- NASの接続
- ルーターの設定
- DynamicDNSの設定
- SSHFSやSFTPなどの設定
- Linux Serverのフルバックアップ
- リモートデスクトップの設定(RDP or VNC)
- backupの設定
まとめ
マルチOSやマルチマシンを使いこなす必要がある開発では、開発環境もClient-Server方式で分散するのが良い。