tomcat的tar包轉換成rpm包的保姆級教程

環境說明 :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: 歷史記錄

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90063.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【牛客算法】小美的數組刪除

文章目錄 一、題目介紹二、解題思路三、解題算法實現四、算法分析4.1 代碼邏輯4.2 逆向遍歷求MEX的設計精妙之處4.2.1 逆向遍歷:解決MEX更新的連續性4.2.2 利用MEX的單調性4.2.3 空間復用與狀態壓縮4.2.4 與問題特性的完美契合4.2.5 總結:為什么說這個設計“妙”?五、算法復…

MyBatisPlus-01-環境初始化及簡單應用

文章目錄【README】【1】springboot集成mybatis-plus配置【1.1】目錄結構【相關說明】【1.2】代碼示例【pom.xml】【application.properties】【MybatisPlusNoteController】【UserAppService】【UserMapper】【UserPO】【建表語句】【2】演示【README】 本文代碼參見&#xf…

Web爬蟲編程語言選擇指南

剛學爬蟲的小伙伴常常為選擇那種語言來寫爬蟲而煩惱&#xff0c;今天我將總結幾種語言的優劣勢&#xff0c;然后選擇適合編寫 Web爬蟲 的編程語言。這就需要我們考慮開發效率、生態庫支持、并發性能等因素。以下是主流選擇及特點跟著一起看看吧&#xff1a; 1. Python&#xff…

學習日志06 python

加油&#xff0c;今天的任務是學習面向對象編程&#xff0c;設計一個簡單的寵物管理系統&#xff08;寵物類、貓 / 狗子類&#xff09;&#xff0c;先做5道題目開啟學習狀態吧&#xff01;1 setdefault()在 Python 中&#xff0c;setdefault() 是字典&#xff08;dict&#xff…

基于Java+springboot 的車險理賠信息管理系統

源碼、數據庫、包調試源碼編號&#xff1a;S595源碼名稱&#xff1a;基于springboot 的車險理賠信息管理系統用戶類型&#xff1a;多角色&#xff0c;用戶、事故調查員、管理員數據庫表數量&#xff1a;14 張表主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven運…

MyDockFinder 綠色便攜版 | 一鍵仿Mac桌面,非常簡單

如果你既不想升級到Win11&#xff0c;又想體驗Mac桌面的高級感&#xff0c;那么MyDockFinder將是你的最佳選擇。這是一款專為Windows系統設計的桌面美化工具&#xff0c;能夠將你的桌面轉變成MacOS的風格。它提供了類似Dock欄和Finder的功能&#xff0c;讓你在不更換操作系統的…

Babylon.js 材質克隆與紋理共享:你可能遇到的問題及解決方案

在 Babylon.js 中&#xff0c;材質&#xff08;Material&#xff09;和紋理&#xff08;Texture&#xff09;的克隆行為可能會影響渲染性能和內存管理&#xff0c;尤其是在多個材質共享同一紋理的情況下。本文將探討&#xff1a;PBRMetallicRoughnessMaterial 的克隆機制&#…

信息素養復賽模擬1和模擬2的編程題標程

信息素養復賽模擬 11&#xff1a;樓層編號 #include<bits/stdc.h> using namespace std; int main(){int n, t;cin >> n >> t;int res 0;for(int i 1; i < n; i ){int x i;bool ok true;while(x){if(x % 10 t){ok false;}x / 10;}res ok;} cout &l…

Hadoop高可用集群搭建

Hadoop高可用(HA)集群是企業級大數據平臺的核心基礎設施&#xff0c;通過多主節點冗余和自動故障轉移機制&#xff0c;確保系統在單點故障時仍能正常運行。本文將詳細介紹如何基于CentOS 7搭建Hadoop 3.X高可用集群&#xff0c;涵蓋環境準備、組件配置、集群啟動及管理的全流程…

Next.js 實戰筆記 1.0:架構重構與 App Router 核心機制詳解

Next.js 實戰筆記 1.0&#xff1a;架構重構與 App Router 核心機制詳解 上一次寫 Next 相關的東西都是 3 年前的事情了&#xff0c;這 3 年里 Next 也經歷了 2-3 次的大版本變化。當時寫的時候 Next 是 12 還是 13 的&#xff0c;現在已經是 15 了&#xff0c;從 build 到實現…

Pillow 安裝使用教程

一、Pillow 簡介 Pillow 是 Python 圖像處理庫 PIL&#xff08;Python Imaging Library&#xff09;的友好分支&#xff0c;是圖像處理的事實標準。它支持打開、編輯、轉換、保存多種圖像格式&#xff0c;常用于圖像批量處理、驗證碼識別、縮略圖生成等應用場景。 二、安裝 Pi…

SQL Server從入門到項目實踐(超值版)讀書筆記 20

9.4 數據的嵌套查詢所謂嵌套查詢&#xff0c;就是在一個查詢語句中&#xff0c;嵌套進另一個查詢語句&#xff0c;即&#xff0c;查詢語句中可以使用另一個查詢語句中得到的查詢結果&#xff0c;子查詢可以基于一張表或者多張表。子查詢中常用的操作符有ANY、SOME、ALL、IN、EX…

【MySQL\Oracle\PostgreSQL】遷移到openGauss數據出現的問題解決方案

【MySQL\Oracle\PostgreSQL】遷移到openGauss數據出現的問題解決方案 問題1&#xff1a;序列值不自動刷新問題 下面SQL只針對單庫操作以及每個序列只綁定一張表的情況 -- 自動生成的序列&#xff0c;設置序列值 with sequences as (select *from (select table_schema,table_…

【Maven】Maven命令大全手冊:28個核心指令使用場景

Maven命令大全手冊&#xff1a;28個核心指令使用場景 Maven命令大全手冊&#xff1a;28個核心指令深度解析一、構建生命周期核心命令1. mvn clean2. mvn compile3. mvn test4. mvn package5. mvn install6. mvn deploy二、依賴管理命令7. mvn dependency:tree8. mvn dependency…

大語言模型(LLM)按架構分類

大語言模型&#xff08;LLM&#xff09;按架構分類的深度解析 1. 僅編碼器架構&#xff08;Encoder-Only&#xff09; 原理 雙向注意力機制&#xff1a;通過Transformer編碼器同時捕捉上下文所有位置的依賴關系# 偽代碼示例&#xff1a;BERT的MLM任務 masked_input "Th…

MySQL(120)如何進行數據脫敏?

數據脫敏&#xff08;Data Masking&#xff09;是指通過某種方式對敏感數據進行變形&#xff0c;使其在使用過程中無法識別原始數據&#xff0c;從而保護數據隱私。數據脫敏通常應用在開發、測試和數據分析等場景中。下面我們詳細介紹如何在Java應用程序中進行數據脫敏&#xf…

使用 Dockerfile 構建基于 .NET9 的跨平臺基礎鏡像

官方基礎鏡像準備 微軟官方 dotnet sdk 基礎鏡像&#xff1a; docker pull mcr.microsoft.com/dotnet/sdk:9.0拉取 ubuntu 鏡像&#xff1a; docker pull ubuntu:24.04更多資源請參考&#xff1a; dotnet sdk images&#xff0c;https://mcr.microsoft.com/en-us/artifact/mar/…

C++ : 線程庫

C : 線程庫一、線程thread1.1 thread類1.1.1 thread對象構造函數1.1.2 thread類的成員函數1.1.3 線程函數的參數問題1.2 this_thread 命名空間域1.2.1 chrono二、mutex互斥量庫2.1 mutex的四種類型2.1.1 mutex 互斥鎖2.2.2 timed_mutex 時間鎖2.2.3 recursive_muetx 遞歸鎖2.2.…

idea的使用小技巧,個人向

idea的使用小技巧&#xff0c;個人向 一、前言二、過程1、顯示內存的使用情況2、去掉xml文件中的黃色背景3、顯示所有打開文件4、顯示工具欄到菜單下面5、使用JDK8 一、前言 每次重裝idea都需要重新設置一下&#xff0c;這里做個記錄。 這些技巧只是個人感覺的好用 演示用的…

debian及衍生發行版apt包管理常見操作

好的&#xff0c;這是 Debian 及其衍生版&#xff08;如 Ubuntu&#xff09;使用的 apt 包管理器的常用命令速查表。 一點說明&#xff1a;apt 是新一代的命令行工具&#xff0c;整合了 apt-get 和 apt-cache 的常用功能&#xff0c;并提供了更友好的交互體驗。本表主要使用現…