0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

自宅サーバー構築譚:Xubuntu 22.04 LTS on ZFS in ノートパソコン(UEFI+wifi)

Last updated at Posted at 2023-04-10

能書き

自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続き。

Hyper-V に Xubuntu 22.04 LTS をインストールして成功した訳ですが、それを踏まえて実機にインストールします。

参考文献

環境

以前扱った、かつて悪評高かったマシンになります。そのスペックを再掲します。

  • 機種: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

loop0loop8はインストーラによる設定でしょうか。
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.servicelocal-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の方が上のようですな。

image.png

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

image.png

Language Support ダイアログ > Install / Remove Languages... ボタン

image.png

Installed Languages ダイアログで Japanese をチェックして Apply ボタンをクリック。

image.png

パスワードを要求されますので入力します。

image.png

待つ事しばし。

image.png

日本語が追加されますが、未選択状態です。

image.png

未選択のままダイアログを閉じます。そして一度ログアウトします。

image.png

image.png

ログイン画面において、画面上部の「en」の箇所をクリック。
ドロップダウンメニューが出るので「Japanese - Japan」を選択します。

image.png

「en」だった箇所が「ja_JP」に変わります。そして普通にログイン。

image.png

「標準フォルダーの名前を現在の言語に合わせて更新しますか?」という問い合わせが表示されます。個人的な好みでどちらでもいいのですが、フォルダー名を全角にしてしまうと何かと問題が起き易いです。古い名前のままがよろしいでしょう。
ついでに「次回から表示しない」にします。

image.png

画面上部のタスクバー(?)の右の方、キーボードアイコンを右クリックします。
するとポップアップメニューが出るので「設定」を選択。

image.png

IBus の設定ダイアログ > 入力メソッドタブ > 追加ボタン

image.png

入力メソッドの選択ダイアログが表示されるので「日本語」を選択。

image.png

日本語の入力メソッドが表示されます。「Mozc」を選択して「追加」ボタン。

image.png

IBusの設定ダイアログに戻るので閉じます。

image.png

これで Mozc を使えるようになりました。
確認の為に LibreOffice Writer を起動します。

image.png

今日のヒント、鬱陶しいですね。非表示にしてOK。

image.png

Super キー + Space キーで Mozc が起動します。Super キーは Windows の場合は Win キーです。

最初は直接入力になっています。

image.png

かなキーを押すとひらがな入力になります。適当に入力して確認。

image.png

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の上にセットアップできました。
この後は下記の記事に従って整備します。

ひとまずはこれでUbuntuデスクトップ環境(Xubuntu)は一区切り。やったね:thumbsup_tone1:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?