在企业内网环境或离线场景中,使用 CentOS ISO 镜像文件制作本地 YUM 源是快速部署软件包的有效方法。本文详细介绍如何下载、挂载 CentOS ISO 文件,创建本地 YUM 仓库,配置开机自动挂载,并提供多种使用场景和最佳实践指导,帮助你在离线环境中高效管理软件包。
ISO 本地源概述
适用场景
离线环境部署
- 企业内网服务器无法访问外网
- 生产环境安全隔离要求
- 快速批量部署系统
系统安装和维护
- 系统初始化时安装基础软件
- 系统恢复和灾难恢复
- 版本标准化管理
测试和开发
- 本地测试环境搭建
- 软件兼容性测试
- 快速创建测试镜像
技术原理
ISO 本地源的核心原理:
- ISO 文件: 包含完整的 RPM 包和仓库索引
- 挂载: 将 ISO 作为文件系统挂载到本地目录
- YUM 配置: 配置本地路径作为 YUM 仓库
- 自动挂载: 通过 fstab 实现开机自动挂载
准备工作
ISO 文件下载
从国内镜像站下载 CentOS ISO 文件,速度更快:
https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/
https://mirrors.huawei.com/centos/7.9.2009/isos/x86_64/
|
ISO 文件选择建议:
- CentOS-7-x86_64-DVD-2009.iso: 完整版(约4.5GB),推荐使用
- CentOS-7-x86_64-Everything-2009.iso: 包含所有软件包(约10GB)
- CentOS-7-x86_64-Minimal-2009.iso: 最小化版本(约1GB),不推荐用于制作本地源
上传 ISO 文件
将下载的 ISO 文件上传到服务器:
scp CentOS-7-x86_64-DVD-2009.iso root@server-ip:/data/iso/
yum install -y lrzsz rz CentOS-7-x86_64-DVD-2009.iso
md5sum CentOS-7-x86_64-DVD-2009.iso
|
基础配置步骤
创建挂载点
创建 ISO 文件挂载目录:
sudo mkdir -p /mnt/cdrom
sudo mkdir -p /data/iso-mount
sudo chmod 755 /mnt/cdrom
|
挂载 ISO 文件
使用 mount 命令挂载 ISO 文件:
sudo mount -o loop /data/iso/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom
mount | grep cdrom df -h | grep cdrom
ls -lh /mnt/cdrom/
|
挂载参数说明:
-o loop: 使用 loop 设备将文件作为块设备挂载
- ISO 文件会被挂载为只读模式
- 挂载后可以访问 ISO 内的所有文件
创建 YUM 仓库配置
配置本地 YUM 仓库:
sudo cp -r /etc/yum.repos.d/ /etc/yum.repos.d.backup
sudo cat > /etc/yum.repos.d/CentOS-Local.repo << EOF [local-cdrom] name=CentOS-7.9 Local Repository baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7 EOF
|
配置参数详解:
[local-cdrom]: 仓库ID,唯一标识符
name: 仓库描述名称
baseurl=file:///mnt/cdrom: 本地文件路径
enabled=1: 启用仓库
gpgcheck=0: 禁用 GPG 签名检查(本地源推荐)
gpgkey: GPG 密钥文件路径(可选)
清理和更新 YUM 缓存
清理 YUM 缓存并生成新索引:
sudo yum clean all
sudo yum makecache
sudo yum repolist
yum repolist | grep local-cdrom
|
测试本地源
测试软件包安装:
yum search nginx
yum info httpd
sudo yum install -y --disablerepo='*' --enablerepo='local-cdrom' httpd
rpm -qa | grep httpd systemctl status httpd
|
高级配置
设置开机自动挂载
配置 /etc/fstab 实现开机自动挂载:
sudo vim /etc/fstab
/data/iso/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom iso9660 loop,ro 0 0
blkid /data/iso/CentOS-7-x86_64-DVD-2009.iso
|
fstab 字段说明:
文件路径 挂载点 文件系统类型 挂载选项 dump频率 fsck顺序
|
iso9660: ISO 文件系统类型
loop,ro: loop 设备,只读模式
0 0: 不进行 dump 和 fsck 检查
验证 fstab 配置:
sudo mount -a
mount | grep cdrom
sudo reboot
|
多 ISO 文件挂载
如果有多个 ISO 文件(如 Everything 版本):
mkdir -p /mnt/iso-dvd mkdir -p /mnt/iso-everything
mount -o loop CentOS-7-x86_64-DVD-2009.iso /mnt/iso-dvd mount -o loop CentOS-7-x86_64-Everything-2009.iso /mnt/iso-everything
cat > /etc/yum.repos.d/CentOS-Multi-ISO.repo << EOF [local-dvd] name=CentOS DVD Repository baseurl=file:///mnt/iso-dvd enabled=1 gpgcheck=0
[local-everything] name=CentOS Everything Repository baseurl=file:///mnt/iso-everything enabled=1 gpgcheck=0 EOF
|
NFS 共享 ISO 源
将 ISO 源通过 NFS 共享给其他服务器:
yum install -y nfs-utils
cat >> /etc/exports << EOF /mnt/cdrom 192.168.1.0/24(ro,sync,no_root_squash) EOF
systemctl start nfs-server systemctl enable nfs-server
mount -t nfs nfs-server:/mnt/cdrom /mnt/nfs-iso
cat > /etc/yum.repos.d/NFS-ISO.repo << EOF [nfs-iso] name=NFS Shared ISO Repository baseurl=file:///mnt/nfs-iso enabled=1 gpgcheck=0 EOF
|
使用场景
系统初始化批量部署
使用 ISO 源进行系统初始化:
yum groupinstall -y "Development Tools" yum groupinstall -y "System Administration Tools"
yum install -y \ wget curl vim \ net-tools \ bash-completion \ tree htop \ lsof iotop
sysctl -p
|
离线环境补丁安装
使用 ISO 源安装安全补丁:
yum check-update
yum update --disablerepo='*' --enablerepo='local-cdrom' --security
rpm -qa --last | head -20
|
软件包依赖修复
修复系统依赖问题:
yum deplist package-name
rpm --rebuilddb
yum install -y --skip-broken package-name
|
自动化脚本
完整的 ISO 本地源配置脚本:
#!/bin/bash
ISO_FILE="/data/iso/CentOS-7-x86_64-DVD-2009.iso" MOUNT_POINT="/mnt/cdrom" REPO_NAME="CentOS-Local.repo"
GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1" }
log_error() { echo -e "${RED}[ERROR]${NC} $1" }
check_iso_file() { log_info "检查 ISO 文件..." if [ ! -f "$ISO_FILE" ]; then log_error "ISO 文件不存在: $ISO_FILE" exit 1 fi FILE_SIZE=$(stat -c%s "$ISO_FILE") if [ $FILE_SIZE -lt 4000000000 ]; then log_error "ISO 文件大小异常,可能不完整" exit 1 fi log_info "ISO 文件检查完成" }
create_mount_point() { log_info "创建挂载点..." mkdir -p "$MOUNT_POINT" chmod 755 "$MOUNT_POINT" log_info "挂载点创建完成: $MOUNT_POINT" }
mount_iso_file() { log_info "挂载 ISO 文件..." if mount | grep -q "$MOUNT_POINT"; then log_info "ISO 已挂载" return 0 fi mount -o loop "$ISO_FILE" "$MOUNT_POINT" || { log_error "挂载失败" exit 1 } log_info "ISO 文件挂载成功" }
configure_yum_repo() { log_info "配置 YUM 仓库..." if [ -d /etc/yum.repos.d.backup ]; then log_info "备份目录已存在" else cp -r /etc/yum.repos.d/ /etc/yum.repos.d.backup fi cat > "/etc/yum.repos.d/$REPO_NAME" << EOF [local-cdrom] name=CentOS Local Repository baseurl=file://${MOUNT_POINT} enabled=1 gpgcheck=0 EOF log_info "YUM 仓库配置完成" }
update_yum_cache() { log_info "更新 YUM 缓存..." yum clean all || { log_error "清理缓存失败" exit 1 } yum makecache || { log_error "生成缓存失败" exit 1 } log_info "YUM 缓存更新完成" }
configure_auto_mount() { log_info "配置开机自动挂载..." if grep -q "$ISO_FILE" /etc/fstab; then log_info "fstab 已配置自动挂载" return 0 fi echo "$ISO_FILE $MOUNT_POINT iso9660 loop,ro 0 0" >> /etc/fstab log_info "开机自动挂载配置完成" }
verify_configuration() { log_info "验证配置..." mount | grep "$MOUNT_POINT" yum repolist | grep local-cdrom PACKAGE_COUNT=$(yum repolist | grep local-cdrom | awk '{print $2}') log_info "可用软件包数量: $PACKAGE_COUNT" }
main() { log_info "开始配置 ISO 本地 YUM 源..." check_iso_file create_mount_point mount_iso_file configure_yum_repo update_yum_cache configure_auto_mount verify_configuration log_info "ISO 本地 YUM 源配置完成!" }
main
|
最佳实践
性能优化
使用 SSD 存储
mv CentOS-7-x86_64-DVD-2009.iso /data-ssd/iso/
mount -o loop /data-ssd/iso/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom
|
内存缓存优化
echo 'max_age=7d' >> /etc/yum.conf echo 'keepcache=1' >> /etc/yum.conf
|
并发下载
yum install -y yum-plugin-fastestmirror
echo 'max_parallel_downloads=10' >> /etc/yum.conf
|
安全考虑
访问权限控制
chmod 600 /data/iso/CentOS-7-x86_64-DVD-2009.iso
chmod 755 /mnt/cdrom chown root:root /mnt/cdrom
|
GPG 签名验证
rpm --import /mnt/cdrom/RPM-GPG-KEY-CentOS-7
sed -i 's/gpgcheck=0/gpgcheck=1/' /etc/yum.repos.d/CentOS-Local.repo
|
审计日志
echo 'history_record=1' >> /etc/yum.conf
yum history list
|
维护建议
定期更新 ISO
wget https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
md5sum -c CentOS-7-x86_64-DVD-2009.iso.md5
umount /mnt/cdrom mv CentOS-7-x86_64-DVD-2009.iso /data/iso/ mount -a
|
备份配置
tar -czf yum-config-backup.tar.gz /etc/yum.repos.d/
cp /etc/fstab /etc/fstab.backup
|
监控脚本
cat > /usr/local/bin/monitor-iso-repo.sh << 'EOF'
MOUNT_POINT="/mnt/cdrom"
if ! mount | grep -q "$MOUNT_POINT"; then echo "警告: ISO 未挂载" mount -a fi
if ! yum repolist | grep -q local-cdrom; then echo "警告: 本地源不可用" yum clean all yum makecache fi
echo "$(date): ISO 源检查完成" >> /var/log/iso-repo-monitor.log EOF
chmod +x /usr/local/bin/monitor-iso-repo.sh
echo "*/10 * * * * /usr/local/bin/monitor-iso-repo.sh" >> /var/spool/cron/root
|
常见问题排查
问题1:挂载失败
现象: mount 命令提示失败
解决方案:
ls -l /dev/loop*
mknod /dev/loop0 b 7 0
file CentOS-7-x86_64-DVD-2009.iso
mount -t iso9660 -o loop CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom
|
问题2:YUM 仓库不可用
现象: yum repolist 不显示本地源
解决方案:
ls -l /etc/yum.repos.d/
yum-config-manager --verify local-cdrom
yum clean all rm -rf /var/cache/yum/ yum makecache
|
问题3:开机不自动挂载
现象: 重启后 ISO 未挂载
解决方案:
mount -a -v
cat /etc/fstab | grep iso
mount -o loop /data/iso/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom
journalctl -xe | grep mount
|
问题4:软件包安装失败
现象: yum install 提示依赖问题
解决方案:
yum deplist package-name
yum list available | grep package-name
yum install --skip-broken package-name
|
与其他方法对比
| 特性 |
ISO 本地源 |
离线 RPM 包 |
YUM 仓库同步 |
| 准备难度 |
简单 |
中等 |
复杂 |
| 包数量 |
中等(~4000) |
自定义 |
完整(~10000+) |
| 更新频率 |
ISO 发布周期 |
手动管理 |
实时同步 |
| 适用场景 |
系统初始化 |
特定软件部署 |
生产环境 |
| 磁盘占用 |
4.5GB |
自定义 |
50GB+ |
总结
ISO 本地 YUM 源是离线环境软件部署的快速解决方案。通过本文的详细指导,你掌握了:
- ISO 文件下载和上传 - 选择合适的镜像和版本
- 挂载和配置流程 - 临时挂载和自动挂载设置
- 多场景应用 - 系统初始化、补丁安装、依赖修复
- 自动化脚本 - 提高效率,减少人工错误
- 最佳实践和监控 - 确保长期稳定运行
掌握这些技能后,你可以在离线环境中快速部署和管理 CentOS 系统软件包。
相关资源:
- CentOS 官方下载
- 阿里云 CentOS 镜像
- YUM 配置指南