Ubuntuのupdate、upgrade、do-release-upgradeとは

Ubuntuのアップデート、アップグレードの方法を説明します。ただ、コマンドのupdate、upgrade、do-release-upgradeの違いが難しく、コマンドの英語と日本語のアップデート、アップグレードとが直接対応しません。

また、「upgradeした直後にdist-upgrade?」「aptとapt-getは違うの?」などなど、Ubuntuのアップデートやアップグレードは、とにかく理解しにくい。

しかも、SSH接続ででアップグレードをするときには接続が切れたときに大変なことになるなど落とし穴もあります。

そこで、用語の違いを整理しながら基本的な使い方を紹介したいと思います。

1.通常版と長期サポート版(LTS)

Ubuntuには通常版と長期サポート版(LTS:Long Term Support)があり、保守・問合せ期間が異なります。長期サポート版は名前の通りサポート期間が長く、18.04LTSからは通常サポートが5年、延長セキュリティメンテナンス (ESM:Extended Security Maintenance; ) も含めると10年です。

それに対して、通常版のサポート期間は公開から9ヶ月です。

このように長期サポート版が安定性を重視し、通常2年おきに更新されるものであるのに対して、通常版は新しい機能を望むユーザー向けに短い期間でリリースされるものです。

では、長期サポート版は2年の間は更新されないのかと言えばそうではなくて、18.04 LTS → 18.04.1 LTS→ 18.04.2 LTSのように、主にセキュリティ面での更新やバグの修正などがリリースされ、これをポイントリリースと呼びます。

このように、Ubuntuのバージョンアップには以下のようなものがあり、バージョンアップで使うコマンドも異なります。

  • ポイントリリース(アップデート):20.04 LTS → 20.04.1 LTS
  • LTS版からLTS版へのアップグレード:18.04 LTS → 20.04 LTS
  • 通常版から通常版へのアップグレード:19.04 LTS → 19.10
  • LTS版から通常版へのアップグレード:18.04 LTS → 19.04
  • 通常版からLTS版へのアップグレード:19.10→ 20.04 LTS

2.ポイントリリースの適用(アップデート)

サーバーの運用では、セキュリティ面からも日頃からアップデート(更新)を行う必要があり、アップデートの方法は以下の通りです。以下の2つのコマンドを実行することにより、アップデートが完了します。

sudo apt update  #ローカルパッケージインデックスの更新
sudo apt upgrade  #アップデートの実行

「update」は、現在インストールされているそれぞれのパッケージの最新バージョンの情報を取得し、ローカルパッケージインデックスに記録します。つまり、「update」だけでは情報を収集しただけであり、Ubuntuのアップデートは実行されません。

一方、「upgrade」は、ローカルパッケージインデックスの内容にしたがって、アップデートを実行します。

ここで紛らわしいのは、「update」は情報を収集するだけなのにupdateであり、upgradeは日本語で言うところのアップデート(更新)であるにも関わらず、upgradeなのです。

2.OSバージョン、カーネルバージョンの確認

OSバージョンは「/etc/os-release」に記述されています。また、カーネルバージョンは「uname -a」にて確認できます。

アップデートの前後で確認してください。

3.aptとapt-get

apt-getは設計上問題があるとしてaptへの移行が推奨されているが、現在もapt-getは使用できます。

また、apt-get upgradeは新しいパッケージを追加しないのでupt updateよりもアップデートの容量が少なく、システムの容量を節約したいケースなどでは使い道があります。

4.upgradeの比較

アップデートには様々なコマンドがあり、用途によって使い分けますが、「apt-get upgrade」、「apt upgrade」、「apt-get dist-upgrade」、「apt full-upgrade」、「apt dist-upgrade」の違いが難しいため簡単に比較をしたいと思います。

(1) apt-get upgrade

  • 既存のパッケージを更新。
  • 更新しても他のパッケージをインストール・削除する必要がないパッケージだけを更新する。
  • 既存のパッケージは削除しない。

(2) apt upgrade

  • 既存のパッケージを更新。
  • アップデートに伴い必要な新しいパッケージのインストールも行う。
  • 既存のパッケージは削除しない。

(3) apt-get dist-upgrade

  • 既存のパッケージの更新。
  • アップデートに伴い必要な新しいパッケージのインストールも行う。
  • パッケージの優先順位を判断し、優先順位の高いパッケージを更新するために、競合する優先順位の低いパッケージを削除しることがある。

(4) apt full-upgrade (apt dist-upgrade)

  • apt-get dist-upgradeと同じ。
  • apt dist-upgradeでも実行できるが、helpではapt full-upgradeとなっている。

5.アップデートの手順

アップデートの手順は、自分が行いたいアップデートの内容に応じて、ケース1~4の中から選べばよいと思います。

なお、sudo apt full-upgradeの実行をする前には、ケース3やケース4のように先にsudo-get upgradeやsudo upgradeを実行する方がよいとされています。既存のパッケージを更新しておくことにより、sudo apt full-upgrade優先順位や競合状態を判断する計算が楽になり、優先順位の判断ミスにより、必要なパッケージが削除されてしまうような状況を避けることができます。

#ケース1
sudo apt update
sudo apt-get upgrade
#ケース2
sudo apt update
sudo apt upgrade
#ケース3
sudo apt update
sudo apt-get upgrade
sudo apt full-upgrade
#ケース4
sudo apt update
sudo apt upgrade
sudo apt full-upgrade

以下参考サイトでは、ケース3が紹介されています。

参考:第4章 Debian 9 (stretch) からのアップグレード

6.不要になったパッケージの削除

不要になったパッケージの削除はapt autoremoveによって行います。apt full-upgradeによっても不要なパッケージは削除されますが、apt autoremoveでは不要なカーネルなども削除できるため、更に容量を節約することができます。

必要に応じて、アップデートの前に作業領域を確保するためにautoremoveを実行したり、アップデート後に不要になったパッケージを削除するためにautoremoveを実行したりします。

sudo apt autoremove  #アップデートに伴い不要になったパッケージを削除。

7.アップグレード

ここまでは、ポイントリリースを適用するためのアップデートの説明をしました。この後はアップグレードの方法について説明します。アップグレードでは、do-release-upgradeを使います。

  • ポイントリリース(アップデート):20.04 LTS → 20.04.1 LTS
  • LTS版からLTS版へのアップグレード:18.04 LTS → 20.04 LTS
  • 通常版から通常版へのアップグレード:19.04 LTS → 19.10
  • LTS版から通常版へのアップグレード:18.04 LTS → 19.04
  • 通常版からLTS版へのアップグレード:19.10→ 20.04 LTS

(1) update-manager-coreのインストール

do-release-upgradeを使うためにはupdate-manager-coreが必要です。インストールされていない場合には以下のコマンドを実行してインストールします。

sudo apt install update-manager-core

(2) release-upgradesの設定

LTS版からLTS版へのアップグレードなのか、それ以外なのかによってrelease-upgradesの設定方法が変わります。

LTS版からLTS版へのアップグレードの場合には「/etc/update-manager/release-upgrades」の中の記述を「Prompt=lts」とします。

それ以外のアップグレードの場合には「/etc/update-manager/release-upgrades」の中の記述を「Prompt=normal」とします。

(3) アップグレードの実行

まず、アップグレード可能かどうかを確認します。

do-release-upgrade -c

以下の例では19.04にアップデート可能です。

New release '20.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

以下のコマンドによりアップグレードを実行することができます。

ただし、アップグレードには時間がかかります。後述しますが、原則としてSSHではなくコンソールから実行してください。SSHの接続が切断した場合にはアップグレード作業が中断し、SSHからの接続が難しくなります。

sudo do-release-upgrade

正式リリース前の開発バージョンにアップグレードしたい場合にはdオプションをつけます。基本的にリリース前のバージョンへのアップグレードはお勧めしません。

sudo do-release-upgrade -d

アップグレードが終了したら、シャットダウンし再起動します。

shutdown -r now

(4) 基本的なアップグレードの手順

update-manager-coreのインストール、release-upgradesの設定が終了したら、以下の手順で実行します。なお、do-releae-upgradeを実行する前に、現在のバージョンのパッケージをアップデートしておく必要があります。

sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt autoremove
sudo do-release-upgrade
shutdown -r now

8.SSH接続でアップグレードしない

SSH接続は接続が切断されると実行中のプログラムは終了します。つまり、アップグレード中にSSH接続が切断されるとアップグレードも中断されます。アップグレードが中断された状態ではSSHに再接続できませんから、復旧が困難な状態になります。特に数時間にもおよぶアップグレードをSSH接続で行うのは非常にリスキーです。

したがって、アップグレードは原則として直接サーバーのキーボードから入力します。

(1) VPSのコンソールもダメ?

では、VPSサーバーの場合はどうなのでしょうか。ConoHa VPSのコントロールパネルのコンソールで実際に確かめてみました。

SSH接続から以下のコマンドを実行して下さい。pingを実行するとubuntuではCtrl+cで中断するまで導通確認を続けます。ここでSSH接続を切断し、再びSSHでログインし直すと、pingの実行は終了されていました。

ping [サーバーのipアドレス]

一方、ConoHaのコントロールパネルのコンソールからpingを実行し、コンソールを閉じた後に開き直すと、pingの実行は継続しています。

この検証からもVPSサーバーでアップグレードを行う場合にはコントロールパネルのコンソールから実行すべきです。

(2) それでもSSH接続でアップグレードする場合

推奨されないSSHでアップグレードを行う場合には1022番ポートのファイヤーウォールを解除するなどの対応が必要となるため、あらかじめ対応を調べておいた方がよいと思います。

この記事では対応の詳細については省略します。

(3) バックアップは重要

いずれにせよ、アップグレード前のバックアップは重要です。新しいバージョンのOSとの相性問題でアプリが動かなくなる可能性もあります。ConoH VPSのイメージ保存を使用するなど、バックアップできる体制を整えておきましょう。

私が実際にレンタルしたVPSサーバー

私が実際にレンタルしたVPSサーバーはConoHa VPSです。私は1GBのプランを申し込みました。VPSサーバーは一般のレンタルサーバーと異なりOSやアプリケーションを自由に設定できるので、Pythonで計算した結果をサイトに表示したりすることもできます。

なお、ConoHa VPSの特長として、サーバーのディスクイメージを丸ごとバックアップできるイメージ保存機能を無料で使用することができます。コードを変更して元に戻せなくなった場合にも安心です。

また、ConoHa VPSは途中でプランをスケールアップできるだけでなく、スケールダウンすることもできます。つまり、2Gプランを1Gプランに変更することができます。ただし、512MBプランだけはスケールアップ・ダウン機能が使用できないので注意してください。

また、初期費用なしで3日だけ借り、3日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)



その他

Twitterへのリンクです。SNSもはじめました♪

以下、私が光回線を導入した時の記事一覧です。
 (1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
 (2) NURO光の開通までWiFiルーターを格安レンタルできる
 (3) NURO光の屋外工事の状況をご紹介。その日に開通!
 (4) 光回線開通!実測するとNURO光はやっぱり速かった
 (5) ネット上のNURO光紹介特典は個人情報がもれないの?