前言:
通常实施运维的主要工作就是安装各种各样的软件啦,那么,都是如何安装的呢?
通常,实施运维的工作环境可以分为内网和外网两种环境,内网就是无web访问的单一网络模式,外网自然就是可访问web的网络模式啦。而Linux的包管理器 比如apt,yum 通常都是基于web网络来运行的,而内网环境,和web网络是隔绝的,这就造成我们的安装各种基础软件困难啦,比如,samba,ftp,ntpstat,yumdownload,lrzsz,gcc等等这些基础软件。
那么,在内网环境下,我们可以在有web网络的机器上通过配置webyum源单独下载下来比如samba和与它相关的依赖的rpm包,然后在内网的机器上使用这些rpm包就可以完成一些安装了。
但,离线安装包首先是制做不容易,在有web网络的服务器上,可能会有遗漏依赖的情况发生。从而导致在内网环境下使用离线安装包失败,其次,离线安装包需要在有网环境和内网环境下转移,会有很多的不便,再次,有时候会有临时的安装某个软件的需求,临时制做离线安装包十分繁琐。总的来说,就是优点有限(安装软件方便),缺点太多(不一定准确,制做繁琐)。
那么,有没有更好的办法呢?答案当然是有的。
随着科技的进步,硬盘的空间也是不断的提高了。而我们的操作系统安装文件相对于硬盘空间来说,已经是比较小的一个文件了。因此,我们可以利用操作系统的安装ISO文件制做本地软件仓库,那些基础的软件就可以从本地仓库安装了(通常在生产环境,操作系统会是最小化安装,很多基本软件并不会安装的哦)。
这里需要尤其注意,ISO文件必须是你在服务器查出来的那个版本,比如,你 cat /etc/redhat-release 命令查出来的详细操作系统子版本是centos-7.2.1511,那么,你就必须找centos-7.2.1511这个版本的ISO文件,如果使用其它版本的ISO文件制做本地仓库,那么,比如gcc等基础软件将不会安装成功,会一堆报错哦!!!!
本地仓库搭建示例:
1,查看需要搭建本地仓库的服务器的操作系统版本号
本例以vm虚拟机演示,查看操作系统详细版本号命令如下(这里的两个命令是centos操作系统才有的命令):
[root@centos1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@centos1 ~]# cat /etc/centos-release CentOS Linux release 7.4.1708 (Core)
2,上传CentOS Linux release 7.4.1708这个版本的操作系统安装包的ISO文件到服务器上
这里需要注意了,此文件上传到的位置需要放到第一块硬盘所在分区区间内。比如,我这个vm虚拟机,经lsblk命令查看,可以发现只有一个硬盘,因此,可以放置到 根目录下,那,如果有两块硬盘,比如假设有一个sdb硬盘,那么,此文件千万不能放置到sdb硬盘内。原因是,此ISO文件挂载成分区后,Linux启动会按字母顺序依次启动,而/etc/fstab 文件内会优先于sdb硬盘加载,此时,Linux操作系统读取到了分区信息而找不到相应的硬盘就会造成系统启动失败。
[root@centos1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 80G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 79.5G 0 part ├─centos-root 253:0 0 50G 0 lvm / ├─centos-swap 253:1 0 4.5G 0 lvm [SWAP] └─centos-var 253:2 0 25G 0 lvm /var sr0 11:0 1 4.2G 0 rom
3,ISO文件通过/etc/fstab 挂载到指定的目录(这里,是挂载到 /mnt/cdrom)
[root@centos1 /]# ls -al /CentOS-7-x86_64-DVD-1708.iso -rw-r--r-- 1 root root 4521459712 Dec 25 17:11 /CentOS-7-x86_64-DVD-1708.iso [root@centos1 /]# mkdir /mnt/cdrom vim /etc/fstab 此文件内容如下: [root@centos1 /]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Sun Jul 25 00:56:23 2021 # # 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 # /dev/mapper/centos-root / xfs defaults 0 0 UUID=f35584f3-c1f5-4bcd-a91b-9e6d2867c137 /boot xfs defaults 0 0 /dev/mapper/centos-var /var xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /CentOS-7-x86_64-DVD-1708.iso /mnt/cdrom iso9660 defaults 0 0 [root@centos1 /]# mount -a \mount: /dev/loop0 is write-protected, mounting read-only
最后一个命令 mount -a 出现mount: /dev/loop0 is write-protected, mounting read-only表示挂载成功。此时,进入/mnt/cdrom 目录可以看到ISO文件的内容:
[root@centos1 /]# cd /mnt/cdrom/ [root@centos1 cdrom]# ls -al total 667 drwxr-xr-x 8 root root 2048 Sep 5 2017 . drwxr-xr-x. 3 root root 19 Dec 25 17:15 .. -rw-rw-r-- 3 root root 14 Sep 5 2017 CentOS_BuildTag -rw-r--r-- 1 root root 29 Sep 5 2017 .discinfo drwxr-xr-x 3 root root 2048 Sep 5 2017 EFI -rw-rw-r-- 3 root root 227 Aug 30 2017 EULA -rw-rw-r-- 3 root root 18009 Dec 10 2015 GPL drwxr-xr-x 3 root root 2048 Sep 5 2017 images drwxr-xr-x 2 root root 2048 Sep 5 2017 isolinux drwxr-xr-x 2 root root 2048 Sep 5 2017 LiveOS drwxrwxr-x 2 root root 641024 Sep 5 2017 Packages drwxr-xr-x 2 root root 4096 Sep 5 2017 repodata -rw-rw-r-- 3 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7 -rw-rw-r-- 3 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7 -r--r--r-- 1 root root 2883 Sep 6 2017 TRANS.TBL -rw-r--r-- 1 root root 354 Sep 5 2017 .treeinfo
4,/etc/yum.repos.d/目录下的文件清理
既然是要使用本地源,为了排除别的源的干扰,(因为在内网环境下,外部yum源会报错,影响yum的使用哦)将其余yum文件删除
[root@centos1 yum.repos.d]# ls -al total 40 drwxr-xr-x. 2 root root 187 Aug 6 2017 . drwxr-xr-x. 78 root root 8192 Dec 25 17:14 .. -rw-r--r--. 1 root root 1664 Aug 30 2017 CentOS-Base.repo -rw-r--r--. 1 root root 1309 Aug 30 2017 CentOS-CR.repo -rw-r--r--. 1 root root 649 Aug 30 2017 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 314 Aug 30 2017 CentOS-fasttrack.repo -rw-r--r--. 1 root root 630 Aug 30 2017 CentOS-Media.repo -rw-r--r--. 1 root root 1331 Aug 30 2017 CentOS-Sources.repo -rw-r--r--. 1 root root 3830 Aug 30 2017 CentOS-Vault.repo [root@centos1 yum.repos.d]# rm -rf /etc/yum.repos.d/*
5,新建本地yum仓库文件,文件内容如下:
[root@centos1 yum.repos.d]# vim local.repo [root@centos1 yum.repos.d]# cat local.repo [localrepo] name=localrepo baseurl=file:///mnt/cdrom enable=1 gpgcheck=0
6,验证本地仓库是否正常:
yum repolist命令可自动生成好仓库源数据,并显示正确的仓库内软件数量。
试着安装httpd可以正常解析依赖并安装
[root@centos1 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@centos1 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 ^C[root@centos1 yum.repos.d]#
7,本地仓库的高级玩法
可以搭建一个局域网内服务器都可以使用的局域网本地仓库,原理就是搭建一个web服务器,将ISO的文件内容发布到整个局域网内。
比如,某个内网局域网内有机器若干,操作系统都是一样的centos7.4.1708,那么,在其中的A服务器上安装httpd,并拷贝 /mnt/cdrom 目录下的所有文件到 /var/www/html/local 目录下(拷贝命令应该是这样的:\cp -rf /mnt/cdrom/* /var/www/html/local/),此时,httpd服务器启动后,在B服务器上编写一个repo文件即可使用局域网内的仓库啦,假设这个A服务器的ip是192.168.0.16 ,在B服务器上的repo文件内容应该如下:
[localrepo] name=localrepo baseurl=http://192.168.0.16/local enable=1 gpgcheck=0
http服务器的界面大概是这样婶的:
那么,在B服务器上的repo文件指向好 http://192.168.0.16/local 这个地址后就可以愉快的使用本地仓库啦。同理,在C服务器上也如B服务器一样操作即可。
当然啦,也可以使用nginx或者tomcat等等各种自己喜欢的web服务器发布ISO文件里的内容。
总结:
ISO文件可不仅仅是在安装操作系统的时候有用哦,更新软件,打补丁这些同样用得着,作为一个整体解决方案,此类本地仓库十分适合使用的哦(相比离线安装包的制做,省了很多很多的脑细胞)。