2012-12-07 104 views
38

我试图在没有Internet连接的机器上安装一个包。我想要做的是通过互联网连接下载所有软件包和依赖关系,然后将所有内容都连接到离线计算机。如何下载所有依赖项和包到目录

我一直在玩apt-getapt-cache,但我还没有想出一个简单快捷的方法来将软件包和依赖关系一次下载到我选择的目录中。我将如何做到这一点?我正确地解决这个问题吗? 你将如何安装具有很多依赖关系的脱机软件包?

+0

http://superuser.com/questions/876727/how-to-download-deb-package-and-all-依赖关系| http://askubuntu.com/questions/492435/how-to-download-apt-and-all-its-dependencies | http://askubuntu.com/questions/219828/getting-deb-package-dependencies-for-an-offline-ubuntu-computer-through-windows | HTTP:// askubuntu。com/questions/216746/dependency-not-satisfiable-offline-deb-package-install/216755 –

回答

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

只有当您没有在本地安装软件包或其依赖项时才可以使用。 – Kissaki

+8

在现实世界中,这不适合你。在大多数情况下,已经安装了许多依赖项包,因此--download-only不会下载它们,也不会将它们放在/ var/cache/apt/archive /目录中。所以你最终会得到不完整的依赖包。 – Shnd

+0

我想这将工作,如果你可以保持安装,源(大概连接到互联网)和目标(没有互联网连接)完全相同,例如在两台机器上从相同的ISO安装Ubuntu,然后清理所有'。 deb源代码,然后安装所需的东西,将所有新下载的'.deb'复制到目标机器,然后运行'sudo dpkg -i * .deb'? – Mahesha999

1

我假设你有一个不错的胖USB高清和一个很好的网络连接。你可以使用apt-mirror来创建你自己的debian镜像。

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

+1

不,我不知道。我玩apt-mirror,但我没有胖USB高清或与网络的良好连接。我真的只想下载我绝对需要的软件包。 – Rell3oT

11

aptitude --download-only ...方法仅如果你有在你的手中的互联网连接一个debian发行版的作品。

如果不这样做,我觉得这是更好地断开Debian的机器上运行下面的脚本:

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

招downloads.list文件转换成一个连接的Linux(或者非Linux)的机器,并运行:

wget --input-file myurilist 

此下载所有的文件到当前directory.After,你可以复制他们在一个USB密钥和断开连接的Debian系统中安装。

学分:http://www.tuxradar.com/answers/517

PS 我基本上复制了博客文章,因为它不是非常可读的,在案件后就会消失。

+2

apt-get方法仅在没有安装包时才起作用 –

+0

在apt-get行中添加'-qq'就不再需要'grep'(并且需要'--assume-yes') – jpaugh

45

标记的答案有问题,正在下载的机器上的可用软件包可能与目标机器不同,因此软件包集可能不完整。

为了避免这种情况,并得到所有的依赖关系,我现在用的是以下几点:

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

我使用了' apt-rdepends,因为它会递归地列出所需的软件包。 但是,这两种解决方案都存在仍然(小的IMO)问题,即某些依赖项只能由实际命名为依赖项的包提供。一些依赖关系通过名称不同的包来解析,但具有相应的“提供”标签。例如,我遇到了debconf-2.0的参考资料尚未解决的问题 - 我的工具但非常可行的解决方案是手动将这些(通常很少)的包与另一个添加到管道的“grep -v”过滤掉。 – onno

+0

你确定rdepends是否意味着递归依赖?我认为这是逆向依赖。 –

+2

对于上面我的上面的评论,我把apt-cache rdepends与apt-rdepends混淆了。我的错误 - 你是对的,这是强大的。 –

3

我用apt-cache depends package获得所有需要的软件包在任何情况下如果是已经安装在系统或不。 所以它会始终正确工作。
由于命令apt-cache的工作方式不同,根据语言的不同,您必须在系统上尝试此命令并调整命令。 容易缓存依赖yourpackage
上englisch系统,您可以:

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


上的德国系统,您可以: 节点

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


的englisch版本与术语:
Depends:
您必须在此命令中将”yourpackage“这个术语更改为您的愿望两次,注意这个的!

$ 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 


和德国版本与术语:
Hängt ab von:
你必须术语“yourpackage”更改为您的心愿两次在此命令,照顾这!
如果您想使其适应您的语言,请在此命令中使用此文本两次!

$ 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 


你得到的downloads.list
链接列表检查列表,请访问您的文件夹,然后运行列表:

$ cd yourpathToYourFolder 

$ wget --input-file downloads.list 


你所有需要的软件包是:

$ ls yourpathToYourFolder 
+0

一旦获得文件,您将使用什么命令来确保在执行脱机安装时使用所有这些文件? – dtmland

+0

我想如果你做的是dpkg -i package .deb package2.deb,dpkg会计算出安装的顺序 – FreeSoftwareServers

+0

这对我来说不起作用,因为我的一个Depends是,在一个班轮中没有正确处理,但我确定它可以用于很多事情,一般的概念很有用,但我使用ozma的回答 – FreeSoftwareServers

6

有点简化(对我来说什么工作)的方式,为我工作(基于所有以上)
注意,依赖关系层次结构可以去更深然后一个层次

让你包的依赖

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

获取网址:

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 
+0

非常感谢。我真的不知道是否有办法告诉APT也下载依赖关系并将它们缓存在/ var/cache/apt/archives中。我想下载'texlive-full --install-recommendation',并且只能在我的档案中找到一个名为'texlive-full'的元包。 –

+1

我不知道缓存。你将不得不自己尝试http://askubuntu.com/questions/463380/difference-between-apt-get-d-install-apt-get-download – ozma

5

这将下载所有德布斯到目前目录,并且如果它找不到候选人将不会失败。

也不需要sudo来运行sript!

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" 

注:我用这个作为我的榜样,因为我其实是想分升ssmtp中的DEP和失败的debconf上-2.0,但这个剧本让我什么,我需要!希望能帮助到你。

+0

这对我很好。我不得不添加另一行来处理PreDepends。感谢分享! – tay10r

相关问题