我正在尝试在没有Internet连接的计算机上安装软件包。我想要做的是将所有程序包和相关性下载到具有Internet连接的计算机上,然后将所有内容通过网络潜入离线计算机。
我一直在玩的apt-get
和apt-cache
,但我还没有想出一个快速简便的方法一举下载软件包和依赖于我选择的目录。我该怎么做?我要正确解决这个问题吗?您将如何安装具有很多依赖性的脱机软件包?
我正在尝试在没有Internet连接的计算机上安装软件包。我想要做的是将所有程序包和相关性下载到具有Internet连接的计算机上,然后将所有内容通过网络潜入离线计算机。
我一直在玩的apt-get
和apt-cache
,但我还没有想出一个快速简便的方法一举下载软件包和依赖于我选择的目录。我该怎么做?我要正确解决这个问题吗?您将如何安装具有很多依赖性的脱机软件包?
Answers:
# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>
.deb
源上的所有s,这将起作用。 ,然后安装所需的内容,将所有新下载的.deb
s复制到目标计算机,然后运行sudo dpkg -i *.deb
???
reinstall
命令而不是install
将下载软件包,即使它们已安装也是如此
标记为答案的问题是正在执行下载的计算机上的可用软件包可能与目标计算机不同,因此软件包集可能不完整。
为了避免这种情况并获取所有依赖项,请使用以下命令:
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
apt-rdepends
因为它会递归列出所需的软件包。但是,这两种解决方案都仍然存在(较小的IMO)问题,即某些依赖项只能由实际命名为依赖项的程序包提供。某些依赖关系由名称不同的程序包解决,但具有相应的“ Provides”标签。例如,我遇到了一个关于未解决的debconf-2.0的引用的问题-我笨拙但非常可行的解决方案是手动过滤掉那些(通常很少)软件包,并grep -v
在管道中添加另一个软件包。
apt-rdepends
。
grep
在一起解决该错误。apt-get download $(apt-rdepends <package>|grep -v "^ "|grep -v "libc-dev")
这里已经回答了相同的问题: 如何列出/下载debian软件包的递归依赖项?
尝试:
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")
sudo dpkg -i *.deb
几次暴力。
apt-get install --no-download <PACKAGE>
它了,它将仅搜索本地缓存。它应该能够像往常一样整理出依存顺序。
apt-get download
行以这样开始,以便将文件下载到当前目录。 apt-get download -o Dir::Cache="./" -o Dir::Cache::archives="./"
--no-pre-depends
?我认为需要先安装依赖项。
grep "^\w" | grep -v "i386"
忽略i386)
该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我基本上是复制博客文章,因为它不是很可读,以防万一文章会消失。
-qq
到apt-get行中,消除了对grep
(和的需要--assume-yes
)的必要
apt-get --print-uris --yes download <my_package_name> |...
而不是“ install”,或在安装时使用选项“ --reinstall”,例如@ozma说(@ A.Binzxxxxxx)
某种程度上对我有用的简化方式(以及对我有用的方式)(基于以上所有内容)
请注意,依赖关系层次结构可以比一级更深入
获取软件包的依赖关系
$ 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
texlive-full --install-recommends
,最终只texlive-full
在档案文件中找到一个名为metapackage的文件。
这会将所有Debs下载到当前目录,并且如果找不到候选人,也不会失败。
也不需要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"
注意:我以本例为例,因为我实际上是尝试对Deps进行SSMTP的Deps调试,但在debconf-2.0上却失败了,但是此脚本满足了我的需求!希望能帮助到你。
apt-cache depends package
无论是否已经安装在系统上,我总是会获取所有必需的软件包。因此,它将始终正确工作。
由于apt-cache命令的工作方式不同,具体取决于语言,因此您必须在系统上尝试使用此命令并改编该命令。apt-cache取决于yourpackage
在英语系统上,您会得到:
$ apt-cache depends yourpackage
node
Depends: libax25
Depends: libc6
在德语系统上,您得到:节点
Hängt ab von: libax25
Hängt ab von: libc6
在此命令中,英文版本的名称为
“ 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
apt-get
使用env var来运行,则LANG=en
不需要为该德语单词使用grep,对吗?并且您的解决方案将适用于所有人
我假设您有一个不错的胖USB HD和一个良好的网络连接。您可以使用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
'