はじめに
この記事は、WSLを使っている駆け出しエンジニアに、Linuxのアップデートの方法と背景を学ぶきっかけとなるようにまとめる。
WindowsPC に開発環境を構築するのに便利な WSL (Windows Subsystem for Linux)。
Windowsユーザーの私も例に漏れず利用しているが、これまで Linux (OS) の更新を全くしていなかった。
理由としては2点だ。
- 開発で使うパッケージやソフトは問題なくインストールできていた
- 開発環境が動かなくなったら直せるか分からないし、最初から環境構築するのはめんどくさい
定期的にアップデートした方がセキュリティ上良いという話は耳にしていたが、「別に動くし」「ローカルだし」と適当に理由をつけては避けていた。
そろそろ解消しないといけないと思い立ち、本腰を入れて調べながら更新したため、手順と背景をまとめようと思う。
なお、本記事は私の実行環境に基づき Ubuntu に則した情報となっている。
Redhat系などdebian系以外のディストリビューションについては、コマンドや推奨更新周期が異なる可能性があるため注意してほしい。
実行環境
Windows 11
Linux:Ubuntu 22.04.5 LTS
LinuxOSの更新について
OSの更新というと、Windows10からWindows11のようなメジャーアップデートを想定すると思う。
しかし、最低限必要なのはマイナーアップデートだ。
メジャーアップデートはバージョン自体の更新のことを指し、マイナーアップデートはバージョン内で軽微な更新のことを指す。
例)
メジャーアップデート: Ubuntu 22.04.4 → Ubuntu 24.04.1
マイナーアップデート: Ubuntu 22.04.4 → Ubuntu 22.04.5
開発環境のLinuxを定期的にアップデートする理由
先述した通り、定期更新はマイナーアップデートで十分だ。
マイナーアップデートで更新される内容は主に「バグ修正」と「セキュリティ修正」である。
つまり定期的にアップデートするのは脆弱性を持ち込まないための施策だといえる。
開発環境とはいえ、ソフトウェアや外部のライブラリを利用する場合、脆弱性を突かれて機密情報を抜かれる可能性がある。
ローカルに機密情報がないことがベストではあるが、実体験上そうではない現場も少なくない。
こういった脆弱性から機密情報の流出を避けるために、最低でも月に1回は更新することがUbuntuの公式より推奨されている。1
また、純粋にGitなどの開発で利用するソフトウェアのアップデートも定期アップデートに含まれる。
個人的な主観にはなるが、不具合のあるツールをそのまま使い続けるよりはアップデートした方が間違いなく良いだろう。
メジャーアップデートを行う場合
数年に1回はメジャーアップデートを行う必要がある。
メジャーアップデートは影響範囲が大きいため、最初に懸念していた通り、すでに構築済みの開発環境が動かなくなる可能性もある。
これは、OS自体を入れなおすため、設定が初期化されたり、バージョンの強制変更が入ることに起因する。
大きく以下の3点の原因によるものだ。
- 開発言語やライブラリのバージョン強制変更
- 設定ファイルやパスの初期化・変更
- WSL固有のトラブル(Systemdなど)
しかし、調べたところ、この問題には WSL ならではのバックアップ機能を用いることで解消できることが分かった。
# 【手順1】ディストリビューション名を確認(Ubuntu-22.04)
wsl --list --verbose
# 【手順2】バックアップを作成
# バックアップパス(C:\wsl_backup\ubuntu2204_backup.tar)は変更可能
wsl --export Ubuntu-22.04 C:\wsl_backup\ubuntu2204_backup.tar
# 【手順3】メジャーアップデートを実行
sudo do-release-upgrade
# 【手順4】失敗した場合:バックアップから復元
wsl --unregister Ubuntu-22.04
wsl --import Ubuntu-22.04 C:\WSL C:\wsl_backup\ubuntu2204_backup.tar
基本的には月1のマイナーアップデートでよい。
数年に一度はメジャーアップデートを行うことを検討する。
その際はバックアップを取ってから行うことを推奨する。
月1で実行しよう!Ubuntuアップデートコマンド
ここからが本題だ。
最初にインストールした後、まったくアップデートしていないエンジニアの方々は、以下のコマンドを実行してみるとよい。
sudo apt update && sudo apt upgrade
これは、マイナーアップデート用のコマンド4だ。
apt updateはパッケージ一覧の更新、apt upgradeは実際のインストールを行うコマンドで、これらを1つに繋げたものだ。
アップデートがある場合は[Y/n]の確認が表示されるため、Yを入力してEnterを押す。
加えて、クリーンな環境にしたい場合は以下も実行しよう。
sudo apt autoremove
これはアップデートによって不要になったパッケージを削除するコマンドだ。
こちらも削除対象がある場合は[Y/n]の確認が表示されるため、Yを入力してEnterを押す。
Topic:Ubuntuのバージョンについて
Ubuntuのバージョンについて豆知識としてトピックを残しておく。
LTS(長期サポート版)について
LTS:Long Term Support(長期サポート版)
公式が長く安心して使えることを公言しているバージョンのこと。
通常版が9ヶ月の無償サポート期間に対して、LTSは5年間の無償サポート期間が設定されている。
LTSは2年周期でバージョンアップされており、私の実行環境の22.04系は2022年4月にリリースされたものだ。
この記事を書いている、2026年6月9日現在では、後継として、24.04系、26.04系が存在する。
また、バージョンの表記もわかりやすいのでついでに覚えておくと良いだろう。
再度私の実行環境のバージョンで説明する。
例)
Ubuntu 22.04.5 LTS
「年.月.回(LTSかどうか)」という構成になっている。
例は2022年4月にリリースされたLTS版で、5回目のマイナーアップデートを行った。ということだ。
LTS版を使っている方は、メジャーアップデートを行う数年周期というのは、最新を追うのであれば 2年に1回 、長く見ても 4年~5年に1回 という頻度になるということだ。
私の利用している、22.04系も2027年には無償サポートが終了になってしまうため、そろそろメジャーアップデートを行う時期ということになる。
(※有料のUbuntu Proを使えば2032年まで、Legacy add-onなら2037年まで延長可能5)
ちなみに、Ubuntuの通常版は4月と10月の年2回リリースされ、無償サポート期間が9ヶ月なため、 6か月~9ヶ月 毎にメジャーアップデートが必要になる。
通常版とLTS版の選定について
| 項目 | 通常版(例: 24.10) | LTS版(例: 22.04 / 24.04) |
|---|---|---|
| サポート期間 | 9ヶ月間(短い) | 5年間(長い) |
| リリース時期 | 毎年4月と10月 | 偶数年の4月のみ |
| 目的 | 新機能をいち早く試す | 開発環境やサーバーの安定運用 |
まとめ
今回はここまでとする。
サブシステムとはいえ、開発で利用する環境は可能な限りセキュアにするべきだと考えている。
今回はコマンドや役割、なぜ必要なのかなどの簡単な背景を調べながらマイナーアップデートを実行し、思考整理がてら記事にまとめるところまで行った。
また、メジャーアップデートもそろそろ必要なことに気づいたため、次回はメジャーアップデートについても調べながら実行し、手順を整理するのもありだと思っている。
もし有識者の方の目に留まり、気になった点や、認識や理解に間違えているところがありましたらコメントで教えてほしいです。よろしくお願いします。
参考文献
-
# How often do you apply security patches on Linux?
(Security patching for the smallest exploit footprint 参照) ↩ -
https://learn.microsoft.com/en-us/windows/wsl/faq#how-can-i-move-my-wsl-distribution-to-a-different-drive-or-location-
(How can I move my WSL distribution to a different drive or location? 参照) ↩ -
https://ubuntu.com/server/docs/how-to/software/upgrade-your-release/#upgrade-the-system
(Upgrade the system 参照) ↩ -
https://ubuntu.com/server/docs/how-to/software/package-management/#upgrading-packages
(Upgrading packages 参照) ↩ -
https://ubuntu.com/about/release-cycle
(Find out your current coverage 参照) ↩