未解決のYumトランザクションがある場合、Yumは次のコマンドを実行すると次のような内容を出力しますyum update
。
There are unfinished transactions remaining. You might consider
running yum-complete-transaction first to finish them.
副作用なしに未払い取引があるかどうかを確認するには?(たとえば、解析された出力は、yum update
リポジトリメタデータの更新などの多数の副作用を引き起こします。)
man 8 yum-complete-transaction
一致するファイルが存在するかどうかを簡単に確認できることをお勧めします/var/lib/yum/{transaction-all,transaction-done}*
(強調表示):
yum-complete-transactionは、システムで不完全または中断されたyumトランザクションを見つけて完了しようとするプログラムです。 yumトランザクションが実行中に中断された場合は、通常/var/lib/yumで見つかるtransaction-all *ファイルとtransaction-done *ファイルを確認します。。
未解決のトランザクションが複数見つかった場合は、最新のトランザクションを最初に完了しようとします。複数回実行して未解決のトランザクションをクリーンアップできます。
しかし、これは完全に正確ではないようです。たとえば、これらのファイルが存在するがyum-complete-transaction
完了する必要があるトランザクションが残っていないと報告するシステムがあります。
[myhost ~]% ls /var/lib/yum/{transaction-all,transaction-done}*
/var/lib/yum/transaction-all.2016-11-23.07:15.21.disabled
/var/lib/yum/transaction-done.2016-11-23.07:15.21.disabled
[myhost ~]% sudo yum-complete-transaction
Loaded plugins: product-id, refresh-packagekit, rhnplugin
No unfinished transactions left.
完了していないトランザクションファイルをクリーンアップしようとしましたが、--cleanup-only
ファイルを削除できませんでした。
[myhost ~]% sudo yum-complete-transaction --cleanup-only
Loaded plugins: product-id, refresh-packagekit, rhnplugin
No unfinished transactions left.
[myhost ~]% ls /var/lib/yum/{transaction-all,transaction-done}*
/var/lib/yum/transaction-all.2016-11-23.07:15.21.disabled
/var/lib/yum/transaction-done.2016-11-23.07:15.21.disabled
答え1
以下は、未解決のトランザクション数を出力するソリューションです。
find /var/lib/yum -maxdepth 1 -type f -name 'transaction-all*' -not -name '*disabled' -printf . | wc -c
yum-complete-transactions
のソースコードによると、yum-utils
すべての/var/lib/yum/transaction-all*
ファイルは完了していないトランザクションと見なされます。
def find_unfinished_transactions(yumlibpath='/var/lib/yum'):
"""returns a list of the timestamps from the filenames of the unfinished
transactions remaining in the yumlibpath specified.
"""
timestamps = []
tsallg = '%s/%s' % (yumlibpath, 'transaction-all*')
#tsdoneg = '%s/%s' % (yumlibpath, 'transaction-done*') # not used remove ?
tsalls = glob.glob(tsallg)
#tsdones = glob.glob(tsdoneg) # not used remove ?
for fn in tsalls:
trans = os.path.basename(fn)
timestamp = trans.replace('transaction-all.','')
timestamps.append(timestamp)
timestamps.sort()
return timestamps
...次に終わるファイルを除くdisabled
:
times = []
for thistime in find_unfinished_transactions(self.conf.persistdir):
if thistime.endswith('disabled'):
continue
# XXX maybe a check here for transactions that are just too old to try and complete?
times.append(thistime)
if not times:
print "No unfinished transactions left."
sys.exit()
残念ながら、隠されたコードはmain()
関数の内部にあるため、yum-complete-transaction.py
独立して呼び出すことはできません。このコードがよりモジュール化されている場合は、上記のシェルパイプラインよりも正確に未解決のトランザクションを確認するPythonスクリプトを作成できます。