Linux利用系统ISO文件搭建本地仓库指南

前言

通常Linux实施运维的主要工作就是安装各种各样的软件。实施运维的工作环境可以分为内网和外网两种环境,内网就是无web访问的单一网络模式,外网自然就是可访问web的网络模式。而Linux的包管理器如aptyum通常都是基于web网络来运行的,而内网环境和web网络是隔绝的,通常在生产环境,操作系统会最小化安装,这就造成我们的安装各种基础软件困难,比如ntpstat,yumdownload,lrzsz,gcc等等这些基础软件。

那么,在内网环境下,我们可以在有web网络的机器上通过配置webyum源单独下载下来比如gcc和与它相关的依赖的rpm包,然后在内网的机器上使用这些rpm包就可以完成一些安装了。

但离线安装包首先是制做不容易,在有web网络的服务器上,常有依赖遗漏或依赖顺序的情况发生,从而导致在内网环境下使用离线安装包失败;其次,离线安装包需要在有网环境和内网环境下转移,会有很多的不便;再次,有时候会有临时的安装某个软件的需求,临时制做离线安装包十分繁琐。总体来说完全依靠离线安装不是很方便,操作成本也比较大。

那么,有没有更好的办法呢?答案当然是有的。

我们可以利用操作系统的安装ISO文件制做本地软件仓库,那些基础的软件就可以从本地仓库安装了。

这里需要注意的点就是ISO文件必须是你在服务器查出来的操作系统的版本,否则可能导致安装报错失败。

1、 查看需要搭建本地仓库的服务器的操作系统版本

  • uname命令:使用uname -a命令可以获取系统的全面信息,包括内核名称、主机名、内核发行版、内核版本、机器(硬件)名称、处理器类型、硬件平台、操作系统名称等。
  • lsb_release命令:使用lsb_release -a命令可以显示Linux标准基础(LSB)的版本信息,包括发行版的ID、具体名称、版本号等。
  • 查看/etc/release文件:许多Linux发行版在/etc目录下有一个或多个以release结尾的文件,通过查看这些文件可以快速获取操作系统的版本信息。例如,cat /etc/os-release或cat /etc/lsb-release。
  • hostnamectl命令:使用hostnamectl命令可以显示操作系统的信息,包括内核版本、架构、操作系统名称等。
  • 查看/proc/version文件:通过cat /proc/version命令可以获取Linux内核的版本信息。
  • dmesg命令:使用dmesg | grep Linux命令可以查看内核环形缓冲区的消息,包括内核版本信息。

示例:

cat /etc/redhat-release #CentOS系统的具体版本信息
cat /etc/centos-release#CentOS系统的具体版本信息
cat /etc/os-release#Euler系统的具体版本信息
cat /etc/debian_version#Debian系统的具体版本信息
cat /etc/uos-release#Uos系统的具体版本信息
hostnamectl#hostnamectl 命令会显示系统信息,包括操作系统的版本号和其他相关信息。

2、上传同版本的操作系统ISO文件到服务器

上传同版本的操作系统ISO文件到服务器上,这里需求注意的是此文件上传到的位置需要放到第一块硬盘所在分区区间内。

通过lsblk命令查看硬盘情况:

[root@Shenco yum.repos.d]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0   40G  0 disk 
├─sda1               8:1    0    1G  0 part /boot
└─sda2               8:2    0   39G  0 part 
  ├─openeuler-root 253:0    0   35G  0 lvm  /
  └─openeuler-swap 253:1    0    4G  0 lvm  [SWAP]
sr0                 11:0    1  3.8G  0 rom  

经lsblk命令查看,可以发现只有一个sba硬盘。假设有一个sdb硬盘,此文件千万不能放置到sdb硬盘内。原因是此ISO文件挂载成分区后,Linux启动会按字母顺序依次启动,而/etc/fstab 文件内会优先于sdb硬盘加载,此时,Linux操作系统读取到了分区信息而找不到相应的硬盘就会造成系统启动失败。

3、ISO文件通过/etc/fstab 挂载到指定的目录

例如把ISO挂载到 /mnt/cdrom 下:

 第一步:创建挂载目录
mkdir /mnt/cdrom

 第二步:修改/etc/fstab文件,填加最后一行内容
vim /etc/fstab
#
# /etc/fstab的文件内容如下,在最后一行填加
# /etc/fstab
# Created by anaconda on Mon Aug 26 10:53:47 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/openeuler-root /                       ext4    defaults        1 1
UUID=be7cebdc-6edd-44d4-9eaa-01a8cd9da886 /boot    ext4    defaults        1 2
/dev/mapper/openeuler-swap none                    swap    defaults        0 0
/openEuler-22.03-LTS-SP4-x86_64-dvd.iso /mnt/cdrom iso9660 defaults        0 0

 第三步:挂载
 mount -a 
\mount: /dev/loop0 is write-protected, mounting read-only#表示挂载成功

 第四步:进入/mnt/cdrom 目录可以看到ISO文件的内容
cd /mnt/cdrom
ls -al

4、 清理/etc/yum.repos.d/目录下的文件

在内网环境下,为了排除别的源的干扰,外部yum源会报错,影响yum的使用,将其余yum文件删除。

# 第一步:查看yum源内容
[root@Shenco yum.repos.d]# ls -al
总用量 12
drwxr-xr-x.  2 root root 4096 10月 11 11:38 .
drwxr-xr-x. 85 root root 4096 10月 20 05:46 ..
-rw-r--r--.  1 root root 2692  8月  6 10:01 openEuler.repo

# 第二步:删除yum源
[root@Shenco yum.repos.d]# rm -rf /etc/yum.repos.d/*

5、新建本地yum仓库文件

第一步:vim本地yum仓库文件,内容如第二步内容:
[root@Shenco yum.repos.d]# vim local.repo

第二步:查看文件内容:
[root@Shenco yum.repos.d]# cat local.repo
[localrepo]
name=localrepo
baseurl=file:///mnt/cdrom
enable=1
gpgcheck=0

6、验证本地仓库安装

yum repolist命令可自动生成好仓库源数据,并显示正确的仓库内软件数量。

尝试安装httpd可以正常解析依赖并安装:

[root@Shenco yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
localrepo                            | 3.6 kB  00:00:00
(1/2): localrepo/group_gz            | 156 kB  00:00:00
(2/2): localrepo/primary_db          | 3.1 MB  00:00:00
Loading mirror speeds from cached hostfile
repo id                 repo name                  status
localrepo               localrepo                  3,894
repolist: 3,894
[root@Shenco yum.repos.d]# yum install httpd 
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-67.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-67.el7.centos for package: httpd-2.4.6-67.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-67.el7.centos.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-67.el7.centos.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-67.el7.centos.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-67.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed

7、搭建局域网仓库

搭建一个局域网内服务器都可以使用的局域网本地仓库,原理就是搭建一个web服务器,将ISO的文件内容发布到整个局域网内即可。

整体流程大概如下:使用nginx或者httpd搭健web服务器,把ISO文件拷贝到web目录下,(如cp -rf /mnt/cdrom/* /var/www/html/local/),调整局域网内其他电脑repo主件内容如下,就可以使用了局域网仓库地址了。

[localrepo]
name=localrepo
baseurl=http://172.18.6.166/local#IP地址为搭载的本地仓库的IP
enable=1
gpgcheck=0

8、修改国内镜像yum源

如果是外网系统,通过外网yum源下载软件由于yum源官方国外的,下载速度很慢(几十Kb/s),可修改为国内的yum源,如阿里云,清华大学等。

第一步:备份及下载源
# 举例CentOS 7:先备份源文件,防止出错
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
&&
# 下载阿里云源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #这里的7可以改为想要的版本,根据你系统的版本下载不同的repo。

#或修改为清华大学的源
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo
第二步:更新软件包缓存
sudo yum makecache

9、利用ISO搭建本地apt仓库

以上部份详细说明了RedHat系列liunx yum本地仓库的搭建,以下将简要说明Debian系列apt本地仓库搭建。

以下是具体步骤和示例代码:

1、挂载ISO文件到指定目录:

sudo mkdir /mnt/iso
sudo mount -o loop /path/to/your.iso /mnt/iso

2、更新APT源列表:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb file:/mnt/iso/ ubuntu main restricted universe multiverse" | sudo tee /etc/apt/sources.list

3、更新APT缓存:

sudo apt-get update

4、现在可以使用APT从本地仓库安装软件包了:

sudo apt-get install package-name

请确保你的ISO文件包含了所需的所有Ubuntu软件包,并且在你的系统上挂载点/mnt/iso是可用的。这样就设置了一个本地的APT仓库。

5、卸载ISO和移除APT源的步骤:

sudo umount /mnt/iso
sudo rm /etc/apt/sources.list
sudo mv /etc/apt/sources.list.bak /etc/apt/sources.list
sudo apt-get update

文章目录