常见开源应用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
posted @ 2025-03-22 22:57  wanghongwei-dev  阅读(13)  评论(0)    收藏  举报