如何搭建红帽私有yum源服务?

RHEL-Like

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

如何安装配置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
没有评论

发表回复

RHEL-Like
如何配置rsyncd服务?

1 前言 一个问题,一篇文章,一出故事。 由于笔者想实现文件通过rsync自动传输,但是又不想使用o …

RHEL-Like
如何用pam_google_authenticator认证模块实现SSH 2FA?

1 前言 一个问题,一篇文章,一出故事。 笔者想开启2FA以便增强SSH服务的安全性,于是便整理此文 …

RHEL-Like
如何升级RHEL clamav杀毒?

1 前言 一个问题,一篇文章,一出故事。 笔者需要卸载旧的病毒软件,然后更新rpm包的病毒软件,于是 …