はじめに
実務でEC2の脆弱性対応でyum updateを定期的に実行します。
ネットワークの不調によりyum updateが途中で中断した際の対処法を検証してみました。
対応方法
TeraTermでEC2にSSH接続しました
rootに昇格しました
$ sudo su -
アップデート可能なパッケージ一覧を表示
# yum check-update > check-update_before
yum updateを実行する
# yum update
以下メッセージの「y」をクリックする
Transaction Summary ============================================================================================================================================================================= Install 1 Package (+1 Dependent package) Upgrade 43 Packages Total download size: 191 M Is this ok [y/d/N]: y
yum update処理中にPCのネットワークを切断してみた
ネットが切断することにより、TeraTermが閉じました。
再度PCのネットワークを接続しました。
以下のメッセージが出る様になりました。
メッセージの翻訳
既存のロック /var/run/yum.pid: 別のコピーが pid 1217 として実行されています
現在、別のアプリが yum ロックを保持しています。出るのを待っています…
Loaded plugins: fastestmirror Existing lock /var/run/yum.pid: another copy is running as pid 1217. Another app is currently holding the yum lock; waiting for it to exit... The other application is: yum Memory : 120 M RSS (450 MB VSZ) Started: Sun Apr 14 00:54:58 2024 - 04:15 ago State : Sleeping, pid: 1217 ^C
対処法は以下の記事を参考にしました。
https://qiita.com/leomaro7/items/5403f9708b6c316f7496
pid 1217のプロセスを終了させました
※このプロセスIDは環境毎に異なります。
上記のメッセージに記載しているプロセスIDを指定してください
# kill 1217
ロックファイルを削除しました
# rm -f /var/run/yum.pid
yum のキャッシュを削除しました
# yum clean all Loaded plugins: fastestmirror Cleaning repos: base extras updates Cleaning up list of fastest mirrors
yumのログを確認しました
以下のログを確認することでupdatedの状況を確認出来ます。
cat /var/log/yum.log Apr 14 00:56:35 Updated: zlib-1.2.7-21.el7_9.x86_64 Apr 14 00:56:35 Updated: nspr-4.35.0-1.el7_9.x86_64 Apr 14 00:56:35 Updated: nss-util-3.90.0-1.el7_9.x86_64 Apr 14 00:56:35 Updated: 1:grub2-common-2.02-0.87.0.2.el7.centos.11.noarch Apr 14 00:56:35 Updated: 1:grub2-tools-minimal-2.02-0.87.0.2.el7.centos.11.x86_64 Apr 14 00:56:36 Updated: 1:grub2-tools-2.02-0.87.0.2.el7.centos.11.x86_64 Apr 14 00:56:36 Updated: systemd-libs-219-78.el7_9.9.x86_64 Apr 14 00:56:36 Updated: 1:grub2-tools-extra-2.02-0.87.0.2.el7.centos.11.x86_64 Apr 14 00:56:36 Updated: 1:grub2-pc-modules-2.02-0.87.0.2.el7.centos.11.noarch Apr 14 00:56:36 Updated: 1:grub2-pc-2.02-0.87.0.2.el7.centos.11.x86_64 Apr 14 00:56:37 Updated: nss-softokn-freebl-3.90.0-6.el7_9.x86_64 Apr 14 00:56:37 Updated: nss-softokn-3.90.0-6.el7_9.x86_64 Apr 14 00:56:37 Updated: nss-sysinit-3.90.0-2.el7_9.x86_64 Apr 14 00:56:37 Updated: nss-3.90.0-2.el7_9.x86_64 Apr 14 00:56:37 Updated: nss-pem-1.0.3-7.el7_9.1.x86_64 Apr 14 00:56:37 Updated: kernel-tools-libs-3.10.0-1160.114.2.el7.x86_64 Apr 14 00:56:53 Installed: linux-firmware-20200421-82.git78c0348.el7_9.noarch Apr 14 00:56:55 Updated: ca-certificates-2023.2.60_v7.0.306-72.el7_9.noarch Apr 14 00:56:55 Updated: krb5-libs-1.15.1-55.el7_9.x86_64 Apr 14 00:56:55 Updated: 1:openssl-libs-1.0.2k-26.el7_9.x86_64 Apr 14 00:56:55 Updated: openssh-7.4p1-23.el7_9.x86_64
再度アップデート可能なyumを確認しました
# yum check-update > check-update_tmp
事前と事後でcheck updateの差分を取得しました
yum.logで_Updatedとなっているパッケージについてはcheck-update_tmpに出力されていませんでした。
以下を確認することでどこまでyum updateができているか確認できます。
# sdiff -s check-update_before check-update_tmp Loading mirror speeds from cached hostfile | Determining fastest mirrors bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.15 | bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.15 ca-certificates.noarch 2023.2.60_v7.0.306-72.el7_ | cronie.x86_64 1.4.11-25.el7_9 cronie.x86_64 1.4.11-25.el7_9 | cronie-anacron.x86_64 1.4.11-25.el7_9 cronie-anacron.x86_64 1.4.11-25.el7_9 | curl.x86_64 7.29.0-59.el7_9.2 curl.x86_64 7.29.0-59.el7_9.2 | diffutils.x86_64 3.3-6.el7_9 diffutils.x86_64 3.3-6.el7_9 | grub2.x86_64 1:2.02-0.87.0.2.el7.centos.1 grub2.x86_64 1:2.02-0.87.0.2.el7.centos | kernel.x86_64 3.10.0-1160.114.2.el7 grub2-common.noarch 1:2.02-0.87.0.2.el7.centos | kernel-tools.x86_64 3.10.0-1160.114.2.el7 grub2-pc.x86_64 1:2.02-0.87.0.2.el7.centos | kpartx.x86_64 0.4.9-136.el7_9 grub2-pc-modules.noarch 1:2.02-0.87.0.2.el7.centos | libcurl.x86_64 7.29.0-59.el7_9.2 grub2-tools.x86_64 1:2.02-0.87.0.2.el7.centos | libssh2.x86_64 1.8.0-4.el7_9.1 grub2-tools-extra.x86_64 1:2.02-0.87.0.2.el7.centos | microcode_ctl.x86_64 2:2.1-73.20.el7_9 grub2-tools-minimal.x86_64 1:2.02-0.87.0.2.el7.centos | nss-tools.x86_64 3.90.0-2.el7_9 kernel.x86_64 3.10.0-1160.114.2.el7 | openssh-clients.x86_64 7.4p1-23.el7_9 kernel-tools.x86_64 3.10.0-1160.114.2.el7 | openssh-server.x86_64 7.4p1-23.el7_9 kernel-tools-libs.x86_64 3.10.0-1160.114.2.el7 | openssl.x86_64 1:1.0.2k-26.el7_9 kpartx.x86_64 0.4.9-136.el7_9 | python.x86_64 2.7.5-94.el7_9 krb5-libs.x86_64 1.15.1-55.el7_9 | python-libs.x86_64 2.7.5-94.el7_9 libcurl.x86_64 7.29.0-59.el7_9.2 | python-perf.x86_64 3.10.0-1160.114.2.el7 libssh2.x86_64 1.8.0-4.el7_9.1 | rsync.x86_64 3.1.2-12.el7_9 microcode_ctl.x86_64 2:2.1-73.20.el7_9 | sudo.x86_64 1.8.23-10.el7_9.3 nspr.x86_64 4.35.0-1.el7_9 | systemd.x86_64 219-78.el7_9.9 nss.x86_64 3.90.0-2.el7_9 | systemd-sysv.x86_64 219-78.el7_9.9 nss-pem.x86_64 1.0.3-7.el7_9.1 | tzdata.noarch 2024a-1.el7 nss-softokn.x86_64 3.90.0-6.el7_9 < nss-softokn-freebl.x86_64 3.90.0-6.el7_9 < nss-sysinit.x86_64 3.90.0-2.el7_9 < nss-tools.x86_64 3.90.0-2.el7_9 < nss-util.x86_64 3.90.0-1.el7_9 < openssh.x86_64 7.4p1-23.el7_9 < openssh-clients.x86_64 7.4p1-23.el7_9 < openssh-server.x86_64 7.4p1-23.el7_9 < openssl.x86_64 1:1.0.2k-26.el7_9 < openssl-libs.x86_64 1:1.0.2k-26.el7_9 < python.x86_64 2.7.5-94.el7_9 < python-libs.x86_64 2.7.5-94.el7_9 < python-perf.x86_64 3.10.0-1160.114.2.el7 < rsync.x86_64 3.1.2-12.el7_9 < sudo.x86_64 1.8.23-10.el7_9.3 < systemd.x86_64 219-78.el7_9.9 < systemd-libs.x86_64 219-78.el7_9.9 < systemd-sysv.x86_64 219-78.el7_9.9 < tzdata.noarch 2024a-1.el7 < zlib.x86_64 1.2.7-21.el7_9 < ``` yum updateを実行しました ``` # yum update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: download.cf.centos.org * extras: download.cf.centos.org * updates: download.cf.centos.org Resolving Dependencies 以下のメッセージが出力されました There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help). ``` yum-complete-transactionコマンドがあることを確認します。 ``` # which yum-complete-transaction /bin/yum-complete-transaction ``` 無ければパッケージをインストールする必要があります。 未完了のトランザクションをクリーンアップしました ``` # yum-complete-transaction --cleanup-only Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: download.cf.centos.org * extras: download.cf.centos.org * updates: download.cf.centos.org Cleaning up unfinished transaction journals Cleaning up 2024-04-14.00:56.34 ``` yum updateを実行しました ``` # yum update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: download.cf.centos.org * extras: download.cf.centos.org * updates: download.cf.centos.org Resolving Dependencies --> Running transaction check ---> Package bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.10 will be updated ---> Package bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.15 will be an update
Dependencies Resolved =================================================================================================================================================================================== Package Arch Version Repository Size =================================================================================================================================================================================== Installing: kernel x86_64 3.10.0-1160.114.2.el7 updates 52 M Updating: bind-export-libs x86_64 32:9.11.4-26.P2.el7_9.15 updates 1.1 M cronie x86_64 1.4.11-25.el7_9 updates 92 k cronie-anacron x86_64 1.4.11-25.el7_9 updates 36 k curl x86_64 7.29.0-59.el7_9.2 updates 271 k diffutils x86_64 3.3-6.el7_9 updates 322 k grub2 x86_64 1:2.02-0.87.0.2.el7.centos.11 updates 34 k kernel-tools x86_64 3.10.0-1160.114.2.el7 updates 8.2 M kpartx x86_64 0.4.9-136.el7_9 updates 81 k libcurl x86_64 7.29.0-59.el7_9.2 updates 223 k libssh2 x86_64 1.8.0-4.el7_9.1 updates 88 k microcode_ctl x86_64 2:2.1-73.20.el7_9 updates 6.8 M nss-tools x86_64 3.90.0-2.el7_9 updates 557 k openssh-clients x86_64 7.4p1-23.el7_9 updates 655 k openssh-server x86_64 7.4p1-23.el7_9 updates 459 k openssl x86_64 1:1.0.2k-26.el7_9 updates 494 k python x86_64 2.7.5-94.el7_9 updates 97 k python-perf x86_64 3.10.0-1160.114.2.el7 updates 8.2 M rsync x86_64 3.1.2-12.el7_9 updates 408 k sudo x86_64 1.8.23-10.el7_9.3 updates 844 k systemd x86_64 219-78.el7_9.9 updates 5.1 M systemd-sysv x86_64 219-78.el7_9.9 updates 98 k tzdata noarch 2024a-1.el7 updates 497 k Transaction Summary =================================================================================================================================================================================== Install 1 Package Upgrade 22 Packages Total download size: 86 M Is this ok [y/d/N]: y
問題なくyum updateが完了しました
Installed: kernel.x86_64 0:3.10.0-1160.114.2.el7 Updated: bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.15 cronie.x86_64 0:1.4.11-25.el7_9 cronie-anacron.x86_64 0:1.4.11-25.el7_9 curl.x86_64 0:7.29.0-59.el7_9.2 diffutils.x86_64 0:3.3-6.el7_9 grub2.x86_64 1:2.02-0.87.0.2.el7.centos.11 kernel-tools.x86_64 0:3.10.0-1160.114.2.el7 kpartx.x86_64 0:0.4.9-136.el7_9 libcurl.x86_64 0:7.29.0-59.el7_9.2 libssh2.x86_64 0:1.8.0-4.el7_9.1 microcode_ctl.x86_64 2:2.1-73.20.el7_9 nss-tools.x86_64 0:3.90.0-2.el7_9 openssh-clients.x86_64 0:7.4p1-23.el7_9 openssh-server.x86_64 0:7.4p1-23.el7_9 openssl.x86_64 1:1.0.2k-26.el7_9 python.x86_64 0:2.7.5-94.el7_9 python-perf.x86_64 0:3.10.0-1160.114.2.el7 rsync.x86_64 0:3.1.2-12.el7_9 sudo.x86_64 0:1.8.23-10.el7_9.3 systemd.x86_64 0:219-78.el7_9.9 systemd-sysv.x86_64 0:219-78.el7_9.9 tzdata.noarch 0:2024a-1.el7 Complete!
アップデート可能なyumを確認しました
yum check-update > check-update_after
パッケージ情報が出力されなくなったため、update可能なパッケージはないことを確認しました
cat check-update_after
まとめ
yum updateが途中で中断した場合は、再度yum updateコマンドを実行するのみでは
不十分だと知りました。
yum updateはネットワークが切断されると中断されることが分かりました。
理由はTeraTermのsshから/bin/bashの親プロセスが起動されて
子プロセスとしてyum updateが実行されたため、
親プロセスのsshが落ちることでyum updateも中断されてしまいます。
今後、yum updateが途中で中断してしまった際はこちらの記事を参考にしてください。