在没有互联网连接的情况下运行sudo apt-get install

5
我的最终目标是将我的树莓派变成FTP服务器。它已连接到网络,但没有互联网连接。如果我能运行“sudo apt-get install ....”命令,似乎这将非常容易实现,但由于没有互联网,这是不可能的。
我下载了Python的“ftplib”,我认为一旦我成功建立FTP服务器就可以使用它连接并与之交互,但现在我陷入困境。
我不太了解Linux或Web服务器,所以提前感谢您的耐心。
我认为可能的解决方案是在有互联网的计算机上下载LAMP软件包,然后将其传输到树莓派中,但我不确定我可能遇到的路径和文件夹问题。

你使用的是哪个Linux发行版? - user1516873
你应该接受对你最有帮助的答案。这样,你至少支持支持你的社区。 - hax0r_n_code
嘿,大家好。这是我在 Stack Overflow 上的第一个问题,当我得到答案时,我本来期望能收到一封电子邮件,但显然我没有正确设置,所以我直到现在才看到任何活动,抱歉让大家等了一会儿。我现在正在使用 2.7。 - Shaun314
其实我的发行版是Raspbian“wheezy”,2.7是我的Python版本,哈哈。 - Shaun314
5个回答

7

这样做从来不是简单的,也不可能完美无缺。但以下是我尝试过的一些方法,有时它们能够起作用。

你需要一台与FTP服务器类似的机器,并且从FTP服务器下载所有软件包和依赖项。通常情况下,你需要首先在互联网机器上运行:

sudo apt-get clean 

上述命令会清理 /var/cache/apt/archives/ 目录,以确保其中只包含您需要的软件包及其依赖项。然后执行以下命令:
sudo apt-get -d build-dep <package_name>
-d参数只会下载软件包,而build-dep会获取所有依赖项并将它们放置在/var/cache/apt/archives/中。因此,您至少需要进行类似的构建。有时,如果您的计算机已经安装了目标服务器所需的软件包,则甚至需要执行sudo apt-get remove <package name>
然后,您可以从该目录中取出数据并将其放入某个设备中以传输到FTP服务器。从那里,您在目标机器上执行以下操作:
sudo dpkg -i *.deb

你可以使用apt离线http://apt-offline.alioth.debian.org/来进行操作。


我觉得我忘了提到一些重要的事情,我的互联网机器是Windows 7,现在我没有立即访问Linux系统的权限,但在未来,听起来最好的方法是有一个连接到互联网的Linux系统的朋友为我下载一个副本并进行所有编译,然后它应该可以正常运行,同时你发送的最后一个链接看起来非常有帮助! - Shaun314
@Shaun314 祝你好运!用这种方式做很糟糕,但希望这些信息能帮助到你。 - hax0r_n_code
如果你知道你需要的所有软件包和依赖项,你可以使用 apt-get download ... 命令将 deb 文件下载到当前目录,这样就不需要再使用 apt-get clean 命令了。 - drevicko

2

您需要下载软件包和其依赖项。然后将它们放在SD卡上并执行以下操作:

cd folder_with_debs
sudo dpkg -i *.deb

顺便说一下,在大多数情况下,将eth电缆插入树莓派会更容易(因为您在此发布SO,通常应该可以访问互联网)。

那会非常好,但是由于各种有趣的公司网络政策问题,这比说起来容易做起来难得多。而且我现在使用的是带有互联网的Windows机器。不过还是非常感谢你的帮助! - Shaun314

1
我是一名有用的助手,可以进行文本翻译。以下是需要翻译的内容:

这是对@Inquisitor的一个非常长的评论。

顺便说一句,这个答案非常有帮助,它让我走上了正确的轨道。下面我会写一些笔记,供有兴趣的人参考;请注意,所有这些绕路最终都没有起作用,我直接从以下网址下载了文件:

ftp://ftp.us.debian.org/debian/pool/main/t/tk8.5/
ftp://ftp.us.debian.org/debian/pool/main/t/tcl8.5/

希望这对某些人有用。
我正在树莓派上安装tk8.5-dev和tcl8.5-dev。为此,我找到了以下内容:
https://packages.debian.org/wheezy/armhf/tk8.5-dev/download
https://packages.debian.org/wheezy/armhf/tcl8.5-dev/download

我将仓库(deb http://ftp.de.debian.org/debian wheezy main)添加到了/etc/apt/sources.list,然后运行了sudo apt-get update。在更新时,它向我大喊:
GPG error: http://ftp.de.debian.org wheezy Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 6FB2A1C265FFB764

因为我没有使用Debian,但我确实做了。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6FB2A1C265FFB764

它告诉我“没有最终可信任的密钥”。我再次运行“sudo apt-get update”。如果您错过了某个密钥(就像我最初一样),它会告诉您:“以下密钥ID没有公钥可用:6FB2A1C265FFB764”。如果您仍然遇到问题,this 可能会有所帮助,或者尝试使用 --allow-unauthenticated 标志。
此时,我运行了
sudo apt-get -d build-dep tk8.5-dev_8.5.11-2_armhf.deb tcl8.5-dev_8.5.11-2_armhf.deb

and got

Unable to find a source package for tk8.5-dev_8.5.11-2_armhf.deb

我在 dpkg 中 添加了一个架构
sudo dpkg --add-architecture armhf
sudo apt-get update

而apt-get仍然无法找到这些软件包。所以我放弃了并直接下载了文件。在我的情况下,由于我不能使用build-dep,我为armhf下载并安装了这里列出的所有内容:

https://packages.debian.org/stable/devel/libxss-dev
https://packages.debian.org/stable/devel/libxft-dev
https://packages.debian.org/stable/devel/tk8.5-dev
https://packages.debian.org/stable/devel/tk8.5
https://packages.debian.org/stable/devel/tcl8.5-dev
https://packages.debian.org/stable/devel/tcl8.5

有更多的依赖关系,所以我今天会处理这些依赖关系,并在发现其他有趣的事情时编辑此答案。

当然,所有好的事情都是倒装的,所以我不得不再次撤消所有操作,因为我不想在我的amd64 mint系统上安装debian armhf软件包:

sudo dpkg --remove-architecture armhf
sudo apt-key del 8B48AD6246925553
sudo apt-key del 6FB2A1C265FFB764
sudo apt-get update

我从 /etc/apt/sources.list 中删除了 deb http://ftp.de.debian.org/debian wheezy main

更多源: http://savvyadmin.com/download-pgp-keys-with-apt-key/

无论如何,我不知道这是否算作答案,但希望对某些人有所帮助。


0

正确的方法: apt-offline

在离线系统上安装软件包的真正好方法是使用apt-offline。它只有非常少的依赖项,可以通过dpkg -i在离线系统上安装。 在pkgs.org下载deb文件。

示例

# Online is the computer connected to internet
# Offline is the computer disconnected from internet
# ---
# ## Install apt-offline ## 
# Online
apt update
apt install apt-offline
# Offline
#   Download last package from pkgs.org
dpkg -i apt-offline_1.8.*_all.deb


# ## Update System ##
# Offline
apt-offline set --update updates.sig
# Online
apt-offline get updates.sig --bundle updates.zip
# Offline 
apt-offline install updates.zip


# ## Upgrade System ##
# <!> Update must be done before.
# Offline
apt-offline set --upgrade upgrade.sig
# Online
apt-offline get upgrade.sig --bundle upgrades.zip
# Offline 
apt-offline install upgrades.zip
apt upgrade --no-download --fix-missing


# ## Install packages##
# <!> Update must be done before.
# pkg1, pkg2 & pkg3 being the packages you want to install
# Offline 
apt-offline set install.sig --install pkg1 pkg2 pkg3
# Online
apt-offline get install.sig --bundle install.zip
# Offline 
apt-offline install install.zip
apt install pkg1 pkg2 pkg3 --no-download --fix-missing

重要提示:不要同时进行更新和升级/安装。这样做会从计算机上已安装的软件包列表执行升级,而不是在更新后执行。

重要提示2apt-offline installupgrade 不足以安装软件包。这个命令所做的唯一事情就是填充 apt 的缓存 (/var/cache/apt/archives),这使您可以继续使用 apt install --no-download --fix-missing 命令。


0
sudo dpkg -i ftplib

针对 Debian 包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接