programing tip

모든 종속성 및 패키지를 디렉터리에 다운로드하는 방법

itbloger 2020. 12. 14. 07:55
반응형

모든 종속성 및 패키지를 디렉터리에 다운로드하는 방법


인터넷에 연결되지 않은 컴퓨터에 패키지를 설치하려고합니다. 내가하고 싶은 것은 인터넷에 연결된 기계에 모든 패키지와 의존성을 다운로드 한 다음 모든 것을 오프라인 컴퓨터에 sneaker-net으로 다운로드하는 것입니다.

나는 apt-getand를 가지고 놀았 apt-cache지만 패키지와 종속성을 내가 선택한 디렉토리에 한 번에 다운로드하는 빠르고 쉬운 방법을 찾지 못했습니다. 어떻게해야합니까? 이 문제에 대해 올바르게 가고 있습니까? 의존성이 많은 오프라인 패키지를 어떻게 설치 하시겠습니까?


# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>

표시된 답변에는 다운로드를 수행하는 시스템에서 사용 가능한 패키지가 대상 시스템과 다를 수 있으므로 패키지 세트가 불완전 할 수 있다는 문제가 있습니다.

이를 방지하고 모든 종속성을 얻으려면 다음을 사용하십시오.

apt-get download $(apt-rdepends <package>|grep -v "^ ")

에서 반환 된 일부 패키지 가 다운로드 할 apt-rdepends정확한 이름 apt-get download(예 :)으로 존재하지 않습니다 libc-dev. 이러한 경우에, 그 정확한 이름 필터링 (사용하십시오 ^<NAME>$예를 들어 기타 관련 이름, 너무 libc-dev-bin, 존재가 생략되지 않음).

apt-get download $(apt-rdepends <package>|grep -v "^ " |grep -v "^libc-dev$")

다운로드가 완료되면 .deb인터넷이없는 컴퓨터로 파일을 이동 하고 설치할 수 있습니다.

sudo dpkg -i *.deb

동일한 질문에 이미 대답했습니다. 데비안 패키지의 재귀 종속성을 나열 / 다운로드하는 방법은 무엇입니까?

시험:

PACKAGES="wget unzip"
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \
  --no-conflicts --no-breaks --no-replaces --no-enhances \
  --no-pre-depends ${PACKAGES} | grep "^\w")

aptitude --download-only ...방법은 인터넷에 연결된 데비안 배포판이있는 경우에만 작동합니다.

그렇지 않은 경우 연결이 끊어진 데비안 시스템에서 다음 스크립트를 실행하는 것이 더 낫다고 생각합니다.

apt-get --print-uris --yes install <my_package_name> | grep ^\' | cut -d\' -f2 >downloads.list

downloads.list 파일을 연결된 Linux (또는 Linux가 아닌) 컴퓨터로 이동하고 다음을 실행합니다.

wget --input-file myurilist

이렇게하면 모든 파일이 현재 디렉토리에 다운로드되고 USB 키에 복사하여 연결이 끊긴 데비안 컴퓨터에 설치할 수 있습니다.

크레딧 : http://www.tuxradar.com/answers/517

추신 : 블로그 게시물은 읽기가 쉽지 않았기 때문에 기본적으로 복사했으며 게시물이 사라질 경우를 대비했습니다.


(위의 모든
사항을 기반으로) 저에게 효과적이었던 약간 단순화 된 (그리고 저에게 도움이되는) 방식 (위의 모든 사항을 기반으로 함) 종속성 계층 구조가 한 단계 더 깊어 질 수 있습니다.

패키지의 종속성 가져 오기

$ apt-cache depends mongodb | grep Depends:
  Depends: mongodb-dev
  Depends: mongodb-server

URL 가져 오기 :

sudo apt-get --print-uris --yes -d --reinstall install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-tools | grep "http://" |  awk '{print$1}' | xargs -I'{}' echo {} | tee files.list
wget --input-file files.list

이렇게하면 모든 Debs가 현재 디렉토리에 다운로드되며 후보를 찾을 수 없어도 실패하지 않습니다.

또한 sript를 실행하기 위해 sudo가 필요하지 않습니다!

nano getdebs.sh && chmod +x getdebs.sh && ./getdebs.sh

#!/bin/bash

package=ssmtp

apt-cache depends "$package" | grep Depends: >> deb.list

sed -i -e 's/[<>|:]//g' deb.list

sed -i -e 's/Depends//g' deb.list

sed -i -e 's/ //g' deb.list

filename="deb.list"

while read -r line
do
    name="$line"
    apt-get download "$name"
done < "$filename"

apt-get download "$package"

Note: I used this as my example because I was actually trying to DL the Deps for SSMTP and it failed on debconf-2.0, but this script got me what I need! Hope it helps.


I used apt-cache depends package to get all required packages in any case if the are already installed on system or not. So it will work always correct.
Because the command apt-cache works different, depending on language, you have to try this command on your system and adapt the command. apt-cache depends yourpackage
On an englisch system you get:

$ apt-cache depends yourpackage
node
  Depends: libax25
  Depends: libc6


On an german system you get: node

  Hängt ab von: libax25
  Hängt ab von: libc6


The englisch version with the term:
"Depends:"
You have to change the term "yourpackage" to your wish twice in this command, take care of this!

$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "  Depends:" |  sed 's/  Depends://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list


And the german version with the term:
"Hängt ab von:"
You have to change the term "yourpackage" to your wish twice in this command, take care of this!
This text is used twice in this command, if you want to adapt it to your language take care of this!

$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "Hängt ab von:" |  sed 's/  Hängt ab von://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list


You get the list of links in downloads.list
Check the list, go to your folder and run the list:

$ cd yourpathToYourFolder

$ wget --input-file downloads.list


All your required packages are in:

$ ls yourpathToYourFolder

I'm assuming you've got a nice fat USB HD and a good connection to the net. You can use apt-mirror to essentially create your own debian mirror.

http://apt-mirror.sourceforge.net/


This will download all packages and dependencies (no already installed) to a directory of your choice:

sudo apt-get install -d -o Dir::Cache=/path-to/directory/apt/cache -o Dir::State::Lists=/path-to/directory/apt/lists packages

Make sure /path-to/directory/apt/cache and /path-to/directory/apt/lists exist. If you don't set -o Dir::Cache it points to /var/cache/apt, Dir::State::Lists points to /var/lib/apt/lists (which keeps the index files of available packages)

Both -o options can be used with update and upgrade instead of install.

On different machine run the same command without '-d'

참고URL : https://stackoverflow.com/questions/13756800/how-to-download-all-dependencies-and-packages-to-directory

반응형