常见开源应用rpm spec构建
常见开源应用rpm spec构建
tomcat
Name: tomcat
Version: 7.0.62
Release: 1%{?dist}
Summary: Apache Tomcat Servlet/JSP Container
License: ASL 2.0
URL: http://tomcat.apache.org/
Source0: apache-tomcat-%{version}.tar.gz
BuildArch: noarch
Requires: java-1.8.0-openjdk
Requires(pre): shadow-utils
%description
Apache Tomcat is an open source software implementation of the Java Servlet and JavaServer Pages technologies.
%prep
%setup -q -n apache-tomcat-%{version}
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/opt/tomcat
cp -r ./* %{buildroot}/opt/tomcat/
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"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/tomcat.pid"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/tomcat
[Install]
WantedBy=multi-user.target
EOF
%pre
getent group tomcat >/dev/null || groupadd -r tomcat
getent passwd tomcat >/dev/null || useradd -r -g tomcat -d /opt/tomcat -s /sbin/nologin tomcat
%post
chown -R tomcat:tomcat /opt/tomcat
chmod -R 755 /opt/tomcat/bin
systemctl daemon-reload
%preun
if [ $1 -eq 0 ]; then
systemctl stop tomcat.service || true
fi
%postun
if [ $1 -eq 0 ]; then
userdel tomcat || true
groupdel tomcat || true
fi
%files
/opt/tomcat/*
/usr/lib/systemd/system/tomcat.service
%changelog
* Thu Mar 20 2025 Your Name <your.email@example.com> - 7.0.62-1
- Initial RPM package for Apache Tomcat 7.0.62
zookeeper
Name: zookeeper
Version: 3.4.12
Release: 1%{?dist}
Summary: Apache ZooKeeper Distributed Coordination Service
License: ASL 2.0
URL: http://zookeeper.apache.org/
Source0: zookeeper-%{version}.tar.gz
BuildArch: noarch
Requires: java-1.8.0-openjdk
Requires(pre): shadow-utils
%description
Apache ZooKeeper is a distributed coordination service for managing large distributed systems.
%prep
%setup -q -n zookeeper-%{version}
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/opt/zookeeper
cp -r ./* %{buildroot}/opt/zookeeper/
mkdir -p %{buildroot}/usr/lib/systemd/system
cat > %{buildroot}/usr/lib/systemd/system/zookeeper.service << 'EOF'
[Unit]
Description=Apache ZooKeeper Server
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="ZOOKEEPER_HOME=/opt/zookeeper"
Environment="ZOO_LOG_DIR=/opt/zookeeper/log"
Environment="ZOO_PID_FILE=/opt/zookeeper/zookeeper.pid"
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
User=zookeeper
Group=zookeeper
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/zookeeper
[Install]
WantedBy=multi-user.target
EOF
mv %{buildroot}/opt/zookeeper/conf/zoo_sample.cfg %{buildroot}/opt/zookeeper/conf/zoo.cfg
mkdir %{buildroot}/opt/zookeeper/log
%pre
getent group zookeeper >/dev/null || groupadd -r zookeeper
getent passwd zookeeper >/dev/null || useradd -r -g zookeeper -d /opt/zookeeper -s /sbin/nologin zookeeper
%post
chown -R zookeeper:zookeeper /opt/zookeeper
chmod -R 755 /opt/zookeeper/bin
systemctl daemon-reload
%preun
if [ $1 -eq 0 ]; then
systemctl stop zookeeper.service || true
fi
%postun
if [ $1 -eq 0 ]; then
userdel zookeeper || true
groupdel zookeeper || true
fi
%files
/opt/zookeeper/*
/usr/lib/systemd/system/zookeeper.service
%changelog
* Thu Mar 20 2025 Your Name <your.email@example.com> - 3.4.12-1
- Initial RPM package for Apache ZooKeeper 3.4.12
kafka
Name: kafka
Version: 0.8.2.1
Release: 1%{?dist}
Summary: Apache Kafka Distributed Streaming Platform
License: ASL 2.0
URL: http://kafka.apache.org/
Source0: kafka_2.10-%{version}.tgz
BuildArch: noarch
Requires: java-1.8.0-openjdk
Requires(pre): shadow-utils
%description
Apache Kafka is a distributed streaming platform used for building real-time data pipelines and streaming apps.
%prep
%setup -q -n kafka_2.10-%{version}
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/opt/kafka
cp -r ./* %{buildroot}/opt/kafka/
mkdir -p %{buildroot}/usr/lib/systemd/system
cat > %{buildroot}/usr/lib/systemd/system/kafka.service << 'EOF'
[Unit]
Description=Apache Kafka Server
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="KAFKA_HOME=/opt/kafka"
Environment="KAFKA_PID_FILE=/opt/kafka/kafka.pid"
ExecStart=/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
User=kafka
Group=kafka
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/kafka
[Install]
WantedBy=multi-user.target
EOF
%pre
getent group kafka >/dev/null || groupadd -r kafka
getent passwd kafka >/dev/null || useradd -r -g kafka -d /opt/kafka -s /sbin/nologin kafka
%post
chown -R kafka:kafka /opt/kafka
chmod -R 755 /opt/kafka/bin
systemctl daemon-reload
%preun
if [ $1 -eq 0 ]; then
systemctl stop kafka.service || true
fi
%postun
if [ $1 -eq 0 ]; then
userdel kafka || true
groupdel kafka || true
fi
%files
/opt/kafka/*
/usr/lib/systemd/system/kafka.service
%changelog
* Thu Mar 20 2025 Your Name <your.email@example.com> - 0.8.2.1-1
- Initial RPM package for Apache Kafka 0.8.2.1
hadoop
%global _enable_debug_package 0
%global debug_package %{nil}
Name: hadoop
Version: 2.6.5
Release: 1%{?dist}
Summary: Apache Hadoop Distributed Processing Framework
License: ASL 2.0
URL: http://hadoop.apache.org/
Source0: hadoop-%{version}.tar.gz
#BuildArch: noarch
Requires: java-1.8.0-openjdk
Requires(pre): shadow-utils
%description
Apache Hadoop is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.
%prep
%setup -q -n hadoop-%{version}
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/opt/hadoop
cp -r ./* %{buildroot}/opt/hadoop/
mkdir -p %{buildroot}/usr/lib/systemd/system
cat > %{buildroot}/usr/lib/systemd/system/hadoop-namenode.service << 'EOF'
[Unit]
Description=Apache Hadoop NameNode
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="HADOOP_HOME=/opt/hadoop"
Environment="HADOOP_PID_DIR=/opt/hadoop/pids"
Environment="HADOOP_LOG_DIR=/opt/hadoop/logs"
ExecStart=/opt/hadoop/bin/hdfs --config /opt/hadoop/etc/hadoop namenode
ExecStop=/opt/hadoop/bin/hdfs --config /opt/hadoop/etc/hadoop namenode -shutdown
User=hadoop
Group=hadoop
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/hadoop
[Install]
WantedBy=multi-user.target
EOF
cat > %{buildroot}/usr/lib/systemd/system/hadoop-datanode.service << 'EOF'
[Unit]
Description=Apache Hadoop DataNode
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="HADOOP_HOME=/opt/hadoop"
Environment="HADOOP_PID_DIR=/opt/hadoop/pids"
Environment="HADOOP_LOG_DIR=/opt/hadoop/logs"
ExecStart=/opt/hadoop/bin/hdfs --config /opt/hadoop/etc/hadoop datanode
ExecStop=/opt/hadoop/bin/hdfs --config /opt/hadoop/etc/hadoop datanode -shutdown
User=hadoop
Group=hadoop
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/hadoop
[Install]
WantedBy=multi-user.target
EOF
cat > %{buildroot}/usr/lib/systemd/system/hadoop-resourcemanager.service << 'EOF'
[Unit]
Description=Apache Hadoop YARN ResourceManager
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="HADOOP_HOME=/opt/hadoop"
Environment="HADOOP_PID_DIR=/opt/hadoop/pids"
Environment="HADOOP_LOG_DIR=/opt/hadoop/logs"
ExecStart=/opt/hadoop/bin/yarn --config /opt/hadoop/etc/hadoop resourcemanager
ExecStop=/opt/hadoop/bin/yarn --config /opt/hadoop/etc/hadoop resourcemanager -stop
User=hadoop
Group=hadoop
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/hadoop
[Install]
WantedBy=multi-user.target
EOF
cat > %{buildroot}/usr/lib/systemd/system/hadoop-nodemanager.service << 'EOF'
[Unit]
Description=Apache Hadoop YARN NodeManager
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="HADOOP_HOME=/opt/hadoop"
Environment="HADOOP_PID_DIR=/opt/hadoop/pids"
Environment="HADOOP_LOG_DIR=/opt/hadoop/logs"
ExecStart=/opt/hadoop/bin/yarn --config /opt/hadoop/etc/hadoop nodemanager
ExecStop=/opt/hadoop/bin/yarn --config /opt/hadoop/etc/hadoop nodemanager -stop
User=hadoop
Group=hadoop
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/hadoop
[Install]
WantedBy=multi-user.target
EOF
mkdir -p %{buildroot}/opt/hadoop/pids %{buildroot}/opt/hadoop/logs
%pre
getent group hadoop >/dev/null || groupadd -r hadoop
getent passwd hadoop >/dev/null || useradd -r -g hadoop -d /opt/hadoop -s /sbin/nologin hadoop
%post
chown -R hadoop:hadoop /opt/hadoop
chmod -R 755 /opt/hadoop/bin
systemctl daemon-reload
%preun
if [ $1 -eq 0 ]; then
systemctl stop hadoop-namenode.service || true
systemctl stop hadoop-datanode.service || true
systemctl stop hadoop-resourcemanager.service || true
systemctl stop hadoop-nodemanager.service || true
fi
%postun
if [ $1 -eq 0 ]; then
userdel hadoop || true
groupdel hadoop || true
fi
%files
/opt/hadoop/*
/usr/lib/systemd/system/hadoop-namenode.service
/usr/lib/systemd/system/hadoop-datanode.service
/usr/lib/systemd/system/hadoop-resourcemanager.service
/usr/lib/systemd/system/hadoop-nodemanager.service
%changelog
* Thu Mar 20 2025 Your Name <your.email@example.com> - 2.6.5-1
- Initial RPM package for Apache Hadoop 2.6.5
hbase
Name: hbase
Version: 1.2.0
Release: 1%{?dist}
Summary: Apache HBase Distributed Big Data Store
License: ASL 2.0
URL: http://hbase.apache.org/
Source0: hbase-%{version}-bin.tar.gz
BuildArch: noarch
Requires: java-1.8.0-openjdk
Requires(pre): shadow-utils
Requires: hadoop, zookeeper
%description
Apache HBase is a distributed, scalable, big data store built on top of Hadoop HDFS.
%prep
%setup -q -n hbase-%{version}
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/opt/hbase
cp -r ./* %{buildroot}/opt/hbase/
mkdir -p %{buildroot}/usr/lib/systemd/system
cat > %{buildroot}/usr/lib/systemd/system/hbase-master.service << 'EOF'
[Unit]
Description=Apache HBase Master
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="HBASE_HOME=/opt/hbase"
Environment="HBASE_PID_DIR=/opt/hbase/pids"
Environment="HBASE_LOG_DIR=/opt/hbase/logs"
ExecStart=/opt/hbase/bin/hbase-daemon.sh --config /opt/hbase/conf start master
ExecStop=/opt/hbase/bin/hbase-daemon.sh --config /opt/hbase/conf stop master
User=hbase
Group=hbase
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/hbase
[Install]
WantedBy=multi-user.target
EOF
cat > %{buildroot}/usr/lib/systemd/system/hbase-regionserver.service << 'EOF'
[Unit]
Description=Apache HBase RegionServer
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr"
Environment="HBASE_HOME=/opt/hbase"
Environment="HBASE_PID_DIR=/opt/hbase/pids"
Environment="HBASE_LOG_DIR=/opt/hbase/logs"
ExecStart=/opt/hbase/bin/hbase-daemon.sh --config /opt/hbase/conf start regionserver
ExecStop=/opt/hbase/bin/hbase-daemon.sh --config /opt/hbase/conf stop regionserver
User=hbase
Group=hbase
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/hbase
[Install]
WantedBy=multi-user.target
EOF
# mv %{buildroot}/opt/hbase/conf/hbase-site.xml.template %{buildroot}/opt/hbase/conf/hbase-site.xml
mkdir -p %{buildroot}/opt/hbase/pids %{buildroot}/opt/hbase/logs
%pre
getent group hbase >/dev/null || groupadd -r hbase
getent passwd hbase >/dev/null || useradd -r -g hbase -d /opt/hbase -s /sbin/nologin hbase
%post
chown -R hbase:hbase /opt/hbase
chmod -R 755 /opt/hbase/bin
systemctl daemon-reload
%preun
if [ $1 -eq 0 ]; then
systemctl stop hbase-master.service || true
systemctl stop hbase-regionserver.service || true
fi
%postun
if [ $1 -eq 0 ]; then
userdel hbase || true
groupdel hbase || true
fi
%files
/opt/hbase/*
/usr/lib/systemd/system/hbase-master.service
/usr/lib/systemd/system/hbase-regionserver.service
%changelog
* Thu Mar 20 2025 Your Name <your.email@example.com> - 1.2.0-1
- Initial RPM package for Apache HBase 1.2.0
mongodb
%global _enable_debug_package 0
%global debug_package %{nil}
Name: mongodb
Version: 7.0.12
Release: 1%{?dist}
Summary: The global cloud database service for modern applications
License: AGPLv3 and zlib and ASL 2.0
URL: http://www.mongodb.org
Source0: mongodb-linux-x86_64-rhel80-%{version}.tgz
ExclusiveArch: x86_64
Requires(pre): shadow-utils
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units
Provides: bundled(wiredtiger) = %{version}
%description
MongoDB is a general purpose, document-based, distributed database built for
modern application developers and for the cloud era. No database makes you
more productive.
%prep
%setup -q -n mongodb-linux-x86_64-rhel80-%{version}
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/bin
mkdir -p %{buildroot}/etc
mkdir -p %{buildroot}/usr/lib/systemd/system
mkdir -p %{buildroot}/usr/share/doc/mongodb-org-server
mkdir -p %{buildroot}/var/lib/mongo
mkdir -p %{buildroot}/var/log/mongodb
mkdir -p %{buildroot}/run/mongodb
cp -p -a bin/* %{buildroot}/usr/bin/
cp -p -a LICENSE-Community.txt %{buildroot}/usr/share/doc/mongodb-org-server/
cp -p -a MPL-2 %{buildroot}/usr/share/doc/mongodb-org-server/
cp -p -a README %{buildroot}/usr/share/doc/mongodb-org-server/
cp -p -a THIRD-PARTY-NOTICES %{buildroot}/usr/share/doc/mongodb-org-server/
cat > %{buildroot}/usr/lib/systemd/system/mongod.service << 'EOF'
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network-online.target
Wants=network-online.target
[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
Environment="MONGODB_CONFIG_OVERRIDE_NOFORK=1"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/bin/mongod $OPTIONS
RuntimeDirectory=mongodb
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for mongod as specified in
# https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings
[Install]
WantedBy=multi-user.target
EOF
cat > %{buildroot}/etc/mongod.conf << 'EOF'
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
storage:
dbPath: /var/lib/mongo
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 127.0.0.1
EOF
%pre
getent group mongod >/dev/null || groupadd -r mongod
getent passwd mongod >/dev/null || useradd -r -g mongod -d /opt/mongodb -s /sbin/nologin mongod
%post
chown -R mongod:mongod /var/lib/mongo
chown -R mongod:mongod /var/log/mongodb
chown -R mongod:mongod /run/mongodb
chmod -R 750 /var/lib/mongo
chmod -R 755 /usr/bin/mongod
chmod -R 755 /usr/bin/mongos
chmod -R 755 /usr/bin/install_compass
systemctl daemon-reload
%preun
if [ $1 -eq 0 ]; then
systemctl stop mongod.service || true
fi
%postun
if [ $1 -eq 0 ]; then
systemctl disable mongod.service || true
if ! systemctl is-enabled mongod.service >/dev/null 2>&1; then
userdel mongod || true
groupdel mongod || true
fi
fi
%files
/usr/bin/*
/etc/mongod.conf
/usr/lib/systemd/system/mongod.service
/usr/share/doc/mongodb-org-server/*
/var/lib/mongo
/var/log/mongodb
/run/mongodb
%changelog
* Sun Mar 20 2025 Your Name <your.email@example.com> - 7.0.12-1
- Initial RPM package for MongoDB 7.0.12 with precompiled binaries
python3
%global _enable_debug_package 0
%global debug_package %{nil}
# 排除特定依赖检测
%global __requires_exclude ^/usr/local/bin/python$
Name: python3
Version: 3.11.12
Release: 1%{?dist}
Summary: Python 3.11 compiled installation
License: Python-2.0
URL: https://www.python.org/
Source0: python3.11.tar.gz
BuildArch: x86_64
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires: zlib
Requires: openssl
Requires: libffi
Requires: bzip2
Requires: ncurses
Requires: sqlite
Requires: readline
Requires: xz
%description
Pre-compiled Python 3.11 installation packaged for RPM deployment.
%prep
%setup -q -c -n python3.11
%install
# 创建目标目录
install -d -m 755 %{buildroot}/usr/local/
# 将编译好的文件复制到buildroot
cp -rpa %{_builddir}/python3.11/* %{buildroot}/usr/local/
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
/usr/local/python3.11
%post
# 可选:更新动态库缓存
/sbin/ldconfig
# 可选:设置环境变量
echo "export PATH=/usr/local/python3.11/bin:\$PATH" > /etc/profile.d/python311.sh
source /etc/profile.d/python311.sh
%postun
# 清理环境变量
rm -f /etc/profile.d/python311.sh
%changelog
* Tue Aug 10 2025 Your Name <your.email@example.com> - 3.11-1
- Initial package for Python 3.11 with precompiled binaries
作者:wanghongwei
版权声明:本作品遵循<CC BY-NC-ND 4.0>版权协议,商业转载请联系作者获得授权,非商业转载请附上原文出处链接及本声明。

浙公网安备 33010602011771号