能書き
自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続き。
Hyper-V に Xubuntu 22.04 LTS をインストールして成功した訳ですが、それを踏まえて実機にインストールします。
参考文献
- 自宅サーバー構築譚:Xubuntu 22.04 LTS on ZFS in Hyper-V(第2世代) - Qiita
- 俺様サーバー構築記 - ZFS の上に Arch Linux と無線LANをインストール; やり直し(Linux-LTS)@ノートパソコン(UEFI+wifi) - Qiita
環境
以前扱った、かつて悪評高かったマシンになります。そのスペックを再掲します。
- 機種:HP Pavilion TouchSmart 10-e013AU
- 型番: F6C99PA#ABJ
- CPU: AMD A4-1200 APU with Radeon(TM) HD Graphics
- クロック: 1.00GHz
- メモリ: 2GB
- HDD: 320GB
これに Xubuntu で ZFS というとパワー不足感が溢れ出しそうですが。まぁ、頑張ってみます。
インストール環境の整備
暗号化はしない方針です。家庭用なので。
デスクトップインストーラーを起動しsshの環境整備
デスクトップマシンへインストールした時に作成したUSBメモリを再利用します。
内容はデスクトップ版のisoです。Ubuntuのサイトからダウンロードして、USBメモリに焼いた物です。私は普段使いのWin10マシンでRufusというツールを使ってみましたが、ここはお好みで。
このUSBメモリをインストール対象マシンに挿入して、ここから起動。
GUI インストーラーが立ち上がって Welcome という画面が表示されたら、 TAB キーを押して Try Ubuntu ボタンにフォーカスを移動して(ボタンにオレンジの枠がつきます) Enter キーを押します。
ウィンドウ環境に切り替わったら、まず最初にWi-Fiを設定して通信環境を確保します。わかりやすいGUIがありますので、画面上で確認しながらマウス操作します。
それからターミナルを起動しますが、マウス操作またはショートカットキー Ctrl+Alt+T でどうぞ。
主な作業はsshで接続して行いたいので、そのように準備します。sshで接続するのはコマンドをコピペできるから。
ターミナルで下記のコマンドを実行。
sudo apt update
OpenSSHサーバーと、フルのvimをインストール。
sudo apt install --yes openssh-server vim
ssh接続用にユーザー ubuntu のパスワードを設定。
passwd
ssh接続先のIPアドレスを確認します。
ip a
別のマシンから対象のマシンにsshしてインストール作業を続行
sshはほとんどのOSで利用可能でしょう。Windows10でもコマンドプロンプトからsshコマンドを実行できます。
ssh ubuntu@接続先のIPアドレス
インストール作業を同じマシンでやり直してたりすると、ここでエラーが出る事があります。そんな時には .ssh\known_hosts
を削除してから、sshコマンドを実行します。
del %USERPROFILE%\.ssh\known_hosts
rootユーザーになります。
sudo -i
debootstrapとZFSを Live CD 環境にインストールします。
apt install --yes debootstrap gdisk zfsutils-linux
systemctl stop zed
ディスクのフォーマット
フォーマット対象ディスクを確認します。
lsblk
今回は下記のように表示されます。以前 ArchLinux on ZFS でインストールしたマシンなので、その名残が見えます。
root@ubuntu:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 2.1G 1 loop /rofs
loop1 7:1 0 4K 1 loop /snap/bare/5
loop2 7:2 0 62M 1 loop /snap/core20/1587
loop3 7:3 0 400.8M 1 loop /snap/gnome-3-38-2004/112
loop4 7:4 0 163.3M 1 loop /snap/firefox/1635
loop5 7:5 0 45.9M 1 loop /snap/snap-store/582
loop6 7:6 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop7 7:7 0 47M 1 loop /snap/snapd/16292
loop8 7:8 0 284K 1 loop /snap/snapd-desktop-integration/14
sda 8:0 0 298.1G 0 disk
└─sda4 8:4 0 298.1G 0 part
sdb 8:16 1 7.5G 0 disk
├─sdb1 8:17 1 512M 0 part
└─sdb3 8:19 1 2G 0 part
sdc 8:32 1 58.2G 0 disk
└─sdc1 8:33 1 58.2G 0 part /cdrom
loop0
~loop8
はインストーラによる設定でしょうか。
sda
が内蔵HDDです。
sdb
が、起動用に利用するUSBメモリになります。
sdc
はインストーラです。
ディスクの指定にはIDを使います。
ls -l /dev/disk/by-id
これを変数に設定するのがubuntu流らしいですが、ここは私の流儀で取得する事にします。
BOOTDISK=$(cd /dev/disk/by-id; ls ata-* usb-* | while read d; do if [ "$(readlink -f $d)" = "/dev/sdb" ]; then echo "/dev/disk/by-id/$d"; fi; done)
DISK=$(cd /dev/disk/by-id; ls ata-* usb-* | while read d; do if [ "$(readlink -f $d)" = "/dev/sda" ]; then echo "/dev/disk/by-id/$d"; fi; done)
スワップパーティションが使用されていない事を確認します。
swapoff --all
USBメモリのパーティションを全削除します。
wipefs -a $BOOTDISK
パーティションテーブルをクリアします。
sgdisk --zap-all $BOOTDISK
ブートローダー パーティションを作成します。
sgdisk -n1::+512M -t1:EF00 $BOOTDISK
ブートプールパーティションも、USBメモリ上に用意してみます。起動が遅くなるようでしたら考え直すかも知れません。
sgdisk -n2::+4G -t2:BE00 $BOOTDISK
残りは適当に確保しておきます。
sgdisk -n3:: $BOOTDISK
確認。
sgdisk -p $BOOTDISK
結果は下記のようになります。
# sgdisk -p $BOOTDISK
Disk /dev/disk/by-id/usb-SanDisk__Cruzer_Fit_4C530000111203116363-0:0: 15630336 sectors, 7.5 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 36D7086B-6EE7-4A91-B095-9E974346DF16
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 15630302
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 1050623 512.0 MiB EF00
2 1050624 9439231 4.0 GiB BE00
3 9439232 15630302 3.0 GiB 8300
そしてメインのHDD。そのパーティションを全削除します。
wipefs -a $DISK
パーティションテーブルをクリアします。
sgdisk --zap-all $DISK
スワップについて。参考文献によると、zvolにスワップを置くとデッドロックの危険性があるので非推奨だそうです。バグレポートが上がっているらしい。
しかし Linux ではスワップを有効にした方が、メモリ管理の都合上、良いらしいです。今回はメモリが不足しているという意味もあります。
sgdisk -n1:0:+4G -t1:8200 $DISK
ルートプールパーティションを作成します。
sgdisk -n2:0:0 -t2:BF00 $DISK
設定を確認するコマンドは下記になります。
sgdisk -p $DISK
確認の結果。
# sgdisk -p $DISK
Disk /dev/disk/by-id/ata-ST320LT012-1DG14C_S3P11L17: 625142448 sectors, 298.1 GiB
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 57F67CC9-3CC3-452E-B299-BA132A25058C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 625142414
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 8390655 4.0 GiB 8200
2 8390656 625142414 294.1 GiB BF00
いよいよzfsフォーマットします。ここが今回最大のコピペポイント!これをコピペする為にssh経由で接続していると言っても過言ではありません。
因みにこのzpool名はbpool
固定らしい。変更したい場合はupdate-grub
後に/etc/grub.d/10_linux_zfs
を修正すればいいらしいのですが、試していません。
※なおインストール2回目以降でエラーが出る際には、コマンドの末尾かどこかに -f
オプションを付加します。
zpool create \
-o ashift=12 \
-o autotrim=on \
-o cachefile=/etc/zfs/zpool.cache \
-o compatibility=grub2 \
-o feature@livelist=enabled \
-o feature@zpool_checkpoint=enabled \
-O devices=off \
-O acltype=posixacl -O xattr=sa \
-O compression=lz4 \
-O normalization=formD \
-O relatime=on \
-O canmount=off -O mountpoint=/boot -R /mnt \
bpool ${BOOTDISK}-part2
エラー「not in specified 'compatibility' feature set.」(指定された「互換性」機能セットにない)は無視します。
そしてルートプールを作成します。こちらのzpool名は何でも良いそうです。zfsの伝統に則ってtank
にしてみました。
zpool create \
-o ashift=12 \
-o autotrim=on \
-O acltype=posixacl \
-O xattr=sa -O dnodesize=auto \
-O compression=lz4 \
-O normalization=formD \
-O relatime=on \
-O canmount=off -O mountpoint=/ -R /mnt \
tank ${DISK}-part2
作成したプール一覧の確認は下記。このコマンドはコピペではなくて zpool list
zpool status
と手打ちでお願いします。別に良いよねこの位は。
# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
bpool 1.88G 612K 1.87G - - 0% 0% 1.00x ONLINE /mnt
tank 294G 504K 294G - - 0% 0% 1.00x ONLINE /mnt
# zpool status
pool: bpool
state: ONLINE
status: One or more features are enabled on the pool despite not being
requested by the 'compatibility' property.
action: Consider setting 'compatibility' to an appropriate value, or
adding needed features to the relevant file in
/etc/zfs/compatibility.d or /usr/share/zfs/compatibility.d.
config:
NAME STATE READ WRITE CKSUM
bpool ONLINE 0 0 0
usb-SanDisk__Cruzer_Fit_4C530000111203116363-0:0-part2 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
ata-ST320LT012-1DG14C_S3P11L17-part2 ONLINE 0 0 0
errors: No known data errors
最後に、USBメモリの余りパーティション。万が一に備えてFAT32でフォーマットしておきます。それならWindowsマシンでも読み書きできるので、何かあった際には緊急で利用できるでしょう。
mkdosfs -F32 ${BOOTDISK}-part3
システムのインストール
ディレクトリ構造に合わせたデータセット作成
Linuxのディレクトリ構造については、大昔にちょっと調べただけで実はあんまり良く分かっていません。その為なるべく参考文献通りにしています。
コンテナとして機能するファイルシステムデータセットを作成します。
zfs create -o canmount=off -o mountpoint=none tank/ROOT
zfs create -o canmount=off -o mountpoint=none bpool/BOOT
ルートおよびブート ファイル システムのファイル システム データセットを作成します。
参考文献はUUID(っぽいランダムな6文字)を付加したデータセット名にしていますが、これをやると後々とっても扱いづらくなります。ubuntu以外はインストールしないし、複数インストールもしない予定なので、UUIDは無しの方向にしました。
zfs create -o mountpoint=/ \
-o com.ubuntu.zsys:bootfs=yes \
-o com.ubuntu.zsys:last-used=$(date +%s) tank/ROOT/ubuntu
zfs create -o mountpoint=/boot bpool/BOOT/ubuntu
データセットを作成します。
zfs create -o com.ubuntu.zsys:bootfs=no -o canmount=off tank/ROOT/ubuntu/usr
zfs create -o com.ubuntu.zsys:bootfs=no -o canmount=off tank/ROOT/ubuntu/var
zfs create tank/ROOT/ubuntu/var/lib
zfs create tank/ROOT/ubuntu/var/log
zfs create tank/ROOT/ubuntu/var/spool
zfs create -o canmount=off -o mountpoint=/ tank/USERDATA
zfs create -o com.ubuntu.zsys:bootfs-datasets=tank/ROOT/ubuntu \
-o canmount=on -o mountpoint=/root tank/USERDATA/root
chmod 700 /mnt/root
参考文献から、今回必要なデータセットのオプションを選んで設定します。
zfs create tank/ROOT/ubuntu/var/lib/apt
zfs create tank/ROOT/ubuntu/var/lib/dpkg
zfs create -o com.ubuntu.zsys:bootfs=no tank/ROOT/ubuntu/srv
zfs create tank/ROOT/ubuntu/var/lib/AccountsService
zfs create tank/ROOT/ubuntu/var/lib/NetworkManager
zfs create tank/ROOT/ubuntu/usr/local
LXDをインストールする為のsnapというパッケージ管理システムは、下記ディレクトリを使用します。
参考文献:snapパッケージの関連ディレクトリ - 第714回 Firefoxを含むsnapパッケージとの付き合い方 - gihyo.jp
zfs create tank/ROOT/ubuntu/snap
zfs create tank/ROOT/ubuntu/var/snap
zfs create tank/ROOT/ubuntu/var/lib/snapd
Dockerの為には下記ディレクトリを用意します。
zfs create tank/ROOT/ubuntu/var/lib/docker
zfs create tank/ROOT/ubuntu/var/lib/containerd
/run
に tmpfs をマウントします。
mkdir /mnt/run
mount -t tmpfs tmpfs /mnt/run
mkdir /mnt/run/lock
なお/home
はユーザー追加時に作成します。
debootstrap
Ubuntu 22.04 LTS 通称 jammy をインストール。
debootstrap jammy /mnt
終わったら以下のコマンドを実行します。
mkdir /mnt/etc/zfs
cp /etc/zfs/zpool.cache /mnt/etc/zfs/
システム構成
マシン名
まずはホスト名を決めます。
hostname ホスト名
hostname >/mnt/etc/hostname
ネットワーク関連
hostsファイルを修正。
sed -i -e"/^127.0.0.1/a 127.0.1.1\t$(hostname)" /mnt/etc/hosts
netplanのネットワーク設定ファイル/mnt/etc/netplan/01-netcfg.yaml
を作成します。まずはネットワークインターフェイス名を確認。イーサネットがeno1
、wifiがwlo1
のようです。
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether a0:1d:48:e4:b4:b2 brd ff:ff:ff:ff:ff:ff
altname enp5s0
3: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 54:35:30:9b:f8:c5 brd ff:ff:ff:ff:ff:ff
altname wlp1s0f0
inet 192.168.0.104/24 brd 192.168.0.255 scope global dynamic noprefixroute wlo1
valid_lft 83235sec preferred_lft 83235sec
inet6 fe80::43bf:ae32:f816:8da8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
以前の記事の通りにIPアドレスを割り振ります。今回はDHCPにします。
参考文献:固定IPアドレスの割当(IPv4、IPv6) - Netplanの使い方 - komeの備忘録
更に、wifiの設定を追加します。パスワードは平文で書かずに暗号化してみます。
WIFI_SSID=我が家のSSID
WIFI_PWD=パスワード
cat > /mnt/etc/netplan/01-netcfg.yaml <<___
network:
version: 2
ethernets:
eno0:
dhcp4: true
wifis:
wlo1:
access-points:
"$WIFI_SSID":
password: $(wpa_passphrase $WIFI_SSID $WIFI_PWD | grep "^[[:space:]]*psk=" | cut -d= -f2)
dhcp4: true
___
パッケージソース
cat >/mnt/etc/apt/sources.list <<___
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
___
chroot
Live CD 環境の仮想ファイルシステムをバインドマウントして、上記でセットアップした環境に chroot します( --bind ではなく --rbind を使っていることに注意)。
mount --make-private --rbind /dev /mnt/dev
mount --make-private --rbind /proc /mnt/proc
mount --make-private --rbind /sys /mnt/sys
chroot /mnt /usr/bin/env BOOTDISK=$BOOTDISK DISK=$DISK bash --login
chroot環境内のaptのインデクスを更新します。
apt update
ロケール
en_US.UTF-8 と ja_JP.UTF-8 と、後は個人的な好みで。私は ja_JP.EUC-JP を入れます。
locale-gen --purge en_US.UTF-8 ja_JP.UTF-8 ja_JP.EUC-JP
エディタ
個人的な好みで vi です。
apt install --yes vim
タイムゾーン
参考文献には書かれていませんが、タイムゾーンを設定します。
日本なら Asia/Tokyo です。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
EFIファイルシステム
EFIファイルシステムを作成します。
apt install --yes dosfstools
mkdosfs -F 32 -s 1 -n EFI ${BOOTDISK}-part1
mkdir /boot/efi
echo /dev/disk/by-uuid/$(blkid -s UUID -o value ${BOOTDISK}-part1) /boot/efi vfat defaults 0 0 >> /etc/fstab
/etc/fstab
を設定したらすぐにmount
したい所ですが、連続して実行するとなぜかエラーが発生します。一瞬の間が必要なようです。理由は不明。
と言う訳で下記mount
コマンドは分けておきます。
mount /boot/efi
/boot/grub
を設定します。
mkdir /boot/efi/grub /boot/grub
echo /boot/efi/grub /boot/grub none defaults,bind 0 0 >> /etc/fstab
mount /boot/grub
カーネルイメージなど
LinuxのカーネルイメージとZFSをchroot環境にインストールします。wifiを扱う為のwpasupplicantパッケージもインストールします。
apt install --yes grub-efi-amd64 grub-efi-amd64-signed linux-image-generic shim-signed zfs-initramfs zsys wpasupplicant
Windowsなど他のOSを入れる予定は無いので、os-proberを削除します。
apt purge --yes os-prober
ここで下記のエラーが出ますが、これは無視して良さそうです。多分。
ERROR couldn't connect to zsys daemon: connection error: desc = "transport: Error while dialing dial unix /run/zsysd.sock: connect: no such file or directory"
rootパスワード
パスワードを設定します。
passwd
スワップを構成
下記コマンドを実行します。
mkswap -f ${DISK}-part1
echo /dev/disk/by-uuid/$(blkid -s UUID -o value ${DISK}-part1) none swap discard 0 0 >> /etc/fstab
swapon -a
tmpfs
次回起動時にtmpfsを/tmp
にマウントするようにします。
cp /usr/share/systemd/tmp.mount /etc/systemd/system/
systemctl enable tmp.mount
システムグループ
無くてもいいかなと思ったけれど、一応Ubuntuなので、念の為に作成しておきます。
addgroup --system lpadmin
addgroup --system lxd
addgroup --system sambashare
SSH
SSHをインストールします。
apt install --yes openssh-server
ここでも下記のエラーが出ますな。無視。
ERROR couldn't connect to zsys daemon: connection error: desc = "transport: Error while dialing dial unix /run/zsysd.sock: connect: no such file or directory"
rootログインできるように設定。
sed -i -e"/^#PermitRootLogin /a PermitRootLogin yes" /etc/ssh/sshd_config
GRUB のインストール
ZFSの認識
ZFSのブートファイルシステムが認識されていることを確認します。zfs
と出力されればOKです。
grub-probe /boot
initrd更新
initrdファイルを更新します。
update-initramfs -c -k all
設定ファイル
メモリのゼロ化を無効にします。
sed -i -e'/^GRUB_CMDLINE_LINUX_DEFAULT=/s/"$/ init_on_alloc=0"/' /etc/default/grub
ブート構成を更新します。
update-grub
ブートローダーをインストール
UEFI用にGRUBをインストールします。
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --no-floppy
ZFSのモジュールがインストールされていることを確認します。
ls /boot/grub/*/zfs.mod
grub-initrd-fallback.service
を無効にします。
systemctl mask grub-initrd-fallback.service
ファイルシステムのマウント順序を修正
zfs-mount-generator
を有効にする必要があります。これによりsystemdは個別のマウントポイントを認識します。これは/var/log
や/var/tmp
などにとって重要です。また、rsyslog.service
はlocal-fs.target
を介してvar-log.mount
に依存し、systemdのPrivateTmp
機能を使用するサービスは自動的にAfter=var-tmp.mount
を使うようになります。
……との事。なるほど、わからん!
mkdir /etc/zfs/zfs-list.cache
touch /etc/zfs/zfs-list.cache/bpool
touch /etc/zfs/zfs-list.cache/tank
zed -F &
これらが空でない事をチェックして、キャッシュが更新された事を確認します。
空だった場合の対応は参考文献を参照。
cat /etc/zfs/zfs-list.cache/bpool
cat /etc/zfs/zfs-list.cache/tank
キャッシュにデータが含まれたらzed
を停止します。
fg
(Ctrl-C)
パス/mnt
を除去するように修正します。
sed -Ei "s|/mnt/?|/|" /etc/zfs/zfs-list.cache/*
chroot終了
chroot環境を終了して LiveCD 環境に戻ります。
exit
初回のブート
LiveCD 環境で次のコマンドを実行して、すべてのファイルシステムをアンマウントします。
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -n 1 -r umount -lf
zpool export -a
なぜかエラーが出ます。原因不明。仕方が無いので放置します。
# zpool export -a
cannot export 'tank': pool is busy
そのままシャットダウン。
shutdown -h now
その後、インストールメディアを取り出して、それからマシンの電源を入れます。
grub
案の定、grubでエラーが出ます。
ここで慌てず騒がず、grubのプロンプトで普通にzpoolをimportします。
zpool import -f tank
exit
今度はちゃんと起動します。
rootログイン
rootユーザーでパスワードを入力してログインします。それからip a
コマンドで IP アドレスを確認。
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a0:b1:c2:d3:e4:f5 brd ff:ff:ff:ff:ff:ff
altname enp5s0
3: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether a1:b2:c3:d4:e5:f6 brd ff:ff:ff:ff:ff:ff
altname wlp1s0f0
inet 192.168.0.104/24 metric 600 brd 192.168.0.255 scope global dynamic wlo1
valid_lft 85056sec preferred_lft 85056sec
inet6 fe80::5635:30ff:fe9b:f8c5/64 scope link
valid_lft forever preferred_lft forever
SSHサーバを入れたのでssh
で接続できます。取得したIPアドレスにssh接続、rootユーザーでパスワードを入力してログインします。
del %USERPROFILE%\.ssh\known_hosts
ssh root@192.168.0.104
ユーザーアカウントの作成
最初のユーザー、管理者アカウントを作成します。
username=ユーザー名
zfs create -o com.ubuntu.zsys:bootfs-datasets=tank/ROOT/ubuntu -o canmount=on -o mountpoint=/home/$username tank/USERDATA/$username
adduser $username
cp -a /etc/skel/. /home/$username
chown -R $username:$username /home/$username
usermod -a -G adm,cdrom,dip,lpadmin,lxd,plugdev,sambashare,sudo $username
フルのソフトウェアインストール
ミニマムインストールをアップグレードします。
apt dist-upgrade --yes
デスクトップ用としてGUI環境をインストールします。今回もXubuntuにしてみます。
apt install --yes xubuntu-desktop
Xubuntuインストールの途中でgdm3かlightdmかどちらにするかの選択画面が表示されます。軽さの点ではlightdmの方が上のようですな。
GUI環境をインストールする場合はNetworkManagerを使用してのネットワーク管理が推奨されています。Xubuntuも同じでいいよね、多分。
rm /etc/netplan/01-netcfg.yaml
cat >/etc/netplan/01-network-manager-all.yaml <<___
network:
version: 2
renderer: NetworkManager
___
日本語キーボード配列
サーバーのコンソールで記号を打ってみるとわかりますが、英語配列になっています。日本語配列に変更する手順は以下の参考文献を参照。バージョンは古いですが、画面キャプチャがあるのでわかりやすいです。
参考文献:Ubuntuでキーボードレイアウト変更 - Ragnite Blue
コマンドは下記。
dpkg-reconfigure keyboard-configuration
設定後、次のコマンドを打つ必要があるようです。
setupcon
再起動して確認
reboot
GUI画面でログインします。それからwifiを再設定。XubuntuのGUI画面上で、wifiを設定し直します。
そして確認。
- キーボードが日本の配列になっている事。アットマーク @ を打ってみて確認。
- ネットワ-クが有効になっている事。次のようなコマンドを試してみればわかります。
※ example.com はドメインの例示の際に使うべしとRFC2606で定められています。何か適当なサーバーを選んで下さい。
ping -c2 example.com
root無効化
引き続きGUI画面で作業するか、あるいはssh接続。
そしてrootパスワードを無効にします。
sudo usermod -p '*' root
rootでのSSHログインを無効(というか禁止)にします。
sudo sed -i -e"/^PermitRootLogin /s/yes/no/" /etc/ssh/sshd_config
一度ログアウトして、rootではログインできない事を確認します。
Xubuntuの日本語設定
Xubuntuの日本語化を設定します。
メインメニュー > Settings > Language Support
Language Support ダイアログ > Install / Remove Languages... ボタン
Installed Languages ダイアログで Japanese をチェックして Apply ボタンをクリック。
パスワードを要求されますので入力します。
待つ事しばし。
日本語が追加されますが、未選択状態です。
未選択のままダイアログを閉じます。そして一度ログアウトします。
ログイン画面において、画面上部の「en」の箇所をクリック。
ドロップダウンメニューが出るので「Japanese - Japan」を選択します。
「en」だった箇所が「ja_JP」に変わります。そして普通にログイン。
「標準フォルダーの名前を現在の言語に合わせて更新しますか?」という問い合わせが表示されます。個人的な好みでどちらでもいいのですが、フォルダー名を全角にしてしまうと何かと問題が起き易いです。古い名前のままがよろしいでしょう。
ついでに「次回から表示しない」にします。
画面上部のタスクバー(?)の右の方、キーボードアイコンを右クリックします。
するとポップアップメニューが出るので「設定」を選択。
IBus の設定ダイアログ > 入力メソッドタブ > 追加ボタン
入力メソッドの選択ダイアログが表示されるので「日本語」を選択。
日本語の入力メソッドが表示されます。「Mozc」を選択して「追加」ボタン。
IBusの設定ダイアログに戻るので閉じます。
これで Mozc を使えるようになりました。
確認の為に LibreOffice Writer を起動します。
今日のヒント、鬱陶しいですね。非表示にしてOK。
Super キー + Space キーで Mozc が起動します。Super キーは Windows の場合は Win キーです。
最初は直接入力になっています。
かなキーを押すとひらがな入力になります。適当に入力して確認。
Xubuntuは設定が比較的素直ですね。助かりました。
家庭内DNS
以前のサーバー設定でUnboundを立ち上げています。家庭内ルーターのDHCPなどで上手く設定できていれば問題ありませんが、我が家のルーターでは設定できませんでした。
仕方が無いので、クライアントマシンの名前解決の設定を弄ります。
ターミナルを起動して下記を実行。なお 172.16.1.3 は我が家のサーバーのIPアドレスです。
sudo sed -i -e"/^#DNS=/c DNS=172.16.1.3" -e"/^#Domains=/c Domains=home" /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved
スナップショット
初回インストールのスナップショットを作成しておきます。こういう事をしたいが為にZFSを使うのです。
sudo zfs snapshot -r tank@$(date +%Y%m%d_%H%M%S)_install
スナップショットの一覧を表示して確認します。
zfs list -t snapshot
ただ、どうも、自動的にsnapshotを撮られているようです。apt-getのタイミングなんでしょうかね。自分で手動snapshotした分を表示するには下記コマンドが良さそうです。
zfs list -t snapshot | grep -v autozsys
仕舞い
これで最小限のXubuntuデスクトップをZFSの上にセットアップできました。
この後は下記の記事に従って整備します。
- 自宅サーバー構築譚:Subversionをインストールして /etc をバージョン管理・Ubuntu 22.04
- 自宅サーバー構築譚:NTPクライアント
- 自宅サーバー構築譚:LDAPサーバー OpenLDAP・SSSD を利用したログイン・Xubuntu 22.04 LTS。
ひとまずはこれでUbuntuデスクトップ環境(Xubuntu)は一区切り。やったね