http://www.itmedia.co.jp/enterprise/articles/0711/17/news001.html
...マイクロコアカーネルって、何?
とりあえず Advanced W-ZERO 3 [es] で動作するようにしたバージョンを用意したので置いておきます。
...もし 10.3.9 で動作しない場合は連絡もらえると助かります。実は今回、10.3.9 と 10.4.x (ppc) のテストできてないんで...。
まぁ、表題の通りなのですが。
沢山の RPM が一つのフォルダに固まって入ってて、そこからソフトウェアごと最新の RPM だけを拾いだしたい、古い RPM を処分して容量を確保したくなったのです。ちょっとさがしたけどちょうどいいソフトがなかったので、rpm-python の API 使って自作してみました。
#!/usr/bin/python
import rpm
import re
import sys,os
if len( sys.argv ) < 1 :
rpmdir=sys.argv[1]
else:
rpmdir="."
rpmdict = {} ;
rpmnewests = {} ;
ts = rpm.TransactionSet()
ts.setVSFlags( rpm.RPMVSF_NORSA | rpm.RPMVSF_NODSA )
suffix = re.compile( '.*\.rpm$' )
for f in os.listdir( "." ) :
if suffix.match( f ) :
fp = os.open( f, os.O_RDONLY )
hdr = ts.hdrFromFdno( fp )
os.close( fp )
if rpmdict.has_key( hdr[ rpm.RPMTAG_NAME ] ) :
nlist = rpmdict[ hdr[ rpm.RPMTAG_NAME ] ]
else:
nlist = []
rpmdict[ hdr[ rpm.RPMTAG_NAME ] ] = nlist
info = {}
info[ 'file' ] = f
info[ 'hdr' ] = hdr
nlist.append( info )
if rpmnewests.has_key( hdr[ rpm.RPMTAG_NAME ] ) :
ninfo = rpmnewests[ hdr[ rpm.RPMTAG_NAME ] ]
res = rpm.versionCompare( ninfo['hdr'], info['hdr'] )
if res == 0:
print "res is zero"
res = cmp( ninfo['hdr'][rpm.RPMTAG_RELEASE], info['hdr'][rpm.RPMTAG_RELEASE] )
if res < 0 :
rpmnewests[ hdr[ rpm.RPMTAG_NAME ] ] = info
else:
rpmnewests[ hdr[ rpm.RPMTAG_NAME ] ] = info
for k in rpmdict :
print k," : ", rpmnewests[ k ][ 'file' ]
for l in rpmdict[ k ] :
print " ", l[ 'file' ]
こんなかんじ