Debian9(strech)から10(buster)へアップグレード
日々更新を続けるDebian。無料のOSなので使用しているアプリケーションに不具合がなければ更新したいところです。
通常のアップデートはapt upgradeで実行できますが、OSのバージョンを上げたいときはそれではできません。
今回はDebian9(stretch)から10(buster)にしてみました。
追記
10(buster)から11(bullseye)にアップグレードの場合はリンク先の記事をご覧ください。バージョンの差異により若干変わっております。
現行のバージョンの確認と、最終アップデート
まず現行のバージョンを確認します。Debianでは/etc/debian_versionにバージョン情報が記録されています。
$ cat /etc/debian_version 9.13
次に管理者権限になります。恥ずかしながら最近知ったのですがsuの後に-を加えると、直接ログインした時と同じように初期化されるそうです。-オプションでroot権限をとると、root用に初期化されパスが設定されます。
念のため現行バージョンのDebianを最新の状態にします。もし「apt-mark hold <package>」等でパッケージをアップデートしないように設置しているようなら「apt-mark unhold <package>」で解除しておきます。カスタマイズされているものを除いてすべてholdを解除するのが理想です。holdされているものを確認するには「dpkg --get-selections | grep 'hold$'」とします。
$ su - ... # dpkg --get-selections | grep 'hold$' vim hold ... # apt-mark unhold vim ... # apt update ... # apt upgrade ...
OSアップグレード
OSのアップグレードは公式:「第4章 Debian 9 (stretch) からのアップグレード」を参考に行います。
参考ページにはバックアップや利用ユーザーへの告知なども記述されていますので、興味があれば目を通してください。ここではアップグレードに関する部分だけ抜粋します。
まずディスクの容量を確認しておきます。dfコマンドでOSをインストールするディスクに空きがあるか確認します。
次に現状のアプリの確認をします。ローカル環境でビルドしたものは、OSアップグレードで不具合が起きる可能性が高くなるのでピックアップしておき、アップグレード後に重点的に確認します。
APT経由でインストールしたものでも、正しくインストールされていなかったり一貫性がなかったりするものがあることがあります。それを確認するためにdpkg --audit(-C)を実行します。このコマンド実行時にもしおかしなものがあれば修正方法の提案が出るそうです。
# dpkg -C なにも出力されなけばOK
source-listの修正
/etc/apt/sources.listを修正します。/etc/apt/sources.list.d/ディレクトリに設定している場合はそちらを修正してください。
ここでsources.listの書式に関して少し触れておきます。
- debやdeb-src
これらはパッケージの種類になります。debはバイナリパッケージ(実行ファイル)、deb-srcはソースパッケージ(ソースコード)になります。ソースの展開はdpkg-devが必要で取得時も「apt source」で取得します。そのようなことをしなけば、deb-srcの行は不要です。
- strechやbuster、buster/updates
リリースの指定で、バージョンを示すコードネームとなっています。コードネームでの指定のほか状態名(oldstable、stable、testing、unstable)でも指定できます。状態での指定は不可逆性で先ほどあげた順で、左側から右側への指定できますが、逆はできません。
コードネーム/updatesとなっている方はセキュリティアップデートで取得先が違います。こちらはなくても稼働しますが、入れておきましょう。
- main contrib non-free
「Debianフリーソフトウェアガイドライン」の基準に適応するか否かで、アプリやライブラリの所属がmainやcontrib、non-freeと振り分けられます。完全に適合するものがmain、依存関係において適合しない部分があるとcontrib、そうでなければnon-freeとなります。
リストの更新ができたら、再度update、upgradeをします。ちなみに筆者の環境ではlistファイルを次のように指定しました。ネットワークアダプタのファームウェアの都合上non-freeを入れています。
/etc/apt/sources.list
deb http://ftp.jp.debian.org/debian/ buster main contrib non-free deb http://security.debian.org/debian-security/ buster/updates main contrib non-free
# apt update ... # apt upgrade ...
アップグレードの途中、インストールされているアプリにより、いろいろ応答を求められると思います。「Restart services during package upgrades without asking?」は、サービスの再起動処理を自動でしていいか確認するものです。常時安定稼働が必要とされているサーバーはタイミングを見計らわないといけませんがそうでなければ「Yes」を選んで自動で処理してもらいましょう。
アップグレード後の確認
アップデート中のメッセージを確認して問題ないことを確認します。筆者の環境の場合、non-free系の更新がされていませんでしたので「apt install firmware-linux-nonfree」を実行しました。
OSバージョンを確認してみましょう。
# cat /etc/debian_version 10.5
apt autoremoveで不要になったパッケージを削除します。
# apt autremove ... ...保留18個。
ここで「保留」がでていたら対処が必要です。旧パッケージを削除を伴うアップデート等は互換性の観点から保留になります。そのような場合でもインストールを実行するコマンドは「apt dist-upgrade」ですが、これに-sオプションを付けて実行すると何がインストールされて何が削除されるかが表示されます。そちらを確認してから作業するといいと思います。
# apt dist-upgrade -s ... # apt dist-upgrade
この方法は「apt-get upgradeで保留になる場合の対処法」を参考にさせていただきました。ありがとうございます。
OSのアップグレード自体は問題なく終わっても、アプリによってはアップデートによる不具合があるかもしれません。特に保留になっていたものをdist-upgradeした場合は注意が必要です。
筆者の環境ではMariaDBのアップデートによりRow Size Too Largerエラーがおきたりや、設定項目の改廃が理由で起動できなかったりしました。
またこちらは保留にはなっていなかったのですがOpenJDK11がインストールされ、デフォルトで使っていた8が追いやられてしまったので、修正しました。
# update-alternatives --config java ... OpenJDK8を選択
環境によりいろいろ違うとはおもいますが、それらの対応が終われば、アップグレードは終了です。