はじめに

実務で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が途中で中断してしまった際はこちらの記事を参考にしてください。