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 コマンドの様々な使い方については、以下のサイトが良くまとめてくれています。

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

通常のアップグレード : 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' コマンドでアップグレードしてねー というメッセージがログインする度に表示されるようになります。

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. 現在のバージョン確認

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

現在のバージョン確認Raw Code(S)Raw Code(T)
# uname -a
Linux my-server.hogehoge.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 が必要です。

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

カーネル・パッケージ最新化、更新マネージャインストールRaw Code(S)Raw Code(T)
# apt-get update
# apt-get dist-upgrade
# apt-get install update-manager-core

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

/etc/update-manager/release-upgradesRaw Code(S)Raw Code(T)
# 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 が設定されます。

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 コマンドでアップグレード可能かどうか確認できるので、軽くチェックしておきます。

アップグレードチェックRaw Code(S)Raw Code(T)
# 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 を実行し、最新バージョンへのアップグレードを実施します。

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

アップグレードRaw Code(S)Raw Code(T)
# 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'

・・・
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
ファイアウォールを実行している場合、このポートを一時的に開く必要があります。この操作は、潜在的な危険があるため自動的には行われません。以下の例のようにしてポートを開けます:
'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

リポジトリ情報のアップデート

サードパーティが提供するリポジトリを使わない設定にしました

sources.list にあるサードパーティが提供するリポジトリを使わない設定にしました。アップグレード完了後、'ソフトウェアソース'
ツールもしくはパッケージマネージャーを使って再び利用可能な設定にすることができます。

続けるには [ENTER] キーを押してください    ####「Enter」を押し、リポジトリ情報を更新

・・・

100% [処理中]
5,250 kB/s 33.7 MB を 6秒 で取得しました (5,250 kB/s)

・・・
変更点を確認中

アップグレードを開始しますか?

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 の更新が完了するまで待ちます。 (少し時間かかるかもしれません)

・・・

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.

・・・
古いソフトウェアを検索しています

・・・

サポートが中止された(あるいはリポジトリに存在しない)パッケージを削除しますか?

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」を押す (古いパッケージを削除する)

・・・

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

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

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

システムのアップグレードが完了しました。

再起動が必要です

アップグレードを完了するには再起動が必要です。
'Y' を選択すると再起動します。

続行する[yN] y    ####「y」を押すと再起動が行われる

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

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

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

アップグレード完了後のログインRaw Code(S)Raw Code(T)
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.
$
アップグレード「前」
# uname -a
Linux my-server.hogehoge.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
アップグレード「後」
# uname -a
Linux my-server.hogehoge.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.listRaw Code(S)Raw Code(T)
# 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 コマンドでアップグレードしようとするとアップグレード可能と言ってるにも関わらず、以下のように 新しいリリースが存在しない と怒られる場合があります。

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.
$
アップグレード前の事前準備Raw Code(S)Raw Code(T)
# apt-get update
# 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.
アップグレード (失敗)Raw Code(S)Raw Code(T)
# 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 に書き換えます。

変更前 : 15.04 (A) の sources.list
# 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
# 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

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

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

現在のバージョン確認Raw Code(S)Raw Code(T)
# uname -a
Linux my-server.hogehoge.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 でカーネルアップグレード、及びパッケージ最新化
パッケージリスト更新、及びカーネル・パッケージ最新化Raw Code(S)Raw Code(T)
# apt-get update
# apt-get dist-upgrade

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

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

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

dist-upgrade 実行前 :「A」
# uname -a
Linux my-server.hogehoge.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」
# uname -a
Linux my-server.hogehoge.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-upgradesRaw Code(S)Raw Code(T)
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal

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

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

更新マネージャインストール、及びアップグレードチェックRaw Code(S)Raw Code(T)
# 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 を実行し、最新バージョンへのアップグレードを実施します。

アップグレードRaw Code(S)Raw Code(T)
# do-release-upgrade
・・・
システムのアップグレードが完了しました。
 
再起動が必要です
 
アップグレードを完了するには再起動が必要です。
'Y' を選択すると再起動します。
 
続行する[yN] y    ####「y」を押すと再起動が行われる

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

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

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

アップグレード完了後のログインRaw Code(S)Raw Code(T)
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.
$
アップグレード「前」
# uname -a
Linux my-server.hogehoge.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
アップグレード「後」
# uname -a
Linux my-server.hogehoge.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

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

/etc/apt/sources.listRaw Code(S)Raw Code(T)
# 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 に書き換えます。

変更前 : 15.04 (A) の sources.list
# 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
# 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

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

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

現在のバージョン確認Raw Code(S)Raw Code(T)
# uname -a
Linux my-server.hogehoge.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-upgradesRaw Code(S)Raw Code(T)
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal

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

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

  • apt-get update でパッケージリスト更新・最新化
  • apt-get dist-upgrade でカーネルアップグレード、及びパッケージ最新化
パッケージリスト更新、及びカーネル・パッケージ最新化Raw Code(S)Raw Code(T)
# apt-get update
# apt-get dist-upgrade

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

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

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

dist-upgrade 実行前 :「A」
# uname -a
Linux my-server.hogehoge.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」
# uname -a
Linux my-server.hogehoge.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

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

カーネルインストール確認Raw Code(S)Raw Code(T)
# 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-upgradesRaw Code(S)Raw Code(T)
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=lts

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

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

試しにアップグレード実行Raw Code(S)Raw Code(T)
# do-release-upgrade
Checking for a new Ubuntu release
No new release found

Step 6. 再起動

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

# shutdown -r now

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

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

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

アップグレード完了後のログインRaw Code(S)Raw Code(T)
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.
$
アップグレード「前」
# uname -a
Linux my-server.hogehoge.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
アップグレード「後」
# uname -a
Linux my-server.hogehoge.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

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

/etc/apt/sources.listRaw Code(S)Raw Code(T)
# 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 へアップグレードできるよ~と言っているのに、いざアップグレードしようとすると 以下のように怒られる事象がありました。

アップグレード (失敗)Raw Code(S)Raw Code(T)
# 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-releaseRaw Code(S)Raw Code(T)
・・・
■ 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.hogehoge.com
  • ウェブサーバ : Nginx
  • ドキュメントルート : /usr/share/nginx/html

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

meta-release ダウンロード、及び修正Raw Code(S)Raw Code(T)
# 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
・・・

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

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

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

meta-release ダウンロードテストRaw Code(S)Raw Code(T)
# cd /tmp

# wget http://www.hogehoge.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-upgradesRaw Code(S)Raw Code(T)
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal
/etc/update-manager/meta-releaseRaw Code(S)Raw Code(T)
[METARELEASE]
#URI = http://changelogs.ubuntu.com/meta-release
URI = http://www.hogehoge.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
# 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
# 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 へアップ後レードRaw Code(S)Raw Code(T)
# uname -a
Linux my-server.hogehoge.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 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 に更新されました。

アップグレード完了後のログインRaw Code(S)Raw Code(T)
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
# uname -a
Linux my-server.hogehoge.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
# uname -a
Linux my-server.hogehoge.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
# 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

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 へアップ後レードRaw Code(S)Raw Code(T)
# uname -a
Linux my-server.hogehoge.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 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)

アップグレード完了後のログインRaw Code(S)Raw Code(T)
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
# uname -a
Linux my-server.hogehoge.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
# uname -a
Linux my-server.hogehoge.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
/etc/apt/sources.list
# 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
アップグレード「前」: B
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=normal
アップグレード「後」: C
# cat /etc/update-manager/release-upgrades | grep -v "^#" | grep -v "^$"
[DEFAULT]
Prompt=lts

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

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

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

/etc/update-manager/meta-releaseRaw Code(S)Raw Code(T)
[METARELEASE]
#URI = http://www.hogehoge.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 のアップグレードがうまく行かない時の確認ポイント、そして安全な対処方法としては、

  • アップグレード対象となるリリースのサポートが切れてないか確認する
  • サポートが切れた歯抜け状態のリリースに対して、明示的にサポートを有効化してあげることによってシステムを騙して、do-release-upgrade

くらいですかね。

サポートを無理やり有効化する際に、作業用のウェブサーバの代わりに Dropbox でも行けるんじゃないの? とか思ったんですが、未検証です。

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