如何在没有Internet(离线)的情况下安装软件或软件包?


Answers:


129

退房Keryx ; 这是一个离线存储库管理器。

它是如何工作的?它使您可以将更新和新程序(具有相关性)下载到闪存驱动器

它的界面类似于突触,但可通过Pendrive进行操作(不需要安装)。不幸的是,GUI需要wxwidgets,它们没有预装在Ubuntu上(它们是跨平台的,可从此处和Ubuntu仓库在此处安装)。它只能在Ubuntu系统中安装软件,但是您可以在任何Linux,Windows或OS X中下载更​​新或新软件包。

在这里您可以找到一个教程

此答案中还有另一个详细的分步教程。

Launchpad还托管可下载的文件

屏幕截图:

屏幕截图


12
keryx不再在开发中,如果您在较新版本的Ubuntu上尝试此操作,请使用可移植版本以免于依赖的麻烦。
Alex R

1
我仍然可以keryx毫无问题地使用它,尽管它显然需要进一步的开发和改进。
carnendil


如果其他脱机计算机没有gcc,g ++怎么办?这是一个全新安装的ubuntu。如何安装wxwidgets?没有wxwidgets,它会抱怨缺少模块...
报价不能拒绝

3
我刚刚发布了Keryx(0.92.5)的新版本,这可能会解决一些问题。编译后的版本应包含诸如wxWidgets之类的依赖项,并允许您在Windows上毫无问题地运行。
Michael Crenshaw

57

快速破解

一个快速的黑客是所有您安装到自己的机器下载(包复制详细的说明这里)。.deb文件存储在中/var/cache/apt/archives,然后在另一台计算机上启动Synaptic,然后选择File -> Add Package Downloaded并搜索文件夹(如果您放置文件并打开它),接受所有文件(或使用命令从终端安装sudo dpkg -i DEB_PACKAGE_NAME)。

注意:
这假定您的软件包管理器未设置为在安装后立即删除软件包。它还假定您正在运行相同版本的Ubuntu (10.10、12.04等)和体系结构版本(32b或64b)


DVD资料库

如果您希望获得最新的错误修复程序和安全补丁,请查看本教程该教程涵盖了创建自己的DVD存储库的内容。


2
如果您无法运行,那么sudo apt-get update它将无法很好地工作,但是在设置新系统时仍然可以节省大量时间:)
GM-Script-Writer-62850

同意,将两台计算机从13.04升级到13.10。第一个必须下载〜1.8Gb,将内容复制/var/cache/apt/archives到第二个只能下载〜250Mb。尽管如此,您仍需要连接才能运行安装。
Maxime R.

apt-get update如果您复制,则不需要/var/lib/apt/lists-该目录包含由下载的存储库信息apt-get update
ignis 2014年

我抄我.deb来我usb/var/cache/apt/archives。在另一台计算机上,我只打开了USB驱动器,然后双击,.deb它启动了Ubuntu GUI Software Updater。容易偷懒。
Jacksonkr '16

@ jr0cket:有没有办法避免这个文件夹中的包/var/cache/apt/archives,其?安装Debian的时候(内置)谈到。理由为什么我问这是4.8 GB的方式,对于我的USB驱动器是4 GB太大。
贾斯汀

42

USB存储库

如果您拥有大小合适的USB记忆棒-假设约为4-8Gb(或外部硬盘驱动器),则可以设置Ub​​untu存储库的自定义副本,并将其配置为本地存储库,如help.ubuntu上的AptGet / Offline / Repository所述 。 .com。

要获取实际的软件包文件(.deb文件),建议使用apt-mirror

apt-mirror软件包将帮助您创建一个自定义镜像,该镜像应小于完整存储库的30Gb。安装软件包:

sudo apt-get install apt-mirror

并编辑其配置文件

gksudo gedit /etc/apt-mirror/mirror.list

或自Ubuntu 14.04起

gksudo gedit /etc/apt/mirror.list

仅包括所需的存储库部分。这是一个简单的示例,该示例从所有4个部分(主要,受限,Universe和multiverse)复制二进制.deb文件以及最新的错误修复。

# apt-mirror configuration file
##
## The default configuration options (uncomment and change to override)
##
#
set base_path    /tmp/ubuntumirror
#

## Repositories to copy from - 

## use a mirror so you don't overload the main server!!!

# Lucid binaries - no source files
deb http://archive.ubuntu.com/ubuntu lucid main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse


## Clean up older .deb files no longer in the archive
clean http://archive.ubuntu.com/ubuntu

据估计,所有这四个部分将需要约15Gb的空间,而没有源。

我已经放置了所有.deb文件的路径/tmp,请确保您有足够的空间,以便硬盘驱动器不会填满(如果硬盘驱动器填满了并且计算机死机,/tmp则应重新启动以清除它)。

如果只需要主文件,请从配置文件中删除受限的,Universe和multiverse名称。

如果您使用的是其他体系结构(您使用的是64位,而您的朋友使用的是32位),请在mirror.list配置文件的开头添加以下内容:

set defaultarch i386

有了所需的apt-mirror配置后,即可运行apt-mirror并执行一些有趣的事情或改变生活,因为获取存储库将需要数小时或数天的时间(取决于您的连接和所使用的Ubuntu镜像)。

获得.deb文件后,将文件复制到USB记忆棒(或外部硬盘驱动器)中,并按照前面提到的文章设置本地存储库。

在将其带给您的朋友之前先对其进行测试!


apt-mirror软件包的详细信息位于:apt-mirror.sourceforge.net
jr0cket 2010年

当我sudo apt-get install apt-mirror直接在桌面版/ Rufus / USB记忆棒/试用模式的Ubuntu 16.10(Yakkety Yak)上尝试时,我得到了“ E: Unable to locate package apt-mirror”。已通过验证到Internet连接ping
Peter Mortensen

运行sudo apt-get update并不能解决问题。
Peter Mortensen

32

我将apt-get与“ --print-uris”选项一起使用。我还添加了“ -qq”,所以它很安静。

使用sed删除添加到某些文件名(例如3%2a)中的多余字符,并获取文件的url,文件名和md5sum。使用wget下载文件。使用md5sum检查文件是否正确下载。

您可以使用它来为Linux或Mac OS创建外壳程序脚本(将命令中的“ .cmd”替换为.sh,并执行“ chmod a + x(文件名)以添加执行脚本的权限)”或Windows Command批处理文件以及一个MD5Sum文件,以确保正确下载了文件。

指令

创建脚本:

sudo apt-get <<<apt-get command and options>>> --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/wget -c \1/p" > script.cmd

例子:

sudo apt-get install anjuta --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/wget -c \1/p" > install-anjuta.cmd
sudo apt-get upgrade --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/wget -c \1/p" > upgrade.cmd
sudo apt-get dist-upgrade --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/wget -c \1/p" > dist-upgrade.cmd

创建md5sum文件:

sudo apt-get <<<apt-get command and options>>> --print-uris -qq | sed -n -e "s/_[0-9]%[0-9a-f][0-9a-f]/_/" -e "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/\4  .\/\2/p" > md5sum.txt

例子:

sudo apt-get install anjuta --print-uris -qq | sed -n -e "s/_[0-9]%[0-9a-f][0-9a-f]/_/" -e "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/\4  .\/\2/p" > md5sum.txt
sudo apt-get upgrade --print-uris -qq | sed -n -e "s/_[0-9]%[0-9a-f][0-9a-f]/_/" -e "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/\4  .\/\2/p" > md5sum.txt
sudo apt-get dist-upgrade --print-uris -qq | sed -n -e "s/_[0-9]%[0-9a-f][0-9a-f]/_/" -e "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/\4  .\/\2/p" > md5sum.txt

如果您使用的是Windows操作系统,则需要md5sum来下载文件。


创建脚本以下载存储库列表:

sudo apt-get update --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) :/wget -c \1 -O \2.bz2/p" > update.cmd

检查MD5汇总

您可以将这些添加到脚本的末尾以检查md5sum:

Linux:

md5sum --quiet -c md5sum.txt

Windows(使用较旧的md5sum,不支持--quiet):

md5sum -c md5sum.txt

要自动添加到脚本:

echo -e "md5sum -c md5sum.txt\npause" >> script.cmd

安装列表文件(更新命令)

将这些命令运行到目标计算机。

您需要使用bunzip2提取存储库列表文件:

bunzip2 *.bz2

然后复制到列表文件夹(当前文件夹仅包含列表文件):

sudo cp * /var/lib/apt/lists/

以上合并(当前文件夹可能包含其他文件):

for listfile in `ls *.bz2`; do bunzip2 $listfile; sudo cp ${listfile%.bz2} /var/lib/apt/lists/; done

更快的下载

如果要加快下载文件的速度,请尝试使用Axel。

替换wget -c ... -O ...axel ... -o ...

文件夹层次结构(使用Windows下载文件)

我通常创建一个像这样的文件夹:

  • apt-get /
    • 箱/
      • msys-1.0.dll
      • msys-intl-8.dll
      • wget.exe
      • msys-iconv-2.dll
      • md5sum.exe
      • libeay32.dll
      • libintl3.dll
      • libssl32.dll
      • libiconv2.dll
    • 更新/
      • 更新.cmd
      • md5sum.txt
    • 安装/
      • install-foo.cmd
      • install-bar.cmd
      • upgrade.cmd
      • md5sum.txt

然后wget在上面的行中更改为..\\bin\\wget.exemd5sum..\\bin\\md5sum.exe等。

这会将* .deb文件和列表文件分隔到不同的文件夹中。

更新系统

  1. 引导到使用Ubuntu的目标计算机
  2. 创建脚本进行更新
  3. 引导到具有互联网连接的计算机
  4. 运行update.sh(对于Linux或Mac OS)或update.cmd(对于Windows)
  5. 返回目标计算机
  6. 安装清单文件
  7. 创建用于升级/ dist-upgrade的脚本(在末尾添加md5sum命令)
  8. 回到具有互联网连接的计算机
  9. 运行upgrade.sh/dist-upgrade.sh(Linux或Mac OS)或upgrade.cmd / dist-upgrade.cmd(Windows)
  10. 返回目标计算机
  11. 复制* .deb文件以缓存: sudo cp *.deb /var/cache/apt/archives/
  12. 运行:sudo apt-get upgradesudo apt-get dist-upgrade

下载Windows可执行文件

Windows的Wget:http//gnuwin32.sourceforge.net/packages/wget.htm

适用于Windows的md5sum:http//gnuwin32.sourceforge.net/packages/coreutils.htmhttp://www.etree.org/cgi-bin/counter.cgi/software/md5sum.exe

您也可以使用MinGW的功能,这就是我使用的功能。您只需要wget.exe,md5sum.exe和必要的共享库。检查“文件夹层次结构”部分。

笔记

  • 我不确定上面命令中的所有命令是否都能正常工作,因为我已经一个月没有使用它们了。尤其是update命令,我今天还没有对其进行测试。
  • 为了轻松查看命令的结果,如果使用Windows,请在脚本末尾添加“暂停”行。
  • 如果您经常使用这些命令,我​​建议创建Shell脚本来更新,升级和安装软件包。

3
您能为此创建一个简单的GUI吗:)
Tachyons,2012年

使用Windows看起来很奇怪……
Alex R

1
它也适用于Linux(实际上更好,因为您不需要安装md5sum和wget)。Windows部分适用于那些没有可连接互联网的Linux计算机的用户,因此您可以在网吧或仅安装Windows的朋友的计算机中使用它。
Arnel A. Borja

-qq选项似乎禁止来自的所有输出apt-get update。我想你真的不想要这个选项。
Ruslan

29

首先需要获得一台具有Internet连接的PC,然后可以在其中下载所需的.deb文件。下载完所有文件后,您现在可以创建CD / DVD rom或ISO文件,可用于安装在脱机PC中下载的软件。

从全新安装或VM开始。
sudo apt-get install aptoncd

将所需的软件包安装在一台PC上
sudo apt-get install gbrainy

运行aptoncd
在此处输入图片说明
单击创建
在此处输入图片说明
单击刻录并设置选项,然后应用
在此处输入图片说明
刻录或保存
在此处输入图片说明

请注意,aptoncd仅备份当前apt-cache中的内容。
这就是为什么我们从全新的VM /新安装开始,然后一次运行所有这些。


那么,您是说如果我制作了一个vm并安装了我想要的所有应用程序,然后运行此程序,将cd / dvd放入了离线PC。并会在上面安装所有应用程序?
亚历克斯

2
只要您使用相同的基本系统介质,就可以。如果您要部署办公室,并且想要一种快速简单的添加方法,那么这将非常有用。如果您使用创建的元包,是的
RobotHumans

从映像还原需要安装hal,但据我所知,它已被弃用,不再受支持。
Flashrunner '17

有一个生动的代码
branches / ubuntu /

22

离线储存库

这里描述如何创建脱机存储库:您只需要从archive.ubuntu.com下载适当的文件。或者,您可以使用apt-medium

编辑:*.deb在不同的博客条目中描述了基于文件本地rchive的另一种方法(请参阅此处此处)。Sarath Chandra总结如下:

  1. 使目录可访问(至少由root用户访问)

    sudo mkdir /var/my-local-repo
    
  2. 将所有deb文件复制到该目录。

  3. 将目录设为

    sudo bash -c 'dpkg-scanpackages /var/my-local-repo /dev/null | gzip -c9 > /var/my-local-repo/Packages.gz'
    

    要么

    sudo dpkg-scanpackages /var/my-local-repo /dev/null | gzip -c9 > /var/my-local-repo/Packages.gz
    
  4. 将本地仓库添加到源

    echo "deb file:/var/my-local-repo ./" > /tmp/my-local.list
    sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local.list
    sudo apt-get update
    

20

第1步:获取文件中的下载URL:

执行以下命令,用所需的软件包名称替换软件包名称,并用空格分隔。

apt-get -y install --print-uris package-name | cut -d\' -f2 | grep http:// > apturls

步骤2:将此文件(apturls)复制到具有高速Internet访问权限的计算机上,并执行以下命令来下载软件包:

wget -i path-to-apturls-file 

第3步:现在将那些下载的软件包下载到您的计算机上,并使用进行安装:

cd path-to-the-downloaded-packages-directory

sudo dpkg -i *.deb

做完了!


是否可以--print-uris打印系统中已经安装的依赖项?
yuric

19

您可以使用Cube。它是便携式软件包管理器,可让您在另一台与Internet相连的计算机上下载软件包,然后离线将其安装回原始Linux计算机。

下载应用程序(在Windows上)

安装应用程序(在Linux上)

您可以在Cube的网站上下载它。


是.deb还是.exe?

2
没有.deb文件,因为它是独立的,可移植的,并且无需安装即可执行(只需运行多维数据集普通文件)。Windows用户还包括Cube.exe。
卡米克里(Camicri)2013年

1
需要更多的人对此进行了解。我爱你。
howderek 2015年

在Win 7 Ultimate 32位上运行此应用程序时出现错误。图片:i.stack.imgur.com/XW3wt.jpg 错误消息:问题签名:问题事件名称:CLR20r3问题签名01:cube.exe问题签名02:1.0.9.3问题签名03:54bd0258问题签名04:glib-sharp问题签名05:2.12.0.0问题签名06:517edc4c问题签名07:1b4问题签名08:17问题签名09:System.DllNotFoundException操作系统版本:6.1.7600.2.0.0.256.1语言环境ID:16393
Sandeep

您好,感谢您使用多维数据集。不幸的是,您使用的多维数据集的版本不再维护。请使用新的稳定的多维数据集服务器:launchpad.net/cube-server。请参阅上面更新的答案。
卡米克里

17

在synaptic中,您可以选择要安装的软件包,并在第一个菜单下有一个生成脚本的选项,您可以将该脚本带到另一台计算机上并在该计算机上运行。这个脚本会“wget的”指定你想要(和它们的依赖),你在计算机上运行(即“下载”)所有的包确实有互联网接入。

运行后,您将拥有断开连接的计算机所需的所有软件包文件。将它们放在CD / USB记忆棒上,并通过进行安装sudo dpkg -i *.deb


这是一个很好的技巧,但是2台计算机可以完成此过程?hmmmm
Suhaib

@Suhaib-不知道如何在没有“两台计算机”的情况下以任何方式下载所需的软件包...您需要一台“在线”计算机才能将软件包以某种方式发送到离线计算机(即使它是在不同主机操作系统上运行的VM或Docker容器,或一堆手册curl/ wget副本到一些外部媒体上的内容
Cinderhaze

15

您可以使用apt-offlineapt-offline-gui
先决条件:具有互联网连接的朋友的系统。apt-offline安装在两个系统中。

离线安装仅需3个简单步骤即可完成。

步骤1
在家里的Disconnected Debian框中生成一个签名文件
apt-offline set /tmp/apt-offline.sig
上面的命令将生成apt所需的有关更新其数据库的所有信息。

步骤2
根据先前生成的签名文件
apt-offline get C:\apt-offline.sig --threads 5
下载数据上述命令将按照签名文件中的说明下载数据。为了加快下载速度(可以从多个apt仓库中下载),在本示例中,我们产生了5个下载线程。
完成后,您只需将数据(如果使用--bundle选项,则将存档文件)复制回可移动介质,然后再复制回脱机主机。

步骤3
一旦回到家用Debian机器上,
apt-offline install /media/USB/apt-offline.zip
就将数据从可移动介质中馈送到apt-offline:这将无缝地更新断开连接的机器上的APT数据库。

Apt-offline甚至可以在Windows系统中使用。我认为,这apt-offline是脱机安装的最佳选择。

资源


有两个观察结果:第一,在.sig文件为空的意义上,为已经安装或准备安装的软件包生成签名“失败”。这有点令人不安,但显然很正常。其次,只有在正确植入/ var / lib / apt / lists的情况下,apt和apt-offline才能正常工作。如果目标计算机和主机具有不同的体系结构,则这是相当大的工作量。
Urhixidur 2014年

源PC和目标PC是否都需要具有相同版本的Ubuntu?
图兰斯·科尔多瓦

如何将apt-offline安装到脱机计算机?
SamiŞimşekli

10

上面列出了几个好的有效答案。但是,这是我个人使用的机制-apt-ftparchive。我在这里记录它,以备将来再次使用时使用。也许对您有用。

创建存档快照

  • 创建一个与目标环境紧密相似的Ubuntu实例
    • 例如,Amazon中的Ubuntu 12.04 64位实例
  • 从干净的包装环境开始
    • sudo apt-get clean
  • 更新包装清单
    • sudo apt-get update
  • 下载所有可用的软件包更新
    • sudo apt-get dist-upgrade --download-only
  • 下载所有相关的软件包和依赖项
    • sudo apt-get install --download-only byobu run-one bikeshed dotdee powernap
  • 安装apt-ftparchive实用程序
    • sudo apt-get install apt-utils
  • 创建包清单
    • (cd /var/cache/apt/archives/ && sudo apt-ftparchive packages . ) | sudo tee /var/cache/apt/archives/Packages
  • 创建软件包的存档
    • sudo tar cvf snapshot.tar -C /var/cache/apt archives/

在脱机目标系统上使用存档快照

  • 通过某种机制,您将需要从源到目标系统获取snapshot.tar。也许在USB记忆棒上,否则。
  • 将归档文件解压缩到目标系统上(在这种情况下,在/ home / ubuntu中)
    • tar xvf snapshot.tar
  • 将本地脱机源添加到/etc/apt/sources.list
    • echo "deb file:/home/ubuntu/archives /" | sudo tee -a /etc/apt/sources.list
  • 更新包裹清单
    • sudo apt-get update
  • 根据需要安装软件包
    • sudo apt-get install byobu run-one bikeshed dotdee powernap

4

对于离线安装,您将需要这些软件包。如果您使用的是Debian系统

  • 获取带有.deb文件扩展名的软件包文件并用于dpkg -i package_name安装
  • 获取带有.tar.gz.tar.bz2文件扩展名的源压缩包,然后使用以下命令解压缩并安装它们:

    tar -zxvf your_pack.tar.gz` or tar `-jxvf your_pack.tar.bz2
    make
    sudo make install
    make clean        (optional, and may prevent uninstallation)
    

您可能对依赖项有疑问。您需要先安装所有这些组件,然后才能成功进行脱机安装。


2

是。您可以下载DVD iso,将其刻录在DVD上,然后从DVD安装软件。可以在这里看到 CD和DVD可以作为包管理器的来源,就像在线存档一样。


2

在脱机软件包安装之前,您可以做的第一件事就是更新所需的存储库。您应该肯定喜欢更新存储库(免费和官方支持的软件)。

您要安装的应用程序可能位于其他一些存储库中,例如Universe(免费,但没有官方支持),Restricted(非免费,但没有官方支持)或Multiverse(非免费,没有官方支持)存储库。 。因此,您可能也想要其中一个或多个。

因此,该过程的第一步是构建更新的脱机存储库。然后生成“要下载”列表并下载它们,最后是安装。这是完成的方式:

  1. 输入网址:http://archive.ubuntu.com/ubuntu/dists/ suiteCodename其中suiteCodename应适当substituded说精确的Ubuntu 12.04(精确穿山甲)或乌托邦的Ubuntu 14.10(乌托邦独角兽),这样你会现在位于http://archive.ubuntu.com/ubuntu/dists/precise/或您拥有的套件中的任何其他特定目录中。

  2. 下载适用于您的体系结构的文件ReleaseRelease.gpgContents-????。gz文件(即Contents-i386.gz,假设您的体系结构是i386)。将这三个文件保存在以suiteCodename命名的目录/文件夹中(精确用于穿山甲)。

  3. 接下来,您必须对所需的每个存储库(在Main,Universe,Restricted,Multiverse中)执行以下操作。

    一种。转到目标存储库目录,例如。主要,然后到架构目录,例如。binary-i386,这样您就可以进入http://archive.ubuntu.com/ubuntu/dists/suiteCodename/repositoryName/binary-????/

    b。下载内容Packages.bz2,Packages.gz,发行版并将其保存在以repositoryName命名的目录中,例如。main并将此目录放置在先前创建的suiteCodename目录中。

    C。重复一个 和b。针对您想要的每个存储库。

  4. 最后,您应该具有以下结构:

     precise
     ├── Contents-i386.gz
     ├── main
     │   └── binary-i386
     │       ├── Packages.bz2
     │       ├── Packages.gz
     │       └── Release.txt
     ├── Release.gpg
     ├── Release.txt
     └── universe
         └── binary-i386
             ├── Packages.bz2
             ├── Packages.gz
             └── Release.txt
    

    (假设suiteCodename =精确,体系结构是i386,并且您需要主存储库和Universe存储库)

  5. 接下来,在下载了更新的存储库之后,将下载的文件以适当的结构(如上所示)放置在目标脱机计算机的目录中。将目录结构保存在用户主目录()或其他任何位置precise中的名为offlineRepository / dists / precise的文件夹中~/offlineRepository/dists/precise/home/offlineRepository/dists/precise在终端中使用sudo特权或以Nautilus文件管理器开头gksu nautilus;还请确保您具有复制结构的正确权限) 。然后,您的脱机存储库信息就可以使用了。

  6. 在您的源列表中添加本地存储库。使用Ubuntu Software Center,转到编辑->软件源...->其他软件->添加...,然后在APT行的字段中添加:deb file:///home/offlineRepository precise main universe,然后单击添加源。确保修改有关目录/文件结构和套件的行。然后重新加载软件包或sudo apt-get update在终端中运行。 快照1

  7. 现在有了更新的(可能还有新添加的存储库),您可以转储软件包和依赖项的URL列表。

    我从上一则askUbuntu帖子中借用了以下代码行:

    sudo apt-get install packageName --print-uris | grep -o '\'http.*\' | tr "\'" " " > /tmp/package-list.txt
    

    例如。安装Synaptic软件包管理器:

    sudo apt-get install synaptic --print-uris | grep -o '\'http.*\' | tr "\'" " " > /tmp/package-list.txt
    

    (您也可以以类似方式生成更新列表。)

    生成的列表可用于在在线计算机上下载软件包和整个依赖项。在某些下载管理器中创建脚本以下载或使用列表进行批量下载。(还请注意,生成的文本文件使用Unix / Linux行尾,并且您可能希望将其更改为Windows。)当Synaptic Package Manager是Ubuntu中的默认应用程序时,以前有一种更简单的方法。

  8. 最后,在目标系统中,您可以使用dpkg或使用任何其他方式来安装软件包。

获取更新的软件包数据库,包括安全更新

除了上面的解释之外,以下结构还可以为您提供概念:

/opt/offlineRepoList/
└── dists
    ├── precise
    │   ├── Contents-i386.gz
    │   ├── main
    │   │   └── binary-i386
    │   │       ├── Packages.bz2
    │   │       ├── Packages.gz
    │   │       └── Release.txt
    │   ├── Release.gpg
    │   ├── Release.txt
    │   └── universe
    │       └── binary-i386
    │           ├── Packages.bz2
    │           ├── Packages.gz
    │           └── Release.txt
    ├── precise-security
    │   ├── Contents-i386.gz
    │   ├── main
    │   │   └── binary-i386
    │   │       ├── Packages.bz2
    │   │       ├── Packages.gz
    │   │       └── Release
    │   ├── Release
    │   ├── Release.gpg
    │   └── universe
    │       └── binary-i386
    │           ├── Packages.bz2
    │           ├── Packages.gz
    │           └── Release
    └── precise-updates
        ├── Contents-i386.gz
        ├── main
        │   └── binary-i386
        │       ├── Packages.bz2
        │       ├── Packages.gz
        │       └── Release
        ├── Release
        ├── Release.gpg
        └── universe
            └── binary-i386
                ├── Packages.bz2
                ├── Packages.gz
                └── Release

2

在浏览完以下内容的答案后:如何没有Internet(离线)的情况下安装软件或软件包?,我发现Arnel A. Borja的这段代码最有用。

sudo apt-get install PACKAGE --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/wget -c \1/p" > install.sh


无论如何,这是一些针对新手的说明。我希望您会发现它们有用。

为Ubuntu 15.10+新增的其他用户提供完整的下载说明:

  1. 打开终端(快捷键CTRL + ALT + T)
  2. 使用以下命令导航到要将软件包下载到的文件夹:

    cd FOLDERNAME
    (例如:cd Desktop
    提示:您还可以使用dir命令列出的文件夹。

  3. 在说明上方的代码中,将PACKAGE替换为您要下载的软件包。
  4. 复制并粘贴修改后的代码(快捷键CTRL + SHIFT + V),然后按Enter

    下载Synaptic Package Manager的
    sudo apt-get install synaptic --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/wget -c \1/p" > install.sh

    示例代码:下载VLC播放器的示例代码:
    sudo apt-get install vlc --print-uris -qq | sed -n "s/'\([^ ]\+\)' \([^ ]\+\) \([^ ]\+\) MD5Sum:\([^ ]\+\)/wget -c \1/p" > install.sh

  5. 如果询问,请输入root密码,然后按Enter。(如果未显示密码字符,请不要惊慌。这只是一种安全措施。)
  6. 现在应生成“ install.sh”文件。脚本中包含所有需要的依赖项。
  7. 现在我们需要使用以下命令运行脚本:
    sh install.sh
  8. 等待文件下载
  9. 之后,您可以使用以下命令在文件夹中安装所有软件包:

    sudo dpkg -i *.deb

    或者,您可以使用Synaptics之类的程序来安装软件包。(突触:文件-添加下载的软件包)
    或者,您也可以双击文件。这将打开Ubuntu软件中心。加载软件中心后,请按安装按钮。重复此过程,直到安装了文件夹中的所有文件。


2

我有一个可以在Windows上运行的小型python脚本,该脚本分析ubuntu软件包网站以找到依赖关系树并下载所有需要的软件包+进行校验和验证。

显然,这可能下载了所需的更多内容,但这对我来说是最简单的解决方案。

https://gist.github.com/Zitrax/2bad212a3b0571357e1b

然后可以使用下载所有下载的软件包dpkg -i E pkg\*。它避免了重新安装已安装的软件包。

用法:

usage: ubuntu-deps.py [-h] [-a ARCH] [-r RELEASE] [-m MIRROR] [-f FALLBACK] [-d DIRECTORY] dep [dep ...]

Download ubuntu dependencies

positional arguments:
  dep                                  The main/top package

optional arguments:
  -h, --help                           show this help message and exit
  -a ARCH, --arch ARCH                 The architecture to use (default: amd64)
  -r RELEASE, --release RELEASE        Ubuntu release (default: trusty)
  -m MIRROR, --mirror MIRROR           Mirror to use for download (default: http://no.archive.ubuntu.com/)
  -f FALLBACK, --fallback FALLBACK     Mirror to use when main mirror is not found (default:
                                       http://security.ubuntu.com/)
  -d DIRECTORY, --directory DIRECTORY  Target directory (default: pkg)

2

对于将始终保持脱机状态的系统,通常最好使用其他一些答案中介绍的可靠的脱机软件包管理方法之一。这是因为它们有助于使已经安装的软件包保持最新状态,而不仅仅是一次安装少量软件包。

但是,对于个别情况,如果您只想在没有Internet连接的系统上快速安装软件包(并且可以将其下载到另一台计算机上并带过来),则可以这样做。主要的麻烦在于确定所需的内容,因为一个软件包通常还有它依赖的其他软件包,因此必须在安装软件包之前或同时安装。

这个答案是由Ubuntu 14.04中的重复问题g ++激发的,并以需要安装的情况g++为核心示例。

我强调,不应长期使用此方法来替代至少有助于自动确定和安装所需安全更新的方法。永不连接网络会大大降低遭受攻击的可能性,但是可以通过来自任何来源的数据来利用某些安全漏洞。

尽管此方法可能看起来很复杂,但通常只需几分钟。对于具有大量依赖关系的程序包,可能需要更长的时间。对于安装具有大量依赖关系的元软件包(例如,ubuntu-desktop在最小系统上),下载所有必需的.deb文件可能需要更长的时间,因此此方法不太适合。

确定所需的依赖关系

您可以模拟安装以确定需要哪些其他软件包来满足软件包的依赖性。将-s标志传递给apt-get您指定任何操作之前)(执行此操作)。

apt-get -s install g++

我已经省略了sudo,因为这只是一个模拟,所以不需要root特权。

如果您实际上想安装所有最常用的工具来构建软件包,而不是仅仅安装g++,您可能更喜欢:

apt-get -s install build-essential

输出(用于g++)将如下所示:

NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  g++-4.8 libstdc++-4.8-dev
Suggested packages:
  g++-multilib g++-4.8-multilib gcc-4.8-doc libstdc++6-4.8-dbg
  libstdc++-4.8-doc
The following NEW packages will be installed:
  g++ g++-4.8 libstdc++-4.8-dev
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Inst libstdc++-4.8-dev (4.8.2-19ubuntu1 Ubuntu:14.04/trusty [amd64])
Inst g++-4.8 (4.8.2-19ubuntu1 Ubuntu:14.04/trusty [amd64])
Inst g++ (4:4.8.2-1ubuntu6 Ubuntu:14.04/trusty [amd64])
Conf libstdc++-4.8-dev (4.8.2-19ubuntu1 Ubuntu:14.04/trusty [amd64])
Conf g++-4.8 (4.8.2-19ubuntu1 Ubuntu:14.04/trusty [amd64])
Conf g++ (4:4.8.2-1ubuntu6 Ubuntu:14.04/trusty [amd64])

这是说,安装g++在我的系统,我需要的包g++g++-4.8libstdc++-4.8-dev

通常,通过模拟结果比简单地查看软件包的依赖项(或假设所需的条件与上述相同)要好,因为:

  1. 您可能已经安装了一些依赖项。
  2. 依赖项(即,一个程序包需要安装或工作的其他程序包)本身可能具有尚未安装的依赖项。

获取包装

一旦知道需要什么软件包,就可以下载它们。我建议为此使用Launchpad,因为下载是经过SSL加密的,这有助于防止文件损坏。

  • 这不仅是防止恶意方故意操纵的保障;它还有助于防止意外的文件损坏,这对于下载的文件而言是更常见的问题。
  • 它不会阻止一种情况:当文件仅部分下载但您认为已完成时。
  • 通常使用apt-get或软件中心安装软件包都不需要HTTPS,因为它是根据经过数字签名的哈希表列表验证其哈希值的。如果最终将这些软件包放入软件包缓存中并apt-get用于安装它们,那将会发生。
  • 但是,如果最终不得不使用来安装手动下载的软件包dpkg -i,那将不会完成。

您可以通过下键入其名称来搜索包封装https://launchpad.net/ubuntu,然后点击“找到一个包。” 例如,搜索g++-4.8将带您到gcc-4.8源软件包页面

然后向下滚动到您的Ubuntu版本的代号。您正在运行14.04,所以这是Trusty Tahr。在发行版Wiki页面上列出了所有Ubuntu发行版的代号。单击向右的三角形,以查看它的软件包下载。

屏幕截图显示了向右的三角形,使用该三角形可以扩展发行版以查看其下载内容

对于一些软件你可以从多个扩展下载列表口袋。您可能会看到:

  • release,Ubuntu发行版附带的软件包版本(或在发行时可用);
  • 安全性,发布后发布的安全更新;
  • 更新,发布后发布的所有更新;
  • 建议安装的更新,可以安装但仍在测试中,不建议用于一般用途;
  • backports,该软件起源于Ubuntu的更高版本,并为早期版本进行了重建。

例如,以下是14.04中可用于Firefox的功能:

Launchpad屏幕截图显示了同一发行版中多个口袋的软件包下载的扩展选择

通常,您会希望软件包具有安全性更新(如果存在),而软件包则具有release

展开软件包列表后,找到.deb适合您的体系结构的文件。Debs的名字叫。最常见的体系结构是:name_version_architecture.deb

  • 64位PC / Mac(amd64对于Intel和AMD处理器均称为)
  • 32位PC / Mac(i386也称为)

例如,要获取g++-4.864位版本的Ubuntu软件包,您可以下载g++-4.8_4.8.4-1ubuntu15_amd64.deb

安装软件包

如果检索到的包都是相同的版本apt-getinstall行动会一直自动检索并安装(如果你的系统中的网络连接),那么你可以把包中/var/cache/apt/archives,只是运行该命令:

sudo apt-get install g++

如果该系统从未连接到Internet,那么当您检索的所有软件包都来自发行版口袋时,可能就是这种情况。无论系统是否曾经连接到Internet,如果Launchpad上没有显示任何其他口袋中的包装,则几乎总是如此。(基本上,唯一不会出现的情况是,如果您安装了alpha或beta系统并且从未更新过。)

在安装的特定情况下g++,我会使用apt-get

如果这行不通或您希望它不行,请通过将软件包放在其他空文件夹中并运行来安装软件包:

sudo dpkg -Ri /path/to/folder

或者,您可以单独命名软件包。此示例假设软件包位于当前目录中(即,您已cd进入包含它们的目录):

sudo dpkg -i package1.deb package2.deb ...

除非要安装的软件包数量很少,并且您不知道要满足依赖关系而需要安装的确切顺序,否则使用这些方法要比单独手动安装每个软件包要有效得多。


1

如果您没有任何与Internet的连接,并且附近没有人可以连接到Internet,则还有一个未提及的选择:请某人通过常规帖子发送源文件。

您可以通过购买DVD来通过邮件获得整个Ubuntu OS。您可以用同样的方式要求在线朋友向您发送DEB文件甚至是VLC之类包的源文件。尽管有人发送带有所有软件包的完整DVD可能是值得的。这样,您可以从该DVD安装它。


0

这不是一个完整的详细答案,但是您可以从高层次进行:

  1. 获得所需的.deb pkgs(并创建它们的列表)(包括它们所依赖的尚未安装的软件包)
  2. 创建一个包含它们的apt存档
  3. 将apt存档复制到CD或USB
  4. 将CD或USB插入目标系统
  5. 在目标系统上配置apt以将CD或USB apt存档包含为源
  6. 使用apt-get install(pkgs列表)从列表中安装软件包


0

另一种可能性是使用remastersys。此工具允许您从自己的系统制作iso映像,并通过unetbootin创建可启动的USB记忆棒后,可以将自定义系统安装到所需的任意多台计算机上。


但是,随后如何更新它们呢?
伊利亚·卡根

0

我有几个简单的建议。你可以去图书馆。在“计算机”部分中查找所需的操作系统,其中一些书中包含DVD。另外,如果您想要最新的操作系统,我建议您在此网站上以象征性的价格购买DVD。www.ubuntu.com/download/desktop。


0

这个问题有点老了,因此目前的答案可能是多余的,但也许您也可以尝试使用dpkg-offline。安装bzr,然后:

bzr branch lp:dpkg-offline

其中包含一个教程和一个自述文件。

假设您想在Ubuntu 14.04 amd64系统上安装git,即使您的系统是例如12.04 i386,也可以:

  • 下载ubuntu-14.04-desktop-amd64.iso映像
  • dpkg-offline ubuntu-14.04-desktop-amd64.iso git
  • 您将获得一个tar.gz,可以将其传输到目标系统,它将包含种子包(git)及其所有依赖项。它还包括一个用于添加本地存储库的帮助程序脚本,因此您可以apt-get用来安装软件包。

dpkg-offline可以与10.04以后的任何Ubuntu桌面版本一起使用(我还没有对旧版本进行测试,但是它们也应该可以工作),并且可以与12.10以后的任何Ubuntu服务器版本一起使用。无论主机体系结构如何,它也应与amd64,i386和armhf映像一起使用。同样,我还没有使用arm64或powerpc / ppc64el进行过测试,但是它们也可以工作。

免责声明:我写了dpkg-offline。


很好,但是我认为下载整个发行版以使用脚本是过分的,希望它仅通过指定所需的软件包和目标发行版就可以工作
JavierLópez17

0

一些软件包安装在安装USB棒上。我已卸载network-manager并想要再次安装。

因此,我从(Lubuntu 17.10)安装了操作系统。它是/dev/sdb

将摇杆安装在路径上(/tmp/mnt在我的情况下)

mkdir /tmp/mnt
sudo mount /dev/sdb1 /tmp/mnt

然后,我编辑/etc/apt/sources.list为仅包含

deb file:///tmp/mnt/ main universe

那我做

sudo apt-get update

而且我可以安装network-manager

注意:这可能不是上面问题的答案,而是我在查找此问题时遇到的问题。


1
您可能应该备份sources.list然后再将其还原。
Chai T. Rex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.