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 패키지의 버전 번호는 매우 복잡할 수 있음).