實驗環境:
操作系統:CentOS7 x86_x64
Mariadb:mariadb-server-5.5.64-1.el7.x86_64.rpm及相關依賴包
1. 準備Mariadb Server服務器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/