<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 22.4 SRPM 的使用 : rpmbuild (Optional) 談完了 RPM 類型的軟件之后,再來我們談一談包含了 Source code 的 SRPM 該如何使用呢?假如今天我們由網絡上面下載了一個 SRPM 的文件,該如何安裝他?又,如果我想要修改這個 SRPM 里面源代碼的相關設置值,又該如何訂正與重新編譯呢? 此外,最需要注意的是,新版的 rpm 已經將 RPM 與 SRPM 的指令分開了,SRPM 使用的是 rpmbuild 這個指令,而不是 rpm 喔! ### 22.4.1 利用默認值安裝 SRPM 文件 (--rebuid/--recompile) 假設我下載了一個 SRPM 的文件,又不想要修訂這個文件內的源代碼與相關的設置值, 那么我可以直接編譯并安裝嗎?當然可以!利用 rpmbuild 配合選項即可。選項主要有下面兩個: | | | | --- | --- | | --rebuild | 這個選項會將后面的 SRPM 進行“編譯”與“打包”的動作,最后會產生 RPM 的文件,但是產生的 RPM 文件并沒有安裝到系統上。當你使用 --rebuild 的時候,最后通常會發現一行字體: `Wrote: /root/rpmbuild/RPMS/x86_64/pkgname.x86_64.rpm` 這個就是編譯完成的 RPM 文件啰!這個文件就可以用來安裝啦!安裝的時候請加絕對路徑來安裝即可! | | --recompile | 這個動作會直接的“編譯”“打包”并且“安裝”啰!請注意, rebuild 僅“編譯并打包”而已,而 recompile 不但進行編譯跟打包,還同時進行“安裝”了! | 不過,要注意的是,這兩個選項都沒有修改過 SRPM 內的設置值,僅是通過再次編譯來產生 RPM 可安裝軟件文件而已。 一般來說,如果編譯的動作順利的話,那么編譯過程所產生的中間暫存盤都會被自動刪除,如果發生任何錯誤, 則該中間文件會被保留在系統上,等待使用者的除錯動作! 問:請由 [http://vault.centos.org/](http://vault.centos.org/) 下載正確的 CentOS 版本中, 在 updates 軟件庫當中的 ntp 軟件 SRPM,請下載最新的那個版本即可,然后進行編譯的行為。答:目前 (2015/09) 最新的版本為:ntp-4.2.6p5-19.el7.centos.1.src.rpm 這一個,所以我是這樣作的: * 先下載軟件: wget http://vault.centos.org/7.1.1503/updates/Source/SPackages/ntp-4.2.6p5-19.el7.centos.1.src.rpm * 再嘗試直接編譯看看: rpmbuild --rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm * 上面的動作會告訴我還有一堆相依軟件沒有安裝~所以我得要安裝起來才行: yum install libcap-devel openssl-devel libedit-devel pps-tools-devel autogen autogen-libopts-devel * 再次嘗試編譯的行為: rpmbuild --rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm * 最終的軟件就會被放置到: /root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-19.el7.centos.1.x86_64.rpm 上面的測試案例是將一個 SRPM 文件抓下來之后,依據你的系統重新進行編譯。一般來說,因為該編譯可能會依據你的系統硬件而最優化, 所以可能性能會好一些些,但是...人類根本感受不到那種性能優化的效果~所以并不建議你這么作。此外, 這種情況也很能發生在你從不同的 Linux distribution 所下載的 SRPM 拿來想要安裝在你的系統上,這樣作才算是有點意義。 一般來說,如果你有需要用到 SRPM 的文件,大部分的原因就是...你需要重新修改里面的某些設置,讓軟件加入某些特殊功能等等的。 所以啰,此時就得要將 SRPM 拆開,編輯一下編譯配置文件,然后再予以重新編譯啦!下個小節我們來玩玩修改設置的方式! ### 22.4.2 SRPM 使用的路徑與需要的軟件 SRPM 既然含有 source code ,那么其中必定有配置文件啰,所以首先我們必需要知道,這個 SRPM 在進行編譯的時候會使用到哪些目錄呢?這樣一來才能夠來修改嘛! 不過從 CentOS 6.x 開始 (當然包含我們的 CentOS 7.x 啰),因為每個用戶應該都有能力自己安裝自己的軟件,因此 SRPM 安裝、設置、編譯、最終結果所使用的目錄都與操作者的主文件夾有關~鳥哥假設你用 root 的身份來進行 SRPM 的操作, 那么你應該就會使用到下列的目錄喔: | | | | --- | --- | | /root/rpmbuild/SPECS | 這個目錄當中放置的是該軟件的配置文件,例如這個軟件的信息參數、設置項目等等都放置在這里; | | /root/rpmbuild/SOURCES | 這個目錄當中放置的是該軟件的原始文件 (*.tar.gz 的文件) 以及 config 這個配置文件; | | /root/rpmbuild/BUILD | 在編譯的過程中,有些暫存的數據都會放置在這個目錄當中; | | /root/rpmbuild/RPMS | 經過編譯之后,并且順利的編譯成功之后,將打包完成的文件放置在這個目錄當中。里頭有包含了 x86_64, noarch.... 等等的次目錄。 | | /root/rpmbuild/SRPMS | 與 RPMS 內相似的,這里放置的就是 SRPM 封裝的文件啰!有時候你想要將你的軟件用 SRPM 的方式釋出時, 你的 SRPM 文件就會放置在這個目錄中了。 | ![鳥哥的圖示](https://box.kancloud.cn/2016-05-13_5735736501917.gif "鳥哥的圖示") **Tips** 早期要使用 SRPM 時,必須是 root 的身份才能夠使用編譯行為,同時源代碼都會被放置到 /usr/src/redhat/ 目錄內喔! 跟目前放置到 /~username/rpmbuild/ 的情況不太一樣! 此外,在編譯的過程當中,可能會發生不明的錯誤,或者是設置的錯誤,這個時候就會在 /tmp 下面產生一個相對應的錯誤文件,你可以根據該錯誤文件進行除錯的工作呢! 等到所有的問題都解決之后,也編譯成功了,那么剛剛解壓縮之后的文件,就是在 /root/rpmbild/{SPECS, SOURCES, BUILD} 等等的文件都會被殺掉,而只剩下放置在 /root/rpmbuild/RPMS 下面的文件了! 由于 SRPM 需要重新編譯,而編譯的過程當中,我們至少需要有 make 與其相關的程序,及 gcc, c, c++ 等其他的編譯用的程序語言來進行編譯,更多說明請參考[第二十一章源代碼所需基礎軟件](../Text/index.html#tarball_pack)吧。 所以,如果你在安裝的過程當中沒有選取軟件開發工具之類的軟件,這時就得要使用上一小節介紹的 yum 來安裝就是了! 當然,那個 "Development Tools" 的軟件群組請不要忘記安裝了! 問:嘗試將上個練習下載的 ntp 的 SRPM 軟件直接安裝到系統中 (不要編譯),然后查閱一下所有用到的目錄為何?答: ``` # 1\. 鳥哥這里假設你用 root 的身份來進行安裝的行為喔! [root@study ~]# rpm -ivh ntp-4.2.6p5-19.el7.centos.1.src.rpm Updating / installing... 1:ntp-4.2.6p5-19.el7.centos.1 ################################# [100%] warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root # 會有一堆 warning 的問題,那個不要理它!可以忽略沒問題的! # 2\. 查閱一下 /root/rpmbuild 目錄的內容! [root@study ~]# ll -l /root/rpmbuild drwxr-xr-x. 3 root root 39 Sep 8 16:16 BUILD drwxr-xr-x. 2 root root 6 Sep 8 16:16 BUILDROOT drwxr-xr-x. 4 root root 32 Sep 8 16:16 RPMS drwxr-xr-x. 2 root root 4096 Sep 9 09:43 SOURCES drwxr-xr-x. 2 root root 39 Sep 9 09:43 SPECS # 這個家伙最重要! drwxr-xr-x. 2 root root 6 Sep 8 14:51 SRPMS [root@study ~]# ll -l /root/rpmbuild/{SOURCES,SPECS} /root/rpmbuild/SOURCES: -rw-rw-r--. 1 root root 559 Jun 24 07:44 ntp-4.2.4p7-getprecision.patch -rw-rw-r--. 1 root root 661 Jun 24 07:44 ntp-4.2.6p1-cmsgalign.patch .....(中間省略)..... /root/rpmbuild/SPECS: -rw-rw-r--. 1 root root 41422 Jun 24 07:44 ntp.spec # 這就是重點! ``` ### 22.4.3 配置文件的主要內容 (*.spec) 如前一個小節的練習,我們知道在 /root/rpmbuild/SOURCES 里面會放置原始文件 (tarball) 以及相關的修補檔 (patch file), 而我們也知道編譯需要的步驟大抵就是 ./configure, make, make check, make install 等,那這些動作寫入在哪里呢? 就在 SPECS 目錄中啦!讓我們來瞧一瞧 SPECS 里面的文件說些什么吧! ``` [root@study ~]# cd /root/rpmbuild/SPECS [root@study SPECS]# vim ntp.spec # 1\. 首先,這個部分在介紹整個軟件的基本相關信息!不論是版本還是釋出次數等。 Summary: The NTP daemon and utilities # 簡易的說明這個軟件的功能 Name: ntp # 軟件的名稱 Version: 4.2.6p5 # 軟件的版本 Release: 19%{?dist}.1 # 軟件的釋出版次 # primary license (COPYRIGHT) : MIT # 下面有很多 # 的注解說明! .....(中間省略)..... License: (MIT and BSD and BSD with advertising) and GPLv2 Group: System Environment/Daemons Source0: http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-%{version}.tar.gz Source1: ntp.conf # 寫 SourceN 的就是源代碼! Source2: ntp.keys # 源代碼可以有很多個! .....(中間省略)..... Patch1: ntp-4.2.6p1-sleep.patch # 接下來則是補丁文件,就是 PatchN 的目的! Patch2: ntp-4.2.6p4-droproot.patch .....(中間省略)..... # 2\. 這部分則是在設置相依屬性需求的地方! URL: http://www.ntp.org # 下面則是說明這個軟件的相依性, Requires(post): systemd-units # 還有編譯過程需要的軟件有哪些等等! Requires(preun): systemd-units Requires(postun): systemd-units Requires: ntpdate = %{version}-%{release} BuildRequires: libcap-devel openssl-devel libedit-devel perl-HTML-Parser BuildRequires: pps-tools-devel autogen autogen-libopts-devel systemd-units .....(中間省略)..... %package -n ntpdate # 其實這個軟件包含有很多次軟件喔! Summary: Utility to set the date and time via NTP Group: Applications/System Requires(pre): shadow-utils Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units .....(中間省略)..... # 3\. 編譯前的預處理,以及編譯過程當中所需要進行的指令,都寫在這里 # 尤其 %build 下面的數據,幾乎就是 makefile 里面的信息啊! %prep # 這部份大多在處理補丁的動作! %setup -q -a 5 %patch1 -p1 -b .sleep # 這些 patch 當然與前面的 PatchN 有關! %patch2 -p1 -b .droproot .....(中間省略)..... %build # 其實就是 ./configure, make 等動作! sed -i 's&#124;$CFLAGS -Wstrict-overflow&#124;$CFLAGS&#124;' configure sntp/configure export CFLAGS="$RPM_OPT_FLAGS -fPIE -fno-strict-aliasing -fno-strict-overflow" export LDFLAGS="-pie -Wl,-z,relro,-z,now" %configure \ # 不就是 ./configure 的意思嗎! --sysconfdir=%{_sysconfdir}/ntp/crypto \ --with-openssl-libdir=%{_libdir} \ --without-ntpsnmpd \ --enable-all-clocks --enable-parse-clocks \ --enable-ntp-signd=%{_localstatedir}/run/ntp_signd \ --disable-local-libopts echo '#define KEYFILE "%{_sysconfdir}/ntp/keys"' &gt;&gt; ntpdate/ntpdate.h echo '#define NTP_VAR "%{_localstatedir}/log/ntpstats/"' &gt;&gt; config.h make %{?_smp_mflags} # 不就是 make 了嗎! .....(中間省略)..... %install # 就是安裝過程所進行的各項動作了! make DESTDIR=$RPM_BUILD_ROOT bindir=%{_sbindir} install mkdir -p $RPM_BUILD_ROOT%{_mandir}/man{5,8} sed -i 's/sntp\.1/sntp\.8/' $RPM_BUILD_ROOT%{_mandir}/man1/sntp.1 mv $RPM_BUILD_ROOT%{_mandir}/man{1/sntp.1,8/sntp.8} rm -rf $RPM_BUILD_ROOT%{_mandir}/man1 .....(中間省略)..... # 4\. 這里列出,這個軟件釋出的文件有哪些的意思! %files # 這軟件所屬的文件有哪些的意思! %dir %{ntpdocdir} %{ntpdocdir}/COPYRIGHT %{ntpdocdir}/ChangeLog .....(中間省略)..... # 5\. 列出這個軟件的更改歷史紀錄檔! %changelog * Tue Jun 23 2015 CentOS Sources &lt;bugs@centos.org&gt; - 4.2.6p5-19.el7.centos.1 - rebrand vendorzone * Thu Apr 23 2015 Miroslav Lichvar &lt;mlichvar@redhat.com&gt; 4.2.6p5-19.el7_1.1 - don't step clock for leap second with -x option (#1191122) .....(后面省略)..... ``` 要注意到的是 ntp.sepc 這個文件,這是主要的將 SRPM 編譯成 RPM 的配置文件,他的基本規則可以這樣看: 1. 整個文件的開頭以Summary為開始,這部份的設置都是最基礎的說明內容; 2. 然后每個不同的段落之間,都以 % 來做為開頭,例如 %prep 與 %install 等; 我們來談一談幾個常見的 SRPM 設置段落: * 系統整體信息方面: 剛剛你看到的就有下面這些重要的咚咚啰: | 參數 | 參數意義 | | --- | --- | | Summary | 本軟件的主要說明,例如上表中說明了本軟件是針對 NTP 的軟件功能與工具等啦! | | Name | 本軟件的軟件名稱 (最終會是 RPM 文件的文件名構成之一) | | Version | 本軟件的版本 (也會是 RPM 文件名的構成之一) | | Release | 這個是該版本打包的次數說明 (也會是 RPM 文件名的構成之一)。由于我們想要動點手腳,所以請將“ 19%{?dist}.1 ” 修改為“ 20.vbird ” 看看 | | License | 這個軟件的授權模式,看起來涵蓋了所有知名的 Open source 授權啊!! | | Group | 這個軟件在安裝的時候,主要是放置于哪一個軟件群組當中 (yum grouplist 的特點!); | | URL | 這個源代碼的主要官方網站; | | SourceN | 這個軟件的來源,如果是網絡上下載的軟件,通常一定會有這個信息來告訴大家這個原始文件的來源! 此外,如果有多個軟件來源,就會以 Source0, Source1... 來處理源代碼喔! | | PatchN | 就是作為補丁的 patch file 啰!也是可以有好多個! | | BuildRoot | 設置作為編譯時,該使用哪個目錄來暫存中間文件 (如編譯過程的目標文件/鏈接文件等檔)。 | | 上述為必須要存在的項目,下面為可使用的額外設置值 | | Requires | 如果你這個軟件還需要其他的軟件的支持,那么這里就必需寫上來,則當你制作成 RPM 之后,系統就會自動的去檢查啦!這就是“相依屬性”的主要來源啰! | | BuildRequires | 編譯過程中所需要的軟件。Requires 指的是“安裝時需要檢查”的,因為與實際運行有關,這個 BuildRequires 指的是“編譯時”所需要的軟件,只有在 SRPM 編譯成為 RPM 時才會檢查的項目。 | 上面幾個數據通常都必需要寫啦!但是如果你的軟件沒有相依屬性的關系時,那么就可以不需要那個 Requires 啰! 根據上面的設置,最終的文件名就會是“{Name}-{Version}-{Release}.{Arch}.rpm”的樣式, 以我們上面的設置來說,文件名應該會是“ntp-4.2.6p5-20.vbird.x86_64.rpm”的樣子啰! * %description: 將你的軟件做一個簡短的說明!這個也是必需要的。還記得使用“ rpm -qi 軟件名稱 ”會出現一些基礎的說明嗎? 上面這些東西包括 Description 就是在顯示這些重要信息的啦!所以,這里記得要詳加解釋喔! * %prep: pre 這個關鍵字原本就有“在...之前”的意思,因此這個項目在這里指的就是“尚未進行設置或安裝之前,你要編譯完成的 RPM 幫你事先做的事情”,就是 prepare 的簡寫啰!那么他的工作事項主要有: 1. 進行軟件的補丁 (patch) 等相關工作; 2. 尋找軟件所需要的目錄是否已經存在?確認用的! 3. 事先創建你的軟件所需要的目錄,或者事先需要進行的任務; 4. 如果待安裝的Linux系統內已經有安裝的時候可能會被覆蓋掉的文件時,那么就必需要進行備份(backup)的工作了! 在本案例中,你會發現程序會使用 patch 去進行補丁的動作啦!所以程序的源代碼才會更新到最新啊! * %build: build 就是創建啊!所以當然啰,這個段落就是在談怎么 make 編譯成為可執行的程序啰! 你會發現在此部分的程序碼方面,就是 ./configure, make 等項目哩!一般來說,如果你會使用 SRPM 來進行重新編譯的行為, 通常就是要重新 ./configure 并給予新的參數設置!于是這部份就可能會修改到! * %install: 編譯完成 (build) 之后,就是要安裝啦!安裝就是寫在這里,也就是類似 Tarball 里面的 make install 的意思啰! * %files: 這個軟件安裝的文件都需要寫到這里來,當然包括了“目錄”喔!所以連同目錄請一起寫到這個段落當中!以備查驗呢!^_^ !此外,你也可以指定每個文件的類型,包括文檔文件 (%doc 后面接的) 與配置文件 (%config 后面接的) 等等。 * %changelog: 這個項目主要則是在記錄這個軟件曾經的更新紀錄啰!星號 (*) 后面應該要以時間,修改者, email 與軟件版本來作為說明, 減號 (-) 后面則是你要作的詳細說明啰!在這部份鳥哥就新增了兩行,內容如下: ``` %changelog * Wed Sep 09 2015 VBird Tsai &lt;vbird@mail.vbird.idv.tw&gt;- 4.2.6p5-20.vbird - only rbuild this SRPM to RPM * Tue Jun 23 2015 CentOS Sources &lt;bugs@centos.org&gt; - 4.2.6p5-19.el7.centos.1 - rebrand vendorzone ....(下面省略).... ``` 修改到這里也差不多了,您也應該要了解到這個 ntp.spec 有多么重要!我們用 rpm -q 去查詢一堆信息時, 其實都是在這里寫入的!這樣了解否?接下來,就讓我們來了解一下如何將 SRPM 給他編譯出 RPM 來吧! ### 22.4.4 SRPM 的編譯指令 (-ba/-bb) 要將在 /root/rpmbuild 下面的數據編譯或者是單純的打包成為 RPM 或 SRPM 時,就需要 rpmbuild 指令與相關選項的幫忙了!我們只介紹兩個常用的選項給您了解一下: ``` [root@study ~]# rpmbuild -ba ntp.spec &lt;==編譯并同時產生 RPM 與 SRPM 文件 [root@study ~]# rpmbuild -bb ntp.spec &lt;==僅編譯成 RPM 文件 ``` 這個時候系統就會這樣做: 1. 先進入到 BUILD 這個目錄中,亦即是: /root/rpmbuild/BUILD 這個目錄; 2. 依照 *.spec 文件內的 Name 與 Version 定義出工作的目錄名稱,以我們上面的例子為例,那么系統就會在 BUILD 目錄中先刪除 ntp-4.2.6p5 的目錄,再重新創建一個 ntp-4.2.6p5 的目錄,并進入該目錄; 3. 在新建的目錄里面,針對 SOURCES 目錄下的來源文件,也就是 *.spec 里面的 Source 設置的那個文件,以 tar 進行解壓縮,以我們這個例子來說,則會在 /root/rpmbuild/BUILD/ntp-4.2.6p5 當中,將 /root/rpmbuild/SOURCES/ntp-* 等等多個源代碼文件進行解壓縮啦! 4. 再來開始 %build 及 %install 的設置與編譯! 5. 最后將完成打包的文件給他放置到該放置的地方去,如果你的系統是 x86_64 的話,那么最后編譯成功的 *.x86_64.rpm文件就會被放置在 /root/rpmbuild/RPMS/x86_64 里面啰!如果是 noarch 那么自然就是 /root/rpmbuild/RPMS/noarch 目錄下啰! 整個步驟大概就是這樣子!最后的結果數據會放置在 RPMS 那個目錄下面就對啦!我們這個案例中想要同時打包 RPM 與 SRPM , 因此請您自行處理一下“ rpmbuild -ba ntp.spec ”吧! ``` [root@study ~]# cd /root/rpmbuild/SPECS [root@study SPECS]# rpmbuild -ba ntp.spec .....(前面省略)..... Wrote: /root/rpmbuild/SRPMS/ntp-4.2.6p5-20.vbird.src.rpm Wrote: /root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-20.vbird.x86_64.rpm Wrote: /root/rpmbuild/RPMS/noarch/ntp-perl-4.2.6p5-20.vbird.noarch.rpm Wrote: /root/rpmbuild/RPMS/x86_64/ntpdate-4.2.6p5-20.vbird.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/sntp-4.2.6p5-20.vbird.x86_64.rpm Wrote: /root/rpmbuild/RPMS/noarch/ntp-doc-4.2.6p5-20.vbird.noarch.rpm Wrote: /root/rpmbuild/RPMS/x86_64/ntp-debuginfo-4.2.6p5-20.vbird.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.xZh6yz + umask 022 + cd /root/rpmbuild/BUILD + cd ntp-4.2.6p5 + /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/ntp-4.2.6p5-20.vbird.x86_64 + exit 0 [root@study SPECS]# find /root/rpmbuild -name 'ntp*rpm' /root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-20.vbird.x86_64.rpm /root/rpmbuild/RPMS/x86_64/ntpdate-4.2.6p5-20.vbird.x86_64.rpm /root/rpmbuild/RPMS/x86_64/ntp-debuginfo-4.2.6p5-20.vbird.x86_64.rpm /root/rpmbuild/RPMS/noarch/ntp-perl-4.2.6p5-20.vbird.noarch.rpm /root/rpmbuild/RPMS/noarch/ntp-doc-4.2.6p5-20.vbird.noarch.rpm /root/rpmbuild/SRPMS/ntp-4.2.6p5-20.vbird.src.rpm # 上面分別是 RPM 與 SRPM 的文件文件名! ``` 您瞧!嘿嘿~有 vbird 的軟件出現了!相當有趣吧!另外,有些文件軟件是與硬件等級無關的 (因為單純的文件啊!),所以如上表所示, 你會發現 ntp-doc-4.2.6p5-20.vbird.noarch.rpm 是 noarch 喔!有趣吧! ### 22.4.5 一個打包自己軟件的范例 這個就有趣了!我們自己來編輯一下自己制作的 RPM 怎么樣?會很難嗎?完全不會! 我們這里就舉個例子來玩玩吧!還記得我們在前一章談到 Tarball 與 make 時,曾經談到的 [main](../Text/index.html#make) 這個程序嗎?現在我們將這個程序加上 Makefile 后, 將他制作成為 main-0.1-1.x86_64.rpm 好嗎?那該如何進行呢?下面就讓我們來處理處理吧! * 制作源代碼文件 tarball 產生: 因為鳥哥的網站并沒有直接釋出 main-0.2,所以假設官網提供的是 main-0.l 版本之外,同時提供了一個 patch 文件~ 那我們就得要這樣作: * main-0.1.tar.gz 放在 /root/rpmbuild/SOURCES/ * main_0.1_to_0.2_patch 放在 /root/rpmbuild/SOURCES/ * main.spec 自行撰寫放在 /root/rpmbuild/SPECS/ ``` # 1\. 先來處理源代碼的部份,假設你的 /root/rpmbuild/SOURCES 已經存在了喔! [root@study ~]# cd /root/rpmbuild/SOURCES [root@study SOURCES]# wget http://linux.vbird.org/linux_basic/0520source/main-0.1.tgz [root@study SOURCES]# wget http://linux.vbird.org/linux_basic/0520source/main_0.1_to_0.2.patch [root@study SOURCES]# ll main* -rw-r--r--. 1 root root 703 Sep 4 14:47 main-0.1.tgz -rw-r--r--. 1 root root 1538 Sep 4 14:51 main_0.1_to_0.2.patch ``` 接下來就是 spec 文件的創建啰! * 創建 *.spec 的配置文件 這個文件的創建是所有 RPM 制作里面最重要的課題!你必須要仔細的設置他,不要隨便處理!仔細看看吧! 有趣的是,CentOS 7.x 會主動的將必要的設置參數列出來喔!相當有趣! ^_^ ``` [root@study ~]# cd /root/rpmbuild/SPECS [root@study SPECS]# vim main.spec Name: main Version: 0.1 Release: 1%{?dist} Summary: Shows sin and cos value. Group: Scientific Support License: GPLv2 URL: http://linux.vbird.org/ Source0: main-0.1.tgz # 這兩個文件名要正確喔! Patch0: main_0.1_to_0.2.patch %description This package will let you input your name and calculate sin cos value. %prep %setup -q %patch0 -p1 # 要用來作為 patch 的動作! %build make clean main # 編譯就好!不要安裝! %install mkdir -p %{buildroot}/usr/local/bin install -m 755 main %{buildroot}/usr/local/bin # 這才是順利的安裝行為! %files /usr/local/bin/main %changelog * Wed Sep 09 2015 VBird Tsai &lt;vbird@mail.vbird.idv.tw&gt; 0.2 - build the program ``` * 編譯成為 RPM 與 SRPM 老實說,那個 spec 文件創建妥當后,后續的動作就簡單的要命了!開始來編譯吧! ``` [root@study SPECS]# rpmbuild -ba main.spec .....(前面省略)..... Wrote: /root/rpmbuild/SRPMS/main-0.1-1.el7.centos.src.rpm Wrote: /root/rpmbuild/RPMS/x86_64/main-0.1-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/main-debuginfo-0.1-1.el7.centos.x86_64.rpm ``` 很快的,我們就已經創建了幾個 RPM 文件啰!接下來讓我們好好測試一下打包起來的成果吧! * 安裝/測試/實際查詢 ``` [root@study ~]# yum install /root/rpmbuild/RPMS/x86_64/main-0.1-1.el7.centos.x86_64.rpm [root@study ~]# rpm -ql main /usr/local/bin/main &lt;==自己嘗試執行 main 看看! [root@study ~]# rpm -qi main Name : main Version : 0.1 Release : 1.el7.centos Architecture: x86_64 Install Date: Wed 09 Sep 2015 04:29:08 PM CST Group : Scientific Support Size : 7200 License : GPLv2 Signature : (none) Source RPM : main-0.1-1.el7.centos.src.rpm Build Date : Wed 09 Sep 2015 04:27:29 PM CST Build Host : study.centos.vbird Relocations : (not relocatable) URL : http://linux.vbird.org/ Summary : Shows sin and cos value. Description : This package will let you input your name and calculate sin cos value. # 看到沒?屬于你自己的軟件喔!真是很愉快的啦! ``` 用很簡單的方式,就可以將自己的軟件或者程序給他修改與設置妥當!以后你就可以自行設置你的 RPM 啰!當然,也可以手動修改你的 SRPM 的來源文件內容啰!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看