我正在尝试在没有Internet连接的计算机上安装软件包。我想要做的是下载具有Internet连接的计算机上的所有软件包和依赖项,然后将所有内容运送到离线计算机。
我一直在玩apt-get
和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
文件移动到没有Internet的计算机上并安装它们:
sudo dpkg -i *.deb
同样的问题已在这里回答:How to list/download the recursive dependencies of a debian package?
尝试:
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 ...
方法只有在您手中有互联网连接的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
这会将您的所有文件下载到当前目录中。之后,您可以将它们复制到USB密钥上并安装在断开连接的debian计算机上。
学分:http://www.tuxradar.com/answers/517
PS我基本上复制了博客文章,因为它不是非常易读,以防邮件将消失。
有点简化(以及对我有用的)对我有用的方式(基于以上所有) 请注意,依赖关系层次结构可以更深入到一个级别
获取包的依赖关系
$ 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
这会将所有Debs下载到当前目录,如果找不到候选者,则不会失败。
也不需要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"
注意:我用这个作为我的例子,因为我实际上是在尝试使用SS的Deps for SSMTP而在debconf-2.0上失败了,但是这个脚本让我得到了我需要的东西!希望能帮助到你。
如果已经安装在系统上,我使用apt-cache depends package
获取所有必需的包。所以它总能正常工作。
因为命令apt-cache的工作方式不同,具体取决于语言,所以必须在系统上尝试此命令并调整命令。 apt-cache取决于你的包
在一个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
我假设你有一个不错的USB高清和良好的网络连接。您可以使用apt-mirror来创建自己的debian镜像。
这会将所有包和依赖项(尚未安装)下载到您选择的目录中:
sudo apt-get install -d -o Dir::Cache=/path-to/directory/apt/cache -o Dir::State::Lists=/path-to/directory/apt/lists packages
确保/path-to/directory/apt/cache
和/path-to/directory/apt/lists
存在。如果你没有设置-o Dir::Cache
它指向/var/cache/apt
,Dir::State::Lists
指向/var/lib/apt/lists
(它保留可用包的索引文件)
两个-o
选项都可以与更新和升级一起使用,而不是安装。
在不同的机器上运行相同的命令没有'-d
'