Ubuntu18.04离线源环境搭建

系统环境

系统发行版: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

参考文档

ubuntu制作离线源


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 george_95@126.com