- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ubuntu

はじめに Edit

管理作業を少しでも減らそう、ということで
Ubuntuを自動アップデートさせたい、という話。

具体的には、../アップデートでやるような作業を自動化させます。

確認環境:(ここでは主にサーバー版)

  • Ubuntu 8.04LTS server i386
  • Ubuntu 10.04LTS server amd64

デスクトップ版は自動アップデートが機能ついてて通知してくれます(セキュアにするなら更新間隔を狭めておくと吉)

サーバー版ではunattended-upgradesパッケージがよいかなーと。

unattended-upgradesパッケージを使った自動アップデート Edit

インストール時に自動的にセキュリティアップデートを有効にするか求められ、そこで選ぶと unattended-upgrades パッケージがインストールされ、自動的にアップデートがされるようになります。

公式にも自動更新に関するドキュメント(10.04用) があります。

以下で unattended-upgrades が入っているか、稼働しているかを確認できます。

$ sudo aptitude search unattended-upgrades
i   unattended-upgrades                                                - automatic installation of security upgrades   

↑"i"になっているのですでにインストールされている

あとは /etc/apt/apt.conf.d/以下をいじっていろいろ設定してみます

インストール Edit

もし、インストール時にアップデート方法を選び損ねた場合や、
旧バージョンでアップデートの選択肢がなかった場合(Ubuntu 8.04LTSではなかったと思う)で、
unattended-upgradesパッケージがインストールされていない場合は、インストールしておきます。

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

セキュリティ・アップデート以外の通常のアップデートも自動に適用する Edit

重要なセキュリティアップデートはオンになっているかと思います。

/etc/apt/apt.conf.d/50unattended-upgrades を修正

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

↓ // ←のコメント記号を削除して、「通常のアップデート」(*-updates)も有効化しておきます。

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

その下には、もし更新したくないパッケージがある場合はそのリストを記述できます。
※ こちらは特に記述しませんでした

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

[TODO]:ちゃんとアップデートされている確認する。

アップデートログの確認方法 Edit

unattended-upgradesのログは、 /var/log/unattended-upgrades/unattended-upgrades.logs にあるので、
それを見ることでアップデート状況が確認できます。

$ tail -f /var/log/unattended-upgrades/unattended-upgrades.logs

or

$ less /var/log/unattended-upgrades/unattended-upgrades.logs

メールで通知を送ったりとか Edit

アップグレード時などにメールで通知を送ったりしたい場合は、
/etc/apt/apt.conf.d/50unattended-upgrades を修正

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. The package 'mailx'
// must be installed or anything that provides /usr/bin/mail.
//Unattended-Upgrade::Mail "root@localhost";

最低限メールを送信できる状態(mailコマンドで自分のどこか所持しているメールアドレスに送信できる)にしておいて、
下記の Unattended-Upgrade::Mail "root@localhost"; をコメントアウトすればOK。
(この場合は、rootにとどくので、rootのメールアドレスのエイリアスをすでに設定している場合はアドレスもそのままでOKですな)

[TODO]:ちゃんとメールが送られている確認する

自動再起動 Edit

アップデート時に再起動が必要な場合に自動再起動してくれるオプションがあります。

自動再起動が必要な場合、下記を /etc/apt/apt.conf.d/50unattended-upgrades を修正します

// Automatically reboot *WITHOUT CONFIRMATION* if a 
// the file /var/run/reboot-required is found after the upgrade 
//Unattended-Upgrade::Automatic-Reboot "false";

下のようにtrueにしてコメントアウトしておく、と。

Unattended-Upgrade::Automatic-Reboot "true"; 

24時間可動必須で不意に再起動しちゃダメ!というサーバーの場合は、
有効にしてはいけないですね(その場合はもちろん手動で都合の良いときに再起動必要)

[TODO]:ちゃんと必要な時に再起動できているか確認する

参考リンク Edit

旧来の方法 Edit

下記は以前に書いていた方法。
unattended-upgradesに移行中
(別ページにするかも)

スクリプトを書いてcronで実行させる方法 Edit

以下のサイトを参考に簡単に書いてみました。
(というか必要最小限度にしただけですが……)
システムのアップグレードを自動化する - Hatena::Diary::Ubuntu

下記スクリプトをcronに仕込みます。
ただし、上記ページと違い、下記スクリプトだけだと出力結果をメールに飛ばしたり、ログに残したりしません。

メールで飛ばしたりログに残したりしたい場合は ../cronでスクリプトを回そう を合わせてみてください。

後Ubuntu server専用になってますのでご注意を。

例えば下記スクリプトを /usr/local/sbin にファイル名 auto_upgrade などとしておいておきます。

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

echo "==== $0: starting OS upgrade on `date` ====" 2>&1

# Upgrade for Ubuntu Server
aptitude update 2>&1 && aptitude -y safe-upgrade 2>&1 && aptitude -y install linux-image-server linux-server gnupg 2>&1 && aptitude autoclean 2>&1

echo "==== finished OS upgrade on `date` ====" 2>&1

上記スクリプト実行テスト Edit

sudo sh /usr/local/sbin/auto_upgrade

(以下、ログずらずらー)

パッケージなどが無事upgradeされたらOKです。
何度も実行すると、aptitude update しかされなくなるのがわかると思います。
そこまでいったらOKかと思います。

うまくいかなかった場合は、aptitudeなどの一連のコマンドの途中で止まります。(最後の finished などはエラーが出ても表示されるはずです)

うまくいきましたか?

cronで毎日自動実行 Edit

../cronでスクリプトを回そう を参考にしてください。

参考リンク Edit


Show recent 10 comments. Go to the comment page.

  • 当たり前なんだけど、すんごい書き忘れてました。KernelのアップデートがあったときはOS再起動しないと読み込まれません。
    なのでログを見て(公式のメーリングリスト入っておくとセキュリティfixのメールが来てるからわかるとは思いますが)Kernel再起動が必要になります -- TOBY 2010-06-14 (Mon) 20:35:25
Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-06-30 Wed 20:31:40 JST (2611d)