天天看點

RPM包建立入門

      • 指定新的工作區_topdir
      • 在工作區建立工作目錄
      • 建立SPEC檔案
      • 建立源檔案
      • 編譯RPM包
      • 檢視生成的RPM包類容
      • 安裝和解除安裝生成的RPM包
      • 再次檢視一下到底都裝了些什麼東西
      • SPEC檔案中的一些重要字段
      • 參考

指定新的工作區

_topdir

預設的工作區為

/usr/src/redhat

;通過配置檔案

rpmmacros

指定:

cat>>~/.rpmmacros<<end
> %_topdir   /root/helloworld
> end
           

這個配置也可以用

指令行

來指定:

在工作區建立工作目錄

mkdir -p /root/helloworld/{RPMS,SRPMS,BUILD,SOURCES,SPECS}

工作目錄解釋:

  1. helloworld/BUILD: 指令rpmbuild将在這個目錄下解壓源檔案,并在這個目錄下編譯程式
  2. helloworld/SPECS: 存放spec檔案spec files
  3. helloworld/SOURCES: 存放源碼包source files
  4. helloworld/SRPMS: 存放包含源碼的rpm檔案
  5. helloworld/RPMS: 存放包含二進制的rpm封包件

建立SPEC檔案

helloworld/SPECS/hello.spec

:

Summary:    hello world rpm package
Name:       hello
Version:    0.1
Release:    1
Source:     %{name}-%{version}.tar.gz
License:    GPL
Packager:   amoblin
Group:      Application/System

BuildRoot: %{_topdir}/root/
%description
This is a software for making your life more beautiful!

%prep
rm -rf $RPM_BUILD_DIR/%{name}-%{version}
zcat $RPM_SOURCE_DIR/%{name}-%{version}.tar.gz | tar -xv 


%build
cd %{name}-%{version}
gcc -o hello hello.c

%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}/usr/local/bin/
cd %{name}-%{version}
cp hello %{buildroot}/usr/local/bin/hello

%files
/usr/local/bin/hello
           

建立源檔案

hello.c

:

#include <stdio.h>
int main()
{
    printf("Hello, World!\n");
    return ;
}
           

把源檔案打包放到

SOURCES

目錄下

mkdir -p hello-
mv hello.c hello-
tar czvf hello-.tar.gz hello-
mv hello-.tar.gz /root/helloworld/SOURCES/
           

編譯RPM包

#編譯rpm
rpmbuild -vv -ba  helloworld/SPECS/hello.spec
#或者通過指令行指定topdir編譯
rpmbuild --define "_topdir /root/helloworld" -vv -ba  helloworld/SPECS/hello.spec
#驗證SPEC
rpmbuild --define "_topdir /root/helloworld" -vv -bl  helloworld/SPECS/hello.spec
           

檢視生成的RPM包類容:

安裝和解除安裝生成的RPM包

[root@localhost ~]# rpm -iv  helloworld/RPMS/i386/hello-0.1-1.i386.rpm
Preparing packages for installation...
hello-.-
[root@localhost ~]# hello
Hello, World!
[root@localhost ~]# rpm -ev hello-0.1-1
           

再次檢視一下到底都裝了些什麼東西

[root@localhost ~]# rpm -ql hello
/usr/local/bin/hello
           

SPEC檔案中的一些重要字段:

  1. Group: 需要需先定義[

    less /usr/share/doc/rpm-*/GROUPS

    ]
  2. BuildRoot: 安裝階段

    install

    的根目錄(在

    %build

    階段之後). 預設的根目錄是

    %{_topdir}/BUILDROOT/

  3. %prep:

    prepare

    準備階段調用的shell腳本
  4. %build:

    build

    編譯階段調用的shell腳本
  5. %install:

    install

    安裝階段候調用的shell腳本

    注意: 執行%prep, %build, %install 的shell腳本的

    pwd

    目錄為/root/helloworld/BUILD
  6. %files: 指定生成的二進制RPM包中包含哪些檔案,這些檔案必須在

    BuildRoot

    目錄下存在

參考:

  1. How to create an RPM package
  2. How to create a GNU Hello RPM package
  3. RPM打包 step by step
  4. Maximum RPM

繼續閱讀