ubuntu22.04.5本地apt源部署

很多情况下,内网服务器无法连接互联网,这样如果原始系统只是最基本的下载安装包,因为存在依赖包不全的情况,难以对其进行更新及通过apt安装包

所以为解决不能联网的问题,首先先通过可以联网的机器制造好源,再通过存储介质传输到无互联网的环境就解决了。

首先,先在为了下载网速快一些可连接互联网的机器配置阿里源

该方法比较灵活,不需要把镜像源所有的镜像都拉下来,只需要设置自己想要的包就可以

可以连接互联网的机器操作

修改/etc/apt/source.list

复制代码
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

运行下面的shell

shell 复制代码
chmod +x OfflineBuild.sh
./OfflineBuild.sh common

注:common为常用包,也可以在脚本的PACKAGES加入自己需要的包名

shell 复制代码
#!/bin/bash
# 包名称
package_name=$1
# ubuntu版本
ubuntu_version="22.04"

# 安装更新软件包
ADDR=$PWD
mkdir -p $ADDR/offline-packages/debs
apt-get update -y
apt-get --download-only -y dist-upgrade
cp /var/cache/apt/archives/*.deb $ADDR/offline-packages/debs
apt install -y apt-rdepends dpkg-dev genisoimage
cd $ADDR/offline-packages/debs


# 输入要安装的软件包名称
case "$1" in
    "docker")
        PACKAGES="docker.io docker-compose"
        ;;
    "common")
        PACKAGES="build-essential gcc g++ make cmake gdb net-tools wget curl ssh openssh-server openssh-client htop iftop iotop lsof tcpdump zip unzip tar gzip bzip2 vim nano less tree dos2unix telnet nmap netcat iproute2 git python3 python3-pip subversion docker.io docker-compose fdisk parted lvm2 lightdm linux-header-$(uname -r)"
        ;;
    *)
        echo "Usage: $0 {docker|common}"
        exit 1
        ;;
esac

downloadlog() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
download_package_with_deps() {
    local package="$1"
    downloadlog "处理包: $package"

    apt-rdepends "$package" 2>/dev/null | grep -v "^ " | while read pkg; do
        # 检查是否已下载(更精确的匹配)
        if ! ls "${pkg}_"*.deb >/dev/null 2>&1; then
            downloadlog "下载: $pkg"
            apt-get download "$pkg" || downloadlog "警告: $pkg 下载失败"
        else
            downloadlog "已存在: $pkg"
        fi
    done
}
for package in $PACKAGES; do
        download_package_with_deps "$package"
done

downloadlog "下载完成,共下载 $(ls *.deb | wc -l) 个包"


REPO_ROOT=$ADDR/local-repo
mkdir -p ${REPO_ROOT}/{conf,dists/stable/main/binary-amd64,pool/main}
cp $ADDR/offline-packages/debs/*.deb ${REPO_ROOT}/pool/main/
cat << EOF > ${REPO_ROOT}/dists/stable/Release
Origin: Local Repository
Label: Local Repo
Suite: stable
Codename: stable
Version: 1.0
Architectures: amd64
Components: main
Description: Local package repository
Date: $(date -R)
EOF
cd ${REPO_ROOT}
dpkg-scanpackages pool/main /dev/null > dists/stable/main/binary-amd64/Packages
gzip -k dists/stable/main/binary-amd64/Packages
genisoimage -o $ADDR/ubuntu_$ubuntu_version-$package_name.iso -R -J ${REPO_ROOT}

cat << EOF > $ADDR/OfflineLoad.sh
#!/bin/bash
mkdir /mnt/local-repo
mount -o loop ubuntu_$ubuntu_version-$package_name.iso /mnt/local-repo
mv /etc/apt/sources.list /etc/apt/sources.list.bak
bash -c 'echo "deb [trusted=yes] file:///mnt/local-repo stable main"' > /etc/apt/sources.list
apt-get update -y
EOF

脚本运行后,会生成OfflineLoad.sh及一个iso文件 将其复制到离线设备,运行OfflineLoad.sh

无法连接互联网的机器操作

复制代码
chmod +x ./OffinelLoad.sh
./OfflineLoad.sh

注:该文件与上步生成的ubuntu_22.04-common.iso

OfflineLoad.sh基本上如下:

shell 复制代码
#!/bin/bash
mkdir /mnt/local-repo
mount -o loop ubuntu_22.04-common.iso /mnt/local-repo
mv /etc/apt/sources.list /etc/apt/sources.list.bak
bash -c 'echo "deb [trusted=yes] file:///mnt/local-repo stable main"' > /etc/apt/sources.list
apt-get update -y

完全运行后基本上就实现了本地源

安装上面想要的包:

复制代码
apt install -y 包名
相关推荐
Zfox_2 小时前
【Shell 脚本入门】轻松上手的实战指南
linux·服务器·运维开发·shell脚本
泛黄的咖啡店4 小时前
FTP-网络文件服务器
云计算·运维开发
Linux运维老纪2 天前
Python文件操作及数据库交互(Python File Manipulation and Database Interaction)
linux·服务器·数据库·python·云计算·运维开发
Linux运维老纪2 天前
交换机之配置系统基本信息(Basic Information of the Configuration System for Switches)
linux·网络·mysql·华为·云计算·运维开发
Linux运维老纪4 天前
Linux之七大难命令(The Seven Difficult Commands of Linux)
linux·运维·服务器·云计算·运维开发
慧一居士5 天前
Kafka 消息积压监控和报警配置的详细步骤
kafka·运维开发
vortex59 天前
Bash 中的数学运算详解
linux·运维·开发语言·bash·运维开发
Linux运维老纪9 天前
电脑 BIOS 操作指南(Computer BIOS Operation Guide)
windows·计算机网络·安全·云计算·电脑·运维开发
Linux运维老纪11 天前
Linux之 grep、find、ls、wc 命令
linux·运维·服务器·数据库·云计算·运维开发
ALex_zry13 天前
从源码到实战:深度解析`rsync`增量同步机制与高级应用
linux·网络·运维开发