yum源仓库搭建分为三类
1,使用系统光盘,搭建本地yum源(简单,建议使用centos everything盘,包数据比较全面)
2,搭建同步官网源到本地源(中等,搭建标准源方法)
3,创建自主本地源(高难度,定制源,充当标准源的补充角色)
一、使用光盘作为本地yum源:Centos或redhat
1,将系统光盘插入本地光驱。或者上传ios镜像到系统中,进行挂载。mount -o loop /root/CentOS-7-x86_64-DVD-1810.iso /mnt/cdrom 本地iso挂载
mkdir /mnt/cdrom #创建目录
mount /dev/cdrom /mnt/cdrom #挂载 umount /mnt/cdrom #卸载
cp -avf /mnt/cdrom /yum # -a:复制光盘文件到本地硬盘,该选项保留链接、文件属性,并递归地复制目录,避免重复挂载,卸载镜像操作。
2,修改repo文件为本地目录。
cat >>/etc/yum.repos.d/CentOS-Local.repo<<-EOF
[Local]
name=Local Yum
baseurl=file:///yum/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
3,清理yum缓存,重建依赖
yum clean all && yum makecache
二、创建公共镜像
详细说明见官方中文文档:http://wiki.centos.org/zh/HowTos/CreatePublicMirrors
常见yum源,官网:http://mirror.centos.org/centos 163:http://mirrors.163.com/centos 阿里云 :http://mirrors.aliyun.com/centos/ 等。
1,安装http服务,启动服务。(或者nginx服务,常用软件是nginx,web上显示没有文件夹目录结构)
yum install httpd -y && systemctl start httpd
2,创建源目录,目录结构尽量与线上源的目录结构一致。 类似http://mirror.centos.org/centos/7/os/x86_64/
cd /var/www/html/ #http自动生成的目录。
echo "hello httpd" >index.html # 生成测试页面,在网页访问自己ip,显示apache或nginx的官网界面则安装成功。
3,同步yum源
3.1使用rsync同步yum源:同步所有的数据,非常全。(有的源可以使用rsync同步,官网,阿里云等不可以),yum install rsync -y 支持rsync源同步的源,使用如下命令同步。
rsync -avzH --delete mirrors.tuna.tsinghua.edu.cn::centos /var/www/html/centos/ # 清华大学yum源
3.2使用createrepo 和reposync 同步yum源。比如官网,阿里云源等。
yum install createrepo yum-utils -y #安装命令软件
创建下载文件目录,尽量保持和线上目录机构一致:mkdir -p /var/www/html/centos/7/ mkdir -p /var/www/html/centos/6/
#下一步生成repodata在该目录之下的目录中 /var/www/html/centos/7/base/x86_64/下指定。
#多个软件组base,update等,centos6,centos7 如何尽量简化管理yum的更新问题? 将centos7和7的目录目录指定不同,指定不同的repoid。reposync -n --repoid=extras6 --repoid=updates6 --repoid=base6 -p /xxx/centos/6
4,同步源文件。
指定用于同步源的repo文件,Centos默认目录在 /etc/yum.repos.d/ 。如何下载阿里云repo文件:wget http://mirrors.aliyun.com/repo/Centos-7.repo
CentOS-Base.repo (包含os,updates,extras,centosplus目录中的内容。)
CentOS-Debuginfo.repo (debuginfo.centos.org 中的包)
CentOS-Media.repo (用于定义本地yum安装,本地路径)
CentOS-Vault.repo (vault.centos.org 中的各种包)
CentOS-CR.repo (只包含cr)
CentOS-fasttrack.repo (只包含fasttrack)
CentOS-Sources.repo (vault.centos.org下的相关Source资源)
CentOS-x86_64-kernel.repo (http://mirror.centos.org/altarch/7/ kernel 和experimental)
同步Base源命令:
cd /var/www/html/centos/7/ # 先切换到当前目录,会在当前目录生成repoid名称。
reposync --config=/etc/yum.repos.d/CentOS-Base.repo -p /var/www/html/centos/7/ #会在当前目录下同步os等目录。由于repo文件定义的os的名称为base,所以下载的目录为base目录。
5,同步epel源:
同步epel源(额外的软件包):首先安装官方mirrors.fedoraproject.org rpm包或者下载repo文件。或者安装阿里源的rpm包或者下载wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo。
也可以手工添加epel,修改地址:
vi /etc/yum.repos.d/epel.repo
[epel]
name=epel
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-releasever&arch=releasever&arch=basearch
enabled=1
执行同步epel的命令:reposync --config=/etc/yum.repos.d/epel-7.repo -p /var/www/html/centos/7/
#注意我们把epel的包也放在这个路径下,因为epel会先下载base等包,基础包包含base则无需重复下载,如果指定其他目录会重复下载base的包。
6,生成数据源:
生成base数据源:createrepo -po /var/www/html/centos/7/base/ /var/www/html/centos/7/base/ #第一次需要生成,前面是生成repodata目录,后面目录是包目录,后续使用update更新即可。
#注意有时候网络不好无法正常下载包,包文件为0,需要删除find . -name "*" -type f -size 0 | xargs rm -f;
#createrepo --update /var/www/html/centos/7/base/
执行完成会在当前目录生成repodata目录,此目录里的文件就是记录所有包的依赖关系,文件位置等相关信息。yum客户端下载,本地yum源配置该地址所在位置即可。
同理生成:updates,extras,centosplus,epel 等数据源
7,下载互联网上的组数据包文件(现成的),在目录下找到xxcomps.xml文件:
#也可以自己编辑:使用yum-groups-manager创建或编辑yum存储库的组元数据文件。
使用当前下载的包,指定目录生成组配置repodata目录。
下载文件到/opt下,/opt/comps.xml 不要使用相对路径,使用相对路径提示找不到。
createrepo -g /opt/comps.xml /var/www/html/centos/7/base/ #在当前目录和子目录寻找rpm包,在base目录生成组的源repodata目录,如果已经创建过该目录,注意之指定位置为此目录的上一级目录。
#注意可能会影响原来生成的包的repodata,重新生成一次。如果包是全的,应该文件会一致。(有待验证)
三、创建自定义的本地源
平时收藏的RPM软件包放在一个目录里,生成一个自定义源,使用yum管理。
1,创建本地yum仓库:mkdir -p /yum/local #可以有N级目录 # 将RPM包保存到当前目录。
2,创建索引 createrepo /yum ,修改yum源地址为该repodata文件路径。
下载KEY文件
用户下载安装这个RPM包时,引入RH官方的这个RPM GPG公钥,用来验证RPM包是不是RH官方签名的,一般不会改变,下载一次就行。
wget http://mirrors.163.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7 -P /data/website/centos/
wget http://mirrors.163.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6 -P /data/website/centos/
上传RPM-GPG-KEY-CentOS-7 到服务器适当位置,提供下载
其他:
reposync命令:reposync用于将远程yum存储库同步到本地
-c xxx,--config=xxx 要使用的配置文件(默认使用/etc/yum.conf.d/下)
-r xxx 指定repoid进行查询--repoid
=
-e xxx,--cachedir=xxx 存储元数据的目录
-d 删除存储库中不再存在的本地包
-p xxx 将包下载到的路径,默认是当前目录
-l 启用yum插件支持
createrepo参数选项说明:
-u --baseurl <url> 指定Base URL的地址
-o --outputdir <url> 指定元数据的输出位置
-x --excludes <packages> 指定在形成元数据时需要排除的包
-i --pkglist <filename> 指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。
-n --includepkg 通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。
-q --quiet 安静模式执行操作,不输出任何信息。
-g --groupfile <groupfile> 指定本地软件仓库的组划分,范例如下:createrepo -g comps.xml /path/to/rpms 注意:组文件需要和rpm包放置于同一路径下。
-v --verbose 输出详细信息。
-c --cachedir <path> 指定一个目录,用作存放软件仓库中软件包的校验和信息。当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。
--update 如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减,则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。
-p --pretty 以整洁的格式输出xml文件。
-d --database 该选项指定使用SQLite来存储生成的元数据,默认项。