1 前言
红帽服务器当前官方的政策可以用于小团队测试,如果没有官方订阅会过于繁琐,详细如下,
– 觉得使用挂载光盘安装的方式过于繁琐,于是就用Nginx搭建了一个线上的yum源。
– 由于想节省服务器空间,故而使用直接挂载光盘的方式代替复制光盘。
– 由于每次有新光盘需要手动挂载和手动创建“.repo”文件,感觉非常繁琐
基于以上,笔者使用Bash Shell编写此工具简化管理。
2 最佳实践
2.1 环境信息
OS = CentOS 7.x x86_64
IP Address = 10.168.0.80
Host Name = srpms.cmdschool.org
2.2 定义光盘自动挂载
2.2.1 定义挂载的目录
vim /etc/auto.master
加入如下配置
/data/sourceData/rhel-dvd-source /etc/auto.rhel
2.2.2 定义光盘的挂载规则
vim /etc/auto.rhel
加入如下配置
* -fstype=iso9660,ro,loop :/data/sourceData/srpms/ISO-RHEL/&
2.2.3 重启服务使配置生效
systemctl restart autofs.service systemctl enable autofs.service
2.3 定义光盘自动挂载
2.3.1 创建管理工具
vim /usr/bin/rhelMountTool
加入如下代码,
#!/bin/bash isodir="/data/sourceData/srpms/ISO-RHEL" mountdir="/data/sourceData/rhel-dvd-source" repodir="/data/sourceData/rhel-dvd" docRoot="/data/sourceData" sUrl="http://srpms.cmdschool.org" repo() { if [ -z $1 ]; then echo "not support empty paths to create repor file." exit 1 fi isoPath=$1 echo $isoPath checkMount=`/bin/mount | grep $isoPath | wc -l` repoName=""$(echo `basename $isoPath` | awk '{gsub("'".iso"'", "");print}') sGpgKey="$sUrl"`find $isoPath -name "RPM-GPG-KEY-redhat-release" | sort | head -n 1 | awk '{gsub("'"$docRoot"'", "");print}'` repoPath="$repodir/$repoName"".repo" echo '# '$repoName' yum source' > $repoPath if [ $checkMount -ne "0" ]; then for i in $(find $isoPath -name repodata) do sName=`echo $i | awk '{gsub("'"$isoPath/"'", "");print}' | awk '{gsub("'"/repodata"'", "");print}'` sBaseUrl="$sUrl"`echo $i | awk '{gsub("'"$docRoot"'", "");print}' | awk '{gsub("'"/repodata"'", "");print}'` echo >> $repoPath echo '['$sName']' >> $repoPath echo 'name='$sName >> $repoPath echo 'baseurl='$sBaseUrl >> $repoPath echo 'gpgcheck=1' >> $repoPath echo 'gpgkey='$sGpgKey >> $repoPath done fi } mount() { #MAKEDEV -v /dev/loop > /dev/null for i in $(ls $isodir"/"*".iso") do isoPath="$mountdir/`basename $i`" checkMount=`/bin/mount | grep $isoPath | wc -l` if [ $checkMount -eq "0" ]; then cd $isoPath repo $isoPath fi done } umount() { for i in $(ls $isodir"/"*".iso") do isoPath="$mountdir/`basename $i`" checkMount=`/bin/mount | grep $isoPath | wc -l` if [ $checkMount -ne "0" ]; then /bin/umount $isoPath fi done } fumount() { for i in $(ls $isodir"/"*".iso") do isoPath="$mountdir/`basename $i`" checkMount=`/bin/mount | grep $isoPath | wc -l` if [ $checkMount -ne "0" ]; then /bin/umount -f $isoPath fi done } case "$1" in mount) mount ;; umount) umount ;; fumount) umount ;; remount) umount mount ;; *) echo $"Usage: $0 {mount|umount|fumount|remount}" exit 1 esac exit $?
以上脚本需要定义如下变量,
参数“isodir”声明ISO光盘所在的目录,本范例为”/data/sourceData/srpms/ISO-RHEL”
参数“mountdir”声明光盘挂载到的目录,本范例为”/data/sourceData/rhel-dvd-source”
参数“repodir”声明repo文件的存储目录,本范例为”/data/sourceData/rhel-dvd”
参数“docRoot”声明repo文件的基础目录,本范例为”/data/sourceData”
参数“sUrl”声明repo文件的源URL,本范例为”http://srpms.cmdschool.org”
编辑完成后,需要使用如下命令增加执行权限,
chmod +x /usr/bin/rhelMountTool
测试命令执行,
rhelMountTool
可见如下输出,
Usage: /usr/bin/rhelMountTool {mount|umount|fumount|remount}
以上提供的函数意义为,
– mount用于挂载为挂载的ISO
– umount用于卸载已经挂载的ISO
– fumount用于强制卸载已经挂载的ISO
– remount用于重新挂载已经挂载的ISO
2.3.2 尝试挂载
rhelMountTool mount
2.3.3 配置自动挂载
*/5 * * * * /usr/bin/rhelMountTool mount
2.4 配置HTTP服务
2.4.1 安装Nginx
2.4.2 定义源目录配置
vim /etc/nginx/conf.d/srpms.cmdschool.org.conf
加入如下配置,
proxy_cache_path /cache/srpms.cmdschool.org levels=2:2:2 keys_zone=srpms.cmdschool.org:10m inactive=24h max_size=1g; server { listen 80; server_name srpms.cmdschool.org; location / { root /data/sourceData; #index index.html index.htm; autoindex on; autoindex_exact_size off; autoindex_localtime on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } error_page 403 /40x.html; location = /40x.html { root /usr/share/nginx/html; } }
2.4.3 配置名称解析
notepad \Windows\System32\drivers\etc\hosts
加入如下配置,
10.168.0.80 srpms.cmdschool.org
注:本范例仅用于测试,生产环境请使用DNS
2.4.4 尝试访问源服务
http://srpms.cmdschool.org
2.5 使用内部源
2.5.1 清理旧的yum源定义
mkdir /etc/yum.repos.d/backup mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
2.5.2 重新定义yum源
curl http://srpms.cmdschool.org/rhel-dvd/rhel-server-7.6-x86_64-dvd.repo > /etc/yum.repos.d/rhel-server-7.6-x86_64-dvd.repo
2.5.3 清理旧的缓存
yum clean all
2.5.4 尝试列出安装包
yum list
没有评论