今回は、ディストリビューション自体をバージョンアップ(システムアップデート)する方法を解説する。
ディストリビューションのシステムアップデート
Linuxディストリビューションのバージョンバージョンアップは、ベンダーごとにやりかたが異なる。このため、ディストリビューションによっては、複数あるリリースの中から適切なものを選択する必要がある。
一般的にLinuxディストリビューションには、以下のようなバージョンアップが存在する(表01)。
- 「従来型」
- 「LTS(Long Term Support)版」
- 「ローリングアップデート」
「従来型」は、原則、定期的に「安定版」をリリースし、安定版のリリースの間に「プレビュー版」や「開発版」などを出す方式である。リリース方針により安定版以外のリリースの位置づけが異なるが、基本的には「安定版」を選択する。
「LTS版」は、後継バージョンが出てもアップデート配布などのサポートが長期間継続するものをいう。従来型と併用されることもあり、安定版の1つがLTS版としてリリースされる場合がある。
「ローリングアップデート」とは、短期間でシステムのアップデートを継続して行うもの。このため、日々状態が更新され、システムとしては固定したバージョン番号を持たない場合がある。インストールイメージをファイルなどで配布している場合には、そのイメージにバージョン番号などを付けて区別することがある。
ディストリビューションのアップデートの実際
ディストリビューションのアップデートはおおまかに以下の手順で行う。
- 確認
- 準備
- バックアップ
- バージョンアップ
ここでは、WSL用としてMicrosoftストアで配布されている「Ubuntu」を対象として利用する。
まずは、対象のWSLディストリビューションのバージョンを確認する。それには、/etc/os-releaseファイルを確認する。リスト01は、Ubuntuの場合だ。これから現在のディストリビューションは、「22.04.3 LTS (Jammy Jellyfish)」でLTS版22.04.3であることがわかる。
■リスト01
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
ディストリビューションによっては、独自のバージョン確認手段を持っている場合があり、より正確な情報が得られる場合もあるが、それぞれ方法が異なる。しかし、この方法は、すべてのディストリビューションで利用できる。
次にバージョンアップ対象が存在するかどうかを確認する。Ubuntuの場合、システムバージョンアップを行う「do-release-upgrade」コマンドを使って、存在を確認できる。
do-release-upgrade -c
ただし、このコマンドは、「/etc/update-manager/release-upgrades」ファイルの設定に従って動作する。このファイルは、システムバージョンアップの対象を制限する機能がある。このファイルにある「Prompt=<設定値>」がdo-release-upgradeの動作を決める。ファイル中にも解説があるが、「<設定値>」は、(表02)にある3つから選択する。どの場合でも、バージョンアップ可能なリリースのみが選択され、バージョンが後戻りするようなアップグレードはできない。
Ubuntuの場合、標準では“lst”が選択されている。また、WSL用のUbuntu LTS版では、“never”が初期値として設定されている。
ここでは、これを“normal”に書き換えて、以後の解説を行う。書き換えは、適当なテキストエディタなどを使うが、/etc/ディレクトリ内のファイルなのでsudoをつけてエディタを起動する。
書き換える前には、更新は表示されなかったが、Promptをnormalに書き換えると、新リリースである「23.04」が見つかる(写真01)。これは、確認した現在のバージョンよりも新しい通常版だがLTS版ではない。なお、normalにした場合、半年に一回バージョンアップが行われるが、LTSに変更した場合、現在のバージョンより先のLTSがリリースされるまでバージョンアップが行われない。
準備
準備では、WSL自体とディストリビューションを最新状態にする。まずは、WSL自体だが、Win32側で、「wsl.exe --update」を実行する。
次にWSLを起動し、Linux側でプログラムなどを最新の状態にしておく。システムのバージョンアップに関わるプログラムがアップデートされている可能性があるからだ。Ubuntuの場合、以下のコマンドを実行する。
sudo apt update
sudo apt upgrade
apt list --upgradable
最後のコマンドでパッケージが何も表示されなければ準備は終了である。そうでない場合には、表示されるパッケージを「sudo apt upgrade <パッケージ名>」などして、個別にアップデートするなどしてして対処する。環境依存の問題なので、一般的な対処方法を示せないが、表示される警告などを理解して対処を行う必要がある。
バックアップ
次にバージョンアップに備えて、ディストリビューションをバックアップする。それには、wsl.exeコマンドの--exportオプションを使うのが簡単だ。ただし、コマンド実行前にWSLのウィンドウを閉じるなどして、セッションを終了させておく必要がある。
wsl.exe --terminate Ubuntu
wsl.exe --export Ubuntu C:\temp\UbuntuBackup.vhdx --vhd
2行目のコマンドは、バックアップファイルとして「C:\temp\UbuntuBackup.vhdx」が指定してある。ここは、各自の環境に合わせて書き直す必要がある。
なお、バックアップに関しては、「第16回 WSLのバックアップとリストア」、「第17回 WSLのバックアップとリストア 応用編」を参照していただきたい。
バージョンアップ
Ubuntuの場合、前述のようにdo-release-upgradeコマンドでアップデートを行う。これは単純にオプションを付けずに実行すればよい(写真02)。
WSLでは1つのディストリビューションを複数のターミナルで開くことができるが、バージョンアップ中は、他のセッションはすべて閉じておく。
バージョンアップの途中で何回か確認が入る。場合によってはTabでYes/Noを選択する背景に色がついた画面が出ることもある。アップグレードが終了した旨のメッセージ(写真03)が表示されたら、ターミナルを閉じ、ディストリビューションを終了させる。その後再起動を行えば、バージョンアップは完了である。
LTS版のバージョンアップ
LTS版のバージョンアップも、基本的な手順は同じだが、WSLの場合、WSLディストリビューションの名前を変更できないという問題がある。たとえば、「Ubuntu-20.04」を同22.04LTSにアップグレードしても、外部から見えるディストリビューション名は「Ubuntu-20.04」のままである。これでは、バージョンを誤認しかねない。
そこで、バックアップを取ったWSLディストリビューションのローカルファイルイメージ(vhdxファイル)を使い、新たな名前でディストリビューションを登録し、これを使ってバージョンアップを行う。
なお、ここでは説明のため「Ubuntu-20.04」を「Ubuntu 22.04 LTS」にバージョンアップすると仮定する。なお、Ubuntuでは、LTS版のバージョンアップは段階的に行う必要があり、Ubuntu-18.04は、同20.04LTSにバージョンアップできるが、直接22.04LTSにはバージョンアップできない。
前述のバックアップまでの手順はほぼ同一である。ただし、/etc/wsl.exeにWSLデフォルトユーザーを登録しておく。具体的には、
[user]
default=<ユーザー名>
を追加する。WSLの標準のインストールでは、インストール時にデフォルトのユーザー名を登録するが、コピーしたWSLローカルファイルシステムを使って、インポートを行う場合には、ユーザー名がデフォルト登録されないからである。ローカルファイルイメージには、作成時に作られたユーザー登録は存在するため、上記の記述を追加しておけば、WSLのデフォルトユーザーを維持できる。
そのあと、バックアップしたローカルファイルイメージを使い、新規にバージョンアップ先のLTS名で、WSLディストリビューションを登録する。このため、適当な場所にフォルダを作りそこにバックアップを作る。これを「C:\wsl」とすると、
wsl.exe --terminate Ubuntu
cd c:\wsl
wsl.exe --export Ubuntu-20.04 UbuntuBackup.vhdx --vhd
wsl.exe --import-in-place Ubuntu-22.04 .\UbuntuBackup.vhdx
とする。これで、名称のみ「Ubuntu-22.04」となったディストリビューションが登録される。
ただし、WSLでは、同名のディストリビューションは1つだに限定される。Microsoftストアからディストリビューションをインストールする場合には、「Ubuntu-2x.04」という名前のものがなる。先にこれらがインストールしてあるときには別の名前を考える。また、上記のように名前を変えて登録したときに、後から同名のディストリビューションをMicrosoftストア(あるいはwsl.exe --installコマンド)でインストールしようとするとエラーになる。
このようにして、既存のWSLディストリビューションのコピーを作成してWSLに登録したら、これを起動し、前記のようにバージョンアップ作業を行えばよい。
ディトリビューションのバージョンアップは、ディストリビューションごとにリリース方針の違いがあり、また利用するコマンドなどにも違いがある点には注意されたい。
> Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/