Debian 11 Bullseye インストール

[Debian インストーラーのRC1が出てきて](https://www.debian.org/devel/debian-installer/index.ja.html)、パッケージもだいたい固定されました。正式リリースまで現状から大きな変化は無いので、RC1インストーラー使用後にやっておくとよさそうなことをまとめます。Debian amd64 の話で、ラズパイ用のRaspberry Pi OSではない純正Debianは https://qiita.com/kakinaguru_zo/items/e69adff9c92a959c9453 を見て下さい。Raspberry Pi OSのパッケージをDebian 11 Bullseyeに更新する手順は https://qiita.com/kakinaguru_zo/items/78aa8ba3912a131fd078 を見て下さい。デスクトップ環境（GUI）の話はほとんどありません。

# インストーラー（ファームウェア付き）
普通にインストーラーをダウンロードするとファームウェア無しのものが来ますが、それだと無線LANが使えません。 https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/ から無線LANなどのファームウェアが含まれるCDイメージをUSBメモリーなどに書き込んで使用して下さい。それでもインストール時に無線LANを使えないことがありますが、インストールしてNetworkManagerなどを設定するとつかえるようになる場合が多いです。デスクトップ環境や日本語環境は不要ですが、インストーラーから「標準パッケージ」を入れておかないとあとで不便なことになることが多いので入れたほうがいいです。

# インストール終了後rootでログインしてから行う作業
## `apt`関連の設定
### `/etc/apt/apt.conf.d`

```config:/etc/apt/apt.conf.d/00myconf
APT::Default-Release "bullseye";
APT::Install-Recommends 0; インストール時に必須ではないが推奨されるパッケージを入れないなら
APT::Get::Purge 1; アンインストールしたときに設定ファイルも一緒に消すなら
APT::Get::Upgrade-Allow-New 1;
Acquire::http::Proxy "http://127.0.0.1:8000/"; もしsquid-deb-proxyやapt-cacher-ng を使っているなら
```

### `/etc/apt/sources.list`
RC1インストーラーは`bullseye-updates` と `bullseye-backports` を選択しても `sources.list` に追加してくれないので、手作業で以下のように追加します。追加したら `apt-get update` して下さい。

```config:/etc/apt/sources.list
deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://security.debian.org/ bullseye-security main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb http://deb.debian.org/debian bullseye-backports main contrib non-free
```

## ファームウェアやCPUマイクロコードのインストール
必要なファームウェアを自分で選択して入れる必要があるところが、Ubuntuとの違いです。

### CPUマイクロコード

* [intel-microcode](https://packages.debian.org/ja/bullseye/intel-microcode) または
* [amd64-microcode](https://packages.debian.org/ja/bullseye/amd64-microcode)

を必ずインストールします。そうしないとバグがあるままCPUを用いることになり危険です。

### 一般のファームウェア
[linux-firmware-free](https://packages.debian.org/ja/bullseye/linux-firmware-free) と [firmware-misc-free](https://packages.debian.org/ja/bullseye/firmware-misc-nonfree) をまず入れます。その他に[名前がfirmwareから始まるパッケージ](https://packages.debian.org/search?suite=bullseye&arch=amd64&searchon=names&keywords=firmware) で必要そうなものを入れます。よく必要になるものは以下の通りです。

* [firmware-amd-graphics](https://packages.debian.org/bullseye/firmware-amd-graphics)
* [firmware-intel-sound](https://packages.debian.org/bullseye/firmware-intel-sound)
* [firmware-intelwimax](https://packages.debian.org/bullseye/firmware-intelwimax)
* [firmware-ipw2x00](https://packages.debian.org/bullseye/firmware-ipw2x00)
* [firmware-iwlwifi](https://packages.debian.org/bullseye/firmware-iwlwifi)
* [firmware-sof-signed](https://packages.debian.org/bullseye/firmware-sof-signed) 最近のIntel製サウンドカード

無線やサウンドなどのの製造元は`lspci`で調べます

## `/etc/fstab` へのマウントオプション追加
ファイルシステムは`ext4`か`btrfs`を仮定しています。書き込みを速くするものが多いです。
例: 

```config:/etc/fstab
UUID=ナントカ / ext4 rw,async,lazytime,strictatime,data=writeback,journal_async_commit,nobarrier 0 1
```

* `lazytime` タイムスタンプの更新以外の書き込み操作が無いときはその書き込みを先送りする。これを用いるとよく勧められる `noatime` や `relatime` の代わりに遅いと言われる `strictatime` を用いても遅くなりません
* `nobarrier` ディスクデバイスドライバがキューに溜まっている書き込みの順番変更を許容するようにし、ストレージデバイスにより適した順番でデータを書き出せるようになります。
* `data=writeback` (ext4のみ) これをrootパーティションに使うときは `tune2fs -o journal_data_writeback /dev/ナントカ` をマウントしたままで構わないので行わないとrootのマウントできなくなり起動しなくなります…
* `journal_async_commit` (ext4のみ) 前提として `data=writeback` が必要です。

## ネットワークの設定
DebianおよびUbuntuでネットワークの設定を行うパッケージには主に

* [NetworkManager](https://packages.debian.org/ja/bullseye/network-manager)
* systemd-networkd
* [ifupdown](https://packages.debian.org/ja/bullseye/ifupdown)
* [netplan.io](https://packages.ubuntu.com/focal-updates/netplan.io)

がありますが、どれか一つを選びそれ以外のネットワーク設定パッケージをすべて `apt-get purge` します（`systemd-networkd` はデフォルトでは起動しないのでそのままでよい）。とくに`ifupdown` を `purge` した後は、`rm -rf /etc/network` で関連する設定ファイルを消しておきます。CUIの`nmtui`コマンドまたはGUIで設定できるNetworkManagerがもっともユーザーフレンドリーです。無線LANを使う場合は[wireless-regdb](https://packages.debian.org/ja/bullseye/wireless-regdb)と、[wpasupplicant](https://packages.debian.org/ja/bullseye/wpasupplicant)または[iwd](https://packages.debian.org/ja/bullseye/iwd)をインストールします。

`wpasupplicant` を用いる場合NetworkManager付属の`nmtui`などで簡単に無線LANの設定を行えますが、`iwd`を用いる場合以下の設定が必要になります。

```config:/etc/NetworkManager/NetworkManager.confに追加
[device]
wifi.backend=iwd
```

`root` で以下のコマンドを実行した後に、`nmtui` を使用します。

```shell-session
# apt-get install iwd
# systemctl disable --now wpa_supplicant
# systemctl restart NetworkManager
```


## その他のパッケージ
### メール関係

* [mailutils](https://packages.debian.org/ja/bullseye/mailutils) と
* [postfix](https://packages.debian.org/ja/bullseye/postfix) または [exim4-daemon-light](https://packages.debian.org/ja/bullseye/exim4-daemon-light)

入れないとエラー関連のメールが届かないので…

### 記憶媒体の監視
SSD にせよ HDD にせよ経年劣化でそのうち壊れますが、ヤバくなってきたときにメールを送ってくれるパッケージ [smartmontools](https://packages.debian.org/ja/bullseye/smartmontools) を入れます。メールが来ないで突然死することもあります。

まず `smartctl -x /dev/デバイス名` で診断情報を表示できるか調べます。表示されない場合 `man smartctl` するか、デバイスが対応していないと考えて諦めます。

```config:/etc/smartd.conf
/dev/監視したいデバイス  -a -o on -S on -s (S/../.././02|L/../../6/03) -m root
```

などと書いておくと定期的にセルフテストを行わせ、ヤバイときに `root` にメールさせられます。

### ハードウェア乱数生成器の活用
最近のデバイスにはハードウェア乱数生成器が付属している場合が多いですが、 [rng-tools5](https://packages.debian.org/ja/bullseye/rng-tools5) を入れておくとハードウェア乱数生成器を `/dev/random` などで活用できるようになるため、無線LANなどでも必要になる暗号鍵の生成などがより安全かつ高速になります。

### ファイアーウォール関連
ファイアーウォール関連の設定は最近では [nftables](https://packages.debian.org/ja/bullseye/nftables) で行われ、従来使われていた [iptables](https://packages.debian.org/ja/bullseye/iptables) のパッケージページには**「いますぐ移行を検討して下さい」** と書かれてしまっています…😱しかし、`/etc/nftables.conf` を手書きで書くのはなかなかシンドいです（[私はそうしています](https://qiita.com/kakinaguru_zo/items/2764dd8e83e54a6605f2#%E3%81%8A%E3%81%BE%E3%81%91%EF%BC%91-systemd-%E3%81%A8-nftables--usrsbinnft%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89-%E3%81%AB%E4%B8%8A%E8%A8%98%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%92%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E3%82%84%E3%82%89%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95)が…）

そこで、Debian/Ubuntu ではもう少し親切なユーザーインターフェースとして[ufw](https://packages.debian.org/ja/bullseye/ufw) が用意されていて、これを用いると自動的にnftablesを用いた設定になります。

また、RedHat/Fedora系の標準である[firewalld](https://packages.debian.org/ja/bullseye/firewalld)も問題なく使えますが、必ずufwを `apt-get purge` してから使います。ufwとfirewalldを同時に使うとわけがわからないことになります。GUIを用いて`firewalld`を設定するときには[firewall-config](https://packages.debian.org/ja/bullseye/firewall-config)と[firewall-applet](https://packages.debian.org/ja/bullseye/firewall-applet)を入れると便利です。

## 一般ユーザーのグループへの追加
[特殊なグループ](https://wiki.debian.org/SystemGroups) に所属する一般ユーザーは以下のことができるようになります。必要に応じて `adduser ユーザー名 グループ名` というコマンドを用いて追加します。`adduser`を用いて新ユーザーを作成したときに自動的に所属するグループは `/etc/adduser.conf` の`EXTRA_GROUPS`と`ADD_EXTRA_GROUPS`を用いて設定できます。

* `netdev`: NetworkManagerを用いてネットワーク設定を変更できるようになります
* `plugdev`: USBやSDカードの記録媒体にアクセスできるようになります
* `video`: ウェブカムやフレームバッファデバイスなどにアクセスできるようになります
* `audio`: 音声出力や入力をできるようになります
* `bluetooth`: ブルーツースを使えるようになります
* `cdrom`, `floppy`, `tape`: それぞれのデバイスにアクセスできます
* `kvm`: qemuを直接使うときにKVMをつかえるようになります。
* `libvirt`: `virt-manager`, `virsh` など`libvirt`を用いた仮想マシンやコンテナへのアクセスをできるようになります