1. 程式人生 > >linux編譯*src.rpm原始碼的檔案

linux編譯*src.rpm原始碼的檔案

一、編譯核心

如果對於核心安裝用src.rpm不理解的話,可以參考文章 :點選開啟連結

在Linux AS 4的發行註記中找到解釋:當核心原始碼已經存在在核心的 .src.rpm 檔案中時,為核心原始碼提供一個獨立的軟體包就變得沒有必要。因此,紅帽企業 Linux 4 不再包括 kernel-source 軟體包。需要這些核心原始碼的使用者可以在 kernel .src.rpm 檔案中找到。通過這個檔案建立一個快速擴充套件的資源樹…這就是說當紅帽企業認為為核心原始碼提供一個獨立的軟體包不再重要時,作為使用者的我們如果想定製、升級、重編核心就得折騰一下了。/usr/src/kernels 目錄不是原始碼目錄,rpm原始碼包也不在AS 4的七張安裝光碟中(至少我沒能找到)。

對於此類檔案,一般可以在下載到,此類檔案包括原始碼。

這裡用kernel-2.6.18-164.el5.src.rpm為例,下面說明一下編譯步驟,

當然,前提是安裝一下需要的工具在安裝核心之前必須把Development Tools,Development Libraries這兩個包組安裝上去(必須先配置yum 源)
# yum groupinstall   "Development Tools"     "Development Libraries"

1. 將kernel-2.6.18-164.el5.src.rpm檔案放到自己的目錄下,為/myfile/,之後執行

    rpm -ivh kernel-2.6.18-164.el5.src.rpm

    會在/usr/src/下生成redhat這個資料夾。但是如題提示"cannot creat %/usr/src/redhat/SOURCE"那麼,

    可以自己用mkdir分別建立/usr/src/redhat和/usr/src/redhat/SOURCE。

2. 進入/usr/src/redhat/SPECS中,會看到kernel.spec這個檔案 ,我們進行rpmbuid.

    rpmbuild -bb --target=i686 kernel.spec     //用 uname -m 可以看到自己系統架構,如果你的系統是i386或者是x86_64的,就把i686

                                                                           //換成對應的。

    如果系統中沒有rpmbuild這個命令,則用yum進行安裝 yum install rpm-build進行安裝

    # rpmbuild -bp --target=i686 kernel-2.6.spec 遇到下面的錯誤
    error: Bad exit status from /var/tmp/rpm-tmp.50919 (%prep)
    可以清除以前安裝在/usr/src/redhat/SOURCES下刪除所有檔案,重來
     重新執行rpmbuild

3. 等rpmbuild成功後,最終目錄結構成功安裝後,資料分佈如下:
   ·所有的kernel配置檔案生成在 /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18/configs 目錄下
            kernel-2.6.9-x86_64.config
            kernel-2.6.9-x86_64-smp.config
·  核心樹生成在 /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 目錄下
·  核心RPM安裝包生成在 /usr/src/redhat/RPMS/{機器體系} 目錄下
            kernel-2.6.9-22.EL.x86_64.rpm
kernel-debuginfo-2.6.9-22.EL.x86_64.rpm
kernel-devel-2.6.9-22.EL.x86_64.rpm
kernel-smp-2.6.9-22.EL.x86_64.rpm
kernel-smp-devel-2.6.9-22.EL.x86_64.rpm
kernel-sourcecode-2.6.9-22.EL.x86_64.rpm
  核心 kernel.src.rpm 包在 /usr/src/redhat/SRPMS 目錄下
kernel-2.6.9-22.EL.src.rpm
4. 安裝核心原始碼包,生成原始碼目錄
            # cd /usr/src/redhat/RPMS/{機器體系}
            # rpm -ivh kernel-sourcecode-2.6.9-22.EL.x86_64.rpm
     檢視/usr/src/kernel目錄下是否已生成 linux-2.6.9-22.EL 目錄了。若是有,那可以參考 點選開啟連結
     接下來可以按照傳統方法定製編譯核心了!具體方法請參考本站其它相關文章:核心編譯
     附:簡單編譯過程如下:
     # cd /usr/src/linux-2.6.9-22.EL/configs
     # cp kernel-2.6.9-x86_64-smp.config    ../.config
     # make oldconfig
     # vi Makefile
     # make menuconfig
     # make all
     # make modules_install
     # make install
     # vi /boot/grub/menu.lst
     # reboot

二、對於src.rpm和tar.gz的說明

1、用 rpm -ivh *.src.rpm 命令來安裝它不會象二進位制的 rpm軟體包那樣安裝程式及其資料,則是向/usr/src/redhat(不同的發行版可能稍有不同)/下的SOURCE、SPECS等子目錄釋放同名的*.tar.gz原始碼包。你還得自己用它釋放出來的 *.tar.gz原始碼包來編譯安裝才行。

  2、如果用 rpmbuild ——rebuild *.src.rpm 來進行編譯,編譯完成後會在 /usr/src/linux(不同的發行版可能稍有不同) 下的RPMS目錄下生成同名的*.rpm軟體包,這回你就可以安裝這它了:rpm -ivh *.rpm .

  *.tar.gz形式的原始碼(請注意*.tar.gz不全是原始碼!可用tar ztvf *.tar.gz列清單確定)是直接打包並壓縮了的目錄及檔案,*.src.rpm除了包含這個同名的 tar.gz包外,還有方便將之編譯為同名rpm二進位制包的描述檔案(*.spec)。