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
没有评论