SRPMの取り出し

と言うわけで早速半自動取り出しスクリプトを作成

#
# エラーリストなどから自動で.srpmを取り出すためのスクリプト
# getsrc.sh

#! /bin/sh
cat $1 | gawk '{ print $1 }'|grep "[0-9A-Za-z]"|grep -v '^setting' > ./temp.txt
cmd=""
spc=" "

for fn in $(cat ./temp.txt); do
        if [ $fn == "RPM" ]; then
                break
        fi
        cmd=$cmd$spc$fn$spc
done

rm temp.txt -f
echo $cmd
dnf download --source --destdir ./SRPMS $cmd

楽ですね。さらに楽だなぁと思ったのは重複している場合やすでにダウンロードしている場合には自動でスキップしてくれる点です。なので、何も考えずにリストを作成してこのスクリプトに食わせてやればOK。
dnfの直前のecho $cmdは確認用でもあるので、無くても問題はないですね。

例えばlist1.txtなるファイルに

tcpdump-4.99.4-1.fc38.x86_64
tigervnc-server-minimal-1.13.1-3.fc38.x86_64
time-1.9-20.fc38.x86_64
tmux-3.3a-3.fc38.x86_64

と言った感じで羅列してやり、あとは

$ ./getsrc.sh list1.txt

これだけで、このディレクトリ内の./SRPMS内に.srpmがダウンロードされます。リストにはバージョン情報は無くてもよいので、単に

tcpdump
tigervnc-server-minimal
time
tmux

でもOKです。
いや、もっと早く気づいていれば楽できたのにな…

小技のメモ書き

-O3化の作業で.srpmを引っ張ってくるのにいちいち手動でftpを利用するのは面倒です。さらに.srpm自体がupdate側にあるのかそうでないかまで判断しなくてはなりません。

なんとかならんかと考えていたところ、なんとdnfに.srpmをダウンロードする機能が存在することが判明。
しかもupdate側かどうかまで自動で判別してコマンド発行時点での最新を引っ張ってくれます。ファイル名は厳密にチェックされますが、バージョンまでは指定する必要がないのでとても便利。

dnf download --source file名1 file名2...

インストール済みやdnf check-updateで示されるrpmモジュール名からバージョン情報を取りのぞくスクリプトはgawkかpython+正規表現を使えば簡単に書けますから、.srpmの取り出しも半自動化できます。

早く気付けば良かったな。これでftpは必要無くなった?