Ubuntu Weekly Recipe

第83回アップデートの管理

Ubuntuを使っていると、何日かに一度、⁠アップデート・マネージャが起動し、アップデートをうながす」ということが発生するはずです。Ubuntuのみならず、コンピュータ環境を日常的に利用していく上では、日々発生するアップデートを適切に行うことが重要です。今回はUbuntu環境で、望んだ形のアップデートを適用するためのレシピを紹介します。

セキュリティアップデートとバグフィックス

Ubuntuで行われる日々のアップデートは、アップデート・マネージャ(update-managerプログラム)によって行われます図1⁠。9.04以降のUbuntuでは、アップデートファイルが存在することを確認した時点で、自動的にこのウインドウが表示されるようになっています[1]⁠。

図1 アップデート・マネージャのウインドウ
図1 アップデート・マネージャのウインドウ

Ubuntuにおいては、こうして表示されるアップデータには次の2種類があります。

  • セキュリティアップデート
  • バグフィックス・機能強化のためのアップデート

セキュリティアップデートは、本連載の姉妹連載であるUbuntu Weekly Topics「今週のセキュリティアップデート」として紹介しているような、セキュリティ的な問題になるものを修正するためのものです。Windowsであれば「第二火曜日の翌日[2]⁠」にリリースされるタイプのものにあたります。

一方、バグフィックス・機能強化のためのアップデートというのは字義通り、適用することでバグが修正されたり、何らかの機能が追加されるタイプのアップデートです。

これら2種類のアップデートについては、業務でUbuntuを利用している場合、セキュリティアップデートは適用したいが、バグフィックスや機能強化は余計なトラブルを発生させるので、⁠必要ない(使うべきではない⁠⁠」という判断が行われることもあるでしょう。このような場合は、Ubuntuでは次のように設定します。

まず、アップデート・マネージャのウインドウの左下にある、⁠設定...」ボタンをクリックします。図2のような設定画面が開くはずです。

図2 アップデートの設定
図2 アップデートの設定

ここでチェックされているもののうち、⁠重要なセキュリティアップデート」⁠-security)が前者のアップデート、⁠推奨アップデート」⁠-updates)が後者のバグフィックスを含むアップデートとなっています。業務で利用しており、互換性が特に重視される環境では、-updatesのチェックは外しておき、-security経由で提供されるセキュリティアップデートのみを導入する方が良いかもしれません[3]⁠。

proposedとbackports

先ほどの-security・-updatesとともに、アップデート設定には「プレリリースされたアップデート(-proposed⁠⁠、⁠サポートされていないアップデート(-backports⁠⁠」というものも含まれています。これらは、次のような役割を持ちます。

-proposedは、更新されたパッケージのベータ版が配信される場所で、二重の意味で危険です。通常は開発者や、テストが大好きな人が利用します。

Ubuntuのパッケージ開発においては、-securityや-updates用のアップデータは、⁠パッケージのメンテナが作成作業を行う → -proposedに配信されて問題が解決しているか、新たなバグがないかをチェック → 正式に-securityや-updatesとして配信」という流れで作成・配信が行われます。

結果、通常利用からすると避けるべきである、次のような問題が発生します。

  • -security・-updatesの区別なくアップデータが配信されてくる。
  • ベータ品質の(問題が起こるかもしれない)アップデータが配信されてくる。

また、-backportsも危険です。-proposedに比べれば致命的ではないのですが、通常の運用では利用するべきではないでしょう。

-backportsは、⁠そのバージョンのリリース時には含まれていなかったソフトウェア」が格納される場所です。たとえば、Ubuntu 9.04のリリース時点のFirefoxの最新版は3.0系列であり、3.5系はまだリリースされていませんでした。Firefox 3.5のリリースは最近無事に行われ、利用可能な状態となっていますが、Ubuntuのアップデートポリシー上、⁠リリース時に含まれていなかったソフトウェア」⁠メジャーアップデート)には更新が行われません。こうしたものが導入できるようになるのが -backports です。

ですが、backportsに含まれるものの中には、単に次のリリース(のベータ版)からリビルドしただけの安易なパッケージも少なくなく、導入によってシステムに不具合が発生する可能性もあります。どうしても使いたいパッケージが-backportsに存在する場合を除いては、有効にするべきではありません。

自動的なアップデート適用

日々のアップデートにおいては、⁠どうせ中身を見ないので、とにかくアップデータさえ適用できていればいい」という考え方もあります[4]⁠。こうした考えに基づいて、手を触れずにアップデートするように設定したい場合、次の方法を用います。

Synapticで自動アップデート設定

もっとも基本的な設定方法は、GUIから設定を変更する方法です。先ほど出てきた図2の画面の「自動アップデート」欄で、⁠確認せずにセキュリティアップデートをインストールする」を選択しておきます。

これにより、セキュリティアップデートについては一日に一回自動的にチェックが行われ、自動的に適用されるようになります。

unattended-upgradesを導入する

一方で、サーバー環境のようにGUIが利用できない場合にも、上記の「確認せずにセキュリティアップデートをインストール」と同じような設定にすることが可能です。

こうした設定としたい場合は、⁠unattended-upgrades」パッケージをインストールしてください。

$ sudo apt-get update
$ sudo apt-get instal unattended-upgrades

これにより、自動的にセキュリティアップデートをインストールできる設定が行われます。

また、もしもセキュリティアップデート「以外」のアップデータも自動的に適用したい場合は、/etc/apt/apt.conf.d/50unattended-upgradesファイルを修正してください。このファイルは以下のようなものとなっていますので、⁠-updates」が含まれる行(以下のサンプルの中の「←」で示した行)の先頭「//」を除去するだけです。

// Automatically upgrade packages from these (origin, archive) pairs
Unattended-Upgrade::Allowed-Origins {
        "Ubuntu jaunty-security";
//      "Ubuntu jaunty-updates"; ←この行
};

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
//      "vim";
//      "libc6";
//      "libc6-dev";
//      "libc6-i686";
};

また、⁠勝手にアップデートされては困る」パッケージが存在する場合は、上記のpackge-Blacklistに列挙しておくと良いでしょう。記法はサンプルの通りです。

アップデータが存在する場合にメールを送る

遠隔地からサーバーを運用しているような場合、⁠アップデート可能である」ことだけをメールなどで通知できると便利です。やり方は幾つかありますが、ごく単純なシェルスクリプトを作成し、自動実行するだけでも良いでしょう。

以下はスクリプトのサンプルです。スクリプト内部では単にapt-get updateを実行してリポジトリ情報を更新し、その上でアップデート可能なファイルをリストアップするだけです。アップデートすべきファイルが存在しない場合は、⁠candidate packages: nothing.... System is up to date!!」を表示します。

#!/bin/bash

echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo check apt update
echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

apt-get update -q > /dev/null || exit 1
echo candidate packages:
(apt-get upgrade --dry-run | egrep "^Inst") && exit 2 || echo "  nothing. system is up to date!!"
exit 0

あとはこのスクリプトをcrontabに登録しておくことで、⁠スクリプトファイルを「/home/user/aptcheck.sh」に保存していると仮定しています)メールで通知することが可能です。メールが飛ばせない環境であれば、mailコマンド以降を他の通知手段に置き換えれば良いでしょう。

# crontab -e
# m h  dom mon dow   command
#m      h       dom     mon     dow     command
00      10      *       *       *       /home/user/aptcheck.sh | mail -s "apt-update checks" user@example.com

おすすめ記事

記事・ニュース一覧