RPM的全称是redhat packege manager,也就是红帽开发的能实现自动安装软件的管理器,刚开始的时候,玩linux的人装个软件都是通过源码安装的,自从RPM这个工具问世之后,极大的简化了软件的安装,卸载之类的问题,给linux带来力革命性的发展。

今天闲来无事,练习一下打RPM吧,目标是把几个星际译王的词典文件打成RPM包。

我们先在系统上装一个打包的软件

yum -y install rpm-build

安装完这个软件包之后,你会发现在/usr/src/下多了一个redhat的目录。

由于打包的时候涉及到测试的环节,如果使用root用户进行测试的话,容易对系统造成伤害,所以我们要新建一个用户,在这里,我用xiaosu这个用户来打包。

切换到xiaosu这个用户,把/usr/src/redhat这个目录拷贝到xiaosu的home目录。

在/home/xiaosu/redhat目录下,有BUILD、RPMS 、SOURCES 、 SPECS 、SRPMS五个目录,其中,BUILD目录通常作为打包过程中临时文件的存放目录,RPMS存放打包完成之后的rpm包,SOURCES用于存放用于打包的原始文件,通常都是压缩文件。SPECS目录存放的是打包的配置文件,该文件需要以.spec结尾。SRPM目录用于存放打包之后的srpm文件,这个文件里面包含了很多的文件,我们可以用这个文件来重建我们打包的环境。

我们先把要打包的朗道英汉词典文件stardict-langdao-ec-gb-2.4.2.tar.gz拷贝到/home/xiaosu/redhat/SOURCES目录下。

然后在/home/xiaosu/redhat/SPEC目录下新建一个文件stardict-langdao-ec-gb.spec,这个文件就是打包的配置文件,rpm-build这个程序就是根据这个配置文件进行打包的各种操作的。

我们在写配置文件之前,先设置一下打包的环境变量:

echo "%_topdir /home/xiaosu/redhat" >> ~/.rpmmacros

这个命令就把打包的目录设置在了xiaosu的home目录下的redhat

我们现在开始写配置文件,vim ~/redhat/SPEC/stardict-langdao-ec-gb.spec

敲入如下内容:

NAME: stardict-langdao-ec-gb

Version: 2.4.2

Release: 1

Summary: a stardict dictionary file collected by suzezhi and copyright by its author

Group:   Applications/File

License: GPL

Source:     stardict-langdao-ec-gb-2.4.2.tar.gz

PreReq:     stardict

Buildroot:  %{_tmppath}/%{name}-%{version}-%{release}

BuildArch:  noarch

%description

stardict-langdao-ec-gb is a English-Chinese dictionary for learning english on linux,its right is reserved by its author,dictionary file is collected by suzezhi

%prep

%setup -q

%clean

其中的NAME指定这个包的名字,这个名字就是我们使用rpm -qi查看包的信息的时候的要使用的名字

Version指定主版本号,Release指定次版本号

Summary这栏简单的填写一些软件的介绍

Group用于制定这个包所属的分类,这个分类一定要在系统中存在,可以用less /usr/share/doc/rpm-版本/GROUPS 查看系统中都存在哪些分类

License制定版权信息

Source用于制定要打包的源文件

PreReq用于指定这个包的依赖关系,因为这个包里装的是星际译王的词典文件,所以安装这个包必须要装星际译王,我们就在这里指定了stardict

Buildroot用于指定打包时的临时目录

BuildArch用于指定安装这个包的CPU的架构,比如i386或者x86_64之类的,因为我们装的是词典文件,跟架构无关,所以我们在这里填写noarch

%description这栏就是填写这个包的描述

%prep 这栏填写的是准备,也就是解压原始文件,一般这栏不需要填什么

%setup -q  制定静默安装,不输出信息。

%clean  清除临时文件,以免编译的时候出问题 (这个可以省略,呵呵)

我们现在检查一下上面的写法有没有问题,我们先测试一下。(对于打包来说,分步测试是一个好习惯)

rpmbuild -bp stardict-langdao-ec-gb.spec

输出如下:

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.534

+ umask 022

+ cd /home/xiaosu/redhat/BUILD

+ cd /home/xiaosu/redhat/BUILD

+ rm -rf stardict-langdao-ec-gb-2.4.2

+ /usr/bin/gzip -dc /home/xiaosu/redhat/SOURCES/stardict-langdao-ec-gb-2.4.2.tar.gz

+ tar -xf -

+ STATUS=0

+ '[' 0 -ne 0 ']'

+ cd stardict-langdao-ec-gb-2.4.2

++ /usr/bin/id -u

+ '[' 501 = 0 ']'

++ /usr/bin/id -u

+ '[' 501 = 0 ']'

+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .

+ exit 0

正常推出,说明我们写的没什么问题

我们添加剩下的内容:

%install

mkdir -p $RPM_BUILD_ROOT/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2

install langdao-ec-gb.dict.dz $RPM_BUILD_ROOT/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2

install langdao-ec-gb.idx     $RPM_BUILD_ROOT/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2

install langdao-ec-gb.idx.oft $RPM_BUILD_ROOT/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2

install langdao-ec-gb.ifo     $RPM_BUILD_ROOT/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2

%files

%defattr(-,root,root,-)

/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2/langdao-ec-gb.dict.dz

/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2/langdao-ec-gb.idx

/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2/langdao-ec-gb.idx.oft

/usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2/langdao-ec-gb.ifo

%postun

rm -rf /usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2

%install这一栏是要告诉rpmbuild我们需要把解压出来的哪些文件组成一个目录树,然后安装的时候,就按照这个目录树把相应的文件拷贝到相应的位置。

首先要创建 /usr/share/stardict/dic/stardict-langdao-ec-gb-2.4.2这个目录,

因为星际译王默认是去/usr/share/stardict/dic这个目录去查找词典文件目录。

后面这四个文件就是跟词典相应的文件。

%files这栏就定义了把哪些包放到什么地方,

%defattr定义了文件属主和属组

%postun指定了卸载之后要执行的指令,我在这里定义了把哪个词典目录直接删除掉

我们最后把这个包给打出来:

rpmbuild -ba stardict-langdao-ec-gb.spec

输出的最后部分是:

Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.49859

+ umask 022

+ cd /home/xiaosu/redhat/BUILD

+ cd stardict-langdao-ec-gb-2.4.2

+ exit 0

最后正常退出,我们会发现系统的/home/xiaosu/redhat/RPMS/noarch目录下会多了一个stardict-langdao-ec-gb-2.4.2-1.noarch.rpm的文件。

我们切回到root用户,尝试安装这个包

[root@station1 Desktop]# rpm -ivh stardict-oxford-gb-2.4.2-1.noarch.rpm

error: Failed dependencies:

stardict is needed by stardict-oxford-gb-2.4.2-1.noarch

[root@station1 Desktop]#

可以看到我们设置的PreReq生效了,我们先把stardict给装上,然后再装这个包,成功了,现在可以用词典查词了

朗道汉英词典    http://down.51cto.com/data/196197

朗道英汉词典    http://down.51cto.com/data/196196

牛津词典        http://down.51cto.com/data/196199

二十一世纪双向词典   http://down.51cto.com/data/196201

二十一世纪双语科技词典   http://down.51cto.com/data/196202

转载于:https://blog.51cto.com/xiaosu/557394

(附下载地址)制作RPM包(星际译王词典包)相关推荐

  1. Ubuntu系统安装stardict(星际译王)词典

    直接命令行 sudo apt-get install stardict 安装完毕 启动方法: 1.命令行输入stardict回车 2.高速启动器----搜索stardict直接点击启动. 下载词库: ...

  2. ubuntu 安装星际译王词典

    为什么80%的码农都做不了架构师?>>>    打开终端,输入命令 sudo apt-get install stardict 卸载 打开终端,输入命令  sudo apt-get ...

  3. Ubuntu下安装星际译王

    相信很多朋友跟我一样,看源码的时候离不开一本字典,但在Ubuntu下可用的字典寥寥无几,而且仅有的星际译王也是很久没有更新了,不过有总比没有好,装个星际译王将就着吧~奋斗吧!程序猿们~ 一.在终端中( ...

  4. 【Linux】ubuntu下词典软件Goldendict介绍(可屏幕取词)和StarDict(星际译王)的安装...

    转载自:http://emuch.net/html/201012/2730970.html GoldenDict 是一款不错的.与 StarDict(星际译王)类似的词典软件.它使用 WebKit 作 ...

  5. 【Linux】ubuntu下词典软件Goldendict介绍(可屏幕取词)和StarDict(星际译王)的安装

    转载自:http://emuch.net/html/201012/2730970.html GoldenDict 是一款不错的.与 StarDict(星际译王)类似的词典软件.它使用 WebKit 作 ...

  6. linux 星际译王,Linux桌面词典 星际译王(StarDict)

    星际译王(StarDict)是利用GTK(GIMP TOOLKIT)开发的国际化的.跨平台的自由的桌面字典软件.它并不包含字典档,使用者须自行下载配合使用.它可以运行于多种不同的平台,如Linux, ...

  7. RHEL6.2手动封装rpm源码包安装星际译王

    星际译王(StarDict)是利用GTK(GIMP TOOLKIT)开发的国际化的.跨平台的自由的桌面字典软件.自身并不包含字典,须自行下载配合使用.它可以运行于多种不同的平台,如 Linux.Win ...

  8. iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)

    CodeHelper是一款可以自己定义模板和生成内容的代码生成器,目前只支持MsSql数据库,这款代码生成器的初衷也只是为了生成MyBatis.net框架的配置文件而写的一个轻量级的代码生成器. Co ...

  9. BAT等大厂已开源的70个实用工具盘点(附下载地址)

    前面的一篇文章<微软.谷歌.亚马逊.Facebook等硅谷大厂91个开源软件盘点(附下载地址)>列举了国外8个互联网公司(包括微软.Google.亚马逊.IBM.Facebook.Twit ...

最新文章

  1. Gradle for Android 第三篇( 依赖管理 )
  2. Openstack安装过程中出现的一些问题及解决
  3. 脑洞一下 | 产品经理是如何用一张小票推算店面房租的?
  4. 试卷批分pascal程序
  5. 【译】SQL Server误区30日谈-Day8-有关对索引进行在线操作的误区
  6. 数学--数论--康托展开与逆康托展开
  7. html图片宽度高度等比例绽放,css图片自动绽放大小,左右,上下居中
  8. 如何在JavaScript中克隆数组
  9. jmeter压力测试_用Jmeter实现对接口的压力测试
  10. 真正好的东西,就会脱颖而出
  11. 峰情万种_Enhancement of Peak Visual
  12. HttpClient ip直连域名问题那些事
  13. autojs遍历当前页面所有控件_解放双手,手机自动化神器AutoJS的使用
  14. 从高考落榜生到网络专家
  15. [视频相关2]网址解析接口
  16. 免费下载微软原厂Win11镜像ISO文件
  17. epub文件一揽子解决方案
  18. 赣网杯2021 CTF---MiscWebCrypto部分Writeup
  19. MySQL原理与实践(二):一条update语句引出MySQL日志系统
  20. Android系统中固件崩溃后使用uevent机制重新加载固件 流程分析

热门文章

  1. ACM图灵奖获得者:想从大数据中获益,先解决集成问题!
  2. 推荐一些软件,平时工作中可能会用到【不断更新】
  3. 【转】WCF OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout
  4. JAVA正则表达式高级用法(分组与捕获)
  5. 微软宣布.NET Native预览版
  6. ASP.NET 2.0编程技巧之用Response对象输出图像
  7. 检索出现次数的SQL语句
  8. 别的设计师比你又快又好,是因为你不知道他们在用介个!
  9. 【Java集合源码剖析】Java集合框架
  10. mysql修复坏表的方法