CentOS 7: 自動アップデートの設定をする

自動アップデート(yum update)の設定について記述します。

 

1 自動アップデートの為のパッケージ

以下の2つのパッケージがあります。

 

yum-updateonboot 起動時にyum updateを実行
yum-cron 定期的にyum updateを実行

 

デスクトップ用途で使うならyum-updateonboot、サーバ用途で使うならばyum-cronを使うと良いでしょう。

2 yum-updateonboot

systemdを利用して、起動時にyum updateを自動実行するパッケージです。

yumでyum-updateonbootをインストールし、systemctlで有効にします。

$ sudo yum install -y yum-updateonboot
$ sudo systemctl enable yum-updateonboot

次回、起動時にyum updateが自動実行されます。

3 yum-cron

cronとanacronを利用して、定期的にyum updateを実行するパッケージです。

yumでyum-cronをインストールし、systemctlで有効にします。

$ sudo yum install -y yum-cron
$ sudo systemctl enable yum-cron
$ sudo systemctl start yum-cron

yum-cronは毎時実行する為の0yum-hourly.cronと毎日実行する為の0yum-daily.cronを持ちます。

 

cron job file config file for yum update
/etc/cron.hourly/0yum-hourly.cron /etc/yum/yum-cron-hourly.conf
/etc/cron.daily/0yum-daily.cron /etc/yum/yum-cron.conf

 

デフォルトでは0-yum-hourly.cronは何も実行せず、0-yum-daily.cronはアップデートパッケージのダウンロードのみを実行します。

 

0yum-daily.cronでアップデートも実行するように変更します。

また0yum-daily.cronの実行が開始されてからyum updateが実行されるまでのランダムな待ち時間を0に変更しています。

これはanacronが0yum-daily.cronを実行するのに、すでにランダムな待ち時間を消費しているためです。

$ diff -uprN /etc/yum/yum-cron.conf{.org,}
--- /etc/yum/yum-cron.conf.org  2016-05-26 21:01:11.352642602 +0900
+++ /etc/yum/yum-cron.conf      2016-05-26 21:01:30.218747972 +0900
@@ -17,7 +17,7 @@ download_updates = yes

 # Whether updates should be applied when they are available.  Note
 # that download_updates must also be yes for the update to be applied.
-apply_updates = no
+apply_updates = yes

 # Maximum amout of time to randomly sleep, in minutes.  The program
 # will sleep for a random amount of time between 0 and random_sleep
@@ -25,7 +25,7 @@ apply_updates = no
 # times that multiple systems will access update servers.  If
 # random_sleep is 0 or negative, the program will run immediately.
 # 6*60 = 360
-random_sleep = 360
+random_sleep = 0


 [emitters]

3.1 実行結果

0anacronからcron.dailyが起動し、cron.dailyから0yum-daily.cronが起動しています。

yum updateに5分程度掛かっています。途中で0yum-hourly.cronが実行されますが、何もせずに終了しています。

May 27 20:01:01 centos-7 CROND[2529]: (root) CMD (run-parts /etc/cron.hourly)
May 27 20:01:01 centos-7 run-parts(/etc/cron.hourly)[2529]: starting 0anacron
May 27 20:01:01 centos-7 anacron[2552]: Anacron started on 2016-05-27
May 27 20:01:01 centos-7 run-parts(/etc/cron.hourly)[2555]: finished 0anacron
May 27 20:01:01 centos-7 anacron[2552]: Will run job `cron.daily' in 44 min.
May 27 20:01:01 centos-7 anacron[2552]: Will run job `cron.weekly' in 64 min.
May 27 20:01:01 centos-7 anacron[2552]: Will run job `cron.monthly' in 84 min.
May 27 20:01:01 centos-7 anacron[2552]: Jobs will be executed sequentially
May 27 20:01:01 centos-7 run-parts(/etc/cron.hourly)[2529]: starting 0yum-hourly.cron
May 27 20:01:14 centos-7 run-parts(/etc/cron.hourly)[2604]: finished 0yum-hourly.cron
May 27 20:45:01 centos-7 anacron[2552]: Job `cron.daily' started
May 27 20:45:01 centos-7 run-parts(/etc/cron.daily)[5838]: starting 0yum-daily.cron
May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[30186]: finished 0yum-daily.cron
May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[5838]: starting logrotate
May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[30209]: finished logrotate
May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[5838]: starting man-db.cron
May 27 20:52:00 centos-7 run-parts(/etc/cron.daily)[5493]: finished man-db.cron
May 27 20:52:00 centos-7 run-parts(/etc/cron.daily)[5838]: starting mlocate
May 27 20:52:08 centos-7 run-parts(/etc/cron.daily)[5513]: finished mlocate
May 27 20:52:08 centos-7 anacron[2552]: Job `cron.daily' terminated (mailing output)

yum updateのログは以下の通りです。このログはmailボックスにも送られています。

$ cat /var/log/yum
May 27 20:45:49 Updated: java-1.8.0-openjdk-headless.x86_64 1:1.8.0.91-0.b14.el7_2
May 27 20:45:50 Updated: java-1.7.0-openjdk-headless.x86_64 1:1.7.0.101-2.6.6.1.el7_2
May 27 20:46:02 Updated: tzdata-java.noarch 2016d-1.el7
<snip>
May 27 20:48:34 Updated: crash.x86_64 7.1.2-3.el7_2.1
May 27 20:48:35 Updated: graphite2.x86_64 1.3.6-1.el7_2
May 27 20:48:51 Installed: kernel-devel.x86_64 3.10.0-327.18.2.el7

3.2 再起動はサポートされていない

anacronの時間外にrebootを実行するcron jobを登録するしかないです(/etc/anacrontabのSTART_HOURS_RANGEの範囲外の時間)。

 

デフォルトではSTART_HOURS_RANGEは3-22なので、日曜日の00:00に"shutdown -r 0:10"を実行するcron jobを以下の様に登録しました。

"shtudown -r now"の代わりに"shutdown -r 0:10"を実行することでcron jobのログが出力されます。

$ sudo crontab -u root -l
0 0 * * 0 /usr/sbin/shutdown -r 0:10