序章

Ubuntuには、標準と長期サポート(または「LTS」)の2種類のリリースがあります。 標準アップデートは6か月ごとにリリースされ、Ubuntuから少なくとも9か月間セキュリティアップデートを受け取りますが、LTSアップデートは2年ごとにリリースされ、少なくとも5年間サポートされます。

現在Ubuntu12.04を使用している場合は、少なくとも2017年10月までセキュリティアップデートがあります。 そのサポート時間を延長し、新しい機能やアップデートにアクセスしたい場合は、サーバーを最新のLTSリリースにアップグレードできます。 このガイドでは、既存の構成を維持するように注意しながら、Ubuntu12.04サーバーを14.04に安全にアップグレードする方法について説明します。

警告:オペレーティングシステムのメジャーリリース間のほとんどすべてのアップグレードと同様に、このプロセスには、障害、データ損失、またはソフトウェア構成の破損という固有のリスクが伴います。 包括的なバックアップと広範なテストを強くお勧めします。

これらの問題を回避するには、可能であれば、インプレースでアップグレードするのではなく、新しいUbuntu14.04サーバーに移行することをお勧めします。 アップグレード時にソフトウェア構成の違いを確認する必要がある場合もありますが、コアシステムの方が安定性が高い可能性があります。 新しいLinuxサーバーに移行する方法に関するシリーズに従って、サーバー間で移行する方法を学ぶことができます。

ステップ1—既存のデータのバックアップ

12.04サーバーを使用して機密性の高いタスクやデータを処理する可能性が高いため、サーバー構成とファイルの現在の状態をバックアップすることが非常に重要です。 これから説明するプロセスがリリースアップグレードを実行するための推奨される方法ですが、リリースアップグレードによってソフトウェアや構成に問題が発生しないことを保証する方法はありません。 事前にデータをバックアップしておくと、アップグレードで問題が発生した場合の復旧がはるかに簡単になります。

このステップでは、複数のバックアップ方法について説明します。 DigitalOceanを使用している場合は、ファイルをローカルコンピューターに同期するだけでなく、コントロールパネルからスナップショットを作成することをお勧めします。 このようにして、復元が必要なシナリオの性質に応じて、個々のファイルを復元するか、スナップショット全体を復元することができます。

ファイルをローカルコンピューターに同期する

Ubuntuサーバー上のファイルをバックアップする効果的な方法はいくつかあります。 この例では、rsyncを使用して、サーバーのファイルをローカルコンピューターのバックアップフォルダーにコピーします。 一部のフォルダはプロセスを実行するための一時的なストレージであるため、ファイルシステム内のすべてのフォルダをバックアップすることはできません。 幸い、これらのフォルダをバックアップから除外できます。

次のコマンドを使用して、 red でマークされたサーバーの資格情報を変更するように注意しながら、サーバーのファイルシステムをコピーできます。 サーバーでSSHキーベースの認証を使用する場合、rootユーザーにはデフォルトでパスワードが設定されていないため、rsyncで秘密キーファイルを指定する必要があります。 このファイルは通常/home/username/.ssh/id_rsaにあります。 サーバーファイルをローカルにダウンロードしているため、コマンドは、バックアップしているサーバーではなく、ローカルコンピューターから実行する必要があります。

sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} -e 'ssh -i /path/to/private_key' root@SERVER_IP_ADDRESS:/* ~/backup/

aAXフラグは、rsyncに、アクセス許可、所有権、変更時間などの重要なファイル属性を保持するように指示します。 Dockerまたは別の仮想化ツールを使用している場合は、Sフラグを追加して、rsyncが仮想ストレージなどのスパースファイルを適切に処理できるようにする必要があります。

ノート: rsync is only available for Unix-based operating systems like Linux and OS X. If your local computer is running Windows, you can copy your server’s files using an SFTP client like Filezilla: Filezillaを使用してVPSでファイルを安全に転送および管理する方法

後でサーバーファイルの一部を復元する必要がある場合は、rsyncを再度使用して、次のようにソースと宛先のパラメーターを逆にすることができます。sudo rsync -aAXv -e 'ssh -i /path/to/private_key' ~/backup/ root@SERVER_IP_ADDRESS:/*

DigitalOceanドロップレットスナップショットを作成する

DigitalOceanを使用している場合は、ドロップレットのスナップショットを作成して、問題が発生した場合に簡単に復元できます。 2016年10月以降、スナップショットのコストは、ファイルシステム内の使用済みスペースの量に基づいて、1ギガバイトあたり月額0.05ドルになります。 このオプションを使用できる場合は、冗長性を確保するために、一方の方法を選択するのではなく、両方のバックアップ方法を使用することをお勧めします。 アップグレードが問題なく完了したことを確認したら、スナップショットを削除できます。

まず、サーバーの電源を切り、現在の状態がスナップショット用に保持されるようにします。 実行中のシステムのスナップショットを作成することは可能ですが、データがディスク上で一貫していることを確認するには、次の電源をオフにすることをお勧めします。

sudo poweroff

次に、DigitalOceanコントロールパネルにログインし、アップグレードするドロップレットを選択します。 スナップショットパネルに移動し、新しいスナップショットの名前を入力して、スナップショットを取得を選択します。

Take Snapshot

スナップショットプロセスが完了すると、サーバーは自動的に再起動されるため、SSH経由でサーバーに再接続して、アップグレードを続行できます。

後でサーバーをこのスナップショットに復元する必要がある場合は、Dropletのコントロールパネルの破棄セクションでそのイメージから再構築できます。

ステップ2—アップグレードの準備

リリースアップグレードを開始する前に、すでにインストールされているソフトウェアが最新であることを確認する必要があります。 インストールされているソフトウェアを更新すると、リリースアップグレードが多くのパッケージで飛躍的に向上し、エラーの可能性が低くなります。

aptを使用してローカルパッケージインデックスを更新してから、現在インストールされているソフトウェアをアップグレードします。

sudo apt-get update
sudo apt-get upgrade

update-manager-coreを使用してリリースアップグレードを管理します。 このパッケージは、ほとんどのUbuntu 12.04インストールにデフォルトでインストールされますが、apt-cacheを使用して、サーバーにインストールされているかどうかを確認できます。

apt-cache policy update-manager-core

コマンドがインストールされたバージョン番号を返さない場合(つまり、 Installed: (none))と表示されている場合は、aptを使用して、Ubuntuのソフトウェアリポジトリからアップデートマネージャーをダウンロードします。

sudo apt-get install update-manager-core

アップデートマネージャがインストールされていることを確認したら、アップグレードプロセスを開始する準備が整います。

ステップ3—14.04へのアップグレード

これで、root権限でdo-release-upgradeコマンドを実行できます。 これは、Ubuntuのリポジトリから最新のリリースソフトウェアをプルし、サーバーにさまざまなアップグレードを適用する自動化されたスクリプトです。 このアップグレードには数分かかる場合があり、時々プロンプトが表示されるので、アップグレードの進行中はSSHセッションに注意してください。

sudo do-release-upgrade

Update Managerは、次のLTSリリースへの移行に関連する詳細のほとんどを処理しますが、プロンプトが表示されたら、いくつかの決定を行う必要があります。 これらのプロンプトのほとんどは、既存の構成ファイルの上書きについて尋ねます。 デフォルトのアクションは、既存の構成を保持することです。これは、通常、安定性を確保するための最良のオプションです。 ただし、オプションを選択する前に、必ず各プロンプトを注意深く読んでください。また、問題のパッケージを調べて、適切な選択をしていることを確認することを恐れないでください。

アップグレードプロセスの終わり近くに、サーバーを再起動するように求められます。 「y」で確定して再起動を開始します。

SSHセッションが切断されるため、アップグレードが期待どおりに行われたことを確認するために再接続する必要があります。 再接続したら、lsb_releaseを使用して新しいUbuntuバージョン番号を確認します。

lsb_release -a

次のような出力が表示されます。

No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 14.04.1 LTS
Release:	14.04
Codename:	trusty

Release:に14.04と表示されている場合は、UbuntuLTSサーバーが正常にアップグレードされています。

ステップ4—カーネルのアップグレード

更新されたリリースに合わせて新しいカーネルをダウンロードした場合でも、サーバーのホストに使用されているソフトウェアで使用するためにカーネルがアクティブ化されていない可能性があります。 DigitalOceanを使用している場合、ホスティングソフトウェア(KVMと呼ばれる)はサーバーイメージの外部でカーネルを維持するため、個別に更新する必要があります。

サーバーが現在unameで使用しているカーネルバージョンを確認できます。

uname -ri

出力は次のようになります。

3.2.0-24-virtual i686

カーネルバージョンが3.13未満の場合は、サーバーがまだUbuntu14.04のカーネルを使用していないことを意味します。 古いカーネルでソフトウェアに問題が発生する可能性は低いですが、新しいカーネルではパフォーマンスが向上したり、役立つ新機能が表示されたりする場合があります。

アップグレードプロセス中に、サーバーはUbuntu14.04で使用するためにロードされる新しいカーネルをダウンロードしました。 /lib/modulesディレクトリの内容を確認すると、ダウンロードされたカーネルのバージョンを確認できます。

ls /lib/modules

次のようなリストが表示されます。

3.13.0-39-generic  3.2.0-24-virtual

新しくインストールされたカーネルを使用するには、ドロップレットのコントロールパネルでカーネルの選択を更新してから、ドロップレットの電源をオフにして起動する必要があります。

まず、DigitalOceanコントロールパネルにログインし、アップグレードするサーバーを選択します。 設定パネルで、カーネルタブを選択します。

ここに、利用可能なカーネルのドロップダウンリストが表示されます。 ダウンロードしたカーネルのディストリビューション、リリース、バージョン番号に一致するカーネルを選択します(上記の例では3.13.0-39-generic)。

Change Kernel

カーネルを選択したら、 [変更]をクリックして、そのカーネルをサーバーにロードします。 新しいカーネルの使用を開始するには、サーバーの電源を切る必要があります。 これはコントロールパネルで実行できますが、これはコンピュータの電源を切るのと似ているため、代わりに端末から電源を切ることをお勧めします。

sudo poweroff

サーバーが完全にシャットダウンしたら、コントロールパネルでサーバーを再起動できます。 Power パネルで、Bootを選択します。

Power Cycle

これで、SSH経由でサーバーに再接続し、unameを使用して、新しいカーネルが使用されていることを確認できます。

uname -ri

次のような出力が表示されます。

3.13.0-39-generic i686

カーネルのバージョンがコントロールパネルにロードしたカーネルと一致する場合は、カーネルが正常に更新されています。

結論

これで、Ubuntuサーバーが最新のLTSリリースにアップグレードされ、少なくとも2019年まで、最新のソフトウェアアップデートとセキュリティアップデートにアクセスできるようになりました。 アップグレード後にプログラムとの互換性の問題が発生した場合は、そのプログラムのドキュメントをチェックして、構成の変更が必要な重要な変更がないかどうかを確認してください。