系统环境
系统发行版:Ubuntu 18.04.6 LTS
内核版本:5.4.0-150-generic
注意事项
使用此方式制作的离线源只能在相同的系统版本下用于离线的环境安装,即:Ubuntu18.04系统环境下制作的离线源,不能用于Ubuntu20.04系统的离线环境安装,如果环境不同可能导致在离线电脑上安装时会缺少部分依赖导致安装失败。
一、制作离线源(可连外网)
先在一台可以连接外网的Ubuntu18.04服务器制作离线源环境。
创建离线源目录
mkdir -p /opt/offline 修改权限 chmod 777 -R /opt/offline/
后面所有的安装包都会放到此目录,及子目录下。
安装 dpkg-dev 工具
apt-get install -y dpkg-dev
备份系统目录的安装包
创建安装包备份目录 mkdir -p /opt/offline/default/archives 文件迁移 mv /var/cache/apt/archives/* /opt/offline/default/archives/ 删除源安装包 rm -rf /var/cache/apt/archives/*
下面演示常用软件离线源制作
1. ssh
mkdir -p /opt/offline/ssh/archives/
cd /opt/offline/ssh/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances openssh-client openssh-server openssh-sftp-server | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中
cp Packages.gz ./archives
删除外部的依赖关系文件
rm -rf /opt/offline/ssh/Packages.gz
2. vim
mkdir -p /opt/offline/vim/archives/
cd /opt/offline/vim/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vim | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/vim/Packages.gz
3. curl
mkdir -p /opt/offline/curl/archives/
cd /opt/offline/curl/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances curl | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/curl/Packages.gz
4. wget
mkdir -p /opt/offline/wget/archives/
cd /opt/offline/wget/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances wget | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/wget/Packages.gz
5. unzip
mkdir -p /opt/offline/unzip/archives/
cd /opt/offline/unzip/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances unzip | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/unzip/Packages.gz
6. net-tools
mkdir -p /opt/offline/net-tools/archives/
cd /opt/offline/net-tools/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances net-tools | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/net-tools/Packages.gz
7. ffmpeg
mkdir -p /opt/offline/ffmpeg/archives/
cd /opt/offline/ffmpeg/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances ffmpeg | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/ffmpeg/Packages.gz
8. ntp
mkdir -p /opt/offline/ntp/archives/
cd /opt/offline/ntp/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances ntp ntpdate | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/ntp/Packages.gz
9. apt-transport-https
mkdir -p /opt/offline/apt-transport-https/archives/
cd /opt/offline/apt-transport-https/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances apt-transport-https | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/apt-transport-https/Packages.gz
10. ca-certificates
mkdir -p /opt/offline/ca-certificates/archives/
cd /opt/offline/ca-certificates/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances ca-certificates | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/ca-certificates/Packages.gz
11. software-properties-common
mkdir -p /opt/offline/software-properties-common/archives/
cd /opt/offline/software-properties-common/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances software-properties-common | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/software-properties-common/Packages.gz
12. docker
docker的离线源制作稍稍复杂,需要GPG密钥,这里从阿里云下载Docker的GPG密钥,配置APT以从阿里云的Docker镜像仓库安装Docker.
参考资料
sudo apt-get update -y
安装必要的包,包括证书、curl(用于数据传输)和gnupg(用于GPG密钥管理)。
sudo apt-get install -y ca-certificates curl gnupg
创建一个目录/etc/apt/keyrings,并设置其权限为755。
sudo install -m 0755 -d /etc/apt/keyrings
下载Docker的GPG密钥,并将其转换为适合APT使用的格式,保存到指定目录。
sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
为docker.gpg文件添加可读权限,以便所有用户都可以读取它。
sudo chmod a+r /etc/apt/keyrings/docker.asc
将Docker的APT源添加到新的列表文件中,使用当前系统架构和版本代号。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
再次更新包索引,以包括刚添加的Docker源。
sudo apt-get update -y
安装docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
查看docker版本信息
docker --version
创建docker离线源安装包目录
mkdir -p /opt/offline/docker/archives/
将docker安装时下载的缓存包,移动到离线源安装包路径中
mv /var/cache/apt/archives/* /opt/offline/docker/archives/
cd /opt/offline/docker/
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/docker/Packages.gz
13. nfs
https://www.cnblogs.com/mrld/articles/14149708.html
mkdir -p /opt/offline/nfs/archives/
cd /opt/offline/nfs/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nfs-kernel-server nfs-common | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/nfs/Packages.gz
14. sftp
https://www.cnblogs.com/zhumengke/articles/11225040.html
mkdir -p /opt/offline/sftp/archives/
cd /opt/offline/sftp/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vsftpd | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/sftp/Packages.gz
15. dos2unix
mkdir -p /opt/offline/dos2unix/archives/
cd /opt/offline/dos2unix/archives/
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances dos2unix | grep "^\w" | sort -u)
cd ..
带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
复制依赖关系文件到archives中,并删除无用的依赖关系文件
cp Packages.gz ./archives && rm -rf /opt/offline/dos2unix/Packages.gz
16. 离线源打包
将上面制作好的连线源安装包,打包
cd /opt/offline
tar -zcf offline-source.tar.gz ./*
offline-source.tar.gz
就是制作好的离线包
二、使用离线源安装服务器
上面基于可连外网的服务器制作了离线源,并将离线源打成了一个tar包 :offline-source.tar.gz
,现在就使用这个打包好的离线源,在断网的服务器上安装环境。
1. 上传离线安装包
将 offline-source.tar.gz
上传到服务器上,可以通过U盘拷贝的方式,或者内网文件服务器下载。
2. 配置离线源
创建离线文件存放目录
mkdir -p /opt/offline
解压离线文件
tar -zxvf offline-source.tar.gz -C /opt/offline/
备份源文件
mv /etc/apt/sources.list /etc/apt/sources.list.bak
映射本地源,这里可以使用vi
cat >>/etc/apt/sources.list <<EOF
deb [trusted=yes] file:///opt/offline/apt-transport-https/ archives/
deb [trusted=yes] file:///opt/offline/ca-certificates/ archives/
deb [trusted=yes] file:///opt/offline/curl/ archives/
deb [trusted=yes] file:///opt/offline/docker/ archives/
deb [trusted=yes] file:///opt/offline/ffmpeg/ archives/
deb [trusted=yes] file:///opt/offline/net-tools/ archives/
deb [trusted=yes] file:///opt/offline/nfs/ archives/
deb [trusted=yes] file:///opt/offline/ntp/ archives/
deb [trusted=yes] file:///opt/offline/sftp/ archives/
deb [trusted=yes] file:///opt/offline/software-properties-common/ archives/
deb [trusted=yes] file:///opt/offline/ssh/ archives/
deb [trusted=yes] file:///opt/offline/unzip/ archives/
deb [trusted=yes] file:///opt/offline/vim/ archives/
deb [trusted=yes] file:///opt/offline/wget/ archives/
deb [trusted=yes] file:///opt/offline/dos2unix/ archives/
EOF
更新
apt-get update -y
3. 测试安装
//根据自己需求进行安装,例如:
apt-get install -y wget
4. 使用离线源安装docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
参考文档
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 george_95@126.com