명령줄에서 특정 저장소의 패키지를 다운로드하는 방법은 무엇입니까?

명령줄에서 특정 저장소의 패키지를 다운로드하는 방법은 무엇입니까?

일반적인 다운로드 및 설치, 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파일이 표준 순서( Packagebefore ) 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하고 브라우저로 탐색하여 wgetDEB 패키지와 유사해야 합니다.

그래서,

  1. 브라우저를 사용하여 수동으로 패키지를 다운로드하거나wget
  2. CLI에서 패키지 관리 클라이언트를 사용하여 설치합니다.

저장소를 온라인에서 직접 사용할 수 있다면(그렇지 않은 이유는 모르겠습니다) dnfRPM 패키지에 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"
 필리핀 제도
완벽한

관련 정보