Ubuntuのアップデート、アップグレードの方法を説明します。ただ、コマンドのupdate、upgrade、do-release-upgradeの違いが難しく、コマンドの英語と日本語のアップデート、アップグレードとが直接対応しません。
また、「upgradeした直後にdist-upgrade?」「aptとapt-getは違うの?」などなど、Ubuntuのアップデートやアップグレードは、とにかく理解しにくい。
しかも、SSH接続ででアップグレードをするときには接続が切れたときに大変なことになるなど落とし穴もあります。
そこで、用語の違いを整理しながら基本的な使い方を紹介したいと思います。
0.VPSサーバーでDjangoを始めてみたシリーズ
この記事は「VPSサーバーでDjangoを始めてみたシリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。
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のように、主にセキュリティ面での更新やバグの修正などがリリースされ、これをポイントリリースと呼びます。
なお、「アップデート」とは小規模な修正を指し、「アップグレード」とは、大規模な機能の追加や仕様の変更等を伴うものを指します。以下の例ではポイントリリースの適用は「アップデート」ですが、他は「アップグレード」です。
- ポイントリリースの適用(アップデート):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.ポイントリリースの適用(アップデート)
サーバーの運用では、セキュリティ面からも日頃からポイントリリースを適用(アップデート)する必要があります。そこで、最初にアップデートについて説明します。
(1) aptとapt-get
アップデートで用いるコマンドには「apt」と「apt-get」がありますが、apt-getは設計上問題があるとして、現在ではaptへの移行が推奨されています。
しかし、apt-getにも優れた点があり、「apt-get upgrade」は「apt-upgrade」よりもアップデートの容量が少なく、システムの容量を節約したい場合には使われます。
混同しないように気をつけましょう。
(2) apt updateとapt upgradeの違い
以下、アップデートの手順の一例です。ここでは、「apt update」と「apt upgrade」の違いを理解しましょう。
sudo apt update #ローカルパッケージインデックスの更新
sudo apt upgrade #ポイントリリースの適用(アップデート)
1行目のコマンド「update」は、ポイントリリースの最新情報をネット上から取得し、ローカルパッケージインデックスに記録します。つまり、「update」はアップデートに必要な情報を収集しただけであり、Ubuntuのアップデートは実行されません。
一方、「upgrade」は、ローカルパッケージインデックスの内容にしたがって、実際にアップデートを実行します。
ここで紛らわしいのは、コマンド「update」はアップデートが実行されないのに「update(アップデート)」と呼ばれ、コマンド「upgrade」はアップデートであるにも関わらず「upgrade(アップグレード)」と呼ばれることです。
(3) OSバージョン、カーネルバージョンの確認
OSバージョンは「/etc/issue」や「/etc/os-release」に記述されています。アップデートの前後で確認してください。
cat /etc/issue
cat /etc/os-release
(4) カーネルバージョンの確認
Ubuntuのアップデートでは、OSのバージョンだけではなく、カーネルのバージョンも確認しておきましょう。
カーネルとはLinux OSの中でも特に中核的な基本機能の役割を担うプログラムのことを指します。Ubuntuのバージョンアップがあったとしても、カーネルの部分はバージョンアップされていないこともあります。
uname -a
(4) アップデートのコマンドは4種類
アップデートで使用するコマンドには「apt-get upgrade」、「apt upgrade」、「apt-get dist-upgrade」、「apt full-upgrade」、「apt dist-upgrade」の4種類あり、その違いを簡単に説明します。
apt-get upgrade
- アップデートについて、新しいパッケージは追加しない。既存のパッケージを削除するような更新はしない。したがって、インストール済みのアプリに与える影響が最も少なく、新しく更新されるファイルの容量が少ない。
- 更新後の古いパッケージの削除について、古いものであっても既存のパッケージは削除しない。したがって、インストール済みののアプリに与える影響が少ない。しかし、古いパッケージも残るため、データの容量が増える。
apt upgrade
- アップデートについて、新しいパッケージを追加する。しかし、既存のパッケージを削除するような更新はしない。したがって、新しい機能も利用できるが、インストール済みのアプリへの影響が少ない。
- 更新後の古いパッケージの削除について、古いものであっても既存のパッケージは削除しない。したがって、インストール済みのアプリに与える影響が少ない。しかし、古いパッケージも残るため、データの容量が増える。
apt-get dist-upgrade
- アップデートついて、新しいパッケージを追加する。また、新しいパッケージの追加を優先して、既存のパッケージと競合する場合は古いパッケージを削除する。したがって、最新の機能が全て利用できる。
- パッケージの優先順位や競合状態を判断し、不要なパッケージは削除する。したがって、容量を減らすことができるが、インストール済みのアプリに影響を与える可能性が「apt-get upgrade」や「apt upgrade」よりも高い。
apt full-upgrade (apt dist-upgrade)
- apt-get dist-upgradeと同じ。
- apt dist-upgradeでも実行できるが、helpではapt full-upgradeとなっている。
5.不要になったパッケージの削除
新しいパッケージには含まれない古いパッケージの削除はapt autoremoveによって行います。
apt full-upgradeによっても不要なパッケージは削除されますが、apt autoremoveでは不要なカーネルなども削除できるため、更に容量を節約することができます。主に以下の用途で利用します。
- 容量不足によりアップデートの作業領域に不安がある場合、アップデート前にautoremoveを実行する。
- アップデート後に不要になったパッケージやカーネルを削除し、ハードディスクの容量を確保したい場合。
sudo apt autoremove #アップデートに伴い不要になったパッケージを削除。
6.アップデートの手順例
すでに、以下のケース2の手順については説明しましたが、アップデートの手順例としてケース1~4を紹介します。使用状況に合わせて選んで下さい。
#ケース1 ※新しい機能は不要。インストール済みのアプリへの影響を最小限にしたい。
sudo apt update
sudo apt upgrade
sudo apt autoremove #データ容量を減らしたい場合は必要に応じて実行
#ケース2 ※インストール済みのアプリへの影響を最小限にした上で、新しい機能も欲しい。
sudo apt update
sudo apt-get upgrade
sudo apt autoremove #データ容量を減らしたい場合は必要に応じて実行
#ケース3 ※インストール済みのアプリへの干渉のリスクはあるが、最新の機能を使いたい。
sudo apt update
sudo apt-get upgrade
sudo apt full-upgrade
#ケース4 ※インストール済みのアプリへの干渉のリスクはあるが、最新の機能を使いたい。
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt full-upgradeの実行をする前には、ケース3やケース4のように先にsudo apt-get upgradeやsudo apt upgradeを実行する方がよいとされています。
パッケージを段階的にアップデートすることにより、sudo apt full-upgrade実行時のパッケージの競合状態の判断が楽になり、必要なパッケージを削除してしまう可能性を減らすことができます。
ケース3はapt-getにおいて新しいパッケージをインストールしないので、競合状態の検証を減らすことができます。一方、ケース4ではapt-getを使わずaptだけでアップグレードできるので、aptが推奨される流れに合ったものと言えるでしょう。
以下参考サイトでは、ケース3が紹介されています。
参考:第4章 Debian 9 (stretch) からのアップグレード
7.アップグレード
ここまでは、ポイントリリースを適用するためのアップデートの説明をしました。この後はアップグレードの方法について説明します。アップグレードでは、do-release-upgradeを使います。
以下、アップグレードの例です。
- 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からの接続が難しくなります。SSHではなくConoHaにログインし、ConoHaのコンソールから実行するのが安全です。
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 #段階的にアップデートし、apt full-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の実行は継続しています。
つまり、ConoHa VPSのコントロールパネルはコンソールを閉じてもアップグレード作業を継続してくれるので安心です。
(2) それでもSSH接続でアップグレードする場合
一定時間通信のないSSHはコネクションを切断するような設定になっていたりする場合もあります。アップグレードの間、PCを長時間放置するような場合は特に注意が必要です。
やむをえず推奨されないSSHでアップグレードを行う必要がある場合には、1022番ポートのファイヤーウォールを解除し、緊急時には1022番ポートから接続するといった対応が必要です。必ず対応を事前に調査し、対策を講じて下さい。
なお、この記事では対応の説明は省略します。
(3) バックアップは重要
いずれにせよ、アップグレード前のバックアップは重要です。新しいバージョンのOSとの相性問題でアプリが動かなくなる可能性もあります。ConoH VPSのイメージ保存を使用するなど、バックアップできる体制を整えておきましょう。
私が実際にレンタルしたVPSサーバー
私が実際にレンタルしたVPSサーバーはConoHa VPSです。私は1GBのプランを申し込みました。VPSサーバーは一般のレンタルサーバーと異なりOSやアプリケーションを自由に設定できるので、Pythonで計算した結果をサイトに表示することもできます。
なお、ConoHa VPSの特長として、サーバーのディスクイメージを丸ごとバックアップできるイメージ保存機能を無料で使用することができます。コードを変更して元に戻せなくなった場合にも安心です。
また、ConoHa VPSは途中でプランをスケールアップできるだけでなく、スケールダウンすることもできます。つまり、2Gプランを1Gプランに変更することができます。ただし、512MBプランだけはスケールアップ・ダウン機能が使用できないので注意してください。
また、初期費用なしで3日だけ借り、3日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)
私からの友達紹介でクーポンをゲット
なお、以下のリンクから入ると、私からの友達紹介の扱いとなり1000円分のクーポンが支給されます。リンク先には「友達紹介」といった表記がないので「友達紹介」が適用されているのか不安になりますが大丈夫です。登録終了後にログインしたユーザーTop画面を確認すると支給されたクーポン1000円が表示されるはずです。
なお、友達紹介では個人情報が紹介者には開示されないので安心してご利用ください。
その他
液晶ペンタブレットを購入しました
(1) モバイルディスプレイを買うつもりだったのに激安ペンタブレット購入
以下、私が光回線を導入した時の記事一覧です。
(1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
(2) NURO光の開通までWiFiルーターを格安レンタルできる
(3) NURO光の屋外工事の状況をご紹介。その日に開通!
(4) 光回線開通!実測するとNURO光はやっぱり速かった
(5) ネット上のNURO光紹介特典は個人情報がもれないの?