Ubuntu Weekly Recipe

第14回自動的な処理:自動ログイン・自動アップデート

Windowsの代わりとして、つまりデスクトップOSとしてUbuntuを利用する上で、いくつかの処理を自動的に実行したい場合もあるでしょう。今週は、Windowsで行える自動ログインや自動アップデートなどを実行するレシピを紹介します。

自動ログイン

Windows・PC-Unixを問わず、マルチユーザを前提にしたOSでは、利用の前にログイン(ログオン)が必要になります。通常はユーザ名・パスワードを入力することでユーザを認証し、ログインを行うわけですが、Windowsなどではこれらを省略し、電源を投入したら自動的にデスクトップ画面にしてしまう、といった動作が可能です。

Ubuntuの場合も、電源投入後、自動的にデスクトップを起動する、ということが可能です。

[システム⁠⁠→⁠システム管理⁠⁠→⁠ログイン画面]とたどり、⁠ログイン画面の設定」を開き、⁠セキュリティ⁠タブを選択してください。

図1 ⁠ログイン画面の設定:セキュリティタブ」
図1 「ログイン画面の設定:セキュリティタブ」

この中に「自動ログイン画面を有効にする」という設定がありますので、自動ログインを行いたいユーザを指定します(コンボボックスになっていますので、ドロップダウンメニューから選択しても、直接入力してもかまいません⁠⁠。この状態で再起動、もしくはログアウトすれば、指定したユーザで自動的にログインできます。

言うまでもないことですが、この設定を行った場合、誰でもあなたのデスクトップにアクセスできてしまうわけですから、セキュリティ上大きな問題を抱えることになります。デスクトップPCで利用するのであれば大きな問題はないかと思いますが、よく考えて行ってください[1]⁠。具体的には、⁠Webブラウジング専用の共有端末」であれば管理者権限を持たないユーザを作成し、そのユーザで自動ログインするようにする、といった工夫を検討してください[2]⁠。

自動的にパッケージをダウンロードする

Windowsのアップデート機構(Windows Update/Microsoft Update)では、アップデートに必要なファイルをバックグラウンドでダウンロードし、さらにインストールする、自動更新と呼ばれる機能が搭載されています。Ubuntuでも同様の措置が可能です。

以下のコマンドを実行することで、1時間に一度、新しいアップデートがないかアーカイブサーバを確認し、もし新しいパッケージが存在するならそのファイルをダウンロードする、という動作が可能です。ダウンロードのみで、インストールは自動ではありません。アップデートマネージャなどから手動で行ってください。パッケージはすでにダウンロードされ、ローカルにキャッシュされているので、高速なアップデートが可能なはずです。

$ sudo -s
# echo $RANDOM > /dev/null; echo "`expr $RANDOM % 60`     *       *       *       *              root /usr/bin/apt-get update >/dev/null 2>&1; /usr/bin/apt-get --download-only -y dist-upgrade >/dev/null 2>&1" > /etc/cron.d/apt-autodownload

また、1時間に一度ではなく、⁠昼休みの間」などを指定したい場合は、/etc/cron.d/apt-autodownloadファイルを修正してください。ファイルの頭にある数字が「分⁠⁠、次の数字が「時」ですので、これを修正することで時間を指定できます。次の例は、12:08に自動的にパッケージをダウンロードする設定です。

 8    12     *       *       *              root /usr/bin/apt-get update >/dev/null 2>&1; /usr/bin/apt-get --download-only -y dist-upgrade >/dev/null 2>&1

なお、自動実行はできるだけランダムなタイミングになる必要があります。毎時00分・15分などといった、キリのよい時間にアップデートを行うと、多くの人のダウンロードが特定の時刻に集中してしまい、パッケージを提供するアーカイブサーバに過大な負荷がかかるためです。

できるだけランダムな「分」を設定できるように、上記の例では$RANDOM(利用するたびにランダムな数字を返す変数)を利用しています(厳密には分布が偏っていますが、それほど致命的な問題にはならないはずです⁠⁠。また、1時間に1度よりも頻繁なペースで確認を行うことも避けてください。

自動的にアップデートを適用する

ダウンロードだけでなく、自動的にアップデートを行わせることもできます。次の設定を行ってください。

また、もし以前に自動ダウンロードの設定をしていたら、sudo rm /etc/cron.d/apt-autodownloadを実行し、設定を削除してください。

$ sudo -s
# echo $RANDOM > /dev/null; echo "`expr $RANDOM % 60`     *       *       *       *              root /usr/bin/apt-get update >/dev/null 2>&1; /usr/bin/apt-get -y dist-upgrade >/dev/null 2>&1" > /etc/cron.d/apt-autoupdate

この設定には注意があります。それは、自動的なアップデートは安全ではない、ということです。

自動的に実行されるアップデートは静かに行われますので、気づかずに再起動などを行ってしまう可能性があります。もしもカーネルなどの致命的なファイルの更新中に再起動を行ってしまうと、システムが起動しなくなってしまいます。24時間起動し続けるようなマシンでのみ設定し、さらにバックアップを定期的に取得することを強くお勧めします(それほど大きな手間ではないと思いますので、事前ダウンロードのみを行い、アップデートは手動で行うのが安全です⁠⁠。

なお、自動ダウンロードや自動アップデートといったアプローチをひとつにまとめた、⁠cron-apt」というパッケージも存在します。今回はシンプルな設定が可能なcronによる方法を紹介しましたが、HDDの空き容量に応じてキャッシュ実行を行わない、などといった複雑な法則をセットしたければ、このパッケージを利用するとよいでしょう。

ログイン時に自動起動するアプリケーションの設定

[システム⁠⁠→⁠設定⁠⁠→⁠セッション]にコマンドを登録することで、ログイン時に自動的に起動するアプリケーションを設定できます。これらについてはGNOME Doに関するレシピを確認してください。

必要なパッケージを自動的にインストールする(auto-apt)

ソフトウェアのコンパイル時などに、ヘッダファイルや特定のライブラリを要求されることがあります。こうした場合、ひとつひとつ必要なファイルを探してインストールするのが通常です。

こういった問題に対処するため、必要なファイルの検索とインストールを自動的に行ってくれるauto-aptというツールがあります。

auto-aptは次のようにインストールします。

$ sudo apt-get update
$ sudo apt-get install auto-apt
$ sudo /bin/sh -c 'auto-apt update && auto-apt updatedb && auto-apt update-local'

また、最後のauto-apt updateはデータベースの更新のため、定期的に行う必要があります。

あとはauto-apt run の引数としてコマンドを実行することで、必要なパッケージが自動的にインストールされます。

以下はairproxyの"fastload"モジュールのmakeをauto-aptで行った際(auto-apt run make)に、libc6-devパッケージが自動的にインストールされようとしている様子です。

Install:libdevel/libc6-dev      file:/usr/include/stdio.h       by:/usr/lib/gcc/i486-linux-gnu/4.1.3/cc1 -quiet -I /usr/local/java/include -I /usr/local/java/include/linux fastload.c -quiet -dumpbase fastload.c -mtune=generic -auxbase-strip fastload.o -O3 -fstack-protector -fstack-protector -o /tmp/ccS9brc9.s
Do you want to install libdevel/libc6-dev now? [Y/n] 

また、自動的にインストールするだけでなく、次のようにして「あるファイルが含まれているパッケージ」を探し出すこともできます。以下の例では「libssl.so」が含まれるパッケージを探し、libsカテゴリのlibssl0.9.8と、libdevelカテゴリのlibssl-dev・libssl0.9.8-dbgに含まれている、ということを探し出しています。

$ auto-apt search libssl.so
usr/lib/libssl.so.0.9.8 libs/libssl0.9.8
usr/lib/libssl.so       libdevel/libssl-dev
usr/lib/debug/usr/lib/libssl.so.0.9.8   libdevel/libssl0.9.8-dbg

時刻の自動同期(8.04~)

WindowsやMac OS Xでは、定期的にタイムサーバに接続し、正しい時刻に同期するための機能が付属しています。Ubuntu8.04ではこの機能があり、さらにGUIから設定できるようになっています(7.10をお使いの方はもうしばらく待ってください⁠⁠。

設定は、デスクトップ画面の右上、日時表示の部分を右クリックして行います。日時表示部分を右クリックすると、⁠日付と時刻の調整]というメニューがあるはずです(⁠⁠設定]ではありませんので注意してください⁠⁠。この画面に、設定:[手動]というプルダウンメニューがあります。

図2 ⁠手動」設定
図2 「手動」設定

設定のために、画面下部にある[ロックの解除]をクリックして管理者権限を有効にします。パスワードの入力を要求されますので、お使いのアカウントのパスワードを入力し、ロックを解除してください。この状態でプルダウンメニューをクリックすることで、⁠インターネット上のサーバと同期させる」という選択を行うことができます。

この設定にはNTPサーバ関連のパッケージが必要ですので、図3のような、⁠NTPサービスがインストールされていません」というダイアログが表示され、パッケージの追加インストールが要求されるはずです。⁠NTPサポートのインストール]をクリックすると自動的にパッケージがインストールできます。

図3 NTPサポートのインストール
図3 NTPサポートのインストール

インストール後、一度[日付と時刻の調整]を閉じ、再度開き直して「インターネット上のサーバと同期させる」を選択することでNTPによる時刻同期が利用できます。

初期設定ではntp.ubuntu.com(日本から遙か遠くにあります)と同期していますので、⁠時刻サーバの選択]をクリックして、図4のように、ntp.jst.mfeed.ad.jpを選択してください。

図4 NTPサーバの選択
図4 NTPサーバの選択

設定後は図5のような表示になり、随時時刻が同期されるように なります。

図5 自動的に時刻同期する状態
図5 自動的に時刻同期する状態
参考になるドキュメント

おすすめ記事

記事・ニュース一覧