
2026/04/14 4:37
ちょうどいいレベルのキメライ・-linux(Chimera Linux)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
この記事は、OpenZFS および ZFSBootMenu を用いた原生 ZFS 暗号化で単一ディスクに Chimera Linux をインストールする方法を詳述しており、glibc および systemd の代わりに Dinit と FreeBSD ツールを採用したミニマルな musl ベースのアーキテクチャを優先しています。フルディスクセキュリティを実現するために、Secure Boot は無効化され、ドライブは EFI パーティション(2GB、FAT32)と OpenZFS によって管理される完全な ZFS プールが並存するようにパーティション分けされます。暗号化は AES-256-GCM を用いた原生方式で処理され、パスフレーズは
/etc/zfs/zroot.key に格納されます。メモリオプティマイゼーションには独立したスワップパーティションではなく zram カーネルモジュールが使用されます。本プロセスでは、公式 ISO(chimera-linux-x86_64-LIVE-[RELEASE]-base.iso)からシステムを展開する前に sgdisk を用いてカスタム GPT テーブルを作成し、その後に chimera-chroot 経由の chroot 環境内ですべてフォント、キーボードレイアウト、その他の設定をカスタマイズします。インストール後には initramfs の再構築、SSH および syslog-ng のような必須サービスの有効化、ならびに効率的なメモ利用のために zram のアクティベートが必要です。このアプローチは、重厚なシステム依存性に頼らずにブート環境に対して完全な制御を維持しながら、軽量で安全な代替案を提供し、愛好家向けに適しています。本文
2026 年 4 月 3 日最終更新
#chimera #linux #zfs #encrypt #zfsbootmenu のタグが付与されています。
Chimera Linux は、C ライブラリとして通常の glibc を代わりに musl を採用し、システム init では systemd を代わりに dinit を使い、ユーザランド(ユーザー空間)は FreeBSD コアツールから派生させたなど、独自の選択を採ることを特徴とする、手からゼロ組み立てられた魅力的なコミュニティ主導の Linux ディストリビューションです。Chimera のベースインストールイメージを使用し、OpenZFS ファイルシステムと ZFSBootMenu ブートローダーで Chimera を設定するためのこの優れたインストールガイドに従って作業を進め、以下の選択肢を検討しました:デスクトップ、ラップトップ、あるいはサーバーといった用途に対応しつつ、「最小限でありながら」堅固な基盤を提供できる「必要なだけ」の機能を備えた暗号化された Linux システムを作成することです。
1. ここから始める
インストールイメージの入手
最新のライブ ISO インストールイメージはこちらから入手できます:repo.chimera-linux.org
chimera-linux-x86_64-LIVE-[RELEASE]-base.iso ファイルと、sha256sums.txt ファイルをダウンロードし、イメージの整合性を確認してください:
sha256sum -c --ignore-missing sha256sums.txt
USB インストールメディアの準備
未マウントの USB ストレージデバイスにインストーラーを書き込み、そのために root 権限で
dd コマンドを実行します。
警告 デバイスの指定には十分注意してください(
コマンドで確認可能な場合があります)。そのデバイス上のすべてのコンテンツが失われます!lsblk
例:Linux システム上で USB メモリが
sdx1 として現れている場合、インストーラーは sdx(パーティション番号は含めない)に書き込みます:
dd bs=4M conv=fsync oflag=direct status=progress if=chimera-linux-x86_64-LIVE-[RELEASE]-base.iso of=/dev/sdx
2. ライブ環境の設定
Chimera インストールメディアからターゲットデバイスをブートさせ、ログインします。ユーザー名とパスワードはそれぞれ
root と chimera です。
コンソールフォントの設定
既存のフォントサイズが小さすぎる場合は、次のコマンドを実行して 2 倍に拡大できます:
setfont -d
コンソールフォントは
/usr/share/consolefonts/ に配置されており、パスとファイル拡張子を省略して setfont を使用すれば別のフォントを設定できます。
コンソールキーボードの設定
デフォルトのコンソールキーマップは
us です。利用可能なキーマップは /usr/share/keymaps/ に一覧表示されています。より他のキーマップを使用したい場合は、一時的に loadkeys で異なるキーマップを設定します:
loadkeys [keymap]
ここで
[keymap] は望ましいキーボードレイアウトを表します。
例:私は好みの Colemak レイアウトを使用するようにシステムを設定しました。これは
/usr/share/keymaps/i386/colemak に利用可能です:
loadkeys colemak/en-latin9
ブートモードの確認
ターゲットデバイスが UEFI ブートモードで起動されていることを確認してください:
cat /sys/firmware/efi/fw_platform_size
このコマンドが
64 を返すと、システムは 64 ビット x64 UEFI でブートしており、問題ありません。
注 ファイルが存在しない場合は、デバイスは UEFI を使用していません。
インターネットへの接続有無の確認
有線ネットワークインタフェースはブート時に自動的に有効化され接続されるはずです。ネットワークインタフェースがアクティブで、アドレスが割り当てられ、インターネットにアクセス可能か確認してください:
ip addr ping -c 5 chimera-linux.org
インストーラーへの遠隔ログイン
別のコンピューターから ssh でインストーラーに接続することで、この手動のインストールプロセスを(コマンドの入力やコピペを減らすなど)容易にします。
sshd デモンを起動してください:
dinitctl start sshd
別のコンピューターへ移動し、ターゲットデバイスとして
anon:chimera で ssh 接続を行います:
ssh anon@[ip_address]
ここで
[ip_address] は前述の ip addr コマンドで入手したターゲットデバイスのアドレスです。
root に切り替えます:
doas -s
ID 変数の定義
ファイル
/etc/os-release が、現在のオペレーティングシステムを表す変数を定義しています。後のコマンドで Linux ディストリビューションの略名を設定するために $ID 変数を使用します:
. /etc/os-release && export ID && echo $ID
ホスト ID の生成
ZFSBootMenu で使用するためのホスト ID ヘキサデシマール識別子を生成します:
zgenhostid "$(hostid)" && hostid
注 Musl は
を読まず、常に/etc/hostidを表示します。これは問題ありません。関連討論を確認してください。00000000
3. ディスクの準備
Chimera ベースインストールを実装する前に、単一ディスク上にカスタムパーティションレイアウトを設定します。
ツールのインストール
apk update && apk add --no-interactive gptfdisk parted
DISK 変数の定義
Chimera がインストールされるディスクをブロックデバイスを一覧表示することで特定します:
lsblk -f
SATA または NVMe ディスク用の DISK 変数を設定します:
SATA(例のディスク:sda)
export DISK="/dev/sda" export ESP_PART="1" export POOL_PART="2" export ESP_DEVICE="${DISK}${ESP_PART}" export POOL_DEVICE="${DISK}${POOL_PART}" echo $ESP_DEVICE && echo $POOL_DEVICE
NVMe(例のディスク:nvme0n1)
export DISK="/dev/nvme0n1" export ESP_PART="1" export POOL_PART="2" export ESP_DEVICE="${DISK}p${ESP_PART}" export POOL_DEVICE="${DISK}p${POOL_PART}" echo $ESP_DEVICE && echo $POOL_DEVICE
ディスクのクリア(Wipe)
DISK 以前に ZFS プールが存在した場合は、実行します:
zpool labelclear -f $DISK
DISK が以前 LVM で構成されていた場合は、ボリュームグループを停止させます:
vgchange -an
DISK 上の既存ファイルシステムとパーティションテーブルをクリアします:
wipefs -af $DISK && sgdisk --zap-all --clear $DISK
パーティションテーブルの変更をシステムに通知します:
partprobe $DISK
ディスクのパーティショニング
注 多くのパーティショニングガイドでは、EFI システムパーティションに 256〜512MB の容量を割り当てています。しかし、Linux がそこに格納する可能性のある他のデータを将来に対応できるようにするため、より寛大な 2GB を割り当てるのが私の好みに合っています。
以下のレイアウトで DISK に GPT パーティションテーブルを作成します:
| 番号 | サイズ | コード | フォーマット | 用途 | マウントポイント |
|---|---|---|---|---|---|
| 1 | +2G | ef00 | vfat | EFI システムパーティション | /boot/efi |
| 2 | ->終了 | bf00 | zfs | ZFS プールパーティション | - |
EFI システムパーティションを作成します:
sgdisk -n "${ESP_PART}:1m:+2g" -t "${ESP_PART}:ef00" -c 0:esp $DISK
ZFS プールパーティションを作成します:
sgdisk -n "${POOL_PART}:0:0" -t "${POOL_PART}:bf00" -c 0:pool $DISK
ディスクレイアウトを表示します:
partprobe $DISK && sgdisk -p $DISK
4. ZFS プール作成
ZFS プールにディスクやパーティションを追加する際、将来的にディスクの命名が変わっても ZFS が適切なデバイスを特定できるようにするため、/dev/disk/by-partuuid(UEFI)で生成されるシンボリックリンクを参照することが良い習慣です。従来のデバイスノード(例:/dev/sda2)を使用すると間欠的なインポート失敗を引き起こす可能性があります。そこで、
POOL_ID 変数を作成します:
POOL_ID=/dev/disk/by-partuuid/$( blkid -s PARTUUID -o value $POOL_DEVICE )
確認します:
ls -al /dev/disk/by-partuuid/ && echo "POOL_ID = $POOL_ID"
暗号化キーファイルの作成
ZFS プールの暗号化パスフレーズをキーファイルに格納します:
echo 'SuperSecretPassphrase' > /etc/zfs/zroot.key chmod 000 /etc/zfs/zroot.key
暗号化された ZFS プールの作成
ネイティブ暗号化が有効な状態でプールを作成します:
zpool create -f \ -o ashift=12 \ -o autotrim=on \ -o compatibility=openzfs-2.3-linux \ -O acltype=posixacl \ -O xattr=sa \ -O compression=lz4 \ -O encryption=aes-256-gcm \ -O keylocation=file:///etc/zfs/zroot.key \ -O keyformat=passphrase \ -O relatime=on \ -m none zroot "$POOL_ID"
ZFS データセットの作成
注 作成する各ブート環境について、明示的に
を設定する必要があります。canmount=noauto
zfs create -o mountpoint=none zroot/ROOT zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/${ID}
優先ブートファイルシステムを設定します:
zpool set bootfs=zroot/ROOT/${ID} zroot
私は各システムのために追加の home データセットを作成します:
zfs create zroot/ROOT/${ID}/home
これにより、今後作成する可能性のあるブート環境ごとにユーザー設定ファイルを一意に保つことができます。また、これはユーザーデータをシステムデータから分離するためのものであり、ZFS スナップショットやシステムロールバックにおいて有用で、ユーザーデータを傷つけずにシステムを戻すことを可能にします。
ブート環境間でデータを共有するためには、共通ファイルを格納する
data データセットを作成します:
zfs create -o mountpoint=/data zroot/data
インストール用のプールのエクスポートと再インポート
zpool export zroot zpool import -N -R /mnt zroot zfs load-key -L prompt zroot
データセットをマウントします:
zfs mount zroot/ROOT/${ID} zfs mount zroot/ROOT/${ID}/home zfs mount zroot/data
確認します:
# mount -t zfs # zroot/ROOT/chimera on /mnt type zfs (rw,relatime,xattr,posixacl,casesensitive) # zroot/ROOT/chimera/home on /mnt/home type zfs (rw,relatime,xattr,posixacl,casesensitive) # root/data on /mnt/data type zfs (rw,relatime,xattr,posixacl,casesensitive)
デバイスシンボリックリンクを更新します:
udevadm trigger
5. インストール
ベースフールパッケージをインストールします:
chimera-bootstrap /mnt
新しいオペレーティングシステムにファイルをコピーします:
cp /etc/hostid /mnt/etc/ mkdir /mnt/etc/zfs && cp /etc/zfs/zroot.key /mnt/etc/zfs/
6. システム設定
新鮮にインストールされた Chimera に chroot 入りし、新しい OS を構成します。
Chroot
chimera-chroot /mnt
ルートパスワード
passwd
最高権限ユーザー(スーパーユーザー)
スーパーユーザ権限を持つユーザーアカウントを作成します:
useradd -m -G wheel [username]
ここで
[username] はアカウントの望ましい名前です。
[username] のパスワードを設定します:
passwd [username]
(オプション)
doas コマンドを使用して、パスワードなしで root アクセスを [username] に付与します:
echo 'permit nopass keepenv [username]' >> /etc/doas.conf
パッケージマネージャと追加パッケージ
ユーザーサブリポジトリを追加しミラーを同期します:
apk add --no-interactive chimera-repo-user && apk update
プロセッサベンダを特定します:
grep vendor_id /proc/cpuinfo
マイクロコードパッケージを更新してセキュリティ修正を適用するための適切な変数を定義します:
UCODE="[vendor]"
ここで
[vendor] は Intel プロセッサの場合 ucode-intel、AMD プロセッサの場合は ucode-amd です。
インストールします:
apk add --no-interactive $UCODE linux-lts-zfs-bin curl efibootmgr font-terminus
コンソールフォント
注 Terminus フォントの設定については
を詳細を確認してください。Chimera は Debian と同じ console-setup システムを使用しています。/usr/share/consolefonts/README.Lat2-Terminus16
例:TerminusBold をコンソールフォントとして使用し、/etc/default/console-setup を修改してフォントサイズを増加させます:
ACTIVE_CONSOLES="/dev/tty[1-6]" CHARMAP="UTF-8" CODESET=guess FONTFACE=TerminusBold FONTSIZE=12x24
コンソールキーボード
デフォルトのキーボードは
us です。キーマップの代替案を使用したい場合は、keyboard(5) を確認してください。
例:Colemak キーマップ(/usr/share/keymaps/i386/colemak に利用可能)を好み、/etc/default/keyboard を修改して設定します:
KMAP=colemak/en-latin9 XKBMODEL=pc105 XKBLAYOUT=us
タイムゾーン
タイムゾーンは
/usr/share/zoneinfo/[Region]/[City] に配置されており、ここで [Region] は地理的区域(Africa, America, Europe, …)を、[City] はその区域内の都市を表します。
例:トロントにあるタイムゾーンへの
/etc/localtime シンボリックリンクを作成します:
ln -sf /usr/share/zoneinfo/America/Toronto /etc/localtime && date
ホスト名
ホスト名ファイルを作成します:
echo [hostname] > /etc/hostname
ここで
[hostname] はシステムの望ましい名前(単語一つ、スペースなし)を表します:
echo chimeralinux > /etc/hostname
サービス
管理者によって有効化されたサービスへのリンクは
/etc/dinit.d/boot.d/ にあります。Chimera 上のデフォルトログシステムは syslog-ng です。
サービスを有効化します:
dinitctl -o enable syslog-ng
ログは
/var/log/messages に書かれます。
有線ネットワークを静的または動的に dhcpcd で構成できます。サービスを有効化します:
dinitctl -o enable dhcpcd
デフォルトの動作は、dhcpcd がすべてのインタフェースに DHCP を使用して構成することです。変更は
/etc/dhcpcd.conf で行います。詳細については dhcpcd.conf(5) を確認してください。
遠隔ログインを許可する sshd サービスを有効化します:
dinitctl -o enable sshd
ESP パーティション
注 ファイルシステム上のラベルは必須ではありませんが、UUID なしで簡単マウントを可能にするため便利です。
fat32 ファイルシステムを作成します:
mkfs.fat -n ESP -F 32 $ESP_DEVICE
デバイスをマウントします:
mount --mkdir $ESP_DEVICE /boot/efi
パーティションを fstab に追加します:
echo 'LABEL=ESP /boot/efi vfat defaults 0 0' >> /etc/fstab
Initramfs
暗号化キーは
/etc/zfs に格納されており、自動的に initramfs にコピーされます:
mkdir -p /etc/initramfs-tools/conf.d echo 'UMASK=0077' > /etc/initramfs-tools/conf.d/umask.conf
再構築します:
update-initramfs -u -k all
7. ZFSBootMenu
Linux 上の Root-on-ZFS ブート環境を支援するためにこのブートローダーをインストールします。
ブートプロパティ
カーネルブート時に使用されるコマンドライン引数を割り当てます:
zfs set org.zfsbootmenu:commandline="quiet" zroot/ROOT
キーキャッシュを設定します:
zfs set org.zfsbootmenu:keysource="zroot/ROOT/${ID}" zroot
プリビルトエグゼクティブ
プリビルト ZFSBootMenu エグゼクティブを EFI システムパーティションにインストールします:
mkdir -p /boot/efi/EFI/ZBM curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI
EFI ブートエントリ
efibootmgr -c -d "$DISK" -p "$ESP_PART" -L "ZFSBootMenu (Backup)" -l '\EFI\ZBM\VMLINUZ-BACKUP.EFI' efibootmgr -c -d "$DISK" -p "$ESP_PART" -L "ZFSBootMenu" -l '\EFI\ZBM\VMLINUZ.EFI'
8. 片付ける
Chroot からの退出、アンマウント、エクスポート
Chroot から退出します:
exit
すべてをアンマウントします:
umount /mnt/home && umount /mnt/data && umount /mnt/boot/efi && umount -n -R /mnt
zpool をエクスポートします:
zpool export zroot
再起動
注 ZFS プールのアンロックパスフレーズを求められた際、システムに設定されたキーマップに関わらずキーマップは
となります。ユーザーは暗号化されたルートパーティションのアンロックパスフレーズを入力されます。成功後、ブートが再開します:uschimeralinux login: Welcome to Chimera!
reboot
Zram スワップ
Chimera は dinit を init として使用しており、zramN デバイスの管理を支援します。モジュールを読み込みます:
doas modprobe zram
注 サイズは物理 RAM の半分(xG)に設定します。
zram0 デバイス用の構成ファイルを作成します:
doas tee /etc/dinit-zram.conf >/dev/null <<'EOF' [zram0] size = 4G algorithm = lz4 format = mkswap -U clear %0 EOF
fstab に zram0 スワップを追加します:
echo '/dev/zram0 none swap defaults 0 0' | doas tee -a /etc/fstab >/dev/null
サービスを有効化します:
doas dinitctl enable zram-device@zram0
現在のセッションのスイッチをアクティブにします:
doas swapon /dev/zram0 && zramctl
9. リソース
- ZFSBootMenu: Chimera Linux ガイド
- Chimera Linux: インストールガイド
- OpenZFS マニュアルページ:zpoolprops.7 および zfsprops.7
- Arch Linux Wiki: 永続的なブロックデバイス命名
- Practical ZFS: Linux ホームディレクトリ on ZFS
- Dinit-chimera: zram サポート
次章:Chimera Linux: ファーストブート後(TODO)
Fediverse でこの投稿をいいね、シェア、またはコメントしてください 💬