🏺
ミニPCでマルチサーバー構築 [OS等インストール]
ミニPCでマルチサーバー構築シリーズのOS Lubuntu 24.04 LTSインストールとSSH,Docker,Tailscaleインストールの記録メモです。
シリーズ
- N100搭載ミニPCでマルチサーバーの構想と構築準備
- ミニPCでマルチサーバー構築 [OS等インストール] この記事
- ミニPCでマルチサーバー構築 [Sambaコンテナ]
- ミニPCでマルチサーバー構築 [PostgreSQLコンテナ]
- ミニPCでマルチサーバー構築 [Nginxコンテナ]
- ミニPCでマルチサーバー構築 [Immichコンテナ]
- ミニPCでマルチサーバー構築 [VaultwardenコンテナとTailscale]
- ミニPCでマルチサーバー構築 [AdGuard Homeコンテナ]
- ミニPCでマルチサーバー構築 [GUI環境整備]
事前準備
Lubuntu既知の不具合と対応
こちらのKnown Bugs参照。私に関係のあった不具合はInstallerの以下2つ。
- Calamares automatically creates swapfile with manual partitioning without any warning
- OSインストール後に代わりにスワップ領域を割り当て、swapfileをマニュアルで削除
- Calamares fails to install on logical volume on several conditions when using Manual Partitioning
- 事前にSSDのパーティションを別の方法で作成し、インストール時は割り当てのみ操作
ハードウェア換装
- SSDの換装
- 元々のSSDをラズパイで使用していた以下SSDに入れ替え
- Western Digital 2TB SSD (WDS200T1R0B-EC)
- 元々のSSDをラズパイで使用していた以下SSDに入れ替え
- Wifi&BT用無線基板無効化
- SSDを外すと無線基板も取り外せるので省電力化のため取り外す
- この記事のSSDを外した写真
- ただしアンテナ線のようなものが簡単に取り外せないため抜くだけ
- 2本の線が簡単に分解できないところに繋がっている
- 固定しているネジがプラ板?でシールドされているため一部をカット
- 取り外した基板がSSDと接触しないよう底面蓋に絶縁テープ等で固定
- 今後絶対に使用しないならアンテナ線カットが最善
- SSDを外すと無線基板も取り外せるので省電力化のため取り外す
- 上面吸気ファンのホコリ対策
- ファン付近は簡単に分解できないため予防
- 換気口用の粘着フィルタを外側に装着
- 粘着力は弱めのため、べたつかない気がする
ディスクパーティション
切り分け
どこにどの程度容量が使用されるか大筋を把握するため、パーティションをある程度用途別に切り分けた。容量に偏りが出て容量変更が必要になることが予想されるため論理ボリュームを採用した。
-
Partition Table
- GPTにしたかったが、結果的にMBRになってしまった
-
Physical Volumes
- Lubuntuインストール時ESPに300MiB割り当てていないと警告がある
領域 容量 フォーマット マウント フラグ メモ ESP 300MiB fat32 /boot/efi/ boot EFI System Partition SWAP 4GiB linuxswap - swap - LVPP (max) lvm2 - lvm Logical Volume Physical Partition -
Logical Volumes
- Logical Groupは1つだけ
- extent sizeを100MiBにしたかったが結果的にできなかった
容量 フォーマット マウント メモ 30GiB ext4 / システム全体 5GiB ext4 /var/log ログ用 50GiB ext4 /var/lib/docker docker肥大化抑制 20GiB ext4 /srv/pgsql DB (max) ext4 /mnt/ssd1 ファイル共有用 - Logical Groupは1つだけ
作成
- 以下理由によりdebian-installerで作成
- 既知の不具合によりCalamaresで作成できない
- 実際できなかった (突然インストールプロセスが終了する)
- SSDを外付け化できるケースが余っていない
- GParted Live on USBの選択画面から先がエラーになった
- Ubuntuインストールプロセスは試していない
- 既知の不具合によりCalamaresで作成できない
- debian-installerだと4TB未満は強制でMBRになるぽい
- 選択項目無しで後から確認した ESP作ったのにパァ
- LVGのextent sizeは4MiB固定になるぽい
- 既に何度もやり直していたため妥協でそのままに
OSインストール
Lubuntuインストール
- LubuntuのisoイメージをDL
- rufusで起動USBメモリ作成
- 最小インストールを選択
- 上記で作成したパーティションを割り当てる
- CalamaresはGPT前提で確認される模様
- MBRなのにESP容量の警告が出た
- 私と同じ作成方法をとる場合、ESPは301MiBにした方が良いかも?
- 300MiBで作ったのにCalamaresは299MiBと認識して警告した
- そもそもMBRなので問題ないはずだがESP無いとどうなるかは不明
ネットワーク設定変更
IPv4アドレスを固定する。
cat << EOF | sudo tee /etc/netplan/99-manual-conf.yaml > /dev/null
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
addresses: [192.168.0.0/24]
routes:
- to: default # default gateway
via: 192.168.0.0
nameservers:
addresses: [1.1.1.1, 1.0.0.1]
search: []
EOF
sudo chmod 600 /etc/netplan/99-manual-conf.yaml
スワップ設定変更
既知の不具合により強制的に作成されたswapfileを削除し、スワップ領域を割り当てる。
sudo cp -p /etc/fstab /etc/fstab.bk
# disable mount of swapfile
sudo sed -i '/\/swapfile/ s:/swapfile:#/swapfile:' /etc/fstab
# enable assign swap partition
echo 'UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX none swap sw 0 0' | sudo tee -a /etc/fstab > /dev/null
# decrease swap frequency
echo 'vm.swappiness = 10' | sudo tee -a /etc/sysctl.conf > /dev/null
sudo systemctl reboot
# remove swapfile
sudo rm /swapfile
スリープ休止無効化
基本的にサーバーとして使用するためスリープ,休止を無効化する。
sudo cp -p /etc/systemd/sleep.conf /etc/systemd/sleep.conf.bk
# disable sleep
sudo sed -i '/#AllowSuspend=/ {s/^\(.\)//;s/yes/no/}' /etc/systemd/sleep.conf
# disable hibernation
sudo sed -i '/#AllowHibernation/ {s/^\(.\)//;s/yes/no/}' /etc/systemd/sleep.conf
ブートオプション無効化
再起動はできるだけ早い方が嬉しいので、起動時に表示されるブートオプションを非表示にする
echo 'set timeout=0' | sudo tee -a /etc/grub.d/40_custom > /dev/null
sudo update-grub
ファイアウォール設定
Dockerの外部ポート開示設定は直接iptablesが変更されるので本来不要だが、わかりやすさのためにそれらを含めて設定する。ここに書いたが私は全ての機能を実現させた後に設定した。
sudo cp -p /etc/default/ufw /etc/default/ufw.bk
sudo sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw
sudo ufw default deny incoming
sudo ufw allow from 192.168.0.0 to any port 22
# ...some allow settings...
sudo ufw limit ssh
sudo ufw limit ssh comment 'Limitation of continuous access for ssh server'
# change logging frequency
sudo ufw logging medium
sudo systemctl enable ufw
sudo ufw enable
基本ソフトインストール
アカウント取得
Tailscaleのアカウントがない場合は取得する。
レポジトリ追加
Ubuntu 24.04 LTSからdeb822形式が採用されたので、deb822形式に変換してレポジトリを追加する。現時点でTailscale公式に24.04のインストール方法が書いていないが、Ubuntuコードネーム部分をnoble
に置き換えれば24.04でも動作した。
# Add docker repository
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod 644 /etc/apt/keyrings/docker.asc
cat << EOF | sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
Architectures: amd64
EOF
# Add tailscale repository
sudo curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg -o /usr/share/keyrings/tailscale-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/tailscale-archive-keyring.gpg
cat << EOF | sudo tee /etc/apt/sources.list.d/tailscale.sources > /dev/null
Types: deb
URIs: https://pkgs.tailscale.com/stable/ubuntu
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/tailscale-archive-keyring.gpg
Architectures: amd64
EOF
インストール
OpenSSH,Docker,Tailscaleをインストールする。
sudo apt update
sudo apt install -y \
openssh-server \
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \
tailscale
SSH鍵登録
パスワード認証を無効にする前に鍵を登録する。
- Linux
ssh-keygen -t ed25519 -f ~/.ssh/your_key_name ssh-copy-id -i /path/of/pubkey user_name@192.168.0.0
- Windows
ssh-keygen -t ed25519 -f ${env:USERPROFILE}/.ssh/your_key_name
- PowerShellには
ssh-copy-id
がないためこちらの記事を参照
- PowerShellには
OpenSSH設定
SSHの各種設定を変更する。
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
# enable pubkey authentication
sudo sed -i '/#PubkeyAuthentication/ s/^\(.\)//' /etc/ssh/sshd_config
# disable root login
sudo sed -i '/#PermitRootLogin/ {s/^\(.\)//;s/prohibit-password/no/}' /etc/ssh/sshd_config
# disable password login
sudo sed -i '/#PasswordAuthentication/ {s/^\(.\)//;s/yes/no/}' /etc/ssh/sshd_config
# optional
sudo sed -i '/#AuthorizedKeysFile/ {s/^\(.\)//;s: .ssh/authorized_keys2::}' /etc/ssh/sshd_config
# to connect fast, disable GSS API auth and Use DNS
sudo sed -i '/#GSSAPIAuthentication/ s/^\(.\)//' /etc/ssh/sshd_config
sudo sed -i '/#UseDNS/ s/^\(.\)//' /etc/ssh/sshd_config
sudo systemctl enable ssh
Tailscale認証
以下コマンドで認証と接続を実施する。
sudo tailscale up
参考文献
- Lubuntu 24.04 LTS Released!
- Chapter 1 Installing Lubuntu
- 相変わらずコスパ高!Intel N100搭載2万円台ミニPCレビュー!【CHUWI LarkBox X 2023】
- GNU Parted User Manual
- size of extent on LVM2
- LVM extent size
- Ubuntu 24.04 LTSの変更点
- KDE Login Screen (SDDM) and Power Management
- apt-key の非推奨化と keyring の扱い方
- Install Docker Engine on Ubuntu
- Setting up Tailscale on Ubuntu 22.04 (jammy)
- WindowsのPowerShellを使ってUbuntuに公開鍵を送る
Discussion