yum命令和rpm包的制作
2012-03-06 14:34
204 查看
yum插件与rpm包的制作
1.yum 软件包管理器可使用插件扩展其功能。在 Red Hat Enterprise Linux 6 中,许多插件作为 yum-
plugin-* 软件包进行提供。这些插件可用于执行诸如仅下载安全勘误、区分来自不同 yum 存储库中的软件包优先次序以及下载但不安装软件包等操作。
(1)yum-plugin-verify 软件包的目的是在serverX上安装该软件包。允许yum 检查软件包完整性。
[root@demo ~]# yum -y install yum-plugin-verify
(2)yum-plugin-verify 引入了哪些新的 yum 子命令,以及这些命令有什么作用?
yum verify package_name: 是常规验证命令,由于合体或更改的配置文件,将忽略错误匹配。
yum verify-rpm package_name: 与 rpm -V 100% 兼容。
yum verify-all package_name: 列出所有不同之处,包括 rpm 通常会忽略的一些不同之处。
(3)yum-plugin-versionlock 软件包的目的是在列出要锁定到特定版本的软件包。
[root@demo ~]# yum -y install yum-plugin-versionlock
(4)哪个配置文件用于锁定特定软件包?
默认情况下是 /etc/yum/pluginconf.d/versionlock.list
(5)配置文件每行一个软件包和版本:
epoch:name-version-release.arch
2.rpm包的介绍
每个 RPM 软件包由三个基本组件组成:
(1)元数据 – 关于软件包的数据:软件包名称、版本、发布、构建程序、日期、依赖关系等。
(2)文件 – 软件包提供的文件存档(包括文件属性)
(3)脚本 – 安装、更新和 / 或删除软件包时,执行这些脚本
当构建 RPM 软件包时,需要指定软件包的元数据,需要提供存档中的文件以及当需要嵌入或卸载软件包时应运行的脚本。
注意:在内部,文件在软件包文件中存储为 cpio 存档。 Rpm2cpio 命令可用于将其抽取到当前工作目录,
而无需安装软件包: rpm2cpio package-1.2.3-4.el6.x86_64.rpm | cpio -id
(4)研究 RPM 软件包的结构时,以下 rpm 查询有用:
rpm -qd – 列出文档文件( %doc )
rpm -qc – 列出配置文件 (%config)
rpm -q –scripts – 列出 %pre 、 %post 、 %preun 和 %postun 脚本
3.构建rpm包的五个步骤:
(1)比如你编写的一个脚本文件为:vim samreport.sh
#!/bin/bash
if [ $# = 0 ]; then
echo "usage: $0 directories..."
exit
fi
read -p "who is this report for? " user
echo "\$am's Report"
for i in $*
do
if [ ! -d $i ]; then
echo " $i: is not a directory"
elif [ `ls -a $i | wc -l` != 2 ]; then
echo " $i: is not empty"
else
echo " $i: is empty"
fi
done
echo ___generated for ${user}____
(2)你发行的版本号是1.0,那么你需要建立一个目录mkdir samreport-1.0
mv samreport.sh samreport-1.0
tar zcf samreport-1.0.tar.gz samreport-1.0
mv samreport-1.0.tar.gz ~/rpmbuild/SOURCES(倘若你yum install rpmbuild之后仍然看不到在用户主目录下看不到rpmbuild这个目录,那么你需要使用rpmbuild / 即可。)
(3)vim samreport.repo(必须要用vim哦,vi不可以的)
Name: samreport /*软件包名称*/
Version: 1.0 /*软件包的版本号*/
Release: 1%{?dist} /*软件包的发布版本*/
Summary: a test package /*软件的简短说明*/
Group: westos /*软件所属的组*/
License: GPL /*用于软件的许可证的“简短许可证标识符”。*/
URL: http://localhost /*软件的发布路径*/
Source0: %{name}-%{version}.tar.gz /*用于源代码的文件*/
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: /bin/rm,/bin/mkdir,/bin/cp /*构建此软件包需要满足的要求的列表*/
Requires: /bin/bash,/bin/date /*此软件包所依赖的明确要求的列表*/
%description
testing
%prep
%setup -q
%build /*%build 部分 – 编写项目的 shell 代码*/
echo ok
%install /*部分 – 将文件移至已 chroot 的 $RPM_BUILD_ROOT 环境的代码*/
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
cp a.sh $RPM_BUILD_ROOT/usr/local/bin
%clean /*%clean 部分 – 清理构建树*/
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%doc
%attr(0755,root,root)/usr/local/bin/a.sh /*指名文件的所属组和权限*/
%changelog /*%changelog 部分 – 打包程序更改和更新的列表*/
* Tue Mar 12 2012 sushan <997365139@qq.com> -1.0-1
- Initial RPM
- Added /usr/local/bin/a.sh
(4)你编写好文件之后,你cp samreport.repo ~/rpmbuild/SPECS/
cd ~/rpmbuild/SPECS/
rpmbuild -ba samreport.spec(在这里你可以使用rpmbuild -ba --sign samreport.spec一步完成,也可以使用rpmbuild -ba samreport.spec rpmbuild --sign -ba samreport.spec.又或者是此方法先rpmbuild -ba samreport.spec 之后rpm --addsign hello-1.0-1.el6.x86_64.rpm)
cd ../RPMS/x86_64
ll samreport-1.0-1.el6.x86_64.rpm
(5)准备gpg:
gpg --gen-key (准备gpg密钥)
gpg --fingerprint 或 gpg --list-keys(查看你得到的gpg密钥)
[root@desktop2 SPECS]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/4D7AFD1D 2012-03-05
uid sushanshan (sushantest) <997365139@qq.com>
sub 2048R/31C1168B 2012-03-05
pub 2048R/DEAD1D2F 2012-03-06
uid sushan (sushanshan) <997365139@qq.com>
sub 2048R/33D8BF37 2012-03-06
gpg -a -o ~/RPM-GPG-KEY-root --export DEAD1D2F (-a添加 -o输出到文件 --export导出公钥)
echo "%_gpg_name DEAD1D2F" > ~/.rpmmacros (将内容添加到 ~/.rpmmacros 文件(用系统的密钥 ID 替换该八个字符密钥 ID ),因此, RPM 将用您在上面创建的密钥签署软件包。)
rpm --addsign samreport-1.0-1.el6.x86_64.rpm
(6)发布你产生的rpm包
<1>倘若你在本机发布:
你可以vi test.repo
[base]
name=rhel6
baseurl=file:///root/rpmbuild/RPMS/x86_64
gpgcheck=1
gpgkey=file:///root/RPM_GPG_KEY-root
<2> 倘若你以apached发布在网上(其他的机子可共享安装):
cp ~/rpmbuild/RPMS/x86_64/samreport-1.0-1.el6.x86_64.rpm /var/www/html/sushantest
cd /var/www/html/sushantest
createrepo .
cp /root/RPM_GPG_KEY-root /var/www/html/sushantest
vi test.repo
[base]
name=rhel6
baseurl=http://192.168.0.2/sushantest
gpgcheck=1
gpgkey=http://192.168.0.2/sushantest/RPM_GPG_KEY-root
<3>倘若你以ftp发布在网上(其他的机子可共享安装):
cp ~/rpmbuild/RPMS/x86_64/samreport-1.0-1.el6.x86_64.rpm /var/ftp/pub/sushantest
cd /var/ftp/pub/sushantest
createrepo .
cp /root/RPM_GPG_KEY-root /var/ftp/pub/sushantest
vi test.repo
[base]
name=rhel6
baseurl=ftp://192.168.0.2/pub/sushantest
gpgcheck=1
gpgkey=ftp://192.168.0.2/pub/RPM_GPG_KEY-root
(7) 这样之后你就可以通过命令yum install samreport -y 安装喽!!!
本文出自 “资料小结” 博客,谢绝转载!
1.yum 软件包管理器可使用插件扩展其功能。在 Red Hat Enterprise Linux 6 中,许多插件作为 yum-
plugin-* 软件包进行提供。这些插件可用于执行诸如仅下载安全勘误、区分来自不同 yum 存储库中的软件包优先次序以及下载但不安装软件包等操作。
(1)yum-plugin-verify 软件包的目的是在serverX上安装该软件包。允许yum 检查软件包完整性。
[root@demo ~]# yum -y install yum-plugin-verify
(2)yum-plugin-verify 引入了哪些新的 yum 子命令,以及这些命令有什么作用?
yum verify package_name: 是常规验证命令,由于合体或更改的配置文件,将忽略错误匹配。
yum verify-rpm package_name: 与 rpm -V 100% 兼容。
yum verify-all package_name: 列出所有不同之处,包括 rpm 通常会忽略的一些不同之处。
(3)yum-plugin-versionlock 软件包的目的是在列出要锁定到特定版本的软件包。
[root@demo ~]# yum -y install yum-plugin-versionlock
(4)哪个配置文件用于锁定特定软件包?
默认情况下是 /etc/yum/pluginconf.d/versionlock.list
(5)配置文件每行一个软件包和版本:
epoch:name-version-release.arch
2.rpm包的介绍
每个 RPM 软件包由三个基本组件组成:
(1)元数据 – 关于软件包的数据:软件包名称、版本、发布、构建程序、日期、依赖关系等。
(2)文件 – 软件包提供的文件存档(包括文件属性)
(3)脚本 – 安装、更新和 / 或删除软件包时,执行这些脚本
当构建 RPM 软件包时,需要指定软件包的元数据,需要提供存档中的文件以及当需要嵌入或卸载软件包时应运行的脚本。
注意:在内部,文件在软件包文件中存储为 cpio 存档。 Rpm2cpio 命令可用于将其抽取到当前工作目录,
而无需安装软件包: rpm2cpio package-1.2.3-4.el6.x86_64.rpm | cpio -id
(4)研究 RPM 软件包的结构时,以下 rpm 查询有用:
rpm -qd – 列出文档文件( %doc )
rpm -qc – 列出配置文件 (%config)
rpm -q –scripts – 列出 %pre 、 %post 、 %preun 和 %postun 脚本
3.构建rpm包的五个步骤:
(1)比如你编写的一个脚本文件为:vim samreport.sh
#!/bin/bash
if [ $# = 0 ]; then
echo "usage: $0 directories..."
exit
fi
read -p "who is this report for? " user
echo "\$am's Report"
for i in $*
do
if [ ! -d $i ]; then
echo " $i: is not a directory"
elif [ `ls -a $i | wc -l` != 2 ]; then
echo " $i: is not empty"
else
echo " $i: is empty"
fi
done
echo ___generated for ${user}____
(2)你发行的版本号是1.0,那么你需要建立一个目录mkdir samreport-1.0
mv samreport.sh samreport-1.0
tar zcf samreport-1.0.tar.gz samreport-1.0
mv samreport-1.0.tar.gz ~/rpmbuild/SOURCES(倘若你yum install rpmbuild之后仍然看不到在用户主目录下看不到rpmbuild这个目录,那么你需要使用rpmbuild / 即可。)
(3)vim samreport.repo(必须要用vim哦,vi不可以的)
Name: samreport /*软件包名称*/
Version: 1.0 /*软件包的版本号*/
Release: 1%{?dist} /*软件包的发布版本*/
Summary: a test package /*软件的简短说明*/
Group: westos /*软件所属的组*/
License: GPL /*用于软件的许可证的“简短许可证标识符”。*/
URL: http://localhost /*软件的发布路径*/
Source0: %{name}-%{version}.tar.gz /*用于源代码的文件*/
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: /bin/rm,/bin/mkdir,/bin/cp /*构建此软件包需要满足的要求的列表*/
Requires: /bin/bash,/bin/date /*此软件包所依赖的明确要求的列表*/
%description
testing
%prep
%setup -q
%build /*%build 部分 – 编写项目的 shell 代码*/
echo ok
%install /*部分 – 将文件移至已 chroot 的 $RPM_BUILD_ROOT 环境的代码*/
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
cp a.sh $RPM_BUILD_ROOT/usr/local/bin
%clean /*%clean 部分 – 清理构建树*/
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%doc
%attr(0755,root,root)/usr/local/bin/a.sh /*指名文件的所属组和权限*/
%changelog /*%changelog 部分 – 打包程序更改和更新的列表*/
* Tue Mar 12 2012 sushan <997365139@qq.com> -1.0-1
- Initial RPM
- Added /usr/local/bin/a.sh
(4)你编写好文件之后,你cp samreport.repo ~/rpmbuild/SPECS/
cd ~/rpmbuild/SPECS/
rpmbuild -ba samreport.spec(在这里你可以使用rpmbuild -ba --sign samreport.spec一步完成,也可以使用rpmbuild -ba samreport.spec rpmbuild --sign -ba samreport.spec.又或者是此方法先rpmbuild -ba samreport.spec 之后rpm --addsign hello-1.0-1.el6.x86_64.rpm)
cd ../RPMS/x86_64
ll samreport-1.0-1.el6.x86_64.rpm
(5)准备gpg:
gpg --gen-key (准备gpg密钥)
gpg --fingerprint 或 gpg --list-keys(查看你得到的gpg密钥)
[root@desktop2 SPECS]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/4D7AFD1D 2012-03-05
uid sushanshan (sushantest) <997365139@qq.com>
sub 2048R/31C1168B 2012-03-05
pub 2048R/DEAD1D2F 2012-03-06
uid sushan (sushanshan) <997365139@qq.com>
sub 2048R/33D8BF37 2012-03-06
gpg -a -o ~/RPM-GPG-KEY-root --export DEAD1D2F (-a添加 -o输出到文件 --export导出公钥)
echo "%_gpg_name DEAD1D2F" > ~/.rpmmacros (将内容添加到 ~/.rpmmacros 文件(用系统的密钥 ID 替换该八个字符密钥 ID ),因此, RPM 将用您在上面创建的密钥签署软件包。)
rpm --addsign samreport-1.0-1.el6.x86_64.rpm
(6)发布你产生的rpm包
<1>倘若你在本机发布:
你可以vi test.repo
[base]
name=rhel6
baseurl=file:///root/rpmbuild/RPMS/x86_64
gpgcheck=1
gpgkey=file:///root/RPM_GPG_KEY-root
<2> 倘若你以apached发布在网上(其他的机子可共享安装):
cp ~/rpmbuild/RPMS/x86_64/samreport-1.0-1.el6.x86_64.rpm /var/www/html/sushantest
cd /var/www/html/sushantest
createrepo .
cp /root/RPM_GPG_KEY-root /var/www/html/sushantest
vi test.repo
[base]
name=rhel6
baseurl=http://192.168.0.2/sushantest
gpgcheck=1
gpgkey=http://192.168.0.2/sushantest/RPM_GPG_KEY-root
<3>倘若你以ftp发布在网上(其他的机子可共享安装):
cp ~/rpmbuild/RPMS/x86_64/samreport-1.0-1.el6.x86_64.rpm /var/ftp/pub/sushantest
cd /var/ftp/pub/sushantest
createrepo .
cp /root/RPM_GPG_KEY-root /var/ftp/pub/sushantest
vi test.repo
[base]
name=rhel6
baseurl=ftp://192.168.0.2/pub/sushantest
gpgcheck=1
gpgkey=ftp://192.168.0.2/pub/RPM_GPG_KEY-root
(7) 这样之后你就可以通过命令yum install samreport -y 安装喽!!!
本文出自 “资料小结” 博客,谢绝转载!
相关文章推荐
- rpm、yum命令
- centos主要的几个配置文件以及rpm,yum的常用命令,源码包的编译方法
- [RHEL7.1]yum 命令后rpm包被下载到了什么地方?
- yum 和 rpm 命令
- Linux 命令 rpm 、 yum
- Linux学习之建立yum源、yum命令的使用及rpm包编译安装
- 软件包管理命令 之 rpm 和yum
- Linux下的rpm命令和yum命令,包管理器的使用
- 由于CentOS的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题
- rpm命令和yum命令的使用
- 第六章:6.3.2 RPM包管理-yum在线管理-yum命令
- yum源创建及rpm与yum命令
- 使用yum provides lspci 命令查lspci 命令在哪个rpm包里
- 程序包管理:rpm&yum命令
- Linux命令之软件的安装与卸载-rpm,dpkg,yum
- rpm与yum,at与crontab,sed命令使用
- Linux 安装命令 rpm 跟 yum
- Linux下RPM软件包的安装及卸载与yum命令详解
- Linux系统 yum 命令安装软件时保留(下载)rpm包
- centos安装软件的两种命令rpm,yum