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. 그래도 좋으면 실제 설치를 진행하십시오.

이 접근 방식의 문제점 중 하나는 실제 설치 시간이 사실상 두 배로 늘어난다는 점입니다. 즉, 실제 설치를 실행하기 전에 먼저 테스트 실행을 실행해야 하는데, 이 작업에는 동일한 시간이 걸립니다.

업데이트 2:

opk는 ar두 개의 파일을 포함하는 아카이브 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 패키지의 버전 번호는 매우 복잡할 수 있음).

관련 정보