yumでパッケージを更新した時にシステムやサービスの再起動が必要かを確認する

運用の現場では、脆弱性対応で様々なパッケージの更新をする事があります。

更新対象がBINDであれば、パッケージ更新後に

systemctl restart named.service

で終わりですが、ライブラリやネットワーク関連パッケージなど、依存関係が複雑なパッケージの更新をした時は判断が難しいと思います。

そういう時に、yum-utilsパッケージに含まれているneeds-restartingというコマンドが便利と知ったので紹介します。

パッケージ更新時の対応として、redhatの推奨は?

参考リンク1:アップデート後にシステムの再起動が必要なパッケージ

基本スタンス

パッケージを更新した時は、OS再起動が推奨。
しかし、OS再起動はしたくない・・・といった場合は次の通り。

bindやsshdなどのパッケージの場合

更新したパッケージのサービスの再起動をする。

dbusの場合

シングルユーザーモードに落としてから、以前のランレベルに戻す。

OS再起動が必須のもの

  • Red Hat Enterprise Linux 5:
    • kernel
    • kernel-smp
    • kernel-PAE
    • kernel-xen
    • glibc2
    • hal
  • Red Hat Enterprise Linux 6:
    • kernel
    • *-firmware-*
    • glibc
    • hal
  • Red Hat Enterprise Linux 7:
    • kernel
    • glibc
    • linux-firmware
    • systemd
    • udev

needs-restartingのインストール

yum-utilsというパッケージに入っているので、yum install yum-utilsでインストールするだけです。

needs-restartingの使い方

パッケージ更新をしていない状態で実行

[root@vm07-cms01 ~]# needs-restarting 
[root@vm07-cms01 ~]# 

試しにglibcをアップデート

[root@vm07-cms01 ~]# yum check-update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.yz.yamagata-u.ac.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp

glibc.x86_64                                                                         2.17-157.el7_3.5                                                                   updates
glibc-common.x86_64                                                                  2.17-157.el7_3.5                                                                   updates
[root@vm07-cms01 ~]# yum update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.yz.yamagata-u.ac.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ glibc.x86_64 0:2.17-157.el7_3.1 を 更新
---> パッケージ glibc.x86_64 0:2.17-157.el7_3.5 を アップデート
---> パッケージ glibc-common.x86_64 0:2.17-157.el7_3.1 を 更新
---> パッケージ glibc-common.x86_64 0:2.17-157.el7_3.5 を アップデート
--> 依存性解決を終了しました。

依存性を解決しました

===============================================================================================================================================================================
 Package                                    アーキテクチャー                     バージョン                                        リポジトリー                           容量
===============================================================================================================================================================================
更新します:
 glibc                                      x86_64                               2.17-157.el7_3.5                                  updates                               3.6 M
 glibc-common                               x86_64                               2.17-157.el7_3.5                                  updates                                11 M

トランザクションの要約
===============================================================================================================================================================================
更新  2 パッケージ

総ダウンロード容量: 15 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/2): glibc-2.17-157.el7_3.5.x86_64.rpm                                                                                                                | 3.6 MB  00:00:00     
(2/2): glibc-common-2.17-157.el7_3.5.x86_64.rpm                                                                                                         |  11 MB  00:00:01     
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                           9.8 MB/s |  15 MB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  更新します              : glibc-2.17-157.el7_3.5.x86_64                                                                                                                  1/4 
  更新します              : glibc-common-2.17-157.el7_3.5.x86_64                                                                                                           2/4 
  整理中                  : glibc-2.17-157.el7_3.1.x86_64                                                                                                                  3/4 
  整理中                  : glibc-common-2.17-157.el7_3.1.x86_64                                                                                                           4/4 
  検証中                  : glibc-common-2.17-157.el7_3.5.x86_64                                                                                                           1/4 
  検証中                  : glibc-2.17-157.el7_3.5.x86_64                                                                                                                  2/4 
  検証中                  : glibc-2.17-157.el7_3.1.x86_64                                                                                                                  3/4 
  検証中                  : glibc-common-2.17-157.el7_3.1.x86_64                                                                                                           4/4 

更新:
  glibc.x86_64 0:2.17-157.el7_3.5                                                    glibc-common.x86_64 0:2.17-157.el7_3.5                                                   

完了しました!

glibcアップデート後にneeds-restartingを実行

オプションを何もつけないと、再起動が必要なプロセスIDが一覧表示されます。

[root@vm07-cms01 ~]# needs-restarting 
578 : /usr/sbin/lvmetad -f 
708 : /usr/bin/vmtoolsd 
3615 : /usr/sbin/httpd -DFOREGROUND 
3616 : /usr/sbin/httpd -DFOREGROUND 
3617 : /usr/sbin/httpd -DFOREGROUND 
557 : /usr/lib/systemd/systemd-journald 
701 : /usr/lib/polkit-1/polkitd --no-debug 
702 : /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 
3613 : /usr/sbin/httpd -DFOREGROUND 
3614 : /usr/sbin/httpd -DFOREGROUND 
2461 : /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock --port=3306 
2322 : qmgr -l -t unix -u 
2321 : pickup -l -t unix -u 
699 : /usr/lib/systemd/systemd-logind 
1 : /usr/lib/systemd/systemd --switched-root --system --deserialize 21 
735 : /usr/sbin/NetworkManager --no-daemon 
10615 : su - 
2246 : /usr/libexec/postfix/master -w 
582 : /usr/lib/systemd/systemd-udevd 
679 : /sbin/auditd -n 
719 : /sbin/agetty --noclear tty1 linux 
10595 : sshd: jsaito@pts/0   
711 : /usr/sbin/chronyd 
10653 : /usr/sbin/crond -n 
10616 : -bash 
1628 : /bin/sh /usr/bin/mysqld_safe --basedir=/usr 
10593 : sshd: jsaito [priv]  
10596 : -bash 
1009 : /usr/bin/python -Es /usr/sbin/tuned -l -P 
1008 : /usr/sbin/rsyslogd -n 
1007 : /usr/sbin/httpd -DFOREGROUND 
1004 : /usr/sbin/sshd -D 
729 : /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 

needs-restartingに-rオプションを付けて実行

-rはリブート要否を確認するためのオプションです。
今回は、再起動が必要という事が分かります。

[root@vm07-cms01 ~]# needs-restarting -r
Core libraries or services have been updated:
  glibc -> 2.17-157.el7_3.5

Reboot is required to ensure that your system benefits from these updates.

More information:
https://access.redhat.com/solutions/27943

needs-restartingの-rオプションの戻り値確認

1だと要再起動。0だと再起動は不要。

[root@vm07-cms01 ~]# echo $?
1

needs-restartingに-sを付けて実行

-sはプロセスIDではなく、サービス名で再起動が必要な一覧を出してくれるオプションです。

[root@vm07-cms01 ~]# needs-restarting -s
chronyd.service
httpd.service
sshd.service
NetworkManager.service
systemd-logind.service
postfix.service
mariadb.service
dbus.service
auditd.service
vmtoolsd.service
getty@tty1.service
crond.service
lvm2-lvmetad.service
rsyslog.service
firewalld.service
systemd-journald.service
tuned.service
systemd-udevd.service
polkit.service

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です