一、RPM包的分類
RPM有五種基本的操作功能:安裝、解除安裝、更新、查詢和驗證。
linux軟體包分為兩大類:
(1)二進制類包,包括rpm安裝包(一般分為i386和x86等幾種)
(2)源碼類包,源碼包和開發包應該歸位此類(.src.rpm)。
有時候為了友善源碼包的安裝,和我們自己訂制軟體包的需求,我們會把一些源碼包按照我們的需求來做成rpm包,當有了源碼包就可以直接編譯得到二進制安裝包和其他任意包。spec file是制作rpm包最核心的部分,rpm包的制作就是根據spec file來實作的。在制作自定義rpm包的時候最好不要使用管理者進行,因為管理者權限過大,如果一個指令寫錯了,結果可能是災難性的,而制件一個rpm包普通使用者完全可以實作
二、修改宏及自定義工廠中的房間位置
在redhat下,rpm包的預設制作路徑在/usr/src/redhat下,這其中包含了6個目錄(要求全部大寫)
1
2
3
4
5
6
7
<code>Directory Usage</code>
<code>BUILD 源代碼解壓以後放的位置,隻需提供BUILD目錄,具體裡面放什麼,不用我們管,是以真正的制作工廠中的房間是BUILD目錄</code>
<code>RPMS 制作完成後的rpm包存放目錄,為特定平台指定子目錄(i386,i686,ppc)</code>
<code>SOURCES 收集的源檔案,源材料,更新檔檔案等存放位置 </code>
<code>SPECS 存放spec檔案,作為制作rpm包的領崗檔案,以 rpm名.spec</code>
<code>SRPMS src格式的rpm包位置 ,既然是src格式的包,就沒有平台的概念了 </code>
<code>BuiltRoot 假根,使用</code><code>install</code><code>臨時安裝到這個目錄,把這個目錄當作根來用的,是以在這個目錄下的目錄檔案,才是真正的目錄檔案。當打包完成後,在清理階段,這個目錄将被删除</code>
但centos并沒有該目錄,是以,我們不得不自定義工作工廠中的房間,即使在redhat下有該目錄,一般也是自定義到普通使用者的家目錄下的
rpmbuild --showrc 顯示所有的宏,以下劃線開頭,一個下劃線:定義環境的使用情況,二個下劃線:通常定義的是指令,為什麼要定義宏,因為不同的系統,指令的存放位置可能不同,是以通過宏的定義找到指令的真正存放位置
檢視預設工作工廠中的房間,是以隻要改變了這個宏,我們就可以自定義工作工廠中的房間了
8
9
<code>[root@localhost /]</code><code># rpmbuild --showrc | grep topdir</code>
<code>-14: _builddir %{_topdir}</code><code>/BUILD</code>
<code>-14: _buildrootdir %{_topdir}</code><code>/BUILDROOT</code>
<code>-14: _desktopdir %{_datadir}</code><code>/applications</code>
<code>-14: _rpmdir %{_topdir}</code><code>/RPMS</code>
<code>-14: _sourcedir %{_topdir}</code><code>/SOURCES</code>
<code>-14: _specdir %{_topdir}</code><code>/SPECS</code>
<code>-14: _srcrpmdir %{_topdir}</code><code>/SRPMS</code>
<code>-14: _topdir %{getenv:HOME}</code><code>/rpmbuild</code>
三、rpm包制作原理圖
四、制作rpm包
1、安裝rpm-build
<code># yum -y install rpm-build</code>
2、增加普通使用者并修改工作工廠中的房間目錄
<code># useradd hero</code>
<code># su - hero</code>
<code>$ vim ~/.rpmmacros</code>
<code> </code><code>%_topdir </code><code>/home/hero/rpmbuild</code>
<code># mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} </code>
<code># rpmbuild --showrc | grep _topdir #會發現,工作工廠中的房間已然改變:_topdir /home/hero/rpmbuild</code>
3、收集源碼檔案
(1)檔案清單
<code>[root@localhost SOURCES]</code><code># pwd</code>
<code>/home/hero/rpmbuild/SOURCES</code>
<code>[root@localhost SOURCES]</code><code># ls</code>
<code>fastcgi_params init.nginx nginx-1.7.7.</code><code>tar</code><code>.gz nginx.conf</code>
(2)nginx-1.7.7.tar.gz 源碼包
<code>$ </code><code>cp</code> <code>/opt/src/nginx-1</code><code>.7.7.</code><code>tar</code><code>.gz </code><code>/home/hero/rpmbuild/SOURCES/</code>
(3)init.nginx 腳本檔案
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<code>#!/bin/sh</code>
<code>#</code>
<code># nginx - this script starts and stops the nginx daemon</code>
<code># chkconfig: - 85 15</code>
<code># description: Nginx is an HTTP(S) server, HTTP(S) reverse \</code>
<code># proxy and IMAP/POP3 proxy server</code>
<code># processname: nginx</code>
<code>## config: /etc/nginx/nginx.conf</code>
<code># config: /usr/local/nginx/conf/nginx.conf</code>
<code># config: /etc/sysconfig/nginx</code>
<code>## pidfile: /var/run/nginx/nginx.pid</code>
<code># pidfile: /usr/local/nginx/logs/nginx.pid</code>
<code># Source function library.</code>
<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>
<code># Source networking configuration.</code>
<code>. </code><code>/etc/sysconfig/network</code>
<code># Check that networking is up.</code>
<code>[ </code><code>"$NETWORKING"</code> <code>= </code><code>"no"</code> <code>] && </code><code>exit</code> <code>0</code>
<code>nginx=</code><code>"/usr/local/nginx/sbin/nginx"</code>
<code>prog=$(</code><code>basename</code> <code>$nginx)</code>
<code>#NGINX_CONF_FILE="/etc/nginx/nginx.conf"</code>
<code>NGINX_CONF_FILE=</code><code>"/usr/local/nginx/conf/nginx.conf"</code>
<code>[ -f </code><code>/etc/sysconfig/nginx</code> <code>] && . </code><code>/etc/sysconfig/nginx</code>
<code>lockfile=</code><code>/var/lock/subsys/nginx</code>
<code>make_dirs() {</code>
<code> </code><code># make required directories</code>
<code> </code><code>user=`nginx -V 2>&1 | </code><code>grep</code> <code>"configure arguments:"</code> <code>| </code><code>sed</code> <code>'s/[^*]*--user=\([^ ]*\).*/\1/g'</code> <code>-`</code>
<code> </code><code>options=`$nginx -V 2>&1 | </code><code>grep</code> <code>'configure arguments:'</code><code>`</code>
<code> </code><code>for</code> <code>opt </code><code>in</code> <code>$options; </code><code>do</code>
<code> </code><code>if</code> <code>[ `</code><code>echo</code> <code>$opt | </code><code>grep</code> <code>'.*-temp-path'</code><code>` ]; </code><code>then</code>
<code> </code><code>value=`</code><code>echo</code> <code>$opt | </code><code>cut</code> <code>-d </code><code>"="</code> <code>-f 2`</code>
<code> </code><code>if</code> <code>[ ! -d </code><code>"$value"</code> <code>]; </code><code>then</code>
<code> </code><code># echo "creating" $value</code>
<code> </code><code>mkdir</code> <code>-p $value && </code><code>chown</code> <code>-R $user $value</code>
<code> </code><code>fi</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
<code>}</code>
<code>start() {</code>
<code> </code><code>[ -x $nginx ] || </code><code>exit</code> <code>5</code>
<code> </code><code>[ -f $NGINX_CONF_FILE ] || </code><code>exit</code> <code>6</code>
<code> </code><code>make_dirs</code>
<code> </code><code>echo</code> <code>-n $</code><code>"Starting $prog: "</code>
<code> </code><code>daemon $nginx -c $NGINX_CONF_FILE</code>
<code> </code><code>retval=$?</code>
<code> </code><code>echo</code>
<code> </code><code>[ $retval -</code><code>eq</code> <code>0 ] && </code><code>touch</code> <code>$lockfile</code>
<code> </code><code>return</code> <code>$retval</code>
<code>stop() {</code>
<code> </code><code>echo</code> <code>-n $</code><code>"Stopping $prog: "</code>
<code> </code><code>killproc $prog -QUIT</code>
<code> </code><code>[ $retval -</code><code>eq</code> <code>0 ] && </code><code>rm</code> <code>-f $lockfile</code>
<code>restart() {</code>
<code> </code><code>configtest || </code><code>return</code> <code>$?</code>
<code> </code><code>stop</code>
<code> </code><code>sleep</code> <code>1</code>
<code> </code><code>start</code>
<code>reload() {</code>
<code> </code><code>echo</code> <code>-n $</code><code>"Reloading $prog: "</code>
<code> </code><code>killproc $nginx -HUP</code>
<code> </code><code>RETVAL=$?</code>
<code>force_reload() {</code>
<code> </code><code>restart</code>
<code>configtest() {</code>
<code> </code><code>$nginx -t -c $NGINX_CONF_FILE</code>
<code>rh_status() {</code>
<code> </code><code>status $prog</code>
<code>rh_status_q() {</code>
<code> </code><code>rh_status ></code><code>/dev/null</code> <code>2>&1</code>
<code>case</code> <code>"$1"</code> <code>in</code>
<code> </code><code>start)</code>
<code> </code><code>rh_status_q && </code><code>exit</code> <code>0</code>
<code> </code><code>$1</code>
<code> </code><code>;;</code>
<code> </code><code>stop)</code>
<code> </code><code>rh_status_q || </code><code>exit</code> <code>0</code>
<code> </code><code>restart|configtest)</code>
<code> </code><code>reload)</code>
<code> </code><code>rh_status_q || </code><code>exit</code> <code>7</code>
<code> </code><code>force-reload)</code>
<code> </code><code>force_reload</code>
<code> </code><code>status)</code>
<code> </code><code>rh_status</code>
<code> </code><code>condrestart|try-restart)</code>
<code> </code><code>;;</code>
<code> </code><code>*)</code>
<code> </code><code>echo</code> <code>$</code><code>"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"</code>
<code> </code><code>exit</code> <code>2</code>
<code>esac</code>
(4)fastcgi_params 參數
<code>fastcgi_param GATEWAY_INTERFACE CGI</code><code>/1</code><code>.1;</code>
<code>fastcgi_param SERVER_SOFTWARE nginx;</code>
<code>fastcgi_param QUERY_STRING $query_string;</code>
<code>fastcgi_param REQUEST_METHOD $request_method;</code>
<code>fastcgi_param CONTENT_TYPE $content_type;</code>
<code>fastcgi_param CONTENT_LENGTH $content_length;</code>
<code>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</code>
<code>fastcgi_param SCRIPT_NAME $fastcgi_script_name;</code>
<code>fastcgi_param REQUEST_URI $request_uri;</code>
<code>fastcgi_param DOCUMENT_URI $document_uri;</code>
<code>fastcgi_param DOCUMENT_ROOT $document_root;</code>
<code>fastcgi_param SERVER_PROTOCOL $server_protocol;</code>
<code>fastcgi_param REMOTE_ADDR $remote_addr;</code>
<code>fastcgi_param REMOTE_PORT $remote_port;</code>
<code>fastcgi_param SERVER_ADDR $server_addr;</code>
<code>fastcgi_param SERVER_PORT $server_port;</code>
<code>fastcgi_param SERVER_NAME $server_name;</code>
4、在 SPECS 目錄下建立 nginx.spec
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<code>$ </code><code>cd</code> <code>rpmbuild</code><code>/SPECS/</code>
<code>$ vim nginx.spec </code><code>#此時,裡面就是一個模闆,直接填就可以了</code>
<code>### 1.The introduction section </code>
<code>Name: nginx </code><code># 軟體包名稱</code>
<code>Version: 1.7.7 </code><code># 版本号,(不能使用-)</code>
<code>Release: 3%{?dist} </code><code># release号,對應下面的changelog,如 nginx-1.7.7-3.el6.x86_64.rpm</code>
<code>Summary: nginx-1.7.7.</code><code>tar</code><code>.gz to nginx-1.7.7.rpm </code><code># 簡要描述資訊,最好不要超過50個字元,如要詳述,使用下面的%description</code>
<code>Group: Applications</code><code>/Archiving</code> <code># 要全用這裡面的一個組:less /usr/share/doc/rpm-version/GROUPS</code>
<code>License: GPLv2 </code><code># 一定帶上(最好是對方源碼包的License)BSD,GPL,GPLv2</code>
<code>URL: http:</code><code>//nmshuishui</code><code>.blog.51cto.com/</code>
<code>Packager: nmshuishui <[email protected]></code>
<code>Vendor: nmshuishui</code>
<code>Source0: %{name}-%{version}.</code><code>tar</code><code>.gz </code><code># source主要是引用一下自己定義好的腳本,配置檔案之類的内容。</code>
<code>Source1: init.nginx </code><code># nginx在主配置檔案裡面做了很多優化,包括cpu搶占,各種緩存政策,tcp,程序數等。</code>
<code>Source2: nginx.conf </code><code># 每增加一個 Source ,都需要在 %install 段和 %files 段做相應配置,如果是啟動腳本的話,最好在腳本段配置一下</code>
<code>Source3: fastcgi_params</code>
<code>BuildRoot: %_topdir</code><code>/BUILDROOT</code>
<code>BuildRequires: gcc</code>
<code>Requires: openssl,openssl-devel,pcre-devel,pcre </code><code># 定義nginx依賴的包,需要yum安裝</code>
<code>%description </code><code># 軟體包詳述</code>
<code>Custom a rpm by yourself!Build nginx-1.7.7.</code><code>tar</code><code>.gz to nginx-1.7.7.rpm</code>
<code>### 2.The Prep section 準備階段,主要就是把源碼包解壓到build目錄下,設定一下環境變量,并cd進去</code>
<code>%prep </code>
<code>%setup -q </code><code># 這個宏的作用靜默模式解壓并cd </code>
<code>### 3.The Build Section 編譯制作階段,這一節主要用于編譯源碼</code>
<code>%build</code>
<code>%configure </code><code>#在 RMP 建立時候, 由于 nginx 不按照正常定義, 不可以定義 %{_prefix} 之類參數, 也不可以使用 %configure 這個參數進行 rpm 編譯 </code>
<code> </code><code>#一旦定義該參數, 會導緻編譯自動增加下面參數, 導緻報錯</code>
<code> </code><code># + ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --target=x86_64-redhat-linux-gnu --program-prefix=</code>
<code> </code><code>#是以,這裡需要 ./configure,且需把%configure删掉</code>
<code> </code><code>#而且這裡需要安裝 pcre-devel包,如果沒有的話,會提示關于pcre的錯誤,直接安裝此包就可以了</code>
<code>.</code><code>/configure</code> <code>\</code>
<code>--prefix=</code><code>/usr/local/nginx</code> <code>\</code>
<code>--user=www \</code>
<code>--group=www \</code>
<code>--with-http_ssl_module \</code>
<code>--with-http_flv_module \</code>
<code>--with-http_stub_status_module \</code>
<code>--with-http_gzip_static_module \</code>
<code>--http-client-body-temp-path=</code><code>/var/tmp/nginx/client/</code> <code>\</code>
<code>--http-proxy-temp-path=</code><code>/var/tmp/nginx/proxy/</code> <code>\</code>
<code>--http-fastcgi-temp-path=</code><code>/var/tmp/nginx/fcgi/</code> <code>\</code>
<code>--http-uwsgi-temp-path=</code><code>/var/tmp/nginx/uwsgi</code> <code>\</code>
<code>--http-scgi-temp-path=</code><code>/var/tmp/nginx/scgi</code> <code>\</code>
<code>--with-pcre</code>
<code>make</code> <code>%{?_smp_mflags} </code><code># make後面的意思是:如果就多處理器的話make時并行編譯 </code>
<code>### 4.Install section 這一節主要用于完成實際安裝軟體必須執行的指令,可包含4種類型腳本</code>
<code>%</code><code>install</code>
<code>rm</code> <code>-rf %{buildroot}</code>
<code>make</code> <code>install</code> <code>DESTDIR=%{buildroot}</code>
<code>%{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}</code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/nginx</code>
<code>%{__install} -p -D %{SOURCE2} %{buildroot}</code><code>/usr/local/nginx/conf/nginx</code><code>.conf</code>
<code>%{__install} -p -D %{SOURCE3} %{buildroot}</code><code>/usr/local/nginx/conf/fastcgi_params</code>
<code>%pre</code>
<code>if</code> <code>[ $1 == 1 ];</code><code>then</code> <code># $1有3個值,代表動作,安裝類型,處理類型</code>
<code> </code><code>/usr/sbin/useradd</code> <code>-r www -s </code><code>/sbin/nologin</code> <code>2> </code><code>/dev/null</code> <code># 1:表示安裝</code>
<code>fi</code> <code># 2:表示更新 </code>
<code> </code><code># 0:表示解除安裝</code>
<code>%post</code>
<code>if</code> <code>[ $1 == 1 ];</code><code>then</code>
<code> </code><code>/sbin/chkconfig</code> <code>--add %{name}</code>
<code> </code><code>/sbin/chkconfig</code> <code>%{name} on</code>
<code> </code><code>echo</code> <code>'</code><code># Add #下面主要是核心參數的優化,包括tcp的快速釋放和重利用等。 </code>
<code>net.ipv4.tcp_max_syn_backlog = 65536</code>
<code>net.core.netdev_max_backlog = 32768</code>
<code>net.core.somaxconn = 32768</code>
<code> </code>
<code>net.core.wmem_default = 8388608</code>
<code>net.core.rmem_default = 8388608</code>
<code>net.core.rmem_max = 16777216</code>
<code>net.core.wmem_max = 16777216</code>
<code>net.ipv4.tcp_timestamps = 0</code>
<code>net.ipv4.tcp_synack_retries = 2</code>
<code>net.ipv4.tcp_syn_retries = 2</code>
<code>net.ipv4.tcp_tw_recycle = 1</code>
<code>net.ipv4.tcp_tw_reuse = 1</code>
<code>net.ipv4.tcp_mem = 94500000 915000000927000000</code>
<code>net.ipv4.tcp_max_orphans = 3276800</code>
<code>#net.ipv4.tcp_fin_timeout = 30</code>
<code>#net.ipv4.tcp_keepalive_time = 120</code>
<code>net.ipv4.ip_local_port_range = 1024 65535' >> </code><code>/etc/sysctl</code><code>.conf</code>
<code>sysctl -p 2>&1 </code><code>/dev/null</code>
<code>fi</code>
<code>%preun</code>
<code>if</code> <code>[ $1 == 0 ];</code><code>then</code>
<code> </code><code>/usr/sbin/userdel</code> <code>-r www 2> </code><code>/dev/null</code>
<code> </code><code>/etc/init</code><code>.d</code><code>/nginx</code> <code>stop > </code><code>/dev/null</code> <code>2>&1</code>
<code>%postun</code>
<code>### 5.clean section 清理段,clean的主要作用就是删除BUILD</code>
<code>%clean</code>
<code>### 6.file section 檔案清單段,這個階段是把前面已經編譯好的内容要打包了,其中exclude是指要排除什麼不打包進來。</code>
<code>%files </code>
<code>%defattr(-,root,root,0755)</code>
<code>/usr/local/nginx/</code>
<code>%attr(0755,root,root) </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/nginx</code>
<code>%config(noreplace) </code><code>/usr/local/nginx/conf/nginx</code><code>.conf</code>
<code>%config(noreplace) </code><code>/usr/local/nginx/conf/fastcgi_params</code>
<code>### 7.chagelog section 日志改變段, 這一段主要描述軟體的開發記錄</code>
<code>%changelog</code>
<code>* Thu Wed 26 2014 nmshuishui <[email protected]> - 1.7.7-3</code>
<code>- Initial version</code>
5、制作rpm包
<code>rpmbuild -bp nginx.spec 制作到%prep段</code>
<code>rpmbuild -</code><code>bc</code> <code>nginx.spec 制作到%build段</code>
<code>rpmbuild -bi nginx.spec 執行 spec 檔案的 </code><code>"%install"</code> <code>階段 (在執行了 %prep 和 %build 階段之後)。這通常等價于執行了一次 </code><code>"make install"</code>
<code>rpmbuild -bb nginx.spec 制作二進制包</code>
<code>rpmbuild -ba nginx.spec 表示既制作二進制包又制作src格式包</code>
五、rpm包的簽名
1、查詢軟體包資訊
<code>[root@localhost ~]</code><code># rpm -qi nginx</code>
<code>Name : nginx Relocations: (not relocatable)</code>
<code>Version : 1.7.7 Vendor: nmshuishui</code>
<code>Release : 3.el6 Build Date: Wed 26 Nov 2014 06:39:00 PM CST</code>
<code>Install Date: Wed 26 Nov 2014 06:42:19 PM CST Build Host: localhost</code>
<code>Group : Applications</code><code>/Archiving</code> <code>Source RPM: nginx-1.7.7-3.el6.src.rpm</code>
<code>Size : 793593 License: GPLv2</code>
<code>Signature : (none) </code><code># rpm包未簽名狀态</code>
<code>Packager : nmshuishui <[email protected]></code>
<code>URL : http:</code><code>//nmshuishui</code><code>.blog.51cto.com/</code>
<code>Summary : nginx-1.7.7.</code><code>tar</code><code>.gz to nginx-1.7.7.rpm</code>
<code>Description :</code>
2、使用gpg方式生成簽名密鑰
<code>[root@localhost ~]</code><code># gpg --gen-key</code>
<code>Your selection?1<Enter> </code><code>#預設即可</code>
<code>What keysize </code><code>do</code> <code>you want? (2048) 1024<Enter> </code><code>#選擇密鑰長度</code>
<code>Key is valid </code><code>for</code><code>? (0) 1y<Enter> </code><code>#有效期</code>
<code>Is this correct? (y</code><code>/N</code><code>) y<Enter> </code><code>#确認</code>
<code>Real name: nmshuishui<Enter> </code><code>#密鑰名稱</code>
<code>Email address: [email protected]<Enter> </code><code>#郵件</code>
<code>Comment: GPG-RPM-KEY<Enter> </code><code>#備注</code>
<code>Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O<ENTER> </code><code>#okay确認</code>
<code>Enter passphrase OK <Enter> </code><code>#按Enter輸入密碼 </code>
<code><Take this one anyway> <Enter> </code><code>#确認使用此密碼</code>
<code>#####</code>
<code>在生成密鑰的時候,會報這麼一個資訊:can</code><code>'t connect to `/root/.gnupg/S.gpg-agent'</code><code>: No such </code><code>file</code> <code>or directory,可以不用理會它。</code>
<code>接下來就是一些随機數的說明了:We need to generate a lot of random bytes. It is a good idea to perform</code>
<code>some other action (</code><code>type</code> <code>on the keyboard, move the mouse, utilize the</code>
<code>disks) during the prime generation; this gives the random number</code>
<code>generator a better chance to gain enough entropy.</code>
<code>就狂敲鍵盤和移動滑鼠吧,也可以連結一個僞随機數(不過不安全),接下來的活兒就是等了</code>
<code>生成密鑰後會是這樣的:</code>
<code>gpg: checking the trustdb</code>
<code>gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model</code>
<code>gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u</code>
<code>pub 2048R</code><code>/DF63EDFB</code> <code>2014-11-26</code>
<code> </code><code>Key fingerprint = 338D 476F 29C9 E2D6 6604 1D96 6F73 1E81 DF63 EDFB</code>
<code>uid nmshuishui (gen-key) <[email protected]></code>
<code>sub 2048R</code><code>/263FB359</code> <code>2014-11-26</code>
3、檢視生成的密鑰
<code>[root@localhost ~]</code><code># gpg --list-keys</code>
<code>/root/</code><code>.gnupg</code><code>/pubring</code><code>.gpg</code>
<code>------------------------</code>
4、導出公鑰以供驗證
<code>[root@localhost ~]</code><code># gpg --export -a "nmshuishui" > RPM-GPG-KEY-nmshuishui</code>
5、在~/.rpmmacros宏中定義加密密鑰
<code>[root@localhost ~]</code><code># vim ~/.rpmmacros</code>
<code>%_gpg_name nmshuishui</code>
6、為rpm包簽名
<code>[root@localhost ~]</code><code># rpm --addsign /home/hero/rpmbuild/RPMS/x86_64/nginx-1.7.7-3.el6.x86_64.rpm </code>
<code>Enter pass phrase: </code>
<code>Pass phrase is good.</code>
<code>/home/hero/rpmbuild/RPMS/x86_64/nginx-1</code><code>.7.7-3.el6.x86_64.rpm:</code>
7、将公鑰導入rpm包
<code>[root@localhost ~]</code><code># rpm --import RPM-GPG-KEY-nmshuishui</code>
8、驗證
<code>[root@localhost ~]</code><code># rpm --checksig /home/hero/rpmbuild/RPMS/x86_64/nginx-1.7.7-3.el6.x86_64.rpm</code>
<code>/home/hero/rpmbuild/RPMS/x86_64/nginx-1</code><code>.7.7-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK</code>
9、重新安裝nginx,驗證安裝包的簽名資訊
<code>[root@localhost ~]</code><code># rpm -ivh /home/hero/rpmbuild/RPMS/x86_64/nginx-1.7.7-3.el6.x86_64.rpm </code>
<code>Preparing... </code><code>########################################### [100%]</code>
<code> </code><code>1:nginx </code><code>########################################### [100%]</code>
<code>[root@localhost ~]</code><code># </code>
<code>Install Date: Thu 27 Nov 2014 10:58:44 AM CST Build Host: localhost</code>
<code>Signature : RSA</code><code>/SHA1</code><code>, Thu 27 Nov 2014 10:40:02 AM CST, Key ID 6f731e81df63edfb </code><code># 與 1 比起來,多了簽名資訊</code>
到這裡,一個完整的 rpm 包就制作完成了!
本文轉自 nmshuishui 51CTO部落格,原文連結:http://blog.51cto.com/nmshuishui/1583117,如需轉載請自行聯系原作者