勘探营地 發表於 2023-7-31 12:00:00

Ubuntu 离线安装的常见操作

<h1 id="ubuntu-离线安装的常见操作">Ubuntu 离线安装的常见操作</h1>
<p><strong>说明:</strong>很多情况下,生产环境都是离线环境,然而开发环境都是互联网的环境,因此部署的过程中需要构建离线安装包;</p>
<h2 id="1-下载但是不安装">1. 下载但是不安装</h2>
<pre><code class="language-sh"># 例如使用 apt 下载 wireshark 安装包
sudo apt download wireshark
# 下载多条的时候直接使用 空格 分割即可
sudo apt download vim sshpass
</code></pre>
<p><img src="https://typora-imgs-1308859190.cos.ap-beijing.myqcloud.com/new-typroa/image-20230731102438425.png" alt="image-20230731102438425" loading="lazy"></p>
<p>会下载安装包到当前的目录下面;</p>
<p>问题引出:在联网的环境中通常下载的时候不仅仅会安装当前的安装包,而且还会安装对应的依赖项;</p>
<h2 id="2-下载所有的依赖项">2. 下载所有的依赖项</h2>
<p>查询包的直接依赖项</p>
<pre><code class="language-sh"># 查询包的直接依赖
sudo apt-cache depends vim
</code></pre>
<p><img src="https://typora-imgs-1308859190.cos.ap-beijing.myqcloud.com/new-typroa/image-20230731103345117.png" alt="image-20230731103345117" loading="lazy"></p>
<p>查询所有的依赖项</p>
<pre><code class="language-sh"># 命令可以递归地列出软件包及其所有依赖项。这对于了解软件包的完整依赖关系非常有用。
sudo apt-cache depends --recurse
# 查看wireshark 的所有依赖
sudo apt-cache depends --recurse wireshark
</code></pre>
<p><img src="https://typora-imgs-1308859190.cos.ap-beijing.myqcloud.com/new-typroa/image-20230731104107313.png" alt="image-20230731104107313" loading="lazy"></p>
<p>使用上述的命令会查询大量的依赖包,也包含建议安装的包,和增强的包。继续为命令添加上更多的参数,进行精准的查询;</p>
<blockquote>
<p>如果你想在使用 apt-cache 命令时忽略建议、建议的依赖项、冲突、中断、替代、增强和预先依赖项,可以通过添加对应的选项来实现。</p>
<p>以下是对应选项的说明:</p>
<ul>
<li><code>--no-recommends</code>:忽略建议的依赖项。</li>
<li><code>--no-suggests</code>:忽略建议的软件包。</li>
<li><code>--no-conflicts</code>:忽略冲突。</li>
<li><code>--no-breaks</code>:忽略中断。</li>
<li><code>--no-replaces</code>:忽略替代。</li>
<li><code>--no-enhances</code>:忽略增强。</li>
<li><code>--no-pre-depends</code>:忽略预先依赖项。</li>
</ul>
</blockquote>
<pre><code class="language-shell"># 查找依赖包, 并且忽略冲突等信息
sudo apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts--no-breaks --no-replaces --no-enhances --no-pre-depends wireshark
</code></pre>
<p><img src="assets/image-20230731105524993.png" alt="image-20230731105524993" loading="lazy"></p>
<p><img src="https://typora-imgs-1308859190.cos.ap-beijing.myqcloud.com/new-typroa/image-20230731104657728.png" alt="image-20230731104657728" loading="lazy"></p>
<p>此时查询到的输出基本上符合我们的要求,只要我们去除<code>依赖: licxxx</code>即可,此时使用<code>grep</code>命令进行过滤;</p>
<pre><code class="language-SH">grep -v "^ "# 命令用于在文本中过滤掉以空格开头的行。这对于从结果中排除空行或空格行非常有用。
</code></pre>
<p>进行命令的编写</p>
<pre><code class="language-SH"># 获取到所有的依赖包
sudo apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts--no-breaks --no-replaces --no-enhances --no-pre-depends wireshark |grep -v "^ "
</code></pre>
<p><img src="https://typora-imgs-1308859190.cos.ap-beijing.myqcloud.com/new-typroa/image-20230731105718055.png" alt="image-20230731105718055" loading="lazy"></p>
<p>此时将下载命令和查询依赖命令结合即可下载所有的依赖包,第一个为我们要直接下载的包;</p>
<pre><code class="language-sh">sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts--no-breaks --no-replaces --no-enhances --no-pre-depends 包名 |grep-v "^ ")

# 下载过程中如果出现无法定位软件包的位置,则需要更换源,更换方法百度即可
</code></pre>
<h2 id="3--数据包的安装">3.数据包的安装</h2>
<pre><code class="language-SH"># 切换到下载安装包的目录
dpkg -i *.deb
# 权限不足的时候, 加上 sudo
sudo dpkg -i *.deb
</code></pre>
<h2 id="4-shell脚本的编写">4. shell脚本的编写</h2>
<p>将上述下载的命令,进行整合,因为安装只有一条命令,且是在生产环境中使用无需进行 shell 脚本的整合</p>
<pre><code class="language-shell">#!/bin/bash

#$1   pkg
get_all_depends()
{
      apt-cache depends --no-pre-depends --no-suggests --no-recommends \
                --no-conflicts --no-breaks --no-enhances\
                --no-replaces --recurse $1 | awk '{print $2}'| tr -d '&lt;&gt;' | sort --unique
}



for pkg in $*
do
      all_depends=$(get_all_depends $pkg)
      echo -e "所有依赖共计"$(echo $all_depends | wc -w)"个"
      echo $all_depends
      i=0
      for depend in $all_depends
      do
                i=$((i+1))
                echo -e "\033[1;32m正在下载第$i个依赖:"$depend "\033[0m"
                apt-get download $depend
      done
done

</code></pre>
<p>脚本运行</p>
<pre><code class="language-shell">bash 脚本名称.sh 包名
</code></pre>
<h2 id="5-python-第三方包下载但不安装">5. Python 第三方包下载但不安装</h2>
<p>前提:已经导出了 requirement.txt</p>
<pre><code class="language-python">pip freeze &gt; requirement.txt# 导出所有的安装包,已经包含了依赖以及版本
pip download -d \home\packs -r requirement.txt
# -r requirement.txt 可以替换成为单个包名
</code></pre>
<p>此处下载的是一些<code>whl</code>文件;</p>
<p>将下载的文件打包后放到生产环境的服务器中,执行如下的命令;</p>
<pre><code class="language-python">pip install --no-index --find-links=PIPDIR -r requirements.txt
# --find-links就是存放安装文件的目录
# -r是指按照requirements.txt这个文件去安装文件目录中找需要的安装包
</code></pre>
<p>继续努力,终成大器!</p><br><br>
来源:https://www.cnblogs.com/Blogwj123/p/17593096.html
頁: [1]
查看完整版本: Ubuntu 离线安装的常见操作