Debian10(buster)から11(bullseye)へアップグレード
Debian10でapt updateを実行したら、次のようなメッセージが表示されました。
調べたら2021年8月14日にDebian11(bullseye)がリリースされたそうです。
そこで、以前Debianをstrechにからbusterアップグレードした記事を書きましたが、今回はbusterからbulleseyeにアップグレードしてみます。アップデートの際に利用する推奨コマンドやsources.listの書式が若干変わっているようです。
合わせて適切なアーカイブを探してくれるパッケージのnetselect-aptについてや、sources.listに関しても触れています。
2023/9追記
2023年6月にDebian12 Bookwormがリリースされました。Debian11から12へのアップグレードに関しては別途記事がありますので、そちらをご覧ください。
アップグレードの手順
手順は公式の「Debian 10 (buster) からのアップグレード」のページにしたがって行えば、トラブルが一番少なく済むと思います。
その中から要点をピックアップします。
- busterの最新状態からアップグレードする
現行のバージョンが、busterでない場合はbulleseyeへのアップグレードはサポートされません。strechのだった場合は、一旦busterにアップグレードしたのちにbulleseyeにアップグレードする必要があります。
またbusterの場合でも最新の状態から実行しないといけません。
- Debian由来ではないパッケージの確認
Debianの管理外だったり、管理から外れたアプリはアップグレードに対応する保証がないため一旦削除して、必要なら新しい環境で再度インストールします。
その際に、便利なアプリが「apt-forktracer」です。これは完璧ではないですが、Debian由来ではないパッケージを探してくれるものです。次のように出力されます。
$ apt-forktracer libdns-export162 (1:9.10.3.dfsg.P4-12.3+deb9u5) php7.0-cli (7.0.33-0+deb9u7) libmpfr4 (3.1.5-1) php7.0-gd (7.0.33-0+deb9u7)
- /etc/apt/soruces.listの更新
busterの際とは、セキュリティアーカイブを指定する記述に変更がありました。
deb http://ftp.jp.debian.org/debian/ bullseye main # セキュリティアーカイブ # busterでの書式 # deb http://security.debian.org/debian-security/ buster/updates main # bullseyeでは次のようになります。 deb http://security.debian.org/debian-security/ bullseye-security main # update deb http://ftp.jp.debian.org/debian/ bullseye-updates main
アーカイブのURLとコード名(またはスイート名)の一覧は、公式の2.1.4. Debian archive basicsにリストされています。
アップデート関連の記述が、bullseye-securityとbullseye-updatesのふたつになりました。基本的にこだわりがなければすべて記述しておくのが無難です。bullseye-securityの方は、主に不具合の改善などのコードアップデートが提供されるのに対し、bulleseye-updates は頻繁な更新があるもの、例えばアンチウィルスソフトのウイルス定義ファイルなどを配布するような場合に用いられるようです。
「 apt list --all-versions 」とすると、aptレポジトリの中で利用できるパッケージがすべて表示されますが、ここで stable-secury や stable-update となっているものが update や security で配布されているものとなります。
sources.listを更新したら、upt updateを実行します。
- --without-new-pkgs
今回から公式ページに含まれている内容で、まずは最小のパッケージでアップグレードした後で、フルパッケージでアップグレードする方法を勧めています。
残しておきたいパッケージが競合の問題で大量に削除されるのを防ぐためだそうです。
最初は--without-new-pkgsをつけて実行した後、full-upgradeを実行します。
# apt upgrade --without-new-pkgs ... # apt full-upgrade
以前のように、apt dist-upgradeでもアップグレードは可能です。
ちなみにdist-upgradeはapt-get側、full-upgradeはapt側のマニュアルにのみ記載されていますが、apt、apt-getのどちらでもdist-upgrade、full-upgradeが使えます。
apt-get dist-upgradeの挙動の説明は次のようになっています。
dist-upgrade は、upgrade の機能に加え、新バージョンのパッケージに対 する依存関係の変更を知的に操作します。apt-get は「洗練された」競合 解決システムを持ち、必要とあらば比較的重要でないパッケージを犠牲に して、最重要パッケージの更新を試みます。そのため dist-upgrade は、いくつかのパッケージを削除する可能性がありま す。/etc/apt/sources.list ファイルには、必要なパッケージファイルを 検索する場所のリストが含まれています。特定のパッケージ向けに、一般 的な設定を上書きする機構については、apt_preferences(5) をご覧くださ い。apt のfull-upgradeは次のような説明になっています。こちらはapt-get側にはありませんが、apt-getで指定してもエラーになりません。
full-upgrade はアップグレードの機能を実行しますが、システム全体を アップグレードするために必要とされる場合には、現在インストール済み のパッケージを削除することができます。ちなみにaptのupgradeの説明は次のようになっています。
upgrade は、現在システムにインストールされている全パッケージの最新 バージョンを、/etc/apt/sources.list に列挙した取得元からインストー ルするのに使用します。現在インストール中のパッケージに新しいバー ジョンがあれば更新しますが、いかなる時も現在インストール中のパッ ケージの削除は行いませんし、インストールしていないパッケー所の取 得・インストールは行いません。対象のパッケージが、他のパッケージの インストール状態を変更せずに更新できない場合は、現在のバージョンの ままとなります。最初に update を実行しておき、apt-get にパッケージ の新しいバージョンがあることを知らせる必要があります。dist-upgradeもfull-upgradeどちらも競合が発生する等必要な場合にパッケージを削除するというものです。筆者は、推奨されるコマンドが変わったというとらえかたをしました。
strechからbusterにアップグレードした際はJava8が11に変更されるというトラブルがありましたが、今回はphp7.3が削除されたのに7.4が入っていなかったり、firmware-realtekが消えてしまったりという事を経験しました。安定稼働が必要な場合はまずテスト環境での実施をして不具合を検証しておく必要があるでしょう。
securityパッケージについて
ここでsources.listのエントリーについて気になった事があったので書いておきます。前回のアップグレードの記事にも書いたように、通常のdebとdeb-srcの違いはソースコードを必要とする際にはdeb-src側から取得されるということでした。
もうひとつ以前より気にになっていることがあります。そもそもsecurityパッケージの行はなんのためにあり、どんな違いがあるのでしょうか。少し古いページになりますがDebian公式faqにズバリの解説はなかったですが次のようなものがありました。
質問: 修正版のパッケージが security.debian.org に出るかどうかの判断基準はなんですか? A: 安定版 (stable) ディストリビューションのパッケージに セキュリティの破れがあれば、そのパッケージは security.debian.org に登場することになります。他の理由で置かれることはありません。 ここで「セキュリティの破れ」の程度が大きな問題になります。 通常、セキュリティチームはパッケージのメンテナとともに新しい パッケージを準備します。ただし (信頼できる) 誰かが問題を追跡し、 必要なパッケージをすべてコンパイルして セキュリティチームに送ってくれたのであれば、 些細なセキュリティ修正であってもそれは security.debian.org に置かれることになります。以下を参照してください。 セキュリティアップデートの目的は、ただひとつだけです。 セキュリティ上の脆弱性に対する修正を提供することです。 それは、通常のポイントリリースの手順を迂回して、安定版 (stable) リリースにそれ以外の変更を加えるための手段では、ありません。 質問: パッケージのバージョン番号からすると、 私は今もなお危険なバージョンを使っているはずです! A: 新しいリリースにアップグレードする代わりに、セキュリティ上の修正を安定版 (stable) に収録されたバージョンに適用 (バックポート) します。 これは、パッケージの変更をできるだけ小さく留め、 セキュリティ上の修正が予期しない変化や不具合を招くのを防ぐ目的があります。 パッケージの更新履歴 (changelog) を調べたり、正確なバージョン番号を Debian セキュリティ勧告 (Security Advisery) に示されたバージョン番号と比較すれば、 安全なバージョンを使っているかどうかを確認できます。
要するに、セキュリティアップデートでは、安定板にその時点で必要なセキュリティパッチをあてたものが入るというイメージでしょう。
ミラーの検索
いままで筆者は今までミラーは常に「ftp.jp.debian.org」を指定していました。最適なミラーを探してくれる「netselect-apt」というパッケージがあるそうです。
これをインストールして、実行すると自動的に最適なアーカイブの設定をしてくれます。ミラーをどこにしていいかわわからない時は最適です。
# netselect-apt Using distribution stable. Retrieving the list of mirrors from www.debian.org... --2021-08-25 21:40:01-- https://www.debian.org/mirror/mirrors_full www.debian.org (www.debian.org)|149.20.4.15|:443 に接続しています... 接続しまし た。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 130908 (128K) [text/html] `/tmp/netselect-apt.H0lTsB' に保存中 /tmp/netselect-apt. 100%[===================>] 127.84K 64.2KB/s 時間 2.0s 2021-08-25 21:40:05 (64.2 KB/s) - `/tmp/netselect-apt.H0lTsB' へ保存完了 [130908/130908] Choosing a main Debian mirror using netselect. netselect: 301 (22 active) nameserver request(s)... Duplicate address 195.234.45.114 (http://ftp.be.debian.org/debian/, http://mirror.as35701.net/debian/); keeping only under first name. netselect: 270 (23 active) nameserver request(s)... Duplicate address 200.236.31.3 (http://ftp.br.debian.org/debian/, http://debian.c3sl.ufpr.br/debian/); keeping only under first name. netselect: 263 (23 active) nameserver request(s)... ... The fastest 10 servers seem to be: http://mirror.i3d.net/debian/ http://ftp.yz.yamagata-u.ac.jp/debian/ http://ftp.yz.yamagata-u.ac.jp/debian/ http://ftp.yz.yamagata-u.ac.jp/debian/ http://debian-mirror.sakura.ne.jp/debian/ http://ftp.jaist.ac.jp/debian/ http://hanzubon.jp/debian/ http://mirrors.edge.kernel.org/debian/ http://ftp.nara.wide.ad.jp/debian/ http://ftp.riken.jp/Linux/debian/debian/ Of the hosts tested we choose the fastest valid for http: http://ftp.yz.yamagata-u.ac.jp/debian/
実行した場所にsources.listが出力されます。そのまま使うか、先の結果等を参考に自分で/etc/aptにあるsources.listの記述を変更します。
また自分でhostの近さを調べたい場合は、「netselect-apt」に同梱の「netselect」を用います。
-vvオプションをつけて調べたいホストを入力します。-vとすると最適な結果の1行のみを返してくれます。
#netselect -vv http://mirror.i3d.net/debian/ http://ftp.yz.yamagata-u.ac.jp/debian/ ta-u.ac.jp/debian/ Running netselect to choose 1 out of 5 addresses. ................... http://mirror.i3d.net/debian/ 64 ms 9 hops 50% ok ( 5/10) [ 245] http://133.24.248.16/debian/ 72 ms 12 hops 22% ok ( 2/ 9) [ 717] http://133.24.248.19/debian/ 73 ms 11 hops 40% ok ( 4/10) [ 384] http://133.24.248.17/debian/ 73 ms 11 hops 40% ok ( 4/10) [ 382] http://133.24.248.18/debian/ 71 ms 11 hops 40% ok ( 4/10) [ 371] 245 http://mirror.i3d.net/debian/
スコア245でhttp://mirror.i3d.net/debian/が最適だという結果が出ました。
apt-file
アップグレードにエラーはつきものなのですが、いくつか出たエラーを解決方法を紹介しておきます。
「Possible missing firmware」のメッセージが出るときはたいていファームウェアがインストールされていないのですが、必要とするパッケージがどんな名前で配布されているのかわかりづらいと思います。
そんな時便利なのが、apt-fileです。これはパッケージに含まれるファイルを検索するものです。
# apt-file update ... # apt-file search skl_dmc_ver1_27.bin firmware-misc-nonfree: /lib/firmware/i915/skl_dmc_ver1_27.bin
apt-file updateで内部のデータベースを更新します。
apt-file search filenameとすると、そのファイルを利用するパッケージ名が表示されます。パッケージ名は使用しているマシンにインストールされていなくても表示されますので、その名前を使ってaptでインストールすることができます。
このあとリブートすればメッセージが出なくなると思います。
のエラーに関してはstackoverflowにあるように「intel-microcode」をaptでインストールすることで解決しました。
こちらはKVM(仮想化)関連のエラーだと思いますが、BIOSがRMRRの仕様変更に対応していないところから起きるそうです。筆者の場合BIOSをアップデートすることで改善されました。
DebianでのBIOSのメーカーやバージョンの確認の仕方ですが、dmidecodeコマンドを使います。
実行すると表示されるエントリーの中に「BIOS Information」というものがBIOS、「Base Board Information」というのがマザーボードの情報です。マザーボードによりBIOSがカスタマイズされているので、通常はマザーボードのメーカーのページよりアップデートファイルを検索します。筆者のASUSのボードだと利用しているCPUによっても更新用のファイルが違うようでした。
# dmidecode -t baseboard ... Base Board Information Manufacturer: ASUSTeK COMPUTER INC. Product Name: H170-PRO Version: Rev X.0x Serial Number: Asset Tag: Default string Features: Board is a hosting board Board is replaceable Location In Chassis: Default string Chassis Handle: 0x0003 Type: Motherboard Contained Object Handles: 0