저장소에서 현재 디렉토리로 deb 파일을 다운로드하는 apt 명령이 있습니까?


45

나는 종종 설치 트리거 (postinst, postrm) 또는 패키지의 특정 부분 (와 같은 /usr/share/etc)에 관심이 있습니다. 현재 다음 명령을 실행하여 소스 코드를 검색하고 있습니다.

apt-get source [package-name]

단점은이 파일이 종종 바이너리 패키지보다 훨씬 크며 설치 트리를 반영하지 않는다는 것입니다.

현재 http://packages.ubuntu.com/을 통해 패키지를 다운로드하고 있습니다 .

  1. 검색 [package-name]
  2. 패키지를 선택하십시오
  3. 다운로드를 위해 amd64 / i386을 클릭하십시오
  4. 실제 파일 다운로드

이것은 나에게 너무 오래 걸리며 쉘을 정말로 좋아하는 사람으로서 다음 ( 가상 ) 명령 과 같은 것을하고 싶습니다 .

apt-get get-deb-file [package-name]

apt-get manual page 에서 이와 같은 것을 찾을 수 없습니다 . 내가 찾은 가장 가까운 것은 --download-only스위치이지만 /var/cache/apt/archives, 현재 디렉토리가 아닌 패키지를 루트 권한이 필요합니다.


파일을 저장하지 않은 시스템의 차이점 : ssh debianmachine1 "dpkg --get-selections"| diff-<(dpkg --get-selections)
Scott Robert Schreckengaust

debget패키지에서 사용할 수 있습니다 debian-goodies.
Shayan

답변:


58

당신은 사용할 수 download의 하위 명령을 apt, apt-get또는 aptitude. 예를 들어 $ PKG 가 원하는 패키지 인 경우 다음 중 하나를 수행합니다.

apt-get download $PKG
apt download $PKG
aptitude download $PKG

루트 권한이 필요하지 않습니다. apt-getand를 사용하여 동일하게 추정 할 수도 있습니다 wget.

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

그러나 패키지를 설치하는 데 필요한 모든 패키지를 가져 오므로 대신 제한을 시도 할 수 있습니다.

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

패키지 이름을 매개 변수로 사용하여 apt-download 명령으로 사용할 수 있도록 wget 행을 함수에 넣을 수도 있습니다.

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

수정 사항에 유의하십시오. $ PKG는 $ 1로 바뀌고 -c 매개 변수는 계속 중단 된 다운로드를 가능하게합니다.


1
훌륭합니다. 이것이 내가 찾고있는 것입니다. 또 다른 이유는 내 시스템에 적성 유지하기 위해 제공하지 않는 다른 유용한 명령 apt입니다 aptitude changelog $PKG.
Lekensteyn

4
업데이트 : 단정 한에서 (APT 버전 0.8.11 정확한 될)는 aptitude download기능에서 사용할 수 있습니다 apt뿐만 아니라 : apt-get download $PKG.
Lekensteyn

달콤한 나의 고대 쉽다 v0.8.10에도 불구하고 작동
rogerdpack

그들이 멀리 --print-URL을 옵션으로했던 것 같다
erjoalgo

--print-urls 옵션은 여전히 ​​존재합니다
kumarharsh

8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

노트 :

대상 폴더에 partial이라는 이름의 폴더를 만들어야합니다.


그렇게 나쁘게 들리지 않습니다. 옵션은로 설명 된 것 같습니다 man apt.conf. 폴더 생성을 피하고 싶습니다.
Lekensteyn

궁금한데 왜 폴더를 만들지 않겠습니까?
mount.cifs

패키지를 영원히 저장할 필요가 없으며 폴더를 만들지 않아도 시간이 절약됩니다.
Lekensteyn

이 솔루션은 패키지 제거를 주장합니다 (예 : /etc/apt/sources.list나중에 패키지를 다운로드 할 의도로 최신 버전으로 변경 하는 경우).이 경우 wget위 의 방법은 더 유용 할 수 있습니다. 아무것도 제거하고 싶지
않아

5

Ubuntu 14.04 ( apt패키지 버전 1.0.1ubuntu2) apt-get에는 현재 디렉토리에 download지정된 패키지를 다운로드하는 명령이 포함되어 .deb있습니다.

예를 들어 파일 관리자를 다운로드한다고 가정합니다 Ranger.

$ apt-get download ranger

결과 :

$ ls . | grep ranger
ranger_1.6.0-1_all.deb

이것은 완벽 해요. 모든 apt install의존성 요구 사항을 충족시킬 수 없다면 내가 시도한 다른 모든 솔루션이 작동하지 않습니다 . 나는 단지 땜질을 위해 .deb 파일을 원했다!
Raziel

3

목록에서 모든 deb 패키지를 다운로드하려면 다음을 수행하십시오.

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

한 줄에 하나의 패키지 이름 만 넣으십시오. requirements.txt 파일과 같습니다. 예를 들어 다음과 같은 내용이 있습니다.

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

도움이 되었기를 바랍니다. ;)


2

sudo apt-get install devscripts

dget [package-name]


이것은 질문에 대한 답변을 제공하지 않습니다. 저자에게 비평을하거나 설명을 요청하려면 게시물 아래에 의견을 남겨주십시오.
s3lph

어떻게 대답하지 않습니까? 아카이브에서 현재 디렉토리로 deb를 다운로드합니다. 그게 정확히 질문이 아니 었습니까?
Michael Terry

조금 더 자세한 내용이 유용 할 수 있습니다. 이것은 기술적 으로 답변 이되지만 여전히 두 개 이상의 명령을 제공 할 수 있습니다.
s3lph

:: shrug :: 여기의 다른 답변과 달리이 질문에는 단서 나 경고가 없습니다. 간단한 질문에 대한 간단한 답변입니다.
Michael Terry

0

/var/cache/apt/archives세계가 읽을 수 있습니다. 후에 apt-get -d는 홈 디렉토리로 압축을 풉니 다. dpkg -e /var/cache/apt/archives/foo_version.deb foo홈 디렉토리에서 실행 하면 제어 파일이로 덤프됩니다 foo/.


이 방법의 문제점은 다운로드에 여전히 관리자 권한이 필요하다는 것입니다. 홈 디렉토리에 파일을 가져 오는 것만으로도 극한의 상황에 빠지는 것은 바보 같은 것 같습니다.
ændrük

.deb를 여는 것은 문제가 아니라 다운로드하는 것입니다. 버그 일 수도 있고 / var / cache / apt / archives`의 패키지도 umask의 영향을받습니다. umask를 027로 설정 했으므로 패키지를 /var/cache/apt/archives읽을 수 없습니다. 패키지 내용을 검사해야하므로 한 번만 다운로드하면됩니다 /tmp.
Lekensteyn

0

debget패키지에 포함 된 명령 을 사용할 수 있습니다 debian-goodies.

다음과 같이 설치하십시오.

sudo apt install debian-goodies

다음을 사용하여 패키지를 다운로드하십시오.

debget <package_name>

예를 들면 다음과 같습니다.

debget debian-goodies

debian-goodies_0.79_all.deb현재 디렉토리에 다운로드 됩니다 ( pwd현재 작업 디렉토리를 인쇄하십시오).


debian-goodies유용한 명령이 많이 포함되어 있습니다. askubuntu.com/a/1170001/777279
Shayan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.