1. 程式人生 > >linux-rpm 打包之helloworld

linux-rpm 打包之helloworld

關於linux下rpm打包的一個小例子,稱為helloworld吧。

另外,本文會不斷修改

一、rpm打包準備工作

  • rpm打包需要一個獨立的打包目錄

            目錄結構:

            BUILD, BUILDROOT, RPMS, SOURCES, SPECS, SRPMS

           建立該目錄命令: mkdir -pv ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS},其中,這些目錄放在rpmbuild目錄下。

  • 接下來需要對rpm進行配置

              echo ~/rpmbuild > ~/.rpmmacros,該命令將"~/rpmbuild"作為rpm打包目錄

二、打包過程

         打包helloworld需要程式sources檔案,spec檔案

  • 編寫helloworld原始檔(hello.c)
#include <stdio.h>
int main()
{
    printf("Hello, World!\n");
    return 0;
}
  • 編寫helloworld的spec檔案(hello.spec)
BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root
# 不明白這樣定義啥意思
Summary:    hello world rpm package
Name:       hello
Version:    0.1
Release:    1
Source:     hello-0.1.tar.gz
License:    GPL
Packager:   wangdonglei
Group:      Application

%description
This is a simple example for rpm package!

%prep
%setup -q

%build
gcc -o hello hello.c

%install

mkdir -p %{buildroot}/usr/local/bin
install -m 755 hello %{buildroot}/usr/local/bin/hello

%files
# 這裡的路徑是在buildroot虛擬根基礎上的,即%{buildroot}/%{name}-%{version}-%{release}-root/usr/local/bin/hello
/usr/local/bin/hello  
  • 將檔案放入相應位置並執行打包命令
# 將hello.c放入目錄hello-0.1並打包該目錄
tar zcvf hello-0.1.tar.gz hello-0.1
# 將hello-0.1.tar.gz 放入SOURCES下
mv hello-0.1.tar.gz /root/rpmbuild/SOURCES


             打包

rpm -ba rpmbuild/SPECS/hello.spec
  • 打包後文件

             執行打包命令後,這時會逐個執行hello.spec檔案的內容,最終生成兩個檔案,一個包含原始碼的rpm包和一個二進位制rpm包。

            rpmbuild/SRPMS/hello-0.1-1.src.rpm
            rpmbuild/RPMS/i386/hello-0.1-1.i386.rpm

三、總結