opkg パッケージをインストールする前に、バージョンを確認するスクリプトを作成したいと思います。
私は多くの研究を行ってdpkgシステムへの答えを見つけましたが、opkgシステムでは見つかりませんでした。
私はこれを試しましたが、opkg info
すべてopkg status
インストールされたopkg list
パッケージでは動作しますが、ファイルでは動作しないようです.opk
。
どういうわけか情報を取り戻すことができますが、opkg install file.opk --noaction
非常に遅く、さまざまな理由でテストインストールが失敗する可能性があるため、出力を確実に解析するのは困難です。
文字列だけをopkg compare-versions
比較するので、解決策はありません。
修正する:
私はこれについてもっと考えています。
opkパッケージは、デフォルトで.tar.gz
バージョン番号がテキストファイル(ファイル内CONTROL/control
)に保存されるファイルです。
そのため、パッケージからバージョン情報を取得するには必然的に解凍する必要があるため、時間がかかります。
ファイル名は簡単に変更できますが、簡単な解決策はバージョン番号をパッケージファイル名の一部として作成し、その名前を解析することです。
私の計画は2段階のアプローチを使用することです。 1)パッケージ名のバージョン番号部分を作成し、パッケージ名を解析して「信頼性の低い」バージョン番号を取得します。 2) よかったら「テスト実行」を行います。ファイルから実際のバージョン番号を取得するには、インストールしてくださいCONTROL/control
。それでも良い場合は、実際のインストールを進めてください。
このアプローチの問題の1つは、実際の設置時間が事実上2倍になるということです。つまり、実際のインストールを実行する前に最初にテスト実行を実行する必要があります。これには同じ時間がかかります。
アップデート2:
opkはar
2つのファイルを含むアーカイブdebian-binary
control.tar.gz
data.tar.gz
であり、バージョン情報がcontrol.tar.gz
。
したがって、迅速に抽出して抽出control.tar.gz
しopk
、control
そこcontrol.tar.gz
からバージョン番号を取得できます。
答え1
#!/bin/sh
# command that checks opk version number
#set -e
VERSION=3
version ()
{
echo
echo "`basename $1` version $VERSION"
echo "command that checks opk version number"
echo
exit 0
}
usage ()
{
echo "
Usage: `basename $1` <options> [ files for install partition ]
Mandatory options:
--opk_file file name (e.g ./my_package.opk)
Optional options:
--version Print version.
"
exit 1
}
# Process command line...
while [ $# -gt 0 ]; do
case $1 in
--help | -h)
usage $0
;;
--opk_file) shift; opk_file=$1; shift; ;;
--version) version $0;;
*) copy="$copy $1"; shift; ;;
esac
done
test -z $opk_file && usage $0
###########################
end parsing command line
###########################
ar -x $opk_file control.tar.gz #extract control.tar.gz from .opk
tar -zxvf control.tar.gz ./control > /dev/null 2>&1
# extract control file from control.tar.gz, silent stderr/stdout
cat control |grep Version | sed -e "s/Version:\s*\(\d*\)\D*/\1/"
# grep Version keyword and remove it
rm control
rm control.tar.gz
# clean up
使用法:
opkversion.sh --opk_file ./mypackage.opk
出力例:
9999
コマンドを調整すると、sed
コマンドのフィルタリング戦略が変更される可能性があります(opkパッケージのバージョン番号は非常に複雑になる可能性があります)。