<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="Linux保存依赖安装包到指定目录(用于离线安装)">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2024-11-11 13:58<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
Linux保存依赖安装包到指定目录(用于离线安装)


有时候会遇到没有网络或者网络过慢，又或者没网网卡驱动，需要升级系统后才能安装驱动，此时部署一些项目时会有依赖包需要离线安装。遇到这种问题通常都是手动去下载依赖的库，然后离线安装，但是你无法判断下载的这个依赖库是否还依赖其他库，如果是手动去下载安装将耗费很长时间（他们导入任何文件都要走流程，一次就需要4h左右），为了改善这种情况，就需要将所有依赖都离线下载到本，本文将介绍如何将Centos和Ubuntu的依赖包保存到本地。


CentOS下载 RPM 包及其所有依赖包（推荐yumdownloader）


方法一：


我们可以通过 yum命令的 Downloadonly 插件下载 RPM 软件包及其所有依赖包。 为了安装 Downloadonly插件，以 root 身份运行以下命令。




XML/HTML代码


    yum install yum-plugin-downloadonly




现在，运行以下命令去下载一个 RPM 软件包。


XML/HTML代码


    yum install --downloadonly &lt;package-name&gt;





默认情况下，这个命令将会下载并把软件包保存到 /var/cache/yum/ 的 rhel-{arch}-channel/packageslocation 目录，不过，你也可以下载和保存软件包到任何位置，你可以通过 &ndash;downloaddir 选项来指定。


XML/HTML代码


    yum install --downloadonly --downloaddir=&lt;directory&gt; &lt;package-name&gt;





例子:


XML/HTML代码


    yum install --downloadonly --downloaddir=/root/mypackages/ httpd





正如你在上面输出所看到的, httpd软件包已经被依据所有依赖性下载完成了 。 请注意，这个插件适用于yum install/yum update， 但是并不适用于 yum groupinstall 。默认情况下，这个插件将会下载仓库中最新可用的软件包。然而你可以通过指定版本号来下载某个特定的软件版本。 例子:


XML/HTML代码


    yum install --downloadonly --downloaddir=/root/mypackages/ httpd-2.2.6-40.el7





此外，你也可以如下一次性下载多个包：


XML/HTML代码


    yum install --downloadonly --downloaddir=/root/mypackages/ httpd vsftpd





方法二：


Yumdownloader是一款简单，但是却十分有用的命令行工具，它可以一次性下载任何 RPM 软件包及其所有依赖包。 以 root 身份运行如下命令安装 Yumdownloader 工具。


XML/HTML代码


    yum install yum-utils





一旦安装完成，运行如下命令去下载一个软件包，例如 httpd。


XML/HTML代码


    yumdownloader httpd





为了根据所有依赖性下载软件包，我们使用 &ndash;resolve参数：


XML/HTML代码


    yumdownloader --resolve httpd





默认情况下，Yumdownloader 将会下载软件包到当前工作目录下。 为了将软件下载到一个特定的目录下，我们使用 &ndash;destdir 参数：


XML/HTML代码


    yumdownloader --resolve --destdir=/root/mypackages/ httpd





或者，


XML/HTML代码


    yumdownloader --resolve --destdir /root/mypackages/ httpd





终端输出：


XML/HTML代码


    Loaded plugins: fastestmirror

    Loading mirror speeds from cached hostfile

     * base: centos.excellmedia.net

     * epel: epel.mirror.angkasa.id

     * extras: centos.excellmedia.net

     * updates: centos.excellmedia.net

    --&gt; Running transaction check

    ---&gt; Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed

    --&gt; Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64

    --&gt; Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64

    --&gt; Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64

    --&gt; Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64

    --&gt; Running transaction check

    ---&gt; Package apr.x86_64 0:1.4.8-3.el7 will be installed

    ---&gt; Package apr-util.x86_64 0:1.5.2-6.el7 will be installed

    ---&gt; Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed

    ---&gt; Package mailcap.noarch 0:2.1.41-2.el7 will be installed

    --&gt; Finished Dependency Resolution

    (1/5): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:01

    (2/5): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:02

    (3/5): apr-1.4.8-3.el7.x86_64.rpm | 103 kB 00:00:02

    (4/5): httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm | 83 kB 00:00:03

    (5/5): httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:19





让我们确认一下软件包是否被下载到我们指定的目录下。


XML/HTML代码


    ls /root/mypackages/





终端输出：


XML/HTML代码


    apr-1.4.8-3.el7.x86_64.rpm

    apr-util-1.5.2-6.el7.x86_64.rpm

    httpd-2.4.6-40.el7.centos.4.x86_64.rpm

    httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm

    mailcap-2.1.41-2.el7.noarch.rpm





不像 Downloadonly 插件，Yumdownload 可以下载一组相关的软件包。 yumdownloader &quot;@Development Tools&quot; --resolve --destdir /root/mypackages/ 我更推荐使用Yumdownloader ，但是两者都是十分简单易懂而且可以完成相同的工作。


Ubuntu/Debian 下载 deb 包及其所有依赖包


XML/HTML代码


    apt clean

    apt --download-only install &lt;your_package_here&gt;

    cp /var/cache/apt/archives/*.deb &lt;your_directory_here&gt;





或者


XML/HTML代码


    sudo apt-get install --reinstall -d $(apt-cache depends kubeadm | grep Depends |cut -d: -f2 | tr -d &quot;&lt;&gt;&quot;)





递归3次下载所依赖包的脚本如下：


XML/HTML代码


    #!/bin/bash

     

    logfile=/tmp/log

    ret=&quot;&quot;

    function getDepends()

    {

       echo &quot;fileName is&quot; $1&gt;&gt;$logfile

       # use tr to del &lt; &gt;

       ret=`apt-cache depends $1|grep Depends |cut -d: -f2 |tr -d &quot;&lt;&gt;&quot;`

       echo $ret|tee  -a $logfile

    }

    # 需要获取其所依赖包的包  

    libs=&quot;gnome-shell&quot;                  # 或者用$1，从命令行输入库名字

     

    # download libs dependen. deep in 3

    i=0

    while [ $i -lt 3 ] ;

    do

        let i++

        echo $i

        # download libs

        newlist=&quot; &quot;

        for j in $libs

        do

            added=&quot;$(getDepends $j)&quot;

            newlist=&quot;$newlist $added&quot;

            apt install $added --reinstall -d -y

        done

     

        libs=$newlist

    done





参考1   参考2


其实不管是apt（--download-only）还是yum（--downloadonly）只需要加一个参数就可以让依赖包下载到默认（/var/cache/yum/ 或者 /var/cache/apt/archives/）目录，然后打包备份到本地即可，非常简单，需要时候直接上传或者用U盘之类外置存储直接安装都非常方便。




离线安装Python第三方库及依赖包


1、问题


在工作中经常需要在内网环境中安装python第三方库，使用从pypi上下载的whl文件来安装又经常遇到该库也需要依赖包，以至于并不能成功安装。


2、解决办法


（1）查看所需第三方库安装是否需要依赖库（以requests为例）




XML/HTML代码


    pip show requests







（2）使用命令将库及依赖包下载到本地（以requests为例）




XML/HTML代码


    pip download requests -d ./requests_package




（3）将下载的包文件传到内网，使用命令进行安装




XML/HTML代码


    pip install requests --no-index --find-links=./requests_package




3、补充


如果按上述解决办法中安装仍会报错，那么可以查看错误信息是具体哪个依赖包安装出错，然后去pypi下载该依赖包的tar.gz文件，解压后传到内网，进入解压后的目录，使用命令进行安装




XML/HTML代码


    pip setup.py install







依赖安装完毕后，再次执行第三方库的安装命令




XML/HTML代码


    pip install requests --no-index --find-links=./requests_package









以上仅供参考。
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
