Ubuntu を最新版にアップグレードする方法について

今現在、使っている Ubuntu を最新のバージョンへアップグレードする一番簡単な方法は、 do-release-upgrade コマンドを実行することです。

ただ、場合によっては、do-release-upgrade コマンドを実行するだけではアップグレードが上手く行かないこともあります。

たとえば、今現在使っているバージョンを A とします。

そして、A の次期リリース版 (直近の一番最新バージョン) を B とします。

この状態で A から B へのアップグレードは、普通に do-release-upgrade コマンドを実行するだけで良いです。

しかし、A を使っている状態で、さらに B の次期バージョンである C がリリースされた状況だと、do-release-upgrade コマンドを実行するだけでは、A から C へのアップグレードが上手く行かなかったりします。

今回は、Ubuntu を最新バージョンにアップグレードするための様々な方法についてご紹介します。

やり方は色々あるので、一通り目を通して頂いて、自分の環境に一番使えそうなものを選んで適用してください。

  • 参考 : apt-get upgrade と apt-get dist-upgrade の違い
  • 通常のアップグレード : A → B へ
  • 次へ進む前に軽く一読 : アップグレード可能と言ってるのに、アップグレードしようとするとアップグレード出来ないと怒られる
  • 歯抜け状態でのアップグレード その1. sources.list を書き換えて、A → B → C へ
  • 歯抜け状態でのアップグレード その2. sources.list を書き換えて、A → (飛んで) → C へ
  • 歯抜け状態でのアップグレード その3. 裏技+正式なやり方で、A → B → C へ

参考 : apt-get upgrade と apt-get dist-upgrade の違い

当記事では、do-release-upgrade コマンドで、Ubuntu をアップグレードする前に、カーネルとパッケージを最新状態にするために、apt-get upgrade の代わりに、apt-get dist-upgrade を実行しています。

この apt-get のアップグレード関連コマンドには、(機能として似ている) 以下の 2種類があります。

○ : 更新する

× : 更新しない

コマンドパッケージ更新
追加パッケージインストール、
及び不要パッケージ削除
カーネル更新
apt-get upgrade××
apt-get dist-upgrade

前者は、現在のシステムにインストールされているパッケージのみ更新。

後者は、現在のシステムにインストールされているパッケージ更新に加え、追加パッケージのインストールが必要になったらインストールし、逆に要らなくなったパッケージに関しては削除もしてくれて、さらに、カーネルも最新状態にしてくれる。 とにかく最新状態にしてくれます。

ちなみに、apt-get コマンドの様々な使い方については、以下のサイトが良くまとめてくれています。

または、--help オプションを指定すれば、apt-get で最も使われるコマンド一覧が表示されるので、ご確認ください。

apt-get で最も使用されているコマンド
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# apt-get --help
apt 1.5.1 (amd64)
使用法: apt-get [オプション] コマンド
        apt-get [オプション] install|remove パッケージ名1 [パッケージ名2 ...]
        apt-get [オプション] source パッケージ名1 [パッケージ名2 ...]
 
apt-get は、認証されたソースからのパッケージと情報の検索、
および依存関係を伴うパッケージのインストール、アップグレード、
削除のためのコマンドラインインターフェースです。
 
最も使用されているコマンド:
  update - 新しいパッケージリストを取得する
  upgrade - アップグレードを行う
  install - 新規パッケージをインストールする (pkg は libc6.deb ではなく libc6 のように指定する)
  remove - パッケージを削除する
  purge - 設定ファイルまで含めてパッケージを削除する
  autoremove - 自動インストールされ使われていないすべてのパッケージを削除する
  dist-upgrade - ディストリビューションをアップグレードする (apt-get(8) を参照)
  dselect-upgrade - dselect の選択に従う
  build-dep - ソースパッケージの構築依存関係を設定する
  clean - ダウンロードしたアーカイブファイルを削除する
  autoclean - ダウンロードした古いアーカイブファイルを削除する
  check - 壊れた依存関係がないかチェックする
  source - ソースアーカイブをダウンロードする
  download - バイナリパッケージをカレントディレクトリにダウンロードする
  changelog - 指定のパッケージの変更履歴をダウンロードして表示する

環境に合わせて、使ってみてください。

通常のアップグレード : A → B へ

では、本題に戻ります。

Ubuntu を最新バージョンにアップグレードする一番簡単で定番のやり方です。

定番なだけに、アップグレードする際に必要な知識・知っておくべき内容については、なるべく記載するようにします。

Ubuntu 14.10 は今の時点でもう古いバージョンなんですが、バージョンが変わってもやり方は同じなので、この例では、説明のために以下を前提としています。

  • 現在のバージョンは、Ubuntu 14.10
  • 最近、14.10 の次期バージョンである 15.04 がリリースされた
項目バージョンコード名状態備考
A14.10utopicアップグレード前今現在使っているバージョン
B15.04vividアップグレード後A の直上 (リリースされたばっかり)

Step 1. SSH ログイン

まずは、OS へ SSH ログインします。

Ubuntu の新しいバージョンがリリースされると以下のように 新しいバージョンが使えるようになったので、 'do-release-upgrade' コマンドでアップグレードしてねー というメッセージがログインする度に表示されるようになります。

ログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Welcome to Ubuntu 14.10 (GNU/Linux 3.16.0-44-generic x86_64)
 
 * Documentation:  https://help.ubuntu.com/
 
  System information as of Wed Sep 21 15:54:07 JST 2016
 
  System load:  0.07              Processes:           97
  Usage of /:   5.0% of 38.02GB   Users logged in:     0
  Memory usage: 7%                IP address for eth0: 10.10.10.10
  Swap usage:   0%
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
0 packages can be updated.
0 updates are security updates.
 
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '15.04' available.
Run 'do-release-upgrade' to upgrade to it.
 
Last login: Wed Sep 21 15:50:33 2016 from 10.10.10.10
$

Step 2. 現在のバージョン確認

アップグレードする前に、現在のバージョン情報を確認しておきます。

現在のバージョン確認
1
2
3
4
5
6
7
8
9
# uname -a
Linux my-server.example.com 3.16.0-44-generic #59-Ubuntu SMP Tue Jul 7 02:07:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.10
Release:        14.10
Codename:       utopic

Step 3. アップグレード前の事前準備

一応、アップグレードする前に、現在のパッケージリストを最新化した上で、カーネルを含めて、パッケージのアップグレードを実施します。

  • apt-get update でパッケージリスト更新・最新化
  • apt-get dist-upgrade でカーネルアップグレード、及びパッケージ最新化
  • update-manager-core インストール、及び設定確認

update-manager-core とは

ちなみに、update-manager-core は、システムを最新に保つために必要な Ubuntu 更新マネージャ という補助アプリケーションです。

do-release-upgrade コマンドを実行するためには、update-manager-core が必要です。

恐らく既にインストールされているとは思いますが、念のため、アップグレードを実施する前に、一回実行しておきます。

カーネル・パッケージ最新化、更新マネージャインストール
1
2
3
# apt-get update    #### 失敗時には、付録の「apt-get が 404 Not Found エラーで失敗する」を参照
# apt-get dist-upgrade
# apt-get install update-manager-core

次に、release-upgrades の中身を確認します。

/etc/update-manager/release-upgrades
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
# cat /etc/update-manager/release-upgrades
-------------------- ここから --------------------
# Default behavior for the release upgrader.
 
[DEFAULT]
# Default prompting behavior, valid options:
#
#  never  - Never check for a new release.
#  normal - Check to see if a new release is available.  If more than one new
#           release is found, the release upgrader will attempt to upgrade to
#           the release that immediately succeeds the currently-running
#           release.
#  lts    - Check to see if a new LTS release is available.  The upgrader
#           will attempt to upgrade to the first LTS release available after
#           the currently-running one.  Note that this option should not be
#           used if the currently-running release is not itself an LTS
#           release, since in that case the upgrader won't be able to
#           determine if a newer release is available.
Prompt=normal
-------------------- ここまで --------------------

never と normal と lts について

release-upgradesPrompt パラメータに設定できる値は、以下の通りです。

  • never : 新しいリリースをチェックしない
  • normal : 新しいリリースをチェックする (LTS を含む全てのリリースをチェック)
  • lts : 新しいリリースをチェックする (LTS のみチェック)

普通は、normal で良いです。

もし、LTS (サポート期間が長いリリース) だけ使うつもりで、通常のリリース更新をチェックしたくない場合には、lts を設定すれば良いですが、ただ、lts を設定するためには、現在使っているバージョンが LTS である必要があります

ちなみに、Prompt=normal 状態で、LTS へアップグレードすると自動的に Prompt=lts が設定されます。

また、先ほど説明したように、Prompt=lts になっていると LTS の新しいリリールのみ通知されるようになるため、通常のリリース (normal) に関しては、新しいリリースが出たとしても通知を受けられなくなりますので、ご参考までに。

normal と lts の違いについて

Ubuntu のリリースには、大きく分けて、以下の 2種類が存在します。

  • 通常版 (Normal)
  • 長期サポート版 (LTS : Long Term Support)、通称 LTS 版

大きな違いは、そのサポート期間にあります。

  • 通常版 は、サポート期間が リリースから 9ヶ月
  • LTS 版 は、サポート期間が リリースから 5年

通常版 は、サポート期間が割りと短いため、サポートが切れる前に次期リリースへアップグレードを検討する必要があるため、常に最新バージョンを望むユーザ・新しい機能を使いたいユーザに向いています。

その反面、LTS 版 は、2年毎にリリースされ、サポート期間も 5年と長いため、安定的なサービス提供を望むユーザに向いています。

Wikipedia : Ubuntu - リリース

Step 4. アップグレードチェック

do-release-upgrade を実行することで、最新バージョンにアップグレード出来ますが、-c オプションを使うと do-release-upgrade コマンドでアップグレード可能かどうか確認できるので、軽くチェックしておきます。

アップグレードチェック
1
2
3
4
5
6
7
8
# do-release-upgrade -c
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '15.04' available.
Run 'do-release-upgrade' to upgrade to it.

Step 5. アップグレード

後は、do-release-upgrade を実行し、最新バージョンへのアップグレードを実施します。

ちなみに、アップグレード処理の間に説明を入れるために、対話形式の部分を複数に分けているので、どうぞご理解ください。

アップグレード
01
02
03
04
05
06
07
08
09
10
11
# do-release-upgrade
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
100% [処理中]   1,214 kB を 0秒 で取得しました (0 B/s)
authenticate 'vivid.tar.gz' against 'vivid.tar.gz.gpg'
extracting 'vivid.tar.gz'
 
・・・
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
SSH経由で実行していますが、続けますか?
 
このセッションはSSH上で実行されているようです。アップグレードをSSH越しに行うことは推奨されません。アップグレードに失敗した時の復元が困難になるからです。
 
続行する場合、追加のSSHデーモンをポート '1022' で起動します。
本当に作業を進めてよろしいですか?
 
続行する[yN] y    ####「y」を押し、sshd:1022 を起動
 
予備のsshdを開始します
 
障害が起こったときに復旧しやすくするため、ポート '1022' でもう一つの sshd
を開始します。現在実行中のsshにおかしなことが起きても、もう一方のポートに接続することができます。
 
・・・

障害時の SSH 予備ポートについて

Ubuntu では、SSH ターミナル上でのアップグレード時の障害に備えて、別のポートでもう一つの sshd デーモンが起動されます。

そのため、もしアップグレード途中に今現在開いているターミナル上で障害が発生したり、操作ミスによってターミナルが消えてしまった場合には、予備ポートへ再接続することによって、アップグレードを引き続き再開することが出来ます。

この例では、予備ポートとして 1022 が開始されるため、障害時の SSH 接続先は、以下のようになります。

  • 10.10.10.10:1022
01
02
03
04
05
06
07
08
09
10
11
ファイアウォールを実行している場合、このポートを一時的に開く必要があります。この操作は、潜在的な危険があるため自動的には行われません。以下の例のようにしてポートを開けます:
'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT'
 
続けるには [ENTER] キーを押してください    #### 1022 を開けてから「Enter」を押す
 
・・・
 
100% [処理中]
653 kB/s 0 B を 6秒 で取得しました (653 kB/s)
 
・・・

SSH 予備ポートのファイアウォール開放

特に、iptalbes を動かしている場合には、予備ポートを開けないと SSH 接続できないため、事前に予備ポートの通信を許可するように設定しておく必要があります。

そのため、iptables を動かしている場合には、別のターミナルを開いて、以下のコマンドを実行し、予備ポート 1022 を開けてください。

ちなみに、開けるポート番号が、必ずしも 1022 とは限らないので、メッセージに従って、ポート番号を指定してください。

# iptables -I INPUT -p tcp --dport 1022 -j ACCEPT

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
リポジトリ情報のアップデート
 
サードパーティが提供するリポジトリを使わない設定にしました
 
sources.list にあるサードパーティが提供するリポジトリを使わない設定にしました。アップグレード完了後、'ソフトウェアソース'
ツールもしくはパッケージマネージャーを使って再び利用可能な設定にすることができます。
 
続けるには [ENTER] キーを押してください    ####「Enter」を押し、リポジトリ情報を更新
 
・・・
 
100% [処理中]
5,250 kB/s 33.7 MB を 6秒 で取得しました (5,250 kB/s)
 
・・・
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
変更点を確認中
 
アップグレードを開始しますか?
 
24 個の新規パッケージがインストールされます。 331 個のパッケージがアップグレードされます。
 
合計 193 M をダウンロードする必要があります。 このダウンロードは約 36 秒 かかります。
 
アップグレードをインストールするのに数時間かかることがあります。ダウンロードが完了してしまうと、処理はキャンセルできません。
 
 続行する[yN]  詳細 [d] y    ####「y」を押し、アップグレード開始
 
・・・
 
アップグレード中です
 
・・・

場合によっては、このタイミングで libc6 の更新に伴うサービス再起動を知らせる TUI (テキストユーザインタフェース) が表示されることがありますが、SSH ターミナルサイズを変更したり、マウスをスクロールしてしまうと 画面がグチャグチャになる (画像拡大) ので注意 が必要です。

Yes を押すと libc6 関連サービスの再起動が開始されます。

Configuring libc6 - Yes

ちなみに、以下のように、No を押して、特定サービスを指定して再起動することも出来ます。

Configuring libc6 - No (1/2)No を押した場合 (1/2)
Configuring libc6 - No (2/2)No を押した場合 (2/2)

libc6 の更新が完了するまで待ちます。 (少し時間かかるかもしれません)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
・・・
 
Stopping some services possibly affected by the upgrade (will be restarted later):
 
libc6:amd64 (2.21-0ubuntu4)(2.19-10ubuntu2.3 に) 上書き展開しています ...
man-db (2.7.0.2-2) のトリガを処理しています ...
systemd (219-7ubuntu6) のトリガを処理しています ...
libc6:amd64 (2.21-0ubuntu4) を設定しています ...
Generating locales...
  en_US.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.
Checking for services that may need to be restarted...
Checking init scripts...
Restarting services possibly affected by the upgrade:
  atd: restarting...done.
  rsync: restarting...done.
 
Services restarted successfully.
 
・・・
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
古いソフトウェアを検索しています
 
・・・
 
サポートが中止された(あるいはリポジトリに存在しない)パッケージを削除しますか?
 
13 個のパッケージが削除されます。
 
 続行する[yN]  詳細 [d] d    ####「d」を押して、削除する前に詳細を確認
 
削除: libgcrypt11 libsystemd-daemon0 libsystemd-journal0
  libsystemd-login0
 
(自動インストールされた) linux-headers-3.16.0-23 linux-headers-3.16.0-23-generic
  linux-headers-3.16.0-44 linux-headers-3.16.0-44-generic
  linux-image-3.16.0-23-generic linux-image-extra-3.16.0-23-generic
  python-ndg-httpsclient python-requests python-urllib3 を削除
 
(END) q    ####「q」を押して、前に戻る
 
 続行する[yN]  詳細 [d] y    ####「y」を押す (古いパッケージを削除する)
 
・・・

不要になったパッケージの削除について

上記のように、サポートが中止されたパッケージが検出された場合には、そのパッケージを削除するか・しないかについて入力を求められます。

削除する際には、一応、どんなパッケージが削除対象なのか確認しておくと良いでしょう。

1
2
3
4
5
6
7
8
システムのアップグレードが完了しました。
 
再起動が必要です
 
アップグレードを完了するには再起動が必要です。
'Y' を選択すると再起動します。
 
続行する[yN] y    ####「y」を押すと再起動が行われる

Step 6. アップグレード完了後の確認

再起動が完了したらサーバへ SSH ログインし、アップグレード後のバージョン情報を確認します。

カーネル・リリース共に最新バージョンへアップグレードされました。

アップグレード完了後のログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-69-generic x86_64)
 
 * Documentation:  https://help.ubuntu.com/
 
  System information as of Wed Sep 21 16:29:39 JST 2016
 
  System load:  0.9               Processes:           101
  Usage of /:   6.6% of 38.02GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 10.10.10.10
  Swap usage:   0%
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
Last login: Wed Sep 21 16:10:07 2016 from 10.10.10.10
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$
アップグレード「前」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.16.0-44-generic
> #59-Ubuntu SMP Tue Jul 7 02:07:39 UTC 2015
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.10
Release:        14.10
Codename:       utopic
アップグレード「後」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid

アップグレード後のリポジトリは、アップグレード後のバージョンに合わせて最新化されます。

/etc/apt/sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu vivid main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu vivid universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid universe
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu vivid multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid multiverse
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu vivid-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security universe
deb http://jp.archive.ubuntu.com/ubuntu vivid-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security multiverse

これで、A から B へのアップグレード が完了しました。

次へ進む前に軽く一読 : アップグレード可能と言ってるのに、アップグレードしようとするとアップグレード出来ないと怒られる

参考情報として、サーバへ SSH ログインすると、いつものように新しいバージョンが使えるようになってるので、do-release-upgrade でアップグレードしてください。というメッセージが表示されます。

しかし、いざ do-release-upgrade コマンドでアップグレードしようとするとアップグレード可能と言ってるにも関わらず、以下のように 新しいリリースが存在しない と怒られる場合があります。

ログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-69-generic x86_64)
 
 * Documentation:  https://help.ubuntu.com/
 
  System information as of Tue Oct  4 16:11:52 JST 2016
 
  System load:  0.17              Processes:           91
  Usage of /:   5.4% of 38.02GB   Users logged in:     0
  Memory usage: 5%                IP address for eth0: 10.10.10.10
  Swap usage:   0%
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
 
Last login: Tue Oct  4 16:10:41 2016 from 10.10.10.10
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$
アップグレード前の事前準備
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
# apt-get update    #### 失敗時には、付録の「apt-get が 404 Not Found エラーで失敗する」を参照
# apt-get dist-upgrade
# apt-get install update-manager-core
 
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal
 
# do-release-upgrade -c
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
アップグレード (失敗)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
# do-release-upgrade
・・・
キャッシュを読み込み中
 
パッケージマネージャーをチェック中です
 
アップグレードできません
 
An upgrade from 'vivid' to 'xenial' is not supported with this tool.
=== Command detached from window (Fri Sep 30 16:46:49 2016) ===
=== Command terminated with exit status 1 (Fri Sep 30 16:46:59 2016) ===
~
~
~
~
~
~
~
Press x to destroy or r to resurrect window    ####「x」で抜ける

アップグレードできませんと。

色々と原因を調べるうちに、実は、現在のバージョン 15.04 (vivid) と新しいリリース 16.04.1 LTS (xenial) の間に 15.10 (wily) が挟まれていて、まさに、歯抜け状態になっていることが分かりました。

そもそも、このツールでは 「vivid」 から 「xenial」 へアップグレードできないよー というメッセージの出し方があまり良くない気がしていて、エラーメッセージだけ見ると do-release-upgrade コマンドを使っちゃだめなのかどうか判断が難しいわけで、「vivid」 と 「xenial」 の間にリリースが存在するため、新しいバージョンへジャンプできませんよ~ とかもっと分かりやすいメッセージを出してほしいですね。

ということで、ここからは、以下を想定し、アップグレードを実施する方法についてご紹介します。

  • A : 現在のバージョンは、Ubuntu 15.04
  • B : 現在のバージョン Ubuntu 15.04 の次のバージョンは、Ubuntu 15.10
  • C : 最近、Ubuntu 16.04.1 LTS がリリースされた
  • A → C へアップグレードしたい
項目バージョンコード名状態備考
A15.04vividアップグレード前今現在使っているバージョン
B15.10wily歯抜け状態A の直上
C16.04.1 LTSxenialアップグレード後B の直上

ただ、先ほど説明したように、このような歯抜け状態で do-release-upgrade を実行することはできません。

オススメはしませんが、do-release-upgrade -d のように、-d オプションを付けると A から B へアップグレードできます。

そして、 B になったところで、もう一回、今度は -d 抜きで do-release-upgrade を実行すると B から C へアップグレードできます。

結果的には、以下のステップを実行する必要があります。

  1. A : 15.04
    → do-release-upgrade -d
    → 再起動
  2. B : 15.10
    → do-release-upgrade
    → 再起動
  3. C : 16.04.1 LTS

do-release-upgrade -d について

-d というのが出てきましたが、これは、開発バージョンでも何でもいいから、とりあえず アップグレードしてしまえ というオプションで、場合によっては以下のようなことが起きるため、オススメしません。

  • 開発版へアップグレードされてしまう
  • A → B ではなく、A → C へ吹っ飛ばされてしまう (意図しないバージョン)

安定的にサービスを提供しないといけないところ、開発バージョンでサービス提供なんて有り得ない話なので、特に利用目的がない限り、-d オプションは、使わないほうが良いです。

歯抜け状態でのアップグレード その1. sources.list を書き換えて、A → B → C へ

項目バージョンコード名状態備考
A15.04vividアップグレード前今現在使っているバージョン
B15.10wily歯抜け状態A の直上
C16.04.1 LTSxenialアップグレード後B の直上

代案として、裏技と言うか小細工的な手法ですが、 sources.list を現在の A から B 用に書き換えてから dist-upgrade でカーネルとパッケージをアップグレードした上で、 do-release-upgrade を実行すると C へアップグレードできます。

  1. A : 15.04
    → sources.list を「B」の「15.10」用に書き換える
    → dist-upgrade
    ・ この時点で、リリースが「B」に変わる
    → do-release-upgrade
    → 再起動
  2. C : 16.04.1 LTS

Step 1. sources.list を B に合わせて書き換える

dist-upgrade を実行する前に、現在使っている Asources.list の中身を B に書き換えます。 (vivid を wily に置換)

変更前 : 15.04 (A) の sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu vivid main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu vivid universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid universe
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu vivid multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid multiverse
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu vivid-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security universe
deb http://jp.archive.ubuntu.com/ubuntu vivid-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security multiverse
変更後 : 15.10 (B) の sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu wily main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu wily main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu wily-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu wily-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu wily universe
deb-src http://jp.archive.ubuntu.com/ubuntu wily universe
deb http://jp.archive.ubuntu.com/ubuntu wily-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu wily-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu wily multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily multiverse
deb http://jp.archive.ubuntu.com/ubuntu wily-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu wily-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu wily-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu wily-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu wily-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu wily-security universe
deb http://jp.archive.ubuntu.com/ubuntu wily-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily-security multiverse

また、次のステップに進む前に、必要に応じて、連載リストの付録にある apt-get が 404 Not Found エラーで失敗する を参考にし、sources.list の URL 置換を実施してください。

Step 2. 現在のバージョン確認

アップグレードする前に、現在のバージョン情報を確認しておきます。

現在のバージョン確認
1
2
3
4
5
6
7
8
9
# uname -a
Linux my-server.example.com 3.19.0-69-generic #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid

Step 3. パッケージリスト更新、及びカーネル・パッケージ最新化

書き換えた sources.list で現在のパッケージリストを最新化した上で、カーネルを含めて、パッケージのアップグレードを実施します。

  • apt-get update でパッケージリスト更新・最新化
  • apt-get dist-upgrade でカーネルアップグレード、及びパッケージ最新化
パッケージリスト更新、及びカーネル・パッケージ最新化
1
2
# apt-get update    #### 失敗時には、付録の「apt-get が 404 Not Found エラーで失敗する」を参照
# apt-get dist-upgrade

Step 4. apt-get dist-upgrade 実行後の確認

dist-upgrade 実行前・後のバージョン情報を確認します。

カーネルはそのままで、リリースバージョンが、A から B に変わりました。

dist-upgrade 実行前 :「A」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid
dist-upgrade 実行後 :「B」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:        15.10
Codename:       wily

一応、release-upgrades の中身も確認します。

/etc/update-manager/release-upgrades
1
2
3
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal

Step 5. アップグレードチェック

念のため、update-manager-core をインストールした上で、do-release-upgrade -c コマンドを実行し、アップグレード可能かどうかを確認します。

更新マネージャインストール、及びアップグレードチェック
01
02
03
04
05
06
07
08
09
10
# apt-get install update-manager-core
 
# do-release-upgrade -c
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Step 6. アップグレード

後は、do-release-upgrade を実行し、最新バージョンへのアップグレードを実施します。

アップグレード
01
02
03
04
05
06
07
08
09
10
# do-release-upgrade
・・・
システムのアップグレードが完了しました。
 
再起動が必要です
 
アップグレードを完了するには再起動が必要です。
'Y' を選択すると再起動します。
 
続行する[yN] y    ####「y」を押すと再起動が行われる

Step 7. アップグレード完了後の確認

再起動が完了したらサーバへ SSH ログインし、アップグレード後のバージョン情報を確認します。

カーネル・リリース共に最新バージョンへアップグレードされました。

アップグレード完了後のログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)
 
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
 
  System information as of Wed Oct  5 14:13:00 JST 2016
 
  System load:  0.32              Processes:           124
  Usage of /:   8.0% of 38.02GB   Users logged in:     0
  Memory usage: 5%                IP address for eth0: 10.10.10.10
  Swap usage:   0%
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
Last login: Wed Oct  5 13:42:27 2016 from 10.10.10.10
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$
アップグレード「前」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:        15.10
Codename:       wily
アップグレード「後」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 4.4.0-38-generic
> #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:        16.04
Codename:       xenial

アップグレード後の sources.list は、基本的には アップグレード後のバージョンに合わせて最新化されますが、アップグレード前に sources.list の URL 置換を実施した場合には、アーカイブの URL が old-releases.ubuntu.com のままになっている場合もあります。

/etc/apt/sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu xenial main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse

これで、A から C へのアップグレード が完了しました。

一応、アップグレードは出来たものの、正式なやり方ではないので、これを良しとするかしないかは皆さん次第。

Ubuntu をアップグレードする方法の一つとして、こういうやり方もあることだけは覚えておくと良いでしょう。

歯抜け状態でのアップグレード その2. sources.list を書き換えて、A → (飛んで) → C へ

項目バージョンコード名状態備考
A15.04vividアップグレード前今現在使っているバージョン
B15.10wily歯抜け状態A の直上
C16.04.1 LTSxenialアップグレード後B の直上

じゃ、最初から sources.listC に合わせて置いて、dist-upgrade でパッケージとカーネルを上げてしまうのはどうだ?

これも可能です。

やり方としては、歯抜け状態でのアップグレード その1. sources.list を書き換えて、A → B → C へ とほぼ一緒です。

先ほど説明したように、sources.list を現在のバージョン A から現時点で一番最新の C に書き換えてから、dist-upgrade でパッケージ・カーネルを一気にアップグレードした上で、再起動を実施すると新しいカーネルで立ち上がります。

  1. A : 15.04
    → sources.list を「B」ではなく、「C」の「16.04.1 LTS」用に書き換える
    → dist-upgrade
    → 再起動
  2. C : 16.04.1 LTS

Step 1. sources.list を C に合わせて書き換える

dist-upgrade を実行する前に、現在使っている Asources.list の中身をいきなり C に書き換えます。 (vivid を xenial に置換)

変更前 : 15.04 (A) の sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu vivid main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu vivid universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid universe
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu vivid multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid multiverse
deb http://jp.archive.ubuntu.com/ubuntu vivid-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu vivid-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu vivid-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security universe
deb http://jp.archive.ubuntu.com/ubuntu vivid-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu vivid-security multiverse
変更後 : 16.04.1 LTS (C) の sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu xenial main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse

また、次のステップに進む前に、必要に応じて、連載リストの付録にある apt-get が 404 Not Found エラーで失敗する を参考にし、sources.list の URL 置換を実施してください。

Step 2. 現在のバージョン確認

アップグレードする前に、現在のバージョン情報を確認しておきます。

現在のバージョン確認
1
2
3
4
5
6
7
8
9
# uname -a
Linux my-server.example.com 3.19.0-69-generic #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid

一応、release-upgrades の中身も確認します。

/etc/update-manager/release-upgrades
1
2
3
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal

Step 3. パッケージリスト更新、及びカーネル・パッケージ最新化

書き換えた sources.list で現在のパッケージリストを最新化した上で、カーネルを含めて、パッケージのアップグレードを実施します。

  • apt-get update でパッケージリスト更新・最新化
  • apt-get dist-upgrade でカーネルアップグレード、及びパッケージ最新化
パッケージリスト更新、及びカーネル・パッケージ最新化
1
2
# apt-get update    #### 失敗時には、付録の「apt-get が 404 Not Found エラーで失敗する」を参照
# apt-get dist-upgrade

Step 4. apt-get dist-upgrade 実行後の確認

dist-upgrade 実行前・後のバージョン情報を確認します。

カーネルはそのままで、リリースバージョンが、A から C に変わっています。

dist-upgrade 実行前 :「A」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid
dist-upgrade 実行後 :「C」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:        16.04
Codename:       xenial

一応、カーネルも新しいバージョンがインストールされていますが、反映するためには再起動が必要です。

カーネルインストール確認
01
02
03
04
05
06
07
08
09
10
11
12
13
14
# dpkg --list | fgrep 'linux-'
ii  linux-base                          4.0ubuntu1        all         Linux image base package
ii  linux-firmware                      1.157.3           all         Firmware for Linux kernel drivers
ii  linux-generic                       4.4.0.38.40       amd64       Complete Generic Linux kernel and headers
ii  linux-headers-3.19.0-69             3.19.0-69.77      all         Header files related to Linux kernel version 3.19.0
ii  linux-headers-3.19.0-69-generic     3.19.0-69.77      amd64       Linux kernel headers for version 3.19.0 on 64 bit x86 SMP
ii  linux-headers-4.4.0-38              4.4.0-38.57       all         Header files related to Linux kernel version 4.4.0
ii  linux-headers-4.4.0-38-generic      4.4.0-38.57       amd64       Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii  linux-headers-generic               4.4.0.38.40       amd64       Generic Linux kernel headers
ii  linux-image-3.19.0-69-generic       3.19.0-69.77      amd64       Linux kernel image for version 3.19.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-38-generic        4.4.0-38.57       amd64       Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-3.19.0-69-generic 3.19.0-69.77      amd64       Linux kernel extra modules for version 3.19.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-38-generic  4.4.0-38.57       amd64       Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-generic                 4.4.0.38.40       amd64       Generic Linux kernel image

release-upgrades の中身を確認してみると normal から現在のバージョンに合わせて lts になっていることが分かります。

/etc/update-manager/release-upgrades
1
2
3
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=lts

Step 5. アップグレードコマンドを実行してみる

この例では、現時点で C が一番最新バージョンなので、これ以上アップグレードはできないはずですが、試しに、do-release-upgrade を実行して見ます。

試しにアップグレード実行
1
2
3
# do-release-upgrade
Checking for a new Ubuntu release
No new release found

Step 6. 再起動

新しいカーネルで起動するために、再起動を実施します。

再起動
1
# shutdown -r now

Step 7. アップグレード完了後の確認

再起動が完了したらサーバへ SSH ログインし、アップグレード後のバージョン情報を確認します。

カーネル・リリース共に最新バージョンへアップグレードされました。

アップグレード完了後のログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)
 
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
 
  System information as of Thu Oct  6 10:20:51 JST 2016
 
  System load:  0.25              Processes:           127
  Usage of /:   7.2% of 38.02GB   Users logged in:     0
  Memory usage: 5%                IP address for eth0: 10.10.10.10
  Swap usage:   0%
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
Last login: Tue Oct  4 16:10:55 2016 from 10.10.10.10
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$
アップグレード「前」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid
アップグレード「後」
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 4.4.0-38-generic
> #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:        16.04
Codename:       xenial

アップグレード後の sources.list は、基本的には アップグレード後のバージョンに合わせて最新化されますが、アップグレード前に sources.list の URL 置換を実施した場合には、アーカイブの URL が old-releases.ubuntu.com のままになっている場合もあります。

/etc/apt/sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu xenial main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse

これで、A から (B 飛んで) C へのアップグレード が完了しました。

一応、アップグレードは出来たものの、正式なやり方ではないので、やるかやらないかは お任せします。

歯抜け状態でのアップグレード その3. 裏技+正式なやり方で、A → B → C へ (やるならこれがオススメ)

項目バージョンコード名状態備考
A15.04vividアップグレード前今現在使っているバージョン
B15.10wily歯抜け状態A の直上
C16.04.1 LTSxenialアップグレード後B の直上

上記のような歯抜け状態でも、裏技を使えば、do-release-upgrade コマンドだけで、最新バージョンへアップグレードすることが可能です。

正式なやり方で、旧バージョンから新バージョンへ一段ずつ確実にアップグレードして行くので、安心感があって気持ち的にもスッキリします。

歯抜け状態でのアップグレードならこのやり方がオススメです。

繰り返しになりますが、A の時点でログインしたら C へアップグレードできるよ~と言っているのに、いざアップグレードしようとすると 以下のように怒られる事象がありました。

アップグレード (失敗)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
# do-release-upgrade
・・・
キャッシュを読み込み中
 
パッケージマネージャーをチェック中です
 
アップグレードできません
 
An upgrade from 'vivid' to 'xenial' is not supported with this tool.
=== Command detached from window (Fri Sep 30 16:46:49 2016) ===
=== Command terminated with exit status 1 (Fri Sep 30 16:46:59 2016) ===
~
~
~
~
~
~
~
Press x to destroy or r to resurrect window    ####「x」で抜ける

メッセージだけ読むと このツールでは ○から ○へのアップグレードはサポートされない という風に言っているので、最初は、do-release-upgrade コマンド自体が悪いのかな?。。と勘違いしてしまったんですね。

色々と原因を調べたところ、AC の間に B が挟まれていて、メタリリース上、B のサポートが切れていたためA から B へアップグレードできる状態ではなかったのが本当の原因でした。

この例で言うと BSupported: 0 になっていて、サポートが切れていることが分かります。

do-release-upgrade を使って、現在のバージョン A から B へアップグレードするためには、以下のメタリリースにある BSupported: 0Supported: 1 に変更する必要があります。

そうすれば、普通に do-release-upgrade コマンドで、A から B へアップグレードできます。

C のサポートは有効状態なので、B までアップグレードできれば、B から C へのアップグレードは、do-release-upgrade で普通に出来るはずです。

http://changelogs.ubuntu.com/meta-release
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
・・・
■ A : 今現在、使っているバージョン
Dist: vivid
Name: Vivid Vervet
Version: 15.04
Date: Thu, 23 April 2015 15:04:00 UTC
Supported: 0
Description: This is the 15.04 release
Release-File: http://archive.ubuntu.com/ubuntu/dists/vivid/Release
ReleaseNotes: http://changelogs.ubuntu.com/EOLReleaseAnnouncement
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/vivid-updates/main/dist-upgrader-all/current/vivid.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/vivid-updates/main/dist-upgrader-all/current/vivid.tar.gz.gpg
 
■ B : サポートが切れているため、「A」から「B」へ「do-release-upgrade」出来ない
Dist: wily
Name: Wily Werewolf
Version: 15.10
Date: Thu, 22 October 2015 15:10:00 UTC
Supported: 0
Description: This is the 15.10 release
Release-File: http://archive.ubuntu.com/ubuntu/dists/wily/Release
ReleaseNotes: http://changelogs.ubuntu.com/EOLReleaseAnnouncement
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/wily-updates/main/dist-upgrader-all/current/wily.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/wily-updates/main/dist-upgrader-all/current/wily.tar.gz.gpg
 
■ C : 最終的には、ここまでバージョンアップしたい
Dist: xenial
Name: Xenial Xerus
Version: 16.04.1 LTS
Date: Thu, 21 April 2016 16:04:00 UTC
Supported: 1
Description: This is the 16.04.1 LTS release
Release-File: http://archive.ubuntu.com/ubuntu/dists/xenial/Release
ReleaseNotes: http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/dist-upgrader-all/current/ReleaseAnnouncement
ReleaseNotesHtml: http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/dist-upgrader-all/current/ReleaseAnnouncement.html
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/dist-upgrader-all/current/xenial.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/dist-upgrader-all/current/xenial.tar.gz.gpg
・・・

だけど、changelogs.ubuntu.com のサーバって私たちが勝手にに触れるサーバでもないわけで、そこで必要なのが、1台のウェブサーバです。

  1. * 作業用ウェブサーバに meta-release をダウンロード
    → meta-release を修正し、サポート切れ状態の「B」のサポートを有効化
  2. A : 15.04
    → メタリリース参照先 URI を作業用ウェブサーバの meta-release に設定
    → do-release-upgrade
    → 再起動
  3. B : 15.10
    → do-release-upgrade
    → 再起動
  4. C : 16.04.1 LTS
    → メタリリース参照先 URI を元に戻す

Step 1. 事前準備 : 作業用ウェブサーバに meta-release ダウンロード、及び 期限切れのサポート有効化

Apache でも Nginx でもなんでもいいので、作業用のウェブサーバのドキュメントルート、またはウェブブラウザからアクセス可能な場所に changelogs.ubuntu.com からダウンロードした meta-release ファイルを配置します。

ちなみに、アップグレードしようとしている Ubuntu サーバがウェブサーバであれば、別途用意する必要はありません。

この例では、以下を前提とします。

  • 作業用ウェブサーバの FQDN は、www.example.com
  • ウェブサーバ : Nginx
  • ドキュメントルート : /usr/share/nginx/html

ダウンロードした meta-release を開いて、サポート期限切れの B のサポートを強制的に有効にします。

[例1] meta-release ダウンロード、及び修正
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
# cd /usr/share/nginx/html/
 
# wget http://changelogs.ubuntu.com/meta-release
 
# vi ./meta-release
・・・
Dist: wily
Name: Wily Werewolf
Version: 15.10
Date: Thu, 22 October 2015 15:10:00 UTC
Supported: 1    #### 0 → 1 に変更
Description: This is the 15.10 release
Release-File: http://archive.ubuntu.com/ubuntu/dists/wily/Release
ReleaseNotes: http://changelogs.ubuntu.com/EOLReleaseAnnouncement
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/wily-updates/main/dist-upgrader-all/current/wily.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/wily-updates/main/dist-upgrader-all/current/wily.tar.gz.gpg
・・・
[例2] meta-release ダウンロード、及び修正
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
# cd /usr/share/nginx/html/
 
# wget http://changelogs.ubuntu.com/meta-release
 
# vi ./meta-release
・・・
Dist: wily
Name: Wily Werewolf
Version: 15.10
Date: Thu, 22 October 2015 15:10:00 UTC
Supported: 1    #### 0 → 1 に変更
Description: This is the 15.10 release
Release-File: http://old-releases.ubuntu.com/ubuntu/dists/wily/Release
ReleaseNotes: http://changelogs.ubuntu.com/EOLReleaseAnnouncement
UpgradeTool: http://old-releases.ubuntu.com/ubuntu/dists/wily-updates/main/dist-upgrader-all/current/wily.tar.gz
UpgradeToolSignature: http://old-releases.ubuntu.com/ubuntu/dists/wily-updates/main/dist-upgrader-all/current/wily.tar.gz.gpg
・・・

meta-release の追加修正箇所について

アーカイブ URL の正常性を確認してください。

meta-release の中身を確認して見ると 各リリースのアーカイブサイトの URL が以下のように分かれてるように見えます。

  • http://old-releases.ubuntu.com/hoge-hoge
  • http://archive.ubuntu.com/hoge-hoge

ただ、リリースが古い場合だと一見問題ないように見えても、実際には、old-releases.ubuntu.com に移動されている場合もあります。

実際に、ブラウザで [例1] の URL へ接続をしてみると Not Found で何も表示されなかったりします。

この場合には、archive.ubuntu.com → old-releases.ubuntu.com に変えて接続してみると問題なく表示されるので、以下の URL は必ず接続テストを実施し、URL の変更が必要な場合には、[例2] のように、アーカイブサイトの URL をold-releases.ubuntu.com に変更してください。

  • Release-File
  • UpgradeTool
  • UpgradeToolSignature

Step 2. 作業用ウェブサーバから meta-release ダウンロード確認

ここからは、アップグレードしようとしている Ubuntu サーバ側での作業です。

まずは、作業用ウェブサーバに配置した meta-release が問題なくダウンロードできることを確認します。

ここでは、wget を使っていますが、# curl http://www.example.com/meta-release を実行しても良いし、ブラウザから接続するやり方でも構いません。 (ウェブサーバ側で wgetcurl をブロックしている場合には、ブラウザから接続)

meta-release ダウンロードテスト
1
2
3
4
5
6
7
8
# cd /tmp
 
# wget http://www.example.com/meta-release
 
# ls -l meta-release
-rw-r--r-- 1 root root 12115  9月 28 08:01 2016 meta-release
 
# rm ./meta-release

Step 3. Update Manager の METARELEASE 参照先変更

次に、do-release-upgrade 時のメタリリース参照先 URI を 公式 URI から 作業用ウェブサーバの URI に変更します。

URI は、Normal 用と LTS 用がありますが、今現在使ってるバージョンに合わせて、そこだけ変更すれば良いです。

/etc/update-manager/release-upgrades
1
2
3
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal
/etc/update-manager/meta-release
1
2
3
4
5
6
[METARELEASE]
#URI = http://changelogs.ubuntu.com/meta-release
URI = http://www.example.com/meta-release
URI_LTS = http://changelogs.ubuntu.com/meta-release-lts
URI_UNSTABLE_POSTFIX = -development
URI_PROPOSED_POSTFIX = -proposed

meta-release 変更前・後の do-release-upgrade -c の結果がこちら。

システムがちゃんと B を認識してくれるようになりました。

meta-release 変更前 : B のサポートが 0
1
2
3
4
5
6
7
8
# do-release-upgrade -c
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
meta-release 変更後 : B のサポートが 1
1
2
3
4
5
6
7
8
# do-release-upgrade -c
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '15.10' available.
Run 'do-release-upgrade' to upgrade to it.

Step 4. do-release-upgrade で A → B へアップグレード

これで、A → B → C へアップグレードする準備ができたので、後は、坦々と do-release-upgrade を実行するだけです。

項目バージョンコード名状態備考
A15.04vividアップグレード前今現在使っているバージョン
B15.10wilyアップグレード後A の直上、無理やりサポート有効化
C16.04.1 LTSxenialB の直上 (最終目的地)

まずは、A → B へのアップグレードを実施します。

A → B へアップ後レード
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# uname -a
Linux my-server.example.com 3.19.0-69-generic #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid
 
# apt-get update    #### 失敗時には、付録の「apt-get が 404 Not Found エラーで失敗する」を参照
# apt-get dist-upgrade
 
# apt-get install update-manager-core
 
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal
 
# do-release-upgrade -c
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife
 
New release '15.10' available.
Run 'do-release-upgrade' to upgrade to it.
 
# do-release-upgrade
・・・
 
アップグレード完了後、再起動

再起動が完了したらサーバへ SSH ログインし、アップグレード後のバージョン情報を確認します。

カーネル・リリース共に B へアップグレードされ、sources.listB に更新されました。

アップグレード完了後のログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-42-generic x86_64)
 
 * Documentation:  https://help.ubuntu.com/
 
  System information as of Wed Oct  5 16:44:18 JST 2016
 
  System load:  0.08              Processes:           88
  Usage of /:   7.5% of 38.02GB   Users logged in:     0
  Memory usage: 5%                IP address for eth0: 10.10.10.10
  Swap usage:   0%
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
Last login: Tue Oct  4 16:12:45 2016 from 10.10.10.10
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$
アップグレード「前」: A
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 3.19.0-69-generic
> #77-Ubuntu SMP Mon Aug 29 19:53:54 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:        15.04
Codename:       vivid
アップグレード「後」: B
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 4.2.0-42-generic
> #49-Ubuntu SMP Tue Jun 28 21:26:26 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:        15.10
Codename:       wily
/etc/apt/sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu wily main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu wily main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu wily-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu wily-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu wily universe
deb-src http://jp.archive.ubuntu.com/ubuntu wily universe
deb http://jp.archive.ubuntu.com/ubuntu wily-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu wily-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu wily multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily multiverse
deb http://jp.archive.ubuntu.com/ubuntu wily-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu wily-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu wily-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu wily-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu wily-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu wily-security universe
deb http://jp.archive.ubuntu.com/ubuntu wily-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu wily-security multiverse

ちなみに、アップグレード後の sources.list は、基本的には アップグレード後のバージョンに合わせて最新化されますが、アップグレード前に sources.list の URL 置換を実施した場合には、アーカイブの URL が old-releases.ubuntu.com のままになっている場合もあります。

Step 5. do-release-upgrade で B → C へアップグレード

最後に、もう一回 do-release-upgrade を実行し、B → C へのアップグレードを実施します。

項目バージョンコード名状態備考
A15.04vivid
B15.10wilyアップグレード前A の直上、今ここ
C16.04.1 LTSxenialアップグレード後B の直上

ちなみに、現時点で C のサポートは生きているため、A → B にアップグレードするために一時的に変更したメタリリースファイル /etc/update-manager/meta-release は、元の設定に戻しても構いませんが、とりあえずこのまま続行し、最後の最後に戻すようにします。

B → C へアップレード
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# uname -a
Linux my-server.example.com 4.2.0-42-generic #49-Ubuntu SMP Tue Jun 28 21:26:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:        15.10
Codename:       wily
 
# apt-get update    #### 失敗時には、付録の「apt-get が 404 Not Found エラーで失敗する」を参照
# apt-get dist-upgrade
 
# apt-get install update-manager-core
 
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal
 
# do-release-upgrade -c
Checking for a new Ubuntu release
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
 
# do-release-upgrade
・・・
 
アップグレード完了後、再起動

再起動が完了したらサーバへ SSH ログインし、アップグレード後のバージョン情報を確認します。

カーネル・リリース共に C へアップグレードされ、sources.listC に更新されました。

また、release-upgrades の設定もアップグレード後のバージョンに合わせて更新されます。 (この例では Prompt=normal から Prompt=lts)

アップグレード完了後のログイン
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)
 
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
 
  System information as of Wed Oct  5 18:26:10 JST 2016
 
  System load:  0.15              Processes:           118
  Usage of /:   8.3% of 38.02GB   Users logged in:     0
  Memory usage: 5%                IP address for eth0: 10.10.10.10
  Swap usage:   0%
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
Last login: Wed Oct  5 16:44:24 2016 from 10.10.10.10
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$
アップグレード「前」: B
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 4.2.0-42-generic
> #49-Ubuntu SMP Tue Jun 28 21:26:26 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:        15.10
Codename:       wily
アップグレード「後」: C
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux my-server.example.com 4.4.0-38-generic
> #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016
> x86_64 x86_64 x86_64 GNU/Linux
 
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:        16.04
Codename:       xenial
アップグレード「前」: B
1
2
3
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal
アップグレード「後」: C
1
2
3
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=lts
/etc/apt-sources.list
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cat /etc/apt/sources.list | grep -v "^#"
deb http://jp.archive.ubuntu.com/ubuntu xenial main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates main restricted
 
deb http://jp.archive.ubuntu.com/ubuntu xenial universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates universe
 
deb http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial multiverse
deb http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-updates multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
 
deb http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security main restricted
deb http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security universe
deb http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu xenial-security multiverse

ちなみに、アップグレード後の sources.list は、基本的には アップグレード後のバージョンに合わせて最新化されますが、アップグレード前に sources.list の URL 置換を実施した場合には、アーカイブの URL が old-releases.ubuntu.com のままになっている場合もあります。

これで、問題なく、A → B → C へアップグレードが完了しました。

Step 6. Update Manager の METARELEASE 参照先 設定戻し

後は、A → B にアップグレードする前に、サポート切れ状態の B のサポートを無理やり有効にするために変更したメタリリース参照先 URI を元の設定に戻します

/etc/update-manager/meta-release
1
2
3
4
5
6
[METARELEASE]
#URI = http://www.example.com/meta-release    #### 作業用ウェブサーバをコメントアウト
URI = http://changelogs.ubuntu.com/meta-release
URI_LTS = http://changelogs.ubuntu.com/meta-release-lts
URI_UNSTABLE_POSTFIX = -development
URI_PROPOSED_POSTFIX = -proposed

終わりに

サポートが切れる前に意識してアップグレードした方がいいでしょうけど、現実的にそうは行かないサービスも色々あるわけですから。

Ubuntu のアップグレードがうまく行かない時の確認ポイント、そして安全な対処方法としては、

  • アップグレード対象となるリリースのサポートが切れてないか確認する
  • サポートが切れた歯抜け状態のリリースに対して、「meta-release」に明示的にサポートを有効化してあげることによってシステムを騙して、do-release-upgrade
  • 場合によっては、「meta-release」内のアーカイブサイトの URL 「archive.ubuntu.com」を「old-releases.ubuntu.com」に置換する必要がある
  • また、必要に応じて、sources.list の「archive.ubuntu.com」と「security.ubuntu.com」を「old-releases.ubuntu.com」に置換することをお忘れなく

以上、Ubuntu 最新バージョンへのアップグレード でした。