Mariadb服務器二進制依賴包合成爲一個RPM安裝包

實驗環境:

    操作系統:CentOS7 x86_x64

    Mariadb:mariadb-server-5.5.64-1.el7.x86_64.rpm及相關依賴包

1. 準備Mariadb Server服務器rpm及相關依賴包,如下圖

Mariadb All RPM

2. 通過如下命令將所有rpm包進行解壓,實驗時是根據包的依賴順序進行解壓(應該沒有影響)

    rpm2cpio mariadb-libs-5.5.64-1.el7.x86_64.rpm | cpio -div

3. 查看rpmbuild命令的打包目錄

    rpmbuild --showrc | grep topdir

    //缺省的_topdir = %{getenv:HOME}/rpmbuild

4. 在rpmbuild對應的_topdir中建立相關目錄

    mkdir /root/rpmbuild

    mkdir -pv /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

    目錄說明:

        BUILD     編譯之前,如解壓包後存放的路徑

        BUILDROOT     編譯後存放的路徑

        RPMS      打包完成後rpm包存放的路徑

        SOURCES      源包所放置的路徑

        SPECS     spec文檔放置的路徑

        SPRMS     源碼rpm包放置的路徑

        因爲是生成二進制rpm包,所以只使用到BUILDROOT和SPECS目錄

5. 編寫spec文件並放置到SPECS目錄,參見附中的“mariadb-server-all.spec”

6. BUILDROOT目錄內容生成

    Name: mariadb-server-all

    Version: 5.5.64

    Release: 1%{?dist}

    以spec文件中Name,Version,Release對應的內容生成一個新的目錄,本例爲“mariadb-server-all-5.5.64-1.el7.x86_64”,將解壓rpm包生成etc,usr以及var目錄放置到該目錄並將該目錄放置到BUILDROOT目錄。

7. 在rpmbuild目錄執行命令生成rpm包,新生成的包放置在RPMS相應目錄下

    rpm -bb SPECS/mariadb-server-all.spec

    本例產生的rpm包RPMS/x86_64/mariadb-server-all-5.5.64-1.el7.x86_64.rpm

8. 安裝rpm包

    rpm -ivh mariadb-server-all-5.5.64-1.el7.x86_64.rpm --replacefiles

    帶最後一個“--replacefiles”參數是因爲安裝時在準備階段可能會報與其它rpm衝突的錯誤,無法繼續安裝。可以先不帶該參數進行安裝,如果發現衝突則加上該參數。

9. 啓動mariadb服務

    systemctl start mariadb

注:Spec文件重要字段說明

%files字段:

    其中帶的值對應BUILDROOT/mariadb-server-all-5.5.64-1.el7.x86_64目錄下所對應的目錄和文件(不需要包含子目錄的內容)。如果是目錄則必須以/結尾,這樣rpmbuild工具才能識別爲一個目錄並將其下所有子目錄都進行打包。

%post字段:

    對應新生成rpm包安裝後所執行的腳本,主要工作是建立mysql用戶及組並將相關目錄的屬主改變爲mysql用戶。(在x86_64上只需要修改些,arm可根據實際情況調整)

    # 增加mysql用戶組

    groupadd -g 27 mysql

    # 增加mysql用戶

    useradd -d /var/lib/mysql -c "MariaDB Server" -g mysql -u 27 -m -s /sbin/nologin mysql

    # 修改mysql用戶根目錄的屬主

    chown -R mysql:mysql /var/lib/mysql/

    # 修改mariadb日誌目錄的屬主

    chown -R mysql:mysql /var/log/mariadb

    # 修改mariadb啓動時pid文件存放目錄的屬主

    chown -R mysql:mysql /var/run/mariadb

附:mariadb-server-all.spec

# 這個區域定義的Name、Version這些字段對應的值可以在後面
# 通過%{name},%{version}這樣的方式來引用,類似於C語言中的宏

# Name制定了軟件的名稱
Name: mariadb-server-all
# 軟件版本
Version: 5.5.64
# 釋出號,也就是第幾次製作rpm
Release: 1%{?dist}
# 軟件的介紹,必須設置,最好不要超過50個字符
Summary: mariadb server with all dependence

# 軟件的分組,可以通過/usr/share/doc/rpm-4.8.0/GROUPS文件中選擇,也可以
# 在相應的分類下,自己創建一個新的類型,例如這裏的Server
Group: Application/Server
# 許可證類型
License: GPLv2
# 軟件的源站
URL: http://downloads.mariadb.org
# 製作rpm包的人員信息
Packager: Eric

# 軟件的描述,這個可以盡情地寫
%description
The MariaDB database server is published as free and open source software under the General Public License version 2.

# %prep指定了在編譯軟件包之前的準備工作,這裏的
# setup宏的作用是靜默模式解壓並切換到源碼目錄中,
# 當然你也可以使用tar命令來解壓
%prep

# 編譯階段,和直接編譯源代碼類似,具體的操作或指定的一些參數由configure文件決定。
%build

# 安裝前執行的腳本,語法和shell腳本的語法相同
%pre

# 安裝後執行的腳本
%post
groupadd -g 27 mysql
useradd -d /var/lib/mysql -c "MariaDB Server" -g mysql -u 27 -m -s /sbin/nologin mysql
chown -R mysql:mysql /var/lib/mysql/
chown -R mysql:mysql /var/log/mariadb
chown -R mysql:mysql /var/run/mariadb

# 卸載前執行的腳本,我這裏的做的事情是在卸載前將mariadb服務器停掉
%preun 
# systemctl stop mariadb   

# 卸載完成後執行的腳本
%postun

#指定要包含的文件
%files
#設置默認權限,如果沒有指定,則繼承默認的權限
%defattr(-,root,root,0755)
/etc/
/usr/
/var/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章