Debian 12を使う〜個人的ベストプラクティスまとめ

何故Debianを選ぶのか

私は元々、Ubuntuをメインで使ってきました。Debianは、Ubuntuがベースにしているディストリビューションで、Ubuntuのパッケージの多くはDebianプロジェクトで作られたものとなっています。

ただ、UbuntuはアップデートがアグレッシブなのでLTS版でもポイントリリースでカーネルバージョンが上がったり、一部のパッケージはaptではなくsnapで提供されるようになるなどの新しい試みが頻繁に行われたりと、なかなかカオスな状況になってきています。

私としてはLinuxは開発対象というよりはデスクトップOSという道具として使いたい立場なので、あまり変更がアグレッシブなものはちょっとなと思い始めました。

DebianはDebianで、かつてはフリーソフトウェアの理念に対して頑固すぎて公式インストーラにインストール時に必要になるデバイスファームウェアが含まれていなかったりといった使いにくい点がありましたが、2023年にリリースされた12(bookworm)から方針が変わり、公式インストーラにもデバイスファームウェアが含まれるようになってより使いやすくなりました。

こうした状況なので、しばらくはDebianで生活してみようかと思うようになりました。

両者の違いの所感としては、Ubuntuのほうが見た目のデザインなどは洗練されていて、インストール後すぐに使えるようになっていたり初心者に優しいところが多い気がします。Debianは、安定版の品質は高いように思いますが、インストール後にちょっとやらないといけないことが多かったりと、若干中級者向けくらいに感じるところはあります。

インストール

Debianは元々ソース非公開のファームウェアなどに対して厳しい立場で、これらをインストーラに含めない方針であった。このためUbuntuなどと比べるとデフォルトで一部のハードが動かなかったりユーザーとしては不便な側面があったが、Debian 12から方針変更があり、公式のインストーラにこれらが含まれるようになった。なので、公式サイトからインストーラを取得すれば問題ない。

https://www.debian.org/distrib/

Debianの場合、「小さな」インストーラと「大きな」インストーラが提供される。前者は必要なパッケージをインストール中にネットから随時ダウンロードする方式(netinst)で、後者は必要なパッケージがすべてISO内に含まれている方式となる。Debian Projectはどうも、昔からサーバ負荷の観点からnetinstを使用してほしいようである。

注意点としては、netinstはインストール時点でネットワーク接続が必要になるため、インストーラで認識できる標準的なネットワークデバイスを搭載している必要がある。どのデバイスがインストーラで認識できるかは試してみないとわからないものの、経験上有線デバイスは利用できる可能性が高く、WiFiはダメな場合が多い。

ネットワークデバイスをインストーラ時点で認識できないようなら、フルのDVDイメージをダウンロードするのが良い。

今どきなので、DVDイメージなどと書かれていてもUSBに書き込んでインストールするのが一般的である。Windows環境ならRufus、MacならBalena Etcherを利用するのが簡単である。

Ubuntuと異なり、インストールしたいデスクトップ環境はインストール中に選ぶ形式になっている。個人的には、MATEが好みである。

※ MacBook Air 11(2013)で発生した問題

Debian11と12のインストーラで、内蔵SSDを認識できない問題が発生した。インストーラ起動時のカーネルオプションに以下を追加することで解決した。

intel_iommu=off

初期設定

sudoを使えるようにする

Ubuntuなどと異なり、インストール時に作成したユーザーでsudoがデフォルトで利用できない。このため、これを使えるようにする設定をまず行う。

XXXはインストール時に作成した一般ユーザーを指定すること。

$ su -
# adduser XXX sudo

ホームディレクトリ内のデフォルトディレクトリ名を英語にする

多くのLinux系ディストリビューションではホームディレクトリ内のデフォルトディレクトリ名(ドキュメント、ダウンロード、など)が日本語になっている。これは後にCUIを利用する際に非常に不便になるので、インストール直後に変更しておくことをおすすめする。

$ LANG=C xdg-user-dirs-update --force

この後、日本語のディレクトリの手動削除を行う。必要な中身が入っている場合には英語のディレクトリのほうに移すこと。

リポジトリ設定

ここがDebianのちょっとややこしいところ。インストールの方法(フルのDVDイメージか、netinstかなど)によって、デフォルトで設定される内容が異なり、デフォルトでインターネット経由のapt installができない状態の場合がある。aptで見つかるはずのパッケージが見つからない場合などは、ちゃんとnon-freeまで追加されているか確認が必要である。

参照先のリポジトリの設定は、/etc/apt/sources.listで行う。

一般的な設定例

まず、一般的に記載するべき内容は以下になると思われる。とりあえず以下をブチこんでおけば、一般的な用途であれば十分である。

もともとある行については、コメントアウトか削除して以下の行だけが有効になるようにしておく。backportsについては、コメントアウトした状態で入れてある。

deb http://ftp.jp.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb http://ftp.jp.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
# deb http://ftp.jp.debian.org/debian/ bookworm-backports main contrib non-free non-free-firmware

内容の説明

以下は公式サイトの記載を参考に、私なりに理解をまとめたもの。

公式マニュアルには、各行は以下の意味合いであると記載されている。

deb http://site.example.com/debian distribution component1 component2 component3
deb-src http://site.example.com/debian distribution component1 component2 component3

最初のdeb, deb-srcの部分は、debがバイナリパッケージリポジトリ、deb-srcがソースパッケージのリポジトリを表している。ソースパッケージは、自分でパッケージにパッチを当てたいなどの特殊な場合に使うものなので、通常はdebの行だけ追加しておけばオッケーである。

distributionのところには、単にバージョンのコード名が入るわけではなく、バージョンのコード名+以下のソフトウェアソースの種類を記載することになっているようである。

ソフトウェアソースの種類distributionの記載(bookwormの場合)説明
(無印)bookworm現在のリリースを構成するソフト
updatesbookworm-updates次回のポイントリリースを待てないアップデート
securitybookworm-security頻繁なセキュリティアップデート
backportsbookworm-backportsテスト版(testing)などから安定版(stable)にバックポートされてきたソフトがあるリポジトリ。より新しいバージョンのソフトが利用できるが、多少不安定な可能性がある。

リポジトリの種類は、backportsをどうするかだけが悩みどころで、後は追加しておいて良いと思われる。backportsは、安定版リリースよりも新しいパッケージを利用したい場合だけ追加すれば良い。(ただ、優先度は低く設定されているためbackportsのパッケージをインストールしたい場合には、明示的な指定が必要とのこと。)

URLは、security以外は基本的に国内のミラーサイトでよく、securityだけは上流のURLを指定する必要があるようである。

ちなみに、USBやDVDなどからインストールした場合、以下のようにソースとしてインストールメディアが指定された状態になっている。

deb cdrom:[Debian GNU/Linux 12.1.0 _Bookworm_ - Official amd64 DVD Binary-1 with firmware 20230722-10:49]/ bookworm main non-free-firmware

多くの人はインストール後のパッケージ取得はインターネット経由で行いたいと思われるので、こちらは削除orコメントアウトしてOKである。

componentsはソフトウェアの区分のようなもので、以下が存在している。

ソフトウェア区分名説明
mainDebian Projectのフリーソフトウェア方針に完全に則ったソフト。
contribDebian Projectのフリーソフトウェア方針に則ったソフトだが、そうでないソフトに依存するもの
non-freeDebian Projectのフリーソフトウェア方針に則っていないソフト
non-free-firmwareDebian Projectのフリーソフトウェア方針に則っていないソフトのうち、インストーラで必要とされる可能性があるもの(Debian 12以降で追加された)

一般的なデスクトップ用途で特に宗教上の理由がない人には、ソフトウェア区分は全部追加しておいて問題ないと思われる。

各種カスタマイズ

MacBookシリーズでメディアキーと標準ファンクションキーを入れ替える

Macでは、デフォルトでファンクションキーはメディアキー(音楽再生や音量増減など)に割り当てられている。これを標準ファンクションキーとして使えるように設定する。

まずは、設定が可能であるか一時変更で試してみる。

$ su -
# echo 2 > /sys/module/hid_apple/parameters/fnmode

これで機能が入れ替わっていたら、以下の手順で恒久化する。

このカーネルモジュールの都合で設定ファイルでの設定ができないようなので、起動時に上記コマンドを自動実行するように設定する。このために、rc.localを利用する。

rc.localは昔から起動時に自動実行されるファイルとして存在していたが、近年のLinuxではデフォルト無効にされている。Debian 12でも無効になっていて、ファイルは存在すらしていなかった。

以下の通り、ファイルを作成し、編集を行い、実行権限の付与を忘れずに行う。

$ sudo touch /etc/rc.local
$ sudo vi /etc/rc.local
$ sudo chmod +x /etc/rc.local

rc.localを新規作成した場合には、以下を書き込む。何らかの理由ですでにrc.localが存在していた場合には、exit 0の行より前にechoの行だけ書き込む。

#!/bin/bash
echo 2 > /sys/module/hid_apple/parameters/fnmode
exit 0

起動時にrc.localを自動実行するサービスを有効化する。

$ sudo systemctl enable rc-local.service

これで再起動して設定が恒久化されていたら成功である。

Debian 12のapt lineについて

システムが参照するaptリポジトリは/etc/apt/sources.listに記載されています。

Debianをローカルインストール用の大きなイメージを使用してインストールすると、aptのリポジトリとしてインストールに使用したメディアだけが追加された状態になります。これではインターネット経由でパッケージの更新やインストールができないため、多くの人が望む状態ではないと思われます。

例えば以下のような行だけが含まれた状態です。

deb cdrom:[Debian GNU/Linux 12.1.0 _Bookworm_ - Official amd64 DVD Binary-1 with firmware 20230722-10:49]/ bookworm main non-free-firmware

それに対し、ネットワークインストール用のメディアからインストールした場合、12.1のデフォルトは以下のようになっていました。

deb http://ftp.jp.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb http://ftp.jp.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

これをsources.listに記載することで、ネットワーク経由のパッケージ取得ができるようになります。

各OSで音楽を聞きながら寝る場合の簡易再生OFFタイマー

それぞれのコマンドラインで、以下を実行します。30分(=3600秒) sleepさせたあとシステムスリープのコマンドを呼び出すだけの強引な方法ですが、とりあえず音楽の再生は止められるので良しです。

Windows

sleep 3600 ; rundll32.exe PowrProf.dll,SetSuspendState

Linux

sleep 3600 ; systemctl suspend

Mac

sleep 3600 ; pmset sleepnow

Windowsで、UEFI起動順序を変更する

さて、皆様はWindowsとLinuxなどでデュアルブートを利用していますでしょうか。デュアルブートを利用している方は、片方のOSを入れ直したりアップデートしたタイミングでUEFIの起動順序を変えられてしまい、修復に苦労した、なんて経験がたいていあるのではないでしょうか。

Linuxの場合

Linuxでは、efibootmgrという便利なコマンドがあるのでこれで起動順序を直すことができます。

# 入っていなければインストール(Debian系)
sudo apt update ; sudo apt install efibootmgr
# 起動エントリのリストを得る
efibootmgr
# リストから一番に持ってきたい起動エントリの番号を探し(XXXXとする)、以下で設定
sudo efibootmgr -o XXXX

Windowsの場合

しかし、efibootmgrコマンドはWindowsでは使えません。長らくUbuntuのライブUSBなどに頼るしかないかと思っていましたが、なんとWindowsの標準コマンドでも設定変更が可能であることを知りました。bcdeditというWindowsのローダーの設定をいじるツールを利用するようです。(あくまでWindowsのローダー内の設定変更を行うだけのイメージだったので、グローバルなUEFIの設定をいじれるとは意外でした。)

# 起動エントリのリストを得る
bcdedit /enum firmware
# 目的の起動エントリのIdentifierをコピーする(UUID)
# 目的の起動エントリのUUIDを以下のコマンドで設定する
bcdedit /set '{fwbootmgr}' default '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'

※ 参考

https://stackoverflow.com/questions/44919190/windows-equivalent-to-efibootmgr

Ubuntu 22.10 on MacBook Proでファンクションキーの入れ替え

Macではファンクションキーがデフォルトではメディアキーとして利用されるようになっていて、 それはLinuxをインストールしても同様です。

以下を参考にしつつ設定を行いましたが、Ubuntu 22.10ではモジュール名が変わっていたのでメモです。(どのバージョンから変わったのかはわかりません。)

環境の詳細は、Ubuntu Unity 22.10、MacBook Pro 13インチタッチバーなし2017、です。

参考: https://dhils0750.fc2.net/blog-entry-1.html

一時設定にて、正常動作するか確認します。

$ sudo -s
# echo 2 > /sys/module/applespi/parameters/fnmode

この状態で標準ファンクションキーが有効になっていることを確認します。

上記で確認ができたら、設定を恒久化します。

カーネルモジュールの設定ファイルを作成し、

$ sudo vi /etc/modprobe.d/applespi.conf

以下の内容を書き込みます。

options applespi fnmode=2

再起動して標準ファンクションキーが有効になっていたら成功です。