Debian Busterインストール後にやること

ほとんど自分用のメモです。

### aptの設定
`/etc/apt/apt.conf.d` 以下に適当なファイルを作り下記内容追加。これで「推奨（Recommend）」パッケージを入れなくする。また削除したときになるべく全部消すようにする。

```
APT::Default-Release "buster";
APT::Install-Recommends 0;
APT::Get::Purge 1;
```

`dpkg-reconfigure debconf` を実行し、インストール時に省略する質問を自分の好きなように設定する。

```/etc/apt/sources.listに下記を追加
deb http://deb.debian.org/debian/ testing main non-free contrib
deb http://deb.debian.org/debian/ unstable main non-free contrib
# deb http://deb.debian.org/debian/ experimental main non-free contrib
```

上記は`firefox`最新版や`TeXLive`最新版や`libreoffice`最新版のインストールに必要

### ファームウェア、マイクロコード等のインストール
#### CPU関連
`intel-microcode` または `amd-microcode` をインストールしCPUのマイクロコードを更新する。

#### 他のファームウェア
所有するファームウェアに依存するが `firmware-linux` と `firmware-intel-sound` あたりか…

## systemd関連

### control group v2
[cgroup v2](https://qiita.com/kakinaguru_zo/items/cb18bd8f7aa92c11f6bf)を使えるように `systemd.unified_cgroup_hierarchy=1` を `/etc/default/grub` に追加し `update-grub` を実行する。

### その他の kernel command line
好みによるけれど `psi=1 i915.fastboot=1 i8042.reset=1 nvidia-drm.modeset=1  iommu=force,merge,nopanic,nopt intel_iommu=on amd_iommu=on` あたりでしょうか…変えたら `update-grub` する。

### ログの保存
```config:/etc/systemd/journald.conf
[Journal]
Storage=persistent
```
と書かないとsystemd-journaldログが残らないので上記のように設定する。

### systemd全体の設定
`/etc/systemd/system.conf` と `/etc/systemd/user.conf` のアカウンティング設定を好きなように変える。 設定項目の説明は `man systemd-system.conf`

### ユーザー毎のリソース制限

```config:/etc/systemd/system/user-.slice.d/my.conf
[Slice]
MemoryHigh=95%
```

などのユーザー毎のリソース制限を追加する。設定項目の説明は `man systemd.resource-control` および `man  user@.service`

### systemdによるcron ([systemd-cron](https://github.com/systemd-cron/systemd-cron))
`apt-get --purge install systemd-cron`

### Network Managerを用いない無線設定
`ip l` で無線インターフェース名（例えば`wls3`)を調べて

```config:/etc/wpa_supplicant/wpa_supplicant-インターフェース名.conf
network={
  ssid="SSID名"
  scan_ssid=1
  key_mgmt=WPA-PSK
  psk="パスフレーズ"
}
```

というファイルを作る。そして `systemctl enable wpa_supplicant@インターフェース名` を実行する。設定ファイルの詳しい書き方は `man wpa_supplicant.conf`

### ifupdown を用いないネットワーク設定

```config:/etc/systemd/network/ホゲ.network
[Match]
Name=wl*

[Network]
DHCP=yes
MulticastDNS=yes
NTP=ntp.nict.jp 
```

というようなファイルを作り `systemctl enable systemd-networkd` を実行する。設定ファイルの書き方は `man systemd.network`

ここまで実施すると `apt-get --purge remove ifupdown network-manager isc-dhcp-client` で `ifupdown` と ネットワークマネージャー と DHCPクライアントを削除しても問題なくなる。

Ubuntuの場合では上記に加えさらに `netplan.io`, `nplan`, `networkd-dispatcher` を削除してよい。（なお `netplan` というパッケージは名前が似ているが無関係）

### avahiなどを用いないホスト名解決

`apt-get install libnss-resolve libnss-systemd` と `systemctl enable systemd-resolved` を実行するとマルチキャストDNS（Appleボンジュールプロトコル）を含めたホスト名からIPアドレスへの解決を`systemd`が行うようになる。この処置の後 `apt-get --purge avahi-daemon avahi-autoipd libnss-mdns` でAvahi関連パッケージを削除して良い

### そのほかのいらないパッケージ
`apt-get remove xterm plymouth plymouth-label modemmanager`

### ここらへんまで終わったら再起動してネットワークがちゃんと使えるか確認する


### Firefox 最新版
Unstableにしか入っていないため `apt-get -t unstable install firefox-l10n-ja firefox` でESRではない最新版firefoxを入れる。その後に `apt-get --purge firefox-esr` でESR版を削除。アドビフラッシュを見られるようにするには `pepperflashplugin-nonfree` と `browser-plugin-freshplayer-pepperflash` を入れるとよい。

### Emacs (好きなら）
`apt-get install emacs emacs-el emacs-common-non-dfsg appmenu-gtk3-module libcanberra-gtk3-module`
xim (uim) でemacsに日本語入力する場合最低でも `xfonts-base` が必要なので消してはいけない

### LibreOffice をexperimentalにある最新版に更新
```shell
apt-get -t experimental install libreoffice-gnome `dpkg-query -W | grep ^libreoffice | awk '{ print $1 }'`
```

Windows 10に付属するフォント `C:\Windows\Fonts\*.ttf,*.ttc,*.TTF,*.TTC` を `/usr/share/fonts/trutype/mymsfonts` とかからシンボリックリンクを貼り `fc-cache -frv /usr/share/fonts/truetype/mymsfonts` で使えるようにしておくとよい

### TeXLive最新版
* `apt-get -t testing install texlive-lang-japanese texlive-latex-recommended`
* または[CTANからinstall-tlをダウンロードしてそれを用いてインストールする](https://www.tug.org/texlive/quickinstall.html)。このとき`install-tl`のオプションでソースと付属ドキュメントをインストールしないようにするとダウンロードする量が数GBくらい減る。

### 仮想マシンとWindows
`apt-get --install-recommends install virt-manager` Linux上でWindowsを動かすときには`virtio`ドライバをWindowsにインストールしないとディスクとネットワークが遅くなるから、[Windowsインストール時にフロッピーディスクイメージからvirtioドライバをインストールする](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/virtualization_host_configuration_and_guest_installation_guide/form-virtualization_host_configuration_and_guest_installation_guide-para_virtualized_drivers-installing_with_a_virtualized_floppy_disk)。インストールを始める前に[Linux側の仮想マシン設定で主ネットワークと主ハードディスクにvirtioを用いるように設定](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/virtualization_host_configuration_and_guest_installation_guide/sect-virtualization_host_configuration_and_guest_installation_guide-para_virtualized_drivers-installing_the_kvm_windows_para_virtualized_drivers-using_kvm_para_virtualized_drivers_for_new_devices)する

また`libvirt-guests.service`の停止で毎回ハングアップして面倒なだけなので `systemctl disable libvirt-guests.service`する。

### Cgroup v2 で virt-manager や libvirt を使う

```
'Invalid value '+cpu' for 'cgroup.subtree_control': 無効な引数です'
```

が出た場合 `apt-get remove rtkit` すれば解決する可能性が高い。理由は
[リアルタイムプロセスが存在するときにCgroup v2のCPUコントローラーが使えない](https://www.kernel.org/doc/Documentation/cgroup-v2.txt) からである。