Ubuntu Weekly Recipe

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

この記事を読むのに必要な時間:およそ 3 分

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

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

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

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

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

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

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

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

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

注1
以前のUbuntuでは通知領域(デフォルトでは画面右上にある,各種アイコンが並んでいる部分)にアップデート・マネージャのアイコンが表示され,能動的にクリックする必要がありました。バルーンヘルプ(Notification)からも「アップデートがあります」という表示が行われていましたが,「アイコンをクリックしないとアップデートが適用されない」ということは,PCのことを全く知らない(Windowsも使ったことがない)ユーザにとっては敷居が高く,アップデートされないまま利用されてしまう恐れがあります。このため,アップデート・マネージャを能動的に表示し,確実にアップデートが適用される挙動に変更されています。
注2
米国時間の「第二火曜日」にリリースされているため,日本時間では事実上「第二火曜日の翌日」となります。「第二火曜日の翌日」「第二水曜日」とは合致しないことに注意してください。

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

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

図2 アップデートの設定

図2 アップデートの設定

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

注3
ただし,コード管理上のやむをえない理由から,「セキュリティアップデートを含むものの,挙動の変化があるもの」(セキュリティアップデート以外のパッチを含むもの)についてはupdatesとして提供される可能性があります。

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)。こうした考えに基づいて,手を触れずにアップデートするように設定したい場合,次の方法を用います。

注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

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入