opkgパッケージをインストールせずにバージョン情報を取得する方法は?

opkgパッケージをインストールせずにバージョン情報を取得する方法は?

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はar2つのファイルを含むアーカイブdebian-binary control.tar.gz data.tar.gzであり、バージョン情報がcontrol.tar.gz

したがって、迅速に抽出して抽出control.tar.gzopkcontrolそこ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パッケージのバージョン番号は非常に複雑になる可能性があります)。

おすすめ記事