Ubuntuを使っていると、何日かに一度、「 アップデート・マネージャが起動し、アップデートをうながす」ということが発生するはずです。Ubuntuのみならず、コンピュータ環境を日常的に利用していく上では、日々発生するアップデートを適切に行うことが重要です。今回はUbuntu環境で、望んだ形のアップデートを適用するためのレシピを紹介します。
セキュリティアップデートとバグフィックス
Ubuntuで行われる日々のアップデートは、アップデート・マネージャ(update-managerプログラム)によって行われます(図1 ) 。9.04以降のUbuntuでは、アップデートファイルが存在することを確認した時点で、自動的にこのウインドウが表示されるようになっています[1] 。
図1 アップデート・マネージャのウインドウ
Ubuntuにおいては、こうして表示されるアップデータには次の2種類があります。
セキュリティアップデート
バグフィックス・機能強化のためのアップデート
セキュリティアップデートは、本連載の姉妹連載であるUbuntu Weekly Topics で「今週のセキュリティアップデート」として紹介しているような、セキュリティ的な問題になるものを修正するためのものです。Windowsであれば「第二火曜日の翌日[2] 」にリリースされるタイプのものにあたります。
一方、バグフィックス・機能強化のためのアップデートというのは字義通り、適用することでバグが修正されたり、何らかの機能が追加されるタイプのアップデートです。
[1] 以前のUbuntuでは通知領域(デフォルトでは画面右上にある、各種アイコンが並んでいる部分)にアップデート・マネージャのアイコンが表示され、能動的にクリックする必要がありました。バルーンヘルプ(Notification)からも「アップデートがあります」という表示が行われていましたが、「 アイコンをクリックしないとアップデートが適用されない」ということは、PCのことを全く知らない(Windowsも使ったことがない)ユーザにとっては敷居が高く、アップデートされないまま利用されてしまう恐れがあります。このため、アップデート・マネージャを能動的に表示し、確実にアップデートが適用される挙動に変更されています。
これら2種類のアップデートについては、業務でUbuntuを利用している場合、セキュリティアップデートは適用したいが、バグフィックスや機能強化は余計なトラブルを発生させるので、「 必要ない(使うべきではない) 」という判断が行われることもあるでしょう。このような場合は、Ubuntuでは次のように設定します。
まず、アップデート・マネージャのウインドウの左下にある、「 設定...」ボタンをクリックします。図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