답변:
repotrack
대신 다음과 같이 사용할 수 있습니다 .
repotrack -a x86_64 -p /repos/Packages [packages]
불행히도 -a
플래그 (아치)에 버그가 있습니다. i686 및 x86_64를 다운로드합니다.
문제를 해결하는 방법은 다음과 같습니다.
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
repoquery
그룹 패키지 목록을 얻는 데 사용할 수 있습니다 .
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
repotrack에 피드 할 수있는 항목 :
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursive
repoquery 명령에 옵션을 추가하여 재귀 적으로 작동하도록하십시오.
yum-utils
프로젝트에 제출해야합니다 . 예상보다 많은 패키지를 다운로드하는 이유는 함수 rpmUtils.arch.getArchList()
가 지정된 아키텍처에 대해 호환 가능한 모든 아키텍처를 반환 하기 때문 입니다. 예를 들어 패키지에 noarch
필요할 수있는 아키텍처가 포함 x86_64
됩니다. 소스를 확인할 수 있습니다 : yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
모든 사람의 정보를 yumdownloader
위해, 일을하지 마십시오. `yum 패키지 관리 경험이있는 사람이라면, 다음 명령 줄이 패키지 RPM과 모든 종속 항목을 재귀 적으로 다운로드 할 것으로 기대하는 것은 당연합니다.
yumdownloader --resolve <package>
그러나 그렇지 않습니다. 첫 번째 레벨 종속성 또는 아직 설치되지 않은 종속성을 인쇄 할 수 있습니다. 확실하지 않습니다.
CentOS 6.5에서 작동하는 방법은 다음과 같습니다. 다음 단계에 따라 Red Hat에서yum
제공 한 다운로드 전용 플러그인을 설치하십시오 . 기본적으로 CentOS 6.x에서 다음을 수행하십시오.
$ sudo yum install yum-plugin-downloadonly.noarch
그런 다음의 --installroot
스위치 와 함께 플러그인을 사용하십시오 yum
. 이렇게하면 yum
시스템에 이미 설치된 종속성을 해결 한 다음 건너 뛸 수 없습니다.
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
패키지의 RPM <package>
과 디렉토리에있는 모든 종속성을 다운로드 했습니다 <rpm_dir>
. Git을 사용한 예 :
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarch
가 No package yum-plugin-downloadonly.noarch available.
어떻게해야합니까?
yum search yumdownloader
돌아옵니다yum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
추가하면 이 오류가 발생 합니다 --installroot
.
나는 스레드가 오래되었다는 것을 알고 있지만, 누군가가 이것을 우연히 발견하면 yum을 사용하여 원하는 동작을 수행 할 수 있습니다.
먼저 다운로드 전용 플러그인 (RHEL 지침) 설치 : (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
다음과 같이 명령을 실행하십시오.
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
--downloaddir
yum 을 무시 하면 자동으로 다운로드됩니다./var/cache/yum
따라서 yumdownloader를 구체적으로 사용해야하지 않는 한 이것이 목표를 달성하는 가장 간단한 방법이라고 생각합니다.
yum이 dnf로 바뀌는 미래 (Fedora 23 이상) 출신이라면 이 bash 스크립트가 유용 할 수 있습니다 .
rpmDownloader :
#!/bin/sh
set -xev
rm -fr packages
#dnf download $1 --destdir packages
export PATH=.:$PATH
echo $PWD
DEPS=$(rpmResolver $1)
dnf download $DEPS --destdir packages
rm -fr ${1}-dependencies
mv packages ${1}-dependencies
rpmResolver :
#!/bin/sh
goal=$1
deps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $goal | egrep -v '^(rpmlib|rtld|config|/)')
goals=
while true; do
subs=$(rpm -q --qf '%{NAME}\n' --whatprovides $deps | sort -u | tr '\n' ' ')
if [ ."$subs" = ."$goals" ]; then
echo -n "$goals "
exit 0
fi
goals=$(echo $goals $subs | tr ' ' '\n' | sort -u | tr '\n' ' ')
for sub in $subs; do
subdeps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $sub | egrep -v '^(rpmlib|rtld|config|/)')
deps=$(echo $deps $subdeps | sort -u)
done
done
실제로 이와 같은 리포지토리를 구축하기가 어렵다는 것을 알았습니다. 우리는 다음과 같은 이유로이 저장소를 만들었습니다.
우리가 겪을 수있는 문제는 다음과 같습니다.
결국 우리 문제에 대한 더 나은 해결책 은 공식 저장소를 프록시하고 우리가 사용한 패키지를 캐시하는 것입니다. 이것은 다음과 같은 이유로 잘 작동합니다.
우리는 Nginx와 내장 프록시 지원을 사용했습니다.
누가의 대답 과 의견을 바탕으로 ...
이 글을 쓰는 repotrack
경우 다음과 같은 아키텍처의 모든 일치합니다 x86_64
지정 : x86_64
, athlon
, i686
, i586
, i486
, i386
,와 noarch
.
내 목적을 위해 나는 패키지 에만 관심이 x86_64
있으며 noarch
배포판에 패키지가 없다는 것을 알고 athlon
있습니다.
다음 명령은 패키지 URL 목록을 가져 와서 i?86
아키텍처를 필터링 하고 패키지가 다운로드 될 때 패키지 이름을 인쇄합니다.
repotrack --arch=x86_64 --urls gs1000-server \
| sed '/\.i[3-6]86\.rpm$/d' \
| xargs -I {} sh -c 'curl -s -O {}; echo {} | rev | cut -d '/' -f 1 | rev'
참고 repotrack
이 패키지를 찾을 수없는 경우 경고 메시지를 표시하지 않습니다 만족 당신의 활성화의 repos에 의존. 조용히 건너 뜁니다.
또한 시도
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
예 :
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires
--resolve
옵션은 deps에 대해 재귀 적으로 작동하지 않습니다.