歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 動手制作 SRPM

動手制作 SRPM

日期:2017/2/27 9:26:10   编辑:更多Linux
  SRPM 需要的套件:   在上一節當中,我們介紹了 RPM 這個既可愛又可恨的家伙,RPM 的可愛在於他的資料庫管理方式,很容易去查詢與升級,而他的可恨呢?呵呵!就是在於他的 binary 的檔案不能再改變他的原始設定內容 ( 就是 *.rpm 的檔案不能再重新編譯的意思 ),與套件及套件之間的屬性相依的問題~還真是傷腦筋吶!  沒有關系,現在有解決的方法了!我們可以利用『含有 source code 的 SRPM 』來重新編譯 *.rpm 的檔案成為我們所希望的樣式了!就因為在 SRPM 裡面含有的不是 binary 的檔案,而是含有 source code ,因此 SRPM 是不能直接拿來安裝成為可執行的檔案的。必需要將他重新編譯,並且打包成為類似 i386, i586, i686 等等 RPM 的檔案之後,才能夠安裝在我們的系統當中哩!這個時候你就應該會想象啦,咦!既然如此的話,那麼在編譯的過程當中,我們是否可以加入其他的設定參數,來讓我們的 SRPM 可以依照我的想法來編譯呢!?哈哈!答對了!所以呢,這個時候我們就要來修改別人的 SRPM 以及編譯自己的套件啦!  不過這裡需要特別留意的就是,因為 SRPM 需要重新編譯,而編譯的過程當中,我們至少需要有 make 與其相關的程式,及 gcc, c, c++ 等其他的編譯用的程式語言來進行編譯,所以,如果您在安裝的過程當中沒有選取軟體開發工具之類的套件,呵呵!得重新拿出你的光碟,然後再安裝喔!哈哈!只是得要克服一大堆的屬性相依的問題就是了~嗯!還是建議您再次的看一下如何安裝吧!  SRPM 使用到的目錄:   SRPM 既然含有 source code ,那麼其中必定有設定檔啰,所以首先我們必需要知道,這個 SRPM 在進行編譯的時候,會使用到哪些目錄呢?這樣一來才能夠來修改嘛!你可以到你的 /usr/src 這個目錄裡面去查看一下,通常每個 distribution 提供的目錄都不太相同,以 Mandrake 9.0 為例,他是以 /usr/src/RPM 為工作目錄, Red Hat 是以 /usr/src/redhat 為工作目錄, OpenLinux 則是以 /usr/src/openlinux 為工作目錄!無論如何,反正就是在 /usr/src 這個目錄下就對了!好了到 /usr/src/redhat 裡頭去看一看呦:   · /usr/src/redhat/SPEC:這個目錄當中放置的是該套件的設定檔,例如這個套件的資訊參數、設定項目等等都放置在這裡;   · /usr/src/redhat/SOURCE:這個目錄當中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個設定檔;   · /usr/src/redhat/BUILD:在編譯的過程中,有些暫存的資料都會放置在這個目錄當中;   · /usr/src/redhat/RPMS:經過編譯之後,並且順利的編譯成功之後,將打包完成的檔案放置在這個目錄當中。裡頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。   此外,在編譯的過程當中,可能會發生不明的錯誤,或者是設定的錯誤,這個時候就會在 /tmp 底下產生一個相對應的錯誤檔,您可以根據該錯誤檔進行除錯的工作呢!等到所有的問題都解決之後,也編譯成功了,那麼剛剛解壓縮之後的檔案,就是在 /usr/src/redhat/SPEC, SOURCE, BUILD 等等的檔案都會被殺掉,而只剩下放置在 /usr/src/redhat/RPMS 底下的檔案了!  設定檔的主要內容:   剛剛我們在上面提過了,SRPM還可以更改一些設定的內容,那麼要如何修改這些設定的內容呢?我們以簡單的 rp-pppoe 這個套件來說明好了,你可以連上 Internet 上面的 rp-pppoe 官方網站下載 SRPM ,或者由以下的方式來下載這個套件(請注意底下的檔案是 2002/11 最新的檔案資料,有可能在您看到本文時,這個套件已經更新了,所以請直接上底下的網址來下載吧!http://www.roaringpenguin.com/pppoe/)。至於基本的過程如下:   1. 下載 SRPM 軟體: [root @test root]# wget http://www.roaringpenguin.com/pppoe/rp-pppoe-3.5-1.src.rpm 2. 將 SRPM 解開在/usr/src/redhat 底下的目錄當中 [root @test root]# rpm –i rp-pppoe-3.5-1.src.rpm 3. 觀察一下有哪些原始碼呢? [root @test root]# cd /usr/src/redhat/SOURCES [root @test SOURCE]# ls –l -rw-rw-r-- 1 root root 189321 Jul 8 22:38 rp-pppoe-3.5.tar.gz 呵呵!上面顯示我們的原始碼就是這個檔案啦!  好了,來看看我們的設定參數檔,亦即是在 /usr/src/redhat/SPECS 內的 *.spec 檔案啰!   觀察一下預設的設定檔案內容: [root @test root]# cd /usr/src/redhat/SPECS [root @test SPECS]# vi rp-pppoe.spec 沒錯!這個就是SRPM的預設設定內容檔案啰,進去修改一下,裡面的資料有點像這樣: Summary: PPP Over Ethernet (xDSL support) Name: rp-pppoe Version: 3.5 %if %(%{eXPand:test %{_vendor} != mandrake ; echo $?}) Release: 1mdk %else Release: 1 %endif Copyright: GPL Group: System Environment/Daemons Source: http://www.roaringpenguin.com/pppoe/rp-pppoe-3.5.tar.gz Url: http://www.roaringpenguin.com/pppoe/ Packager: David F. Skoll BuildRoot: /tmp/pppoe-build Vendor: Roaring Penguin Software Inc. Requires: ppp >= 2.3.7 # LIC: GPL %description PPPoE (Point-to-Point Protocol over Ethernet) is a protocol used by many ADSL Internet Service Providers. Roaring Penguin has a free client for Linux systems to connect to PPPoE service providers. The client is a user-mode program and does not require any kernel modifications. It is fully compliant with RFC 2516, the official PPPoE specification. %prep %setup cd src ./configure --mandir=%{_mandir} %build cd src make cd ../gui make %install cd src make install RPM_INSTALL_ROOT=$RPM_BUILD_ROOT cd ../gui make install RPM_INSTALL_ROOT=$RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc doc/CHANGES doc/HOW-TO-CONNECT doc/LICENSE doc/KERNEL-MODE-PPPOE README SERVPOET %config(noreplace) /etc/ppp/pppoe.conf 注:中間還有很多資訊,被我省略掉了!知道了就好喔! %changelog * Thu Jul 21 2001 Shigechika AIKAWA - merged rp-pppeo.spec and rp-pppoe-gui.spec  注意到的是rp-pppoe.sepc這個檔案,這是主要的將SRPM編譯成RPM的設定檔,他的基本規則可以這樣看:   1.整個檔案的開頭以Summary為開始,這部份的設定都是最基礎的說明內容;   2.然後每個不同的段落之間,都以%來做為開頭,例如%prep與%install等;   我們來談一談幾個常見的SRPM設定段落:   ·系統整體資訊方面:   oSummary:主要的套件說明,例如上表中,我們說明了他是ppp的撥接用途啦!   oName:這個就是套件的名稱;   oVersion:這個是套件的版本資訊;   oRelease:這個是該版本打包的次數說明,在Mandrake裡面,會自動的幫你設定打包的次數喔!就是1mdk那個咚咚;   oCopyright:這個套件的授權模式,我們是使用GPL啦!   oGroup:這個套件的發展團體名稱;   oSource:這個套件的來源,如果是網路上下載的套件,通常一定會有這個資訊來告訴大家這個原始檔的來源!   oUrl:這個原始碼的主要官方網站; Packager:這個套件是經由誰來打包的呢?   oVender:發展的廠商哪;   oExclusiveArch:這個是說明這個套件的適合安裝的硬體,通常預設為i386,當然,你也可以調整為i586啦等等的!   oRequires:如果你這個套件還需要其他的套件的支援,那麼這裡就必需寫上來,則當你制作成RPM之後,系統就會自動的去檢查啦!這就是『相依屬性』的主要來源啰!   上面幾個資料通常都必需要寫啦!但是如果你的軟體沒有相依屬性的關系時,那麼就可以不需要那個Requires啰!   ·%description   將您的套件做一個簡短的說明!這個也是必需要的。  ·%prep   這部份的設定在於『尚未進行設定或安裝之前,你要編譯完成的RPM幫你事先做的事情』,就是prepare的簡寫啰!那麼他的工作事項主要有:   1.尋找套件所需要的目錄是否已經存在?確認用的!   2.事先建立您的套件所需要的目錄,或者事先需要進行的任務;   3.如果待安裝的Linux系統內已經有安裝的時候可能會被覆蓋掉的檔案時,那麼就必需要進行備份(backup)的工作了!   大致的工作就是這些啦!  ·%setup   這個段落就是在建立我們在Tarball當中說明的那個Makefile檔案啦!所以呢,當然就是執行./config之類的設定檔案啰!那麼如果你要自己新增自己的參數,就可以在這個地方加入你的設定值!如果你的軟體本身沒有這方面的需要,裡面就不需要編寫內容啰!  ·%build   build就是建立啊!所以當然啰,這個段落就是在談怎麼make編譯成為可執行的程式啰!  ·%install   編譯完成(build)之後,就是要安裝啦!安裝就是寫在這裡,也就是類似Tarball裡面的make install的意思啰!  ·%files   這個套件安裝的檔案都需要寫到這裡來,當然包括了『目錄』喔!所以連同目錄請一起寫到這個段落當中!以備查驗呢!^_^  ·%changelog   這個主要則是在記錄這個套件曾經的更新紀錄啰!  好了,那麼如果您有自訂的資訊想要加入的話,就選擇你要加入的那個段落,將他修改一下吧!例如,如果你在設定Makefile的時候,希望能夠多一些額外的參數設定,那麼就找到 %setup 那個段落,將他修改成您所需要的樣子,就可以啰!  SRPM 的編譯指令:   再來呢?嗯!沒錯,修改完成了,自然就是要將他編譯成可以安裝的RPM檔案啦!這個時候我們就可以直接在/usr/src/redhat/SPECS底下下達:   [root @test SPECS]# rpm -bb rp-pppoe.spec



Copyright © Linux教程網 All Rights Reserved