環境說明 :centos 7
1. 安裝打包工具:
yum install -y rpm-build rpmdevtools
2. 創建 RPM 打包環境:
rpmdev-setuptree
?
輸入之后是下面的結果
~/rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
?
準備 Tomcat 源碼包
?
重命名為規范格式:
mv apache-tomcat-8.0.33.tar.gz tomcat-8.0.33.tar.gz
放到 SOURCES 目錄:
cp tomcat-8.0.33.tar.gz ~/rpmbuild/SOURCES/
編寫 SPEC 文件
新建并編輯
vi ~/rpmbuild/SPECS/tomcat.spec
?
文件內容(下面是適用于tomcat8.0.33)
Name: ? ? ? ? ? tomcat
Version: ? ? ? ?8.0.33
Release: ? ? ? ?1%{?dist}
Summary: ? ? ? Apache Tomcat 8 - Java Web Server
?
License: ? ? ? Apache
URL: ? ? ? ? ? https://tomcat.apache.org/
Source0: ? ? ? tomcat-%{version}.tar.gz
?
BuildArch: ? ? noarch
Requires: ? ? ? java-1.8.0-openjdk
?
%description
Apache Tomcat 8 is an open-source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.
?
%prep
%setup -q -n apache-tomcat-%{version}
?
%build
# No build steps required
?
%install
# 安裝 Tomcat 到 /opt/tomcat
mkdir -p %{buildroot}/opt/tomcat
cp -a * %{buildroot}/opt/tomcat/
?
# 添加 systemd 服務文件
mkdir -p %{buildroot}/usr/lib/systemd/system
cat > %{buildroot}/usr/lib/systemd/system/tomcat.service <<'EOF'
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
?
[Service]
Type=forking
?
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
?
User=root
Group=root
Restart=on-failure
?
[Install]
WantedBy=multi-user.target
EOF
?
%files
/opt/tomcat
/usr/lib/systemd/system/tomcat.service
?
%post
# 讓 systemd 識別服務
/bin/systemctl daemon-reload
/bin/systemctl enable tomcat.service || :
?
%preun
if [ $1 = 0 ]; then/bin/systemctl stop tomcat.service || :/bin/systemctl disable tomcat.service || :
fi
?
%changelog
* Sun Jul 06 2025 李先生 <li@example.com> - 8.0.33-1
- Initial packaging of Apache Tomcat 8.0.33
?
?
開始打包
rpmbuild -ba ~/rpmbuild/SPECS/tomcat.spec
查看
ls /root/rpmbuild/RPMS/noarch/
安裝
yum -y install tomcat-8.0.33-1.el7.noarch.rpm ?
?
?
啟動并查看狀態
systemctl start tomcat
systemctl status tomcat
?
?
瀏覽器界面查看
?
ip地址:8080
例如:? ?192.168.72.148:8080
?
?
?
SPEC文件解釋
?
頂部元信息(軟件基本信息) ?
Name: ? ? ? ? ? tomcat ? ? ? ? ? ? ?# 軟件包名稱
Version: ? ? ? ?8.0.33 ? ? ? ? ? ? ?# 主版本號
Release: ? ? ? ?1%{?dist} ? ? ? ? ? # 發布號,“1”為首次發布,“%{?dist}”代表系統發行版宏(如.el7)
Summary: ? ? ? Apache Tomcat 8 - Java Web Server ?# 簡要描述
?
許可證、主頁和源碼
License: ? ? ? Apache ? ? ? ? ? ? ?# 使用的許可證類型
URL: ? ? ? ? ? https://tomcat.apache.org/ ? # 項目官網
Source0: ? ? ? tomcat-%{version}.tar.gz ? ? # 指定源代碼 tar 包名稱,對應 SOURCES 目錄中的文件
Source0 指定了您打包用的原始源碼包,比如 tomcat-8.0.33.tar.gz。
?
架構與依賴
BuildArch: ? ? noarch ? ? ? ? ? ? ? ? ? ? ?# 表示平臺無關(純腳本或 Java)
Requires: ? ? ? java-1.8.0-openjdk ? ? ? ? ?# 指定依賴的運行環境,安裝時會自動安裝 JDK
?
軟件說明(長描述)
%description
Apache Tomcat 8 is an open-source implementation...
#這是 RPM 安裝包中的詳細介紹內容,會出現在 rpm -qi tomcat 命令輸出中。
?
源碼解包階段
%prep
%setup -q -n apache-tomcat-%{version}
#%prep 段用于準備源碼。%setup 自動解壓 Source0,并進入解壓后的目錄:
#-q 安靜模式(不輸出太多信息)
#-n apache-tomcat-%{version} 指定解壓后目錄名,比如 apache-tomcat-8.0.33
?
構建階段(Java 無需編譯)
%build
\# No build steps required
#Tomcat 是二進制發布版,無需編譯,因此這一段空著。
?
安裝階段(關鍵部分)
%install
mkdir -p %{buildroot}/opt/tomcat
cp -a * %{buildroot}/opt/tomcat/
#將 Tomcat 所有文件復制到 RPM 的打包根目錄 %{buildroot} 下的 /opt/tomcat。
?
添加 systemd 服務文件
mkdir -p %{buildroot}/usr/lib/systemd/system
cat > %{buildroot}/usr/lib/systemd/system/tomcat.service <<'EOF'
...
EOF
#創建并寫入 systemd 服務文件,安裝 RPM 后系統可使用 systemctl start tomcat 管理服務。
?
文件列表(RPM 安裝時包含哪些內容)
%files
/opt/tomcat
/usr/lib/systemd/system/tomcat.service
#指定哪些文件會被包含進 .rpm 安裝包中。這兩項就是 Tomcat 目錄和 systemd 服務。
?
安裝后動作(%post)
%post
/bin/systemctl daemon-reload
/bin/systemctl enable tomcat.service || :
#安裝 RPM 后自動執行的命令:
#重新加載 systemd 配置
#設置 tomcat 服務開機啟動(忽略錯誤)
?
卸載前動作(%preun)
%preun
if [ $1 = 0 ]; then
? ? /bin/systemctl stop tomcat.service || :
? ? /bin/systemctl disable tomcat.service || :
fi
#如果是卸載(而不是升級),就停止并禁用 tomcat 服務。
#$1 = 0 表示當前是卸載操作
#$1 = 1 表示是升級操作,不會執行清理動作
?
?
更新日志(%changelog)
%changelog
* Sun Jul 06 2025 李先生 <li@example.com> - 8.0.33-1
- Initial packaging of Apache Tomcat 8.0.33
#寫明每次構建 RPM 的變更歷史,便于管理版本。
?
總結SPEC文件說明
tomcat.spec
├── Name / Version / Release / Summary 等元信息
├── Source0: 下載用源代碼 tar 包
├── %description: 包的描述
├── %prep: 解壓源碼包
├── %build: (空)
├── %install: 把文件放進構建目錄 + 寫 systemd 文件
├── %files: 聲明包含哪些文件
├── %post: 安裝后自動執行的命令
├── %preun: 卸載前執行的命令
└── %changelog: 歷史記錄
?
?