首页 > 代码库 > 使用createrepo   创建自己的yum源

使用createrepo   创建自己的yum源


为什么要使用rpm来管理软件包?相比使用shell脚本,从源码编译安装的方式,排除规模引出的效率因素不讲,脚本的可维护性比起rpm要糟糕一些,当然使用rpm就需要深入了解rpmbuild以及spec文档,似乎也并不简单。但从长远来看,rpm、yum源的可维护性,要比“脚本”可靠一些。在本文中,花开分享了创建yum源的操作步骤,用于管理系统上“定制”的软件包。


创建yum源需要一个ftp或者http服务,鉴于ftp烦人的防火墙策略(防火墙配制不当,ftp的模式——主动/初动使用不当,服务会变得不可用),建议使用http服务。


一,

1. 管理yum源需要一个工具createrepo 


可使用yum安装:


yum -y install createrepo


1. 规划、创建yum源目录。

这里我们使用http服务模式的,故我已安装有web服务.


我在 http://192.168.0.157/  跟目录下创建一个yum 目录,用来保存yum源数据。


观察官方yum源的目录规划,像是yum并不能自己维护arch,即并不能自己区分i386还是x86_64,所以是单独放在不同的目录下。

因为我们的服务器都是64位的,故只创建一个x64的目录。


我维护的是基于CentOS Linux 7的包,规划目录如下:


mkdir -p /opt/htdocs/yum/centos/7/x86_64



2. 初始化repodata信息:


createrepo -p -d -o /opt/htdocs/yum/centos/7/x86_64 /opt/htdocs/yum/centos/7/x86_64


( 这里注意 /opt/htdocs/yum/centos/7/x86_64 需要填写2次,已空格隔开,否则会报Error: Must specify a directory to index. )


初始化成功后,会在/opt/htdocs/yum/centos/7/x86_64目录下,分别看到一个repodata目录,这个就是yum源的Meta数据,有了这个,yum就可以和这个“源”进行“数据信息”了。




3. 配置本地的yum,使之使用自建的yum源。


简单的来说,就是在本地的/etc/yum.repos.d目录下新建一个配置文件文件(也可配置语句添加到已经存在文件中),以.repo为文件名后缀,比如jicki.repo,然后内容大概如下:


-------------------------------------------------------------------

[jicki-yum]

name=jicki-yum

baseurl=http://192.168.0.157/yum/centos/$releasever/$basearch/

enabled=1

gpgcheck=0

gpgkey=

-------------------------------------------------------------------


解释:


[....] 代表这个库的名字,必须是唯一的,不可以重复。


name= 是这个库的说明,没有太大的实际意义,只是一个字段说明。


baseurl= 说明采取什么方式传输,具体路径在哪里,可以使用的方式有,file://,ftp://,http://等,关于baseurl中的变量,可以查看yum.conf 的手册:man yum.conf ,在手册的最后一段有详细描述。


enabled=1 说明启用这个更新库,0表示不启用。


gpgcheck=1 表示使用gpg文件来检查软件包的签名


gpgkey= 表示gpg文件所存放的位置,此处也可以有http方式的位置。


这时,当我们yum repolist 时,就可以看到jicki-yum 源了。




二,制作RPM包:

1. 首先检查 制作RPM包所需软件, 并安装


rpm -qa|grep gcc

rpm -qa|grep rpm-build


yum install -y rpm-build


centos7 下的rpm 包制作源码锁在目录为/root/rpmbuild  如果不存在,随意对文件执行rpmbuild nginx-1.7.9.tar.gz ,既可生成。


/root/rpmbuild  目录结构如下:


BUILD      -> 编译位置(忽略)

BUILDROOT  -> 编译位置(忽略) 

RPMS       ->生成的二进制rpm存放位置

SOURCES    ->存放源码,补丁文件 

SPECS      ->存放编译方案*.spec规则文件

SRPMS      ->生成rpm源码包(src.rpm)存放位置




2. 拷贝源码到SOURCES 目录下

这里将nginx-1.7.9.tar.gz 拷贝过去


cp nginx-1.7.9.tar.gz /root/rpmbuild/SOURCES/


tree 


.

├── BUILD

├── BUILDROOT

├── RPMS

├── SOURCES

│   └── nginx-1.7.9.tar.gz

├── SPECS

└── SRPMS



生成spec 规则文件


进入SPECS 目录 创建一个nginx-1.7.9的spec文件


* 这里必须使用 VIM 编译工具才会自动生成spec 模版文件


vim nginx-1.7.9.spec




spec文件说明 spec文件中各部分意思简单解释如下:

---------------------------------------------------------------------------------------------------------------------------


Name:                 //软件名称,如nginx,后面可使用%{name}的方式引用 


Version:              //软件版本号,仅当软件较以前有较大改变时才增加版本号。如1.7.9


Release:1%{?dist}     //软件发布序列号,标明第几次打包。若软件较以前改变较小,则仅增加发布序列号,而不改变版本号


Summary:              //概要,对软件简单的描述 


Group:                //软件包所属类别,具体类别参看rpm的帮助文件     /usr/share/doc/rpm-4.8.0/GROUPS,所有软件必须属于其中一种类型。


License:              //许可类型,如:GPL(自由软件),commercial(商业),Share(共享),GNU等 


URL:                  //软件下载地址(可以省略)


Source0:              //源码名称 


BuildRoot: %(mktemp-ud%{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)                      

                      //该参数非常重要,因为在生成rpm的过程中,执行make install时就会把软件安装到上述的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行操作。后面可使用$RPM_BUILD_ROOT方式引用。


BuildRequires:        //软件依赖关系描述(可以省略)


Requires:             //该rpm包所依赖的软件包名称


%description          //对软件的详细描述,可以写多行 


%prep                 //这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。 


%setup -q             //提取源码到BUILD目录;-q指不显示输出(quietly) 


%build                //本段是建立段,所执行的命令为生成软件包服务,相当于./configure和make %configure make%{?_smp_mflags}


%install              //这一节主要用于完成实际安装软件必须执行的命令,这一节一般是由makeinstall指令构成,但是有时也会包含cp、mv、install等指令

                      rm -rf $RPM_BUILD_ROOT makeinstall DESTDIR=$RPM_BUILD_ROOT

 

%clean                //这一节所描述的内容表示在完成包建立的工作之后,自动执行此节  下的脚本进行附加的清除工作,这一节的内容通常简单地使用rm -rf  $RPM_BUILD_ROOT命令,不需要指定此节的其它内容

                      rm-rf $RPM_BUILD_ROOT

 

%files                //这一节指定构成包的文件的列表,它是使用节前缀%files表示的。 此外,它还包含一系列宏控制安装后的文件属性和配置信息。,分为三类--说明文档(doc),配置文件(config)及执行程序,也根据提示编写。%files下列出应该捆绑到RPM中的文件,并能够可选地设置许可权和其它信息


%defattr(-,root,root,-)//指定包装文件的属性,分别是(mode,owner,group),-表示默认值, 对文本文件是0644,可执行文件是0755 %doc


%changelog             //本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发 布的软件包中



-------------------------------------------------------------------------------------------

--------------------------------





使用createrepo   创建自己的yum源