最近工作中需要反复大量的实验,虽然虚拟机的快照功能能解决一部分需求,但还是需要一个内部更新源才会更方便;

整理一下以前的文档,重新来一遍

一般情况下,虚拟机给分配最低资源就够用了

环境

  1. centos7 minimal x64
  2. vmware Workstation Pro 15
  3. 虚拟SCSI 220G,动态
  4. lvm分区格式
  5. 使用reposync方式
  6. 要同步的源得先安装为本地使用

零碎儿

先关闭selinux

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config && \
sudo yum install vim wget -y && \
sudo yum update -y && \
sudo reboot

开启防火墙HTTP协议

sudo firewall-cmd --add-service=http --permanent && \
sudo firewall-cmd --reload

安装软件

添加nginx repo

添加nginx官方repository;使用EOF所以有转义符

sudo cat << eof | sudo tee /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
eof

安装nginx

sudo yum install yum-utils nginx createrepo -y

修改nginx配置

修改nginx.conf

修改nginx的运行用户为root,否则会报403没有权限的错误

sudo sed -i 's/user  nginx/user root/' /etc/nginx/nginx.conf && head -2 /etc/nginx/nginx.conf
# 第一个user后面是2个空格
# 正确返回
user root;

修改default.conf

sudo vim /etc/nginx/conf.d/default.conf
server {
    listen 80; #使用的端口
    server_name 192.168.10.134.; #IP或域名或计算机名称
    charset utf-8; #页面编码
    error_log /var/log/nginx/host.error.log warn; #只记录错误
    location / {
        root /home/hai/repo; #repo的根路径
        autoindex on; #开启nginx目录浏览
        autoindex_exact_size off; #on的话是字节显示,off是K、M、G显示
        autoindex_localtime on; #使用本机时区时间显示
    }
    #浏览器找favicon.ico找不到的时候不记录任何信息
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
}

开启服务

sudo systemctl enable nginx && \
sudo systemctl start nginx

添加更新源

#由于使用了EOF,所以添加了转义符

#安装阿里云centOS更新源和epel更新源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#添加remi-safe repo
sudo cat << eof | sudo tee /etc/yum.repos.d/remi-safe.repo
[remi-safe]
name=Safe Remis RPM repository for Enterprise Linux 7 - \$basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/safe/\$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/safe/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/safe/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
eof

#添加remi-php72 repo
sudo cat << eof | sudo tee /etc/yum.repos.d/remi-php72.repo
[remi-php72]
name=Remi's PHP 7.2 RPM repository for Enterprise Linux 7 - \$basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php72/\$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php72/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/php72/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
eof

#添加MariaDB repo
sudo cat << eof | sudo tee /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
eof

暂时就添加这么多,更多repo,在我的文档站网际锋速的文档站

创建repo目录

#由于在安装的时候我使用的是lvm自动分区,所以放在主(分区最大)目录下,根据实际情况,最好先df看下磁盘空间
cd ~ && mkdir repo
#base、updates、extras、epel目录同步时会自动创建
sudo chown -R nginx:hai repo #赋予目录nginx拥有者和所属组
sudo chmod -R 775 repo #O、W权限

开始同步

只同步centos 7 x64

# -g --gpgcheck #密钥检查
# -l --plugin #开启插件支持如groupinstall
# -m --downloadcoms #开启组安装
# -n --newest-only #只下载最新版的包
# -q --quit #输出最少的信息
# -p --download_path=DESTDIR #下载路径
# -r --repoid #更新源的名称;repo文件的第一行的名称
# -a --arch #系统位数,x86_64或i*86;默认下载当前系统所属位数
# -d --delete  #删除本地过期的包

#更多参数参考 man reposync
#提示:repo/<目录名>是根据repoid自动创建的目录
#只有 enabled = 1 的才会被同步
reposync --gpgcheck --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=updates --download_path=/home/hai/repo/centos/ && \
reposync --gpgcheck --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=extras --download_path=/home/hai/repo/centos/ && \
reposync --gpgcheck --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=base --download_path=/home/hai/repo/centos/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=epel --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=nginx-stable --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=remi-safe --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=remi-php72 --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=mariadb --download_path=/home/hai/repo/
#centosplus/contrib可选;默认 enabled=0
#如果提示某个密钥没有导入,从repo文件里找到密钥连接,导入即可

容量统计

repoid 包量± 容量±
updates 1013 3.1G
extras 260 295M
base 10019 9.5G
nginx-stable 14 6.3M
epel 13232 16G
remi-safe 1945 405M
remi-php72 216 46M
mariadb 33 393M
共计大约 29G
[hai@repo ~]$ du -sh repo
29G repo

下载gpgkey文件

#centos
wget -O /home/hai/repo/centos/RPM-GPG-KEY-CentOS-7 https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#epel
wget -O /home/hai/repo/epel/RPM-GPG-KEY-EPEL-7 https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7
#mariadb
wget -O /home/hai/repo/mariadb/RPM-GPG-KEY-MariaDB https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
#remi-safe
wget -O /home/hai/repo/remi-safe/RPM-GPG-KEY-remi https://rpms.remirepo.net/RPM-GPG-KEY-remi
#remi-php72
cp -v /home/hai/repo/remi-safe/RPM-GPG-KEY-remi /home/hai/repo/remi-php72/
#nginx
wget -O /home/hai/repo/nginx-stable/nginx_signing.key https://nginx.org/keys/nginx_signing.key

创建索引

#-g comps.xml为组安装"groupinstall"
createrepo /home/hai/repo/centos/base -g comps.xml && \
createrepo /home/hai/repo/centos/updates && \
createrepo /home/hai/repo/centos/extras && \
createrepo /home/hai/repo/epel/ -g comps.xml && \
createrepo /home/hai/repo/mariadb && \
createrepo /home/hai/repo/nginx-stable && \
createrepo /home/hai/repo/remi-safe && \
createrepo /home/hai/repo/remi-php72

创建repo文件

如果在内网想方便的话,可以把全部的repo写到一个文件里面,当然也可以分段;
可以放到根目录,方便wget获取

cat << eof > /home/hai/repo/CentOS-Base.repo
[base]
name=CentosOS Base
baseurl=http://192.168.10.134/centos/base
gpgcheck=0
enabled=1
gpgkey=http://192.168.10.134/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS Updates
baseurl=http://192.168.10.134/centos/updates
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS Extras
baseurl=http://192.168.10.134/centos/extras
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/centos/RPM-GPG-KEY-CentOS-7

[epel]
name=Extra Packages for Enterprise Linux 7
baseurl=http://192.168.10.134/epel
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/epel/RPM-GPG-KEY-EPEL-7

[mariadb]
name=mariadb 10.3
baseurl=http://192.168.10.134/mariadb
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/mariadb/RPM-GPG-KEY-MariaDB

[remi-safe]
name=remi safe
baseurl=http://192.168.10.134/remi-safe
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/remi-safe/RPM-GPG-KEY-remi

[remi-php72]
name=remi-php72
baseurl=http://192.168.10.134/remi-php72
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/remi-php72/RPM-GPG-KEY-remi

[nginx-stable]
name=nginx
baseurl=http://192.168.10.134/nginx-stable
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/nginx-stable/nginx_signing.key
eof

修改客户端yum.conf

sudo sed -i '2a pkgpolicy=newest' /etc/yum.conf

pkgpolicy有两个值,newest和last;如果一个软件在多个repo都被匹配,那么newest将会安装个最新版的那个,last则会将服务器ID以字母进行排序,然后安装最后那个;所以这里推荐newest

优先级问题

一般情况下,设置了上面的yum.conf,则会安装最新版本的软件,这也是大部分的目的;

如果在使用中经常出现安装的软件在多个源都匹配,而你又想根据自己的需求控制其出现的顺序或者其它的版本,那么可以临时使用--enablerepo=源名称来指定此次安装/搜索从这个源进行;哪怕它enabled=0;比如安装mariadb,它在base源和mariadb源都会匹配到mariadb-server,因此类似的情况还是建议使用优先级

sudo yum install mariadb-server --enablerepo=mariadb

如果是频繁的使用,则推荐设置优先级

sudo yum install yum-priorities -y

然后在不同的源上添加优先级,数字越小,优先级越高;比如

[mariadb]
name=mariadb 10.3
baseurl=http://192.168.10.134/mariadb
priority=1
gpgcheck=1
enabled=1
gpgkey=http://192.168.10.134/mariadb/RPM-GPG-KEY-MariaDB

生成缓存

#清除缓存与生成缓存
sudo yum clean all && \ 
sudo yum makecache

使用脚本自动同步

echo "Start Syncing"
reposync --gpgcheck --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=updates --download_path=/home/hai/repo/centos/ && \
reposync --gpgcheck --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=extras --download_path=/home/hai/repo/centos/ && \
reposync --gpgcheck --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=base --download_path=/home/hai/repo/centos/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=epel --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=nginx-stable --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=remi-safe --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=remi-php72 --download_path=/home/hai/repo/ && \
reposync --plugins --delete --newest-only --downloadcomps --download-metadata --arch=x86_64 --repoid=mariadb --download_path=/home/hai/repo/
echo "End Syncing"
echo "Start create repodata"
createrepo --update -p /home/hai/repo/centos/base -g comps.xml
createrepo --update -p /home/hai/repo/centos/updates
createrepo --update -p /home/hai/repo/centos/extras
createrepo --update -p /home/hai/repo/epel/ -g comps.xml
createrepo --update -p /home/hai/repo/mariadb
createrepo --update -p /home/hai/repo/nginx-stable
createrepo --update -p /home/hai/repo/remi-safe
createrepo --update -p /home/hai/repo/remi-php72
echo "End create repodata"
echo "Change permissions"
sudo chgrp -R nginx /home/hai/repo
sudo chmod -R 775 /home/hai/repo

有可能会出现nginx 403 forbidden的情况,这是因为站点目录下没有索引文件造成,但是这个时候又不能使用索引文件,把nginx的运行用户改为root就行了

  • -p 输出漂亮的xml文件
  • –update 只更新发生变化的包

加入定时任务

0 0 * * 0 bash /home/hai/reposync.sh 2> /home/hai/sync.log
# 每周日0点自动执行
# 2只输出错误,2>&1 输出全部信息

后记

按照我的习惯,其实CentOS的源就不必添加了,因为在刚刚装完一个裸系统后,肯定先更新,然后做个快照,后面的机器也可以使用克隆,反而软件源使用的更多些,而且基础源的性能一般都会跑满你的带宽,而不是想mariadb一样,只有不到100K的速度

  • 可以根据自己的需求添加MySQL、Percona、Nodejs等
  • 安装mariadb的时候要使用mariadb-server否则匹配的是base的老版本
  • 如果架设多个版本可以使用$releasever判断系统版本
  • 如果多种架构可以使用$basearch来判断是32位还是64位

安装效果

=============================================================================================================
 Package                        架构          版本                                 源                   大小
=============================================================================================================
正在安装:
 MariaDB-compat                 x86_64        10.3.15-1.el7.centos                 mariadb             2.8 M
      替换  mariadb-libs.x86_64 1:5.5.60-1.el7_5
 MariaDB-server                 x86_64        10.3.15-1.el7.centos                 mariadb              24 M
 nginx                          x86_64        1:1.16.0-1.el7.ngx                   nginx-stable        766 k
 php                            x86_64        7.2.19-2.el7.remi                    remi-php72          3.2 M
 php-fpm                        x86_64        7.2.19-2.el7.remi                    remi-php72          1.7 M
为依赖而安装:
 MariaDB-client                 x86_64        10.3.15-1.el7.centos                 mariadb              11 M
 MariaDB-common                 x86_64        10.3.15-1.el7.centos                 mariadb              78 k

安装MySQL的时候会报错,需要先卸载mariadb-libs这个软件包

安装效果-安装密钥

从 http://192.168.10.134/remi-php72/RPM-GPG-KEY-remi 检索密钥
导入 GPG key 0x00F97F56:
 用户ID     : "Remi Collet <RPMS@FamilleCollet.com>"
 指纹       : 1ee0 4cce 88a4 ae4a a29a 5df5 004e 6f47 00f9 7f56
 来自       : http://192.168.10.134/remi-php72/RPM-GPG-KEY-remi
是否继续?[y/N]:y
从 http://192.168.10.134/mariadb/RPM-GPG-KEY-MariaDB 检索密钥
导入 GPG key 0x1BB943DB:
 用户ID     : "MariaDB Package Signing Key <package-signing-key@mariadb.org>"
 指纹       : 1993 69e5 404b d5fc 7d2f e43b cbcb 082a 1bb9 43db
 来自       : http://192.168.10.134/mariadb/RPM-GPG-KEY-MariaDB
是否继续?[y/N]:y
从 http://192.168.10.134/epel/RPM-GPG-KEY-EPEL-7 检索密钥
导入 GPG key 0x352C64E5:
 用户ID     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 指纹       : 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 来自       : http://192.168.10.134/epel/RPM-GPG-KEY-EPEL-7
是否继续?[y/N]:y
warning: /var/cache/yum/x86_64/7/nginx-stable/packages/nginx-1.16.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
从 http://192.168.10.134/nginx-stable/nginx_signing.key 检索密钥
导入 GPG key 0x7BD9BF62:
 用户ID     : "nginx signing key <signing-key@nginx.com>"
 指纹       : 573b fd6b 3d8f bc64 1079 a6ab abf5 bd82 7bd9 bf62
 来自       : http://192.168.10.134/nginx-stable/nginx_signing.key
是否继续?[y/N]:y

扩展阅读

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 × 3 =