分类

下载 deb 安装包及其依赖包

2020-04-10 12:33 linux

这两天要为离线的 arm 服务器安装几个 deb 包,因为这些包都有许多上游的依赖包,得 一起把它们下载到本地。

这里以 ubuntu 18.04 (bionic) 为例,下载 arm64 架构的几个包。

首先就是配置安装源,因为本地环境不是 ubuntu,需要先搞一个 ubuntu 的环境,可以 考虑使用 docker 或者 debootstrap。这里选择使用后者,操作起来要更简单。

配置 ubuntu 18.04 amd64 环境

sudo debootstrap bionic rootfs http://mirrors.aliyun.com/ubuntu

这里用的是阿里云的安装源,系统目录位于 rootfs

安装好基本系统之后,需要 chroot 进行,修改和配置。

$ sudo chroot rootfs

之后,先修改安装源,将以下内容保存到 /etc/apt/sources.list中:

deb [arch=amd64] http://mirrors.aliyun.com/ubuntu bionic main restricted multiverse universe
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu bionic-updates main restricted multiverse universe
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu bionic-backports main restricted multiverse universe
deb [arch=amd64] http://mirrors.aliyun.com/ubuntu bionic-security main restricted multiverse universe

deb [arch=arm64] http://ports.ubuntu.com/ bionic main restricted multiverse universe
deb [arch=arm64] http://ports.ubuntu.com/ bionic-updates main restricted multiverse universe
deb [arch=arm64] http://ports.ubuntu.com/ bionic-backports main restricted multiverse universe
deb [arch=arm64] http://ports.ubuntu.com/ bionic-security main restricted multiverse universe

deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted multiverse universe
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted multiverse universe
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted multiverse universe
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports bionic-security main restricted multiverse universe

这里,使用的 arm64 架构的源是 Ubuntu 官方 ports 源。

接下来打开 multiarch,支持 arm64架构:

# dpkg --add-architecture arm64

之后更新包列表:

# apt update

下载 arm64 的安装包

为了尽可能下载所需要的依赖,我们使用 apt-rdepends 工具做依赖检查,首先将它安装到 系统中:

# apt install apt-rdepends

之后,使用下面的脚本(可命名为 doenload_deb.sh)下载需要的 deb 包及其依赖:

#!/bin/bash

readonly TARGET=$1
for pkg in $(apt-rdepends ${TARGET} | grep -v "^ " | grep -v "^libc-dev$"); do
  apt-get download ${pkg}:arm64 | apt-get download ${pkg}:all
done

以上脚本中,会一直追踪包的上游依赖,直到 libc-dev。另外,考虑到有些包,比如好多 python 的包,都是支持多种架构的,我们就先尝试下载 arm64 版本的包,如果失败了, 再尝试下载通用架构的包。

使用方法也很简单,比如下载 ansiblevim 这两个包的话,可以:

# ./download_deb.sh ansible
# ./download_deb.sh vim

安装

将下载好的这些 deb 包,同步到待安装的离线 arm 服务器上,然后直接安装即可:

$ sudo dpkg -i *.deb