rpm包spec文件模板及rpm相关

模板一

Name: ymdial

Version: @VERSION@

Release: @RELEASE@%{dist}

Summary: YAMU ymdial

Group: Applications/Internet

License: GPL

URL: http://www.yamutech.com

Source0: ymdial-%{version}.tar.gz

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}

%description

YAMU ymdial

%prep

%setup -q -n ymdial-%{version}

%build

#make %{?_smp_mflags}

make

%install

rm -rf %{buildroot}

mkdir -p %{buildroot}/%{_bindir}

mkdir -p %{buildroot}/etc/

mkdir -p %{buildroot}/etc/init.d

mkdir -p %{buildroot}/var/log/ymdial

install -m 755 ymdial %{buildroot}/%{_bindir}/ymdial

install -m 755 config/ymdial.ini  %{buildroot}/etc/

install -m 755 config/ymdiald  %{buildroot}/etc/init.d/


%clean

rm -rf %{buildroot}

%post

if [ "$1" = "1" ]

then

    chkconfig --add ymdiald

fi

%files

%defattr(-,root,root,-)

%{_bindir}/ymdial

/etc/ymdial.ini

%config/etc/ymdial.ini

/var/log/ymdial/

/etc/init.d/ymdiald

%preun

if [ "$1" = "0" ]

then

    chkconfig --del ymdiald

fi

%changelog

参考:

https://www.cnblogs.com/xinyuyuanm/p/3212477.html


模板二

%define os .centos

Summary: YAMU high performance dns resolver

Name: yrdns

Version: @VERSION@

Release: @RELEASE@%{dist}

License: GPL

Packager: yamu

Vendor: yamutech dist-repo

Url: http://www.yamutech.com

Source: yrdns-%{version}.tar.gz

Group: Applications/Internet

#BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}

#Source1:yrdns.sysconfig

Source2:yrdnsd.service

Source3:yrdnsd.systemd

%description

YAMU high performance dns resolver

%prep

%setup -q -n yrdns-%{version}

# %%configure

%build

# %%{__make} CFLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags}

%{__make} all

%define yrdns_conf %{_sysconfdir}/yrdns.conf

%pre

if [ -f %{yrdns_conf} ];then mv %{yrdns_conf}  %{yrdns_conf}.old;fi

%install

rm -rf %{buildroot}

mkdir -p %{buildroot}

mkdir -p ${RPM_BUILD_ROOT}/run/yrdns

mkdir -p ${RPM_BUILD_ROOT}/var/yrdns/{log,data}

mkdir -p ${RPM_BUILD_ROOT}/var/run/yrdns

mkdir -p %{buildroot}%{_libdir}/yrdns/gen-py/yrdns

mkdir -p ${RPM_BUILD_ROOT}/var/named/seckeys

mkdir -p ${RPM_BUILD_ROOT}/var/named/dsset

%{__make} BUILD_PATH=%{buildroot} install

%if "%{?dist}" == ".el6"

mkdir -p ${RPM_BUILD_ROOT}/etc/init.d/

install -m 644 %{SOURCE2} ${RPM_BUILD_ROOT}/etc/init.d/yrdnsd

%endif

%if "%{?dist}" == ".el7.centos"

mkdir -p ${RPM_BUILD_ROOT}%{_unitdir}

install -m 644 %{SOURCE3} ${RPM_BUILD_ROOT}%{_unitdir}/yrdnsd.service

%endif

install -m 644 app/gen-py/*.py %{buildroot}%{_libdir}/yrdns/gen-py/

install -m 644 app/gen-py/yrdns/*.py %{buildroot}%{_libdir}/yrdns/gen-py/yrdns/

%clean

rm -rf ${RPM_BUILD_ROOT}

%post

%if "%{?dist}" == ".el7.centos"

%systemd_post yrdnsd.service

%endif

%if "%{?dist}" == ".el6"

if [ "$1" = "1" ]

then

chkconfig --add yrdnsd

fi

%endif

mv %{yrdns_conf}  %{yrdns_conf}.new

if [ -f %{yrdns_conf}.old ];then mv %{yrdns_conf}.old  %{yrdns_conf};else mv %{yrdns_conf}.new %{yrdns_conf};fi

%files

%defattr(-,root,root,-)

%{_bindir}/yrdns

%{_bindir}/yrdns_stat

%{_bindir}/yrdnscli.py

%{_bindir}/zoneal

%{_bindir}/zonexfr

%defattr(664,root,root,-)

%{_libdir}/yrdns/

%{_sysconfdir}/yrdns.conf

%{_var}/yrdns/root.ca

%{_var}/yrdns/dnssec.key

%{_var}/yrdns/dnstunnelDetect.ini

%{_var}/yrdns/log

%{_var}/yrdns/data

%{_var}/run/yrdns

%dir /var/named/seckeys

%defattr(755,root,root,-)

%dir /var/named/dsset

%defattr(755,root,root,-)

%dir /run/yrdns

%defattr(755,root,root,-)

%if "%{?dist}" == ".el6"

%{_sysconfdir}/init.d/yrdnsd

%endif

%if "%{?dist}" == ".el7.centos"

%{_unitdir}/yrdnsd.service

%endif

%postun

%if "%{?dist}" == ".el7.centos"

%systemd_postun_with_restart yrdnsd.service

%endif

%preun

%if "%{?dist}" == ".el6"

if [ "$1" = "0" ]

then

chkconfig --del yrdnsd

fi

%endif

%if "%{?dist}" == ".el7.centos"

%systemd_preun yrdnsd.service

%endif

在rpmbuild -ba时,遇到如下错误:

*** ERROR: No build ID note found in /home/wuyang/rpmbuild/BUILDROOT/******

error: Bad exit status from /var/tmp/rpm-tmp.BPd1OI (%install)

解决方法是在.spec文件中任意位置添加如下参数:

%define __debug_install_post   \

   %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\

%{nil}

重新打包,即可。

makefile模板

TGT=ymdial

SRCS=$(wildcard ./src/*.cpp)

LIBRAYS= -lrt -lpthread -ldl -lz -lresolv -lcrypto -lssl -lnetsnmp ./lib/*.a

COMPILE_FLAGS= -g -W -O2 -DHAVE_NETINET_IN_H -I./include -I./clib/include -I/usr/include/openssl

CC=g++

all:$(TGT)

    @echo Generation target!   

$(TGT):$(SRCS:.cpp=.o)

    $(CC) -o $@ $^ $(LIBRAYS) $(COMPILE_FLAGS)

%.o : %.cpp

    $(CC) -c $(COMPILE_FLAGS) $< -o $@

.PHONY: clean rpmclean

clean:

    rm -rf $(TGT) $(SRCS:.cpp=.o)

RPM_VERSION = $(shell sed -ne 's/\#define\(\ \)\{1,\}VERSION\(\ \)\{1,\}\"\(.*\)\"/\3/p' ./include/version.h)

COMMIT = $(shell git rev-list HEAD |head -1|cut -c 1-6)

RPM_RELEASE = edns_dial

RPM_TOP_DIR = $(shell rpm -E %{_topdir})

PRJHOME = $(shell pwd)

rpm:

    @echo [RPM] ; \

        sed -e "s/@VERSION@/$(RPM_VERSION)/g" -e "s/@RELEASE@/$(RPM_RELEASE)/g" $(TGT).spec.tmp > ${RPM_TOP_DIR}/SPECS/$(TGT).spec ; \

        cp -a -r ${PRJHOME} /tmp/$(TGT)-$(RPM_VERSION) ; \

        cd /tmp ; \

        tar zcvf $(RPM_TOP_DIR)/SOURCES/$(TGT)-$(RPM_VERSION).tar.gz $(TGT)-$(RPM_VERSION) ; \

        rm -rf $(TGT)-$(RPM_VERSION) ; \

        rpmbuild -bb $(RPM_TOP_DIR)/SPECS/$(TGT).spec ; \

rpmclean: 

    cp -r ~/rpmbuild/RPMS/x86_64/$(TGT)*$(RPM_VERSION)* ./ 

    rm -rf ~/rpmbuild/SOURCES/$(TGT)* \

    ~/rpmbuild/BUILD/$(TGT)* \

    ~/rpmbuild/RPMS/x86_64/$(TGT)* \

    ~/rpmbuild/SPEC/$(TGT)*

一次卸载所有drmsd相关的包

rpm -qa | grep drmsd | xargs rpm -e --nodeps

rpm解包

rpm2cpio xxx.rpm | cpio -div

你可能感兴趣的:(rpm包spec文件模板及rpm相关)