일반적인 다운로드 및 설치, apt(적성 등)의 기능에 관한 것이 아니라 스크립트된 것입니다.다운로드패키지 파일.
dget
이 작업을 수행하는 도구를 찾았 는데 정말 잘 작동합니다. 하지만 안타깝게도 /etc/apt/sources.list
.
이것이 가능한가? 사실 dget
이런 기능이 제일 좋은데,하지만여기에서 저장소 URL을 지정할 수도 있습니다.
추신: 스크립트를 제공해 주셔서 감사합니다. 하지만 저는 이 작업에 데비안 도구를 사용하는 것을 선호합니다.매우 단순한일. 외부 사용을 위한 빌드 스크립트의 일부가 됩니다.어느불필요한 복잡성으로 인해 감당할 수 없는 부수 비용이 발생합니다. 데비안 도구로 수행해야 합니다.
PS2. 마지막으로 시스템 전체 저장소를 업데이트하고 dget
.
답변1
내가 찾을 수 있는 모든 도구는 로컬 apt
정보(및 /etc/apt/sources.list
마지막 실행 apt-get update
에서 정의된 저장소 등)를 사용합니다. 설명이 별로 어렵지 않네요저장소 형식하지만.
구하다
#!/bin/sh
# Downloads a package from a repository
# dlpkg repo distro suite arch package
for arch in all "${4}"; do
curl "${1}/dists/${2}/${3}/binary-${arch}/Packages.xz" | xz -d | "$(dirname $0)/pkgfilename" -v "PACKAGE=${5}" | while read filename; do
curl -O "${1}/${filename}"
done
done
와 같이 dlpkg
, 그리고
#!/usr/bin/awk -f
/Package:/ {
package = $2
}
package == PACKAGE && /Filename:/ {
print $2
}
as 로 pkgfilename
실행 가능하게 만든 다음 다음을 실행하여 패키지를 다운로드할 수 있습니다.
./dlpkg <repository URL> <distribution> <suite> <architecture> <package>
예를 들어
./dlpkg http://ftp.fr.debian.org/debian unstable main amd64 libc6
Packages
파일이 표준 순서( Package
before ) Filename
가 아닌 저장소를 처리해야 하는 경우 다음 AWK 스크립트를 사용할 수 있습니다.
#!/usr/bin/awk -f
BEGIN {
filename = ""
}
/^$/ {
filename = ""
stanza = 0
}
/Package:/ {
if ($2 == PACKAGE) {
stanza = 1
if (filename != "") {
print filename
stanza = 0
}
}
}
/Filename:/ {
filename = $2
if (stanza == 1) {
print filename
filename = ""
}
}
오류 처리는 없으며 독자의 연습 문제로 남겨 둡니다. 서명확인도 안되고..
답변2
최신 버전의 Debian이나 다른 배포판을 실행하기 위해 apt를 사용하는 경우 이를 사용할 수 있습니다 apt-get
. apt-get.conf
사용되지 않도록 다음 설정을 이름의 파일에 넣어주세요
Dir::Etc::main ".";
Dir::Etc::Parts "./apt.conf.d";
Dir::Etc::sourcelist "./sources.list";
Dir::Etc::sourceparts "./sources.list.d";
Dir::State "./apt-tmp";
Dir::State::status "./apt-tmp/status";
Dir::Cache "./apt-tmp";
필요한 서류를 준비하세요:
mkdir -p apt-tmp/lists/partial
touch apt-tmp/status
apt-get -c apt.conf update >/dev/null
그런 다음 다음 명령을 사용하여 패키지를 현재 디렉터리에 다운로드할 수 있습니다.
apt-get -c apt.conf download $packages
apt-get
이 명령이 누락된 이전 버전의 경우 download
다음을 사용할 수 있습니다.
apt-get -c apt.conf install -d $packages
패키지와 해당 종속성을 apt-tmp/archives
.
답변3
나는 당신이 달성하려는 것이 저장소를 갖는 아이디어와 일치하지 않는다고 생각합니다. 아이디어는 리포지토리를 추가한 다음 리포지토리에서 설치해야 한다는 것입니다.
패키지는 수동으로 다운로드할 수 있으며(저는 종종 Fedora의 RPM 패키지를 사용하여 이 작업을 수행합니다) 일반 도구(제 경우에는 dnf
)를 사용하여 수동으로 설치할 수 있습니다.
저는 보통 의 URL을 사용 /etc/yum.repos.d/<repo>.repo
하고 브라우저로 탐색하여 wget
DEB 패키지와 유사해야 합니다.
그래서,
- 브라우저를 사용하여 수동으로 패키지를 다운로드하거나
wget
- CLI에서 패키지 관리 클라이언트를 사용하여 설치합니다.
저장소를 온라인에서 직접 사용할 수 있다면(그렇지 않은 이유는 모르겠습니다) dnf
RPM 패키지에 URL을 제공하면 의미가 있을 것입니다. 나는 동등한 데비안 도구가 같은 일을 할 것이라고 확신합니다. 따라서 브라우저나 wget
.
내가 이해하는 한, 당신 말이 옳습니다다운로드팩. 그래서 이 경우에는 plain을 사용하는 것이 wget
가장 좋은 방법이라고 생각합니다 .
답변4
음, 어쩌면 이 스크립트가 귀하의 요구에 맞는 솔루션일 수도 있습니다.
#!/bin/bash U=1달러 파일="$2" [[ -z "$U" ]] && echo -e "사용법: $0 repo-url [다운로드할 파일]\n"다운로드할 파일"이 지정되지 않은 경우 이 스크립트는 저장소 파일의 파일을 나열합니다.\n" ; for i in $(curl -l "$U" 2>/dev/null|grep -i 'href='|sed -e 's/.*href=//g' -e 's/>.*/ /g' -e 's/"//g'|grep -v '/$'|grep "$FILE") 하다 if [[ -z "$FILE" ]] 그 다음에 echo "파일: $i" 기타 echo "파일 다운로드: $i" 컬 -q "${U}/${i}" --output "$i" 2>/dev/null ls -la "$i" 필리핀 제도 완벽한