2020年11月4日 星期三

Linux rpm build (2) - RPM 如何打包

相關參考網址:

RPM 打包︰由一竅不通到動手濫用

RPM打包原理、示例、詳解及備查


** rpmbuild 建置指令

rpmbuild -bb accusys.spec


** 撰寫 rpm SPEC

---------------------------------------------------------------->

# Some metadata required by an RPM package

Name: accusys

Summary: Install Accusys linux driver and GUI.

Version: 1.0

Release: 1

License: GPLv2


%description

Install Accusys driver for "DaVinci-Resolve-Linux-16.0-CentOS_7.3"

Install Accusys GUI GC and GS.


# Get the kernel headers version installed, not based on uname.

%define kversion %(rpm -q kernel%{?bt_ext}-devel | sort --version-sort | tail -1 | sed 's/kernel%{?bt_ext}-devel-//')

%define RGX_GC RGX_GC_3.6.8

%define RGX_GS RGX_GS_3.6.8


%install

mkdir -p %{buildroot}/lib/modules/`uname -r`/extra/accusys

cp -pdf /home/Sam/rpmbuild/SOURCES/ACS6x.ko %{buildroot}/lib/modules/`uname -r`/extra/accusys/ACS6x.ko

chmod 755 %{buildroot}/lib/modules/`uname -r`/extra/accusys/ACS6x.ko

cp -pdfr /home/Sam/rpmbuild/SOURCES/%{RGX_GS} %{buildroot}/lib/modules/`uname -r`/extra/accusys/%{RGX_GS}

cp -pdfr /home/Sam/rpmbuild/SOURCES/%{RGX_GC} %{buildroot}/lib/modules/`uname -r`/extra/accusys/%{RGX_GC}

mkdir -p %{buildroot}/usr/lib/systemd/system

cat <<EOF> %{buildroot}/usr/lib/systemd/system/accusys.service

[Unit]

Description=Accusys GUI GS

After=network.target

 

[Service]

# User=user

# Group=group

# WorkingDirectory=/path/to/folder

ExecStart=/lib/modules/3.10.0-514.el7.x86_64/extra/accusys/RGX_GS_3.6.8/DTRGuiSrv_64

Restart=always

RestartSec=10s


[Install]

WantedBy=multi-user.target

EOF


%post

depmod

systemctl start accusys

systemctl status accusys

systemctl enable accusys


%preun

systemctl stop accusys

systemctl disable accusys


%postun

depmod


%files

/lib/modules/%{kversion}/extra/accusys/ACS6x.ko

/lib/modules/%{kversion}/extra/accusys/%{RGX_GS}

/lib/modules/%{kversion}/extra/accusys/%{RGX_GC}

/usr/lib/systemd/system/accusys.service

<----------------------------------------------------------------


SPEC 檔︰ 參數定義


** SPEC 檔︰表頭 (Preamble) 的基本內容

Name:           所包裝軟件的名稱。

Summary:        軟件的簡短介紹。

Version:        軟件的版本編號。

Release:        同一版本軟件的發佈次數。預設為 1%{?dist},每打包一次應該 +1,直到版本編號更新為止。

License:        軟件的使用授權模式,像是「GPLv3」或者「MIT」之類。


URL:            軟件的官方網站。

Source0:        下載軟件源代碼的路徑或完整網址。如果有多於一個,可繼續用 Source1, Source2, … SourceX 去定義。

Patch0:         下載第一個源代碼補丁的網址。只在有需要時定義。同樣可以有 Patch1, Patch2, … PatchX。

BuildArch:      如果只支援在特定硬體架構編譯,需要在這裏定義,像是「x86_64」之類。

BuildRequires:  定義編譯軟件所需要的套件。需要用逗號或空白分隔套件名稱,亦可以分開多次定義 BuildRequires。

Requires:       定義執行軟件所需要的套件。需要用逗號或空白分隔套件名稱,亦可以分開多次定義 BuildRequires。

ExcludeArch:    如果軟件不能在特定架硬件架構下運作,需要在此定義。


** SPEC 檔︰內文 (Body) 的基本內容

%install:       安裝編譯好軟件的 shell 程序。一般包括將你要安裝的執行檔、軟件庫、設定檔、說明文件等等,

                由編譯的資料匣(如 %_builddir)移放到 %buildroot 去。

                在理想的世界裏,是預備好 ~/rpmbuild/BUILDROOT 的資料匣結構,然後把檔案由 ~/rpmbuild/BUILD 搬到 ~/rpmbuild/BUILDROOT 的程序。

%check:         檢查軟件的 shell 程序,一般擺放 unit test 的指令。

%files:         需要打包的檔案列表,每行一個定義,可以使用 bash 通用的「*」萬用字元 。

                留意這裏的檔案路徑以 %buildroot 定義的資料匣為根目錄,換言之沒放在這裏的檔案,是無法被打包的。

%changelog:     軟件變化的紀錄,定義不同版本 (version) 或建置版本 (build) 的變化。


在軟體包安裝之前( %pre)或之後( %post)執行

在軟體包卸載之前( %preun)或之後( %postun)執行

在事務開始( %pretrans)或結束( %posttrans)時執行















沒有留言:

張貼留言