如果制作一个rpm的安装包

yum install rpmdevtools

使用文件结构rpmdev-setuptree可以在~/rpmbuild/下生成rpm包的制作文件夹。

rpmdev-setuptree
ls -lh ~/rpmbuild/

如果没有安装 rpmdevtools 的话,可以使用 mkdir 命令创建这些文件夹

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
默认位置宏代码名称用途
~/rpmbuild/SPECS%_specdirSpec文件目录保存RPM包配置(.spec)文件
~/rpmbuild/SOURCES%_sourcedir源代码目录保存源码包(如.tar包)和所有patch补丁
~/rpmbuild/BUILD%_builddir构建目录源码包被解压至此,并在该目录的子目录完成编译
~/rpmbuild/BUILDROOT%_buildrootdir最终安装目录保存%install阶段安装的文件
~/rpmbuild/SPECS%_rpmdir标准RPM包目录生成/保存二进制RPM包
~/rpmbuild/RPMS%_srcrpmdir源代码RPM包目录生成/保存源码RPM包(SRPM)

创建一个打包项目

创建spec文件

SPEC文件是用来描述打包过程的文件,通过rpmdev-newspec可以创建一个模版,然后我们基于这个模版来进行修改。

rpmdev-newspec project
project.spec created; type minimal, rpm version >= 4.11.

RPM的宏

# cat /usr/lib/rpm/macros |grep -v '#'
%nil                    %{!?nil}
%_usr                   /usr
%_usrsrc                %{_usr}/src
%_var                   /var
%__7zip                 /usr/bin/7za
%__awk                  gawk
%__bzip2                /usr/bin/bzip2
%__cat                  /usr/bin/cat
%__chgrp                /usr/bin/chgrp
%__chmod                /usr/bin/chmod
%__chown                /usr/bin/chown
%__cp                   /usr/bin/cp
%__cpio                 /usr/bin/cpio
%__file                 /usr/bin/file
%__gpg                  /usr/bin/gpg2
%__grep                 /usr/bin/grep
%__gzip                 /usr/bin/gzip
%__id                   /usr/bin/id
%__id_u                 %{__id} -u
%__install              /usr/bin/install
%__ln_s                 ln -s
%__lrzip                /usr/bin/lrzip
%__lzip                 /usr/bin/lzip
%__lzma                 %__xz --format=lzma
%__xz                   /usr/bin/xz
%__make                 /usr/bin/make
%__mkdir                /usr/bin/mkdir
%__mkdir_p              /usr/bin/mkdir -p
%__mv                   /usr/bin/mv
%__patch                /usr/bin/patch
%__restorecon           /sbin/restorecon
%__rm                   /usr/bin/rm
%__rsh                  /usr/bin/rsh
%__sed                  /usr/bin/sed
%__semodule             /usr/bin/semodule
%__ssh                  /usr/bin/ssh
%__tar                  /usr/bin/tar
%__unzip                /usr/bin/unzip
%__zstd                 /usr/bin/zstd
%__gem                  /usr/bin/gem
%__git                  /usr/bin/git
%__hg                   /usr/bin/hg
%__bzr                  /usr/bin/bzr
%__quilt                /usr/bin/quilt
%__ar                   ar
%__as                   as
%__cc                   gcc
%__cpp                  gcc -E
%__cxx                  g++
%__ld                   /usr/bin/ld
%__nm                   /usr/bin/nm
%__objcopy              /usr/bin/objcopy
%__objdump              /usr/bin/objdump
%__ranlib               ranlib
%__remsh                %{__rsh}
%__strip                /usr/bin/strip
%defined()      %{expand:%%{?%{1}:1}%%{!?%{1}:0}}
%undefined()    %{expand:%%{?%{1}:0}%%{!?%{1}:1}}
%bcond()        %[ (%2)\
    ? "%{expand:%%{!?_without_%{1}:%%global with_%{1} 1}}"\
    : "%{expand:%%{?_with_%{1}:%%global with_%{1} 1}}"\
]
%bcond_with()           %bcond %{1} 0
%bcond_without()        %bcond %{1} 1
%with()         %{expand:%%{?with_%{1}:1}%%{!?with_%{1}:0}}
%without()      %{expand:%%{?with_%{1}:0}%%{!?with_%{1}:1}}
%_rpmconfigdir          %{getconfdir}
%_rpmmacrodir           %{_rpmconfigdir}/macros.d
%_rpmluadir             %{_rpmconfigdir}/lua
%_builddir              %{_topdir}/BUILD
%_buildshell            /bin/sh
%_bzip2bin              %{__bzip2}
%_dbpath                %{_var}/lib/rpm
%_dbpath_rebuild        %{_dbpath}
%_keyringpath           %{_dbpath}/pubkeys/
%__debug_install_post   \
    %{_rpmconfigdir}/find-debuginfo.sh \\\
    %{?_smp_build_ncpus:-j%{_smp_build_ncpus}} \\\
    %{?_missing_build_ids_terminate_build:--strict-build-id} \\\
    %{?_no_recompute_build_ids:-n} \\\
    %{?_include_minidebuginfo:-m} \\\
    %{?_include_gdb_index:-i} \\\
    %{?_unique_build_ids:--build-id-seed "%{VERSION}-%{RELEASE}"} \\\
    %{?_unique_debug_names:--unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
    %{?_unique_debug_srcs:--unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
    %{?_find_debuginfo_dwz_opts} \\\
    %{?_find_debuginfo_opts} \\\
    %{?_find_debuginfo_vendor_opts} \\\
    %{?_debugsource_packages:-S debugsourcefiles.list} \\\
    "%{_builddir}/%{?buildsubdir}"\
%{nil}

%_debuginfo_template \
%package debuginfo\
Summary: Debug information for package %{name}\
Group: Development/Debug\
AutoReq: 0\
AutoProv: 1\
%description debuginfo\
This package provides debug information for package %{name}.\
Debug information is useful when developing applications that use this\
package or when debugging this package.\
%files debuginfo -f debugfiles.list\
%{nil}

%_debugsource_template \
%package debugsource\
Summary: Debug sources for package %{name}\
Group: Development/Debug\
AutoReqProv: 0\
%description debugsource\
This package provides debug sources for package %{name}.\
Debug sources are useful when developing applications that use this\
package or when debugging this package.\
%files debugsource -f debugsourcefiles.list\
%{nil}

%debug_package \
%ifnarch noarch\
%global __debug_package 1\
%_debuginfo_template\
%{?_debugsource_packages:%_debugsource_template}\
%endif\
%{nil}

%_defaultdocdir         %{_datadir}/doc
%_defaultlicensedir     %{_datadir}/licenses
%__global_requires_exclude_from         %{?_docdir:%{_docdir}}
%__global_provides_exclude_from         %{?_docdir:%{_docdir}}
%_gzipbin               %{__gzip}
%_changelog_trimage     0
%_changelog_trimtime    0
%source_date_epoch_from_changelog 0
%use_source_date_epoch_as_buildtime 0
%clamp_mtime_to_source_date_epoch 0
%_rpmdir                %{_topdir}/RPMS
%_rpmfilename           %{_build_name_fmt}
%_sourcedir             %{_topdir}/SOURCES
%_specdir               %{_topdir}/SPECS
%_srcrpmdir             %{_topdir}/SRPMS
%_buildrootdir          %{_topdir}/BUILDROOT
%buildroot              %{_buildrootdir}/%{NAME}-%{VERSION}-%{RELEASE}.%{_arch}
%_tmppath               %{_var}/tmp
%_topdir                %{getenv:HOME}/rpmbuild
%_unzipbin              %{__unzip}
%_install_script_path   /sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
%_install_langs all
%_javadir      %{_datadir}/java
%_javadocdir   %{_datadir}/javadoc
%_query_selector_match  default
%_source_filedigest_algorithm   8
%_binary_filedigest_algorithm   8
%_default_patch_fuzz    0
%_default_patch_flags --no-backup-if-mismatch
%__check_files         %{_rpmconfigdir}/check-files %{buildroot}
%_unpackaged_files_terminate_build      1
%_missing_doc_files_terminate_build     1
%_empty_manifest_terminate_build        1
%_binaries_in_noarch_packages_terminate_build   1
%_invalid_encoding_terminates_build 1
%_wrong_version_format_terminate_build 1
%_disable_source_fetch 1
%_build_id_links compat
%_unique_build_ids      1
%_unique_debug_names    1
%_unique_debug_srcs     1
%_use_internal_dependency_generator     1
%_filter_GLIBC_PRIVATE                  0
%__docdir_path %{_datadir}/doc:%{_datadir}/man:%{_datadir}/info:%{_datadir}/gtk-doc/html:%{_datadir}/gnome/help:%{?_docdir}:%{?_mandir}:%{?_infodir}:%{?_javadocdir}:/usr/doc:/usr/man:/usr/info:/usr/X11R6/man
%__find_provides        %{_rpmconfigdir}/find-provides
%__find_requires        %{_rpmconfigdir}/find-requires
%_fileattrsdir          %{_rpmconfigdir}/fileattrs
%__gpg_reserved_space 4096
%_db_backend          sqlite
%__dbi_other                    mp_mmapsize=128Mb mp_size=1Mb
%_dbi_config                    %{?__dbi_other}
%_dbi_config_Packages           %{?_dbi_config} lockdbfd
%__gpg_sign_cmd                 %{__gpg} \
        gpg --no-verbose --no-armor \
        %{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} \
        --no-secmem-warning \
        %{?_gpg_sign_cmd_extra_args:%{_gpg_sign_cmd_extra_args}} \
        -u "%{_gpg_name}" -sbo %{__signature_filename} %{__plaintext_filename}
%_hkp_keyserver         http://pgp.mit.edu
%_hkp_keyserver_query   %{_hkp_keyserver}:11371/pks/lookup?op=get&search=0x
%_build_name_fmt        %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%__vsflags              0xf0000
%_vsflags_build         %{__vsflags}
%_vsflags_erase         %{__vsflags}
%_vsflags_install       %{__vsflags}
%_vsflags_query         %{__vsflags}
%_vsflags_rebuilddb     0xc0c00
%_vsflags_verify        %{__vsflags}
%_pkgverify_level digest
%_pkgverify_flags 0x0
%_query_all_fmt         %%{nvra}
%_color_output  never
%_rpmlock_path  %{_dbpath}/.rpm.lock
%_isa                   %{?__isa:(%{__isa})}%{!?__isa:%{nil}}
%__arch_install_post    %{nil}
%__os_install_post      %{___build_post}
%_fixperms      %{__chmod} -Rf a+rX,u+w,g-w,o-w
%___build_shell         %{?_buildshell:%{_buildshell}}%{!?_buildshell:/bin/sh}
%___build_args          -e
%___build_cmd           %{?_sudo:%{_sudo} }%{?_remsh:%{_remsh} %{_remhost} }%{?_remsudo:%{_remsudo} }%{?_remchroot:%{_remchroot} %{_remroot} }%{___build_shell} %{___build_args}
%___build_pre   \
  RPM_SOURCE_DIR=\"%{u2p:%{_sourcedir}}\"\
  RPM_BUILD_DIR=\"%{u2p:%{_builddir}}\"\
  RPM_OPT_FLAGS=\"%{optflags}\"\
  RPM_LD_FLAGS=\"%{?build_ldflags}\"\
  RPM_ARCH=\"%{_arch}\"\
  RPM_OS=\"%{_os}\"\
  RPM_BUILD_NCPUS=\"%{_smp_build_ncpus}\"\
  export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_LD_FLAGS RPM_ARCH RPM_OS RPM_BUILD_NCPUS RPM_LD_FLAGS\
  RPM_DOC_DIR=\"%{_docdir}\"\
  export RPM_DOC_DIR\
  RPM_PACKAGE_NAME=\"%{NAME}\"\
  RPM_PACKAGE_VERSION=\"%{VERSION}\"\
  RPM_PACKAGE_RELEASE=\"%{RELEASE}\"\
  export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\
  LANG=C\
  export LANG\
  unset CDPATH DISPLAY ||:\
  %{?buildroot:RPM_BUILD_ROOT=\"%{u2p:%{buildroot}}\"\
  export RPM_BUILD_ROOT}\
  %{?_javaclasspath:CLASSPATH=\"%{_javaclasspath}\"\
  export CLASSPATH}\
  PKG_CONFIG_PATH=\"${PKG_CONFIG_PATH}:%{_libdir}/pkgconfig:%{_datadir}/pkgconfig\"\
  export PKG_CONFIG_PATH\
  CONFIG_SITE=${CONFIG_SITE:-NONE}\
  export CONFIG_SITE\
  \
  %{verbose:set -x}\
  umask 022\
  cd \"%{u2p:%{_builddir}}\"\
%___build_post  \
  RPM_EC=$?\
  for pid in $(jobs -p); do kill -9 ${pid} || continue; done\
  exit ${RPM_EC}\
%{nil}

%{___build_pre}\
%{nil}

%__spec_prep_shell      %{___build_shell}
%__spec_prep_args       %{___build_args}
%__spec_prep_cmd        %{___build_cmd}
%__spec_prep_pre        %{___build_pre}
%__spec_prep_body       %{___build_body}
%__spec_prep_post       %{___build_post}
%{__spec_prep_pre}\
%{nil}

%__spec_buildrequires_shell     %{___build_shell}
%__spec_buildrequires_args      %{___build_args}
%__spec_buildrequires_cmd       %{___build_cmd}
%__spec_buildrequires_pre       %{___build_pre}
%__spec_buildrequires_body      %{___build_body}
%__spec_buildrequires_post      %{___build_post}
%{__spec_buildrequires_pre}\
%{nil}

%__spec_build_shell     %{___build_shell}
%__spec_build_args      %{___build_args}
%__spec_build_cmd       %{___build_cmd}
%__spec_build_pre       %{___build_pre}
%__spec_build_body      %{___build_body}
%__spec_build_post      %{___build_post}
%{__spec_build_pre}\
%{nil}

%__spec_install_shell   %{___build_shell}
%__spec_install_args    %{___build_args}
%__spec_install_cmd     %{___build_cmd}
%__spec_install_pre     %{___build_pre}
%__spec_install_body    %{___build_body}
%__spec_install_post\
%{?__debug_package:%{__debug_install_post}}\
%{__arch_install_post}\
%{__os_install_post}\
%{nil}

%{__spec_install_pre}\
%{nil}

%__spec_check_shell     %{___build_shell}
%__spec_check_args      %{___build_args}
%__spec_check_cmd       %{___build_cmd}
%__spec_check_pre       %{___build_pre}
%__spec_check_body      %{___build_body}
%__spec_check_post      %{___build_post}
%{__spec_check_pre}\
%{nil}

%__spec_clean_shell     %{___build_shell}
%__spec_clean_args      %{___build_args}
%__spec_clean_cmd       %{___build_cmd}
%__spec_clean_pre       %{___build_pre}
%__spec_clean_body      %{___build_body}
%__spec_clean_post      %{___build_post}
%{__spec_clean_pre}\
%{nil}

%__spec_rmbuild_shell   %{___build_shell}
%__spec_rmbuild_args    %{___build_args}
%__spec_rmbuild_cmd     %{___build_cmd}
%__spec_rmbuild_pre     %{___build_pre}
%__spec_rmbuild_body    %{___build_body}
%__spec_rmbuild_post    %{___build_post}
%{__spec_rmbuild_pre}\
%{nil}

%_prefix                /usr
%_exec_prefix           %{_prefix}
%_bindir                %{_exec_prefix}/bin
%_sbindir               %{_exec_prefix}/sbin
%_libexecdir            %{_exec_prefix}/libexec
%_datadir               %{_prefix}/share
%_sysconfdir            /etc
%_sharedstatedir        %{_prefix}/com
%_localstatedir         %{_prefix}/var
%_lib                   lib
%_libdir                %{_exec_prefix}/%{_lib}
%_includedir            %{_prefix}/include
%_infodir               %{_datadir}/info
%_mandir                %{_datadir}/man
%_build                 %{_host}
%_build_alias           %{_host_alias}
%_build_cpu             %{_host_cpu}
%_build_vendor          %{_host_vendor}
%_build_os              %{_host_os}
%_host                  x86_64-redhat-linux-gnu
%_host_alias            x86_64-redhat-linux-gnu%{nil}
%_host_cpu              x86_64
%_host_vendor           redhat
%_host_os               linux
%_target                %{_host}
%_target_alias          %{_host_alias}
%_target_cpu            %{_host_cpu}
%_target_vendor         %{_host_vendor}
%_target_os             %{_host_os}
%build_cflags %{optflags}
%build_cxxflags %{optflags}
%build_fflags %{optflags} %{?_fmoddir:-I%{_fmoddir}}
%set_build_flags \
  CFLAGS="${CFLAGS:-%{?build_cflags}}" ; export CFLAGS ; \
  CXXFLAGS="${CXXFLAGS:-%{?build_cxxflags}}" ; export CXXFLAGS ; \
  FFLAGS="${FFLAGS:-%{?build_fflags}}" ; export FFLAGS ; \
  FCFLAGS="${FCFLAGS:-%{?build_fflags}}" ; export FCFLAGS ; \
  LDFLAGS="${LDFLAGS:-%{?build_ldflags}}" ; export LDFLAGS
%_configure ./configure
%configure \
  %{set_build_flags}; \
  %{_configure} --host=%{_host} --build=%{_build} \\\
        --program-prefix=%{?_program_prefix} \\\
        --disable-dependency-tracking \\\
        --prefix=%{_prefix} \\\
        --exec-prefix=%{_exec_prefix} \\\
        --bindir=%{_bindir} \\\
        --sbindir=%{_sbindir} \\\
        --sysconfdir=%{_sysconfdir} \\\
        --datadir=%{_datadir} \\\
        --includedir=%{_includedir} \\\
        --libdir=%{_libdir} \\\
        --libexecdir=%{_libexecdir} \\\
        --localstatedir=%{_localstatedir} \\\
        --sharedstatedir=%{_sharedstatedir} \\\
        --mandir=%{_mandir} \\\
        --infodir=%{_infodir}
%_make_output_sync %(! %{__make} --version -O >/dev/null 2>&1 || echo -O)
%_make_verbose V=1 VERBOSE=1
%make_build %{__make} %{_make_output_sync} %{?_smp_mflags} %{_make_verbose}
%make_install %{__make} install DESTDIR=%{?buildroot} INSTALL="%{__install} -p"
%makeinstall \
  echo "warning: %%makeinstall is deprecated, try %%make_install instead" 1>&2\
  %{__make} \\\
        prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\
        exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\
        bindir=%{?buildroot:%{buildroot}}%{_bindir} \\\
        sbindir=%{?buildroot:%{buildroot}}%{_sbindir} \\\
        sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir} \\\
        datadir=%{?buildroot:%{buildroot}}%{_datadir} \\\
        includedir=%{?buildroot:%{buildroot}}%{_includedir} \\\
        libdir=%{?buildroot:%{buildroot}}%{_libdir} \\\
        libexecdir=%{?buildroot:%{buildroot}}%{_libexecdir} \\\
        localstatedir=%{?buildroot:%{buildroot}}%{_localstatedir} \\\
        sharedstatedir=%{?buildroot:%{buildroot}}%{_sharedstatedir} \\\
        mandir=%{?buildroot:%{buildroot}}%{_mandir} \\\
        infodir=%{?buildroot:%{buildroot}}%{_infodir} \\\
  install
%patches %{lua: for i, p in ipairs(patches) do print(p.." ") end}
%sources %{lua: for i, s in ipairs(sources) do print(s.." ") end}
%ix86   i386 i486 i586 i686 pentium3 pentium4 athlon geode
%arm32  armv3l armv4b armv4l armv4tl armv5tl armv5tel armv5tejl armv6l armv6hl armv7l armv7hl armv7hnl armv8l armv8hl armv8hnl armv8hcnl
%arm    %{arm32}
%arm64  aarch64
%mips32 mips mipsel mipsr6 mipsr6el
%mips64 mips64 mips64el mips64r6 mips64r6el
%mipseb mips mipsr6 mips64 mips64r6
%mipsel mipsel mipsr6el mips64el mips64r6el
%mips   %{mips32} %{mips64}
%sparc sparc sparcv8 sparcv9 sparcv9v sparc64 sparc64v
%alpha  alpha alphaev56 alphaev6 alphaev67
%power64        ppc64 ppc64p7 ppc64le
%riscv32        riscv32
%riscv64        riscv64
%riscv128       riscv128
%riscv          %{riscv32} %{riscv64} %{riscv128}
%find_lang      %{_rpmconfigdir}/find-lang.sh %{buildroot}
%__urlhelpercmd         /usr/bin/curl
%__urlhelperopts        --silent --show-error --fail --globoff --location -o
%__urlhelper_proxyopts   %{?_httpproxy:--proxy %{_httpproxy}%{?_httpport::%{_httpport}}}%{!?_httpproxy:%{nil}}
%_urlhelper             %{__urlhelpercmd} %{?__urlhelper_localopts} %{?__urlhelper_proxyopts} %{__urlhelperopts}
%__plugindir            %{_libdir}/rpm-plugins
%__transaction_systemd_inhibit  %{__plugindir}/systemd_inhibit.so
%__transaction_selinux          %{__plugindir}/selinux.so
%__transaction_syslog           %{__plugindir}/syslog.so
%__transaction_ima              %{__plugindir}/ima.so
%__transaction_fapolicyd        %{__plugindir}/fapolicyd.so
%__transaction_prioreset        %{__plugindir}/prioreset.so
%__transaction_audit            %{__plugindir}/audit.so
%__scm patch
%__scm_username rpm-build
%__scm_usermail <rpm-build>
%__scm_author %{__scm_username} %{__scm_usermail}
%__scm_setup_patch(q) %{nil}
%__scm_apply_patch(qp:m:)\
%{__patch} %{-p:-p%{-p*}} %{-q:-s} --fuzz=%{_default_patch_fuzz} %{_default_patch_flags}
%__scm_setup_gendiff(q) %{nil}
%__scm_apply_gendiff(qp:m:)\
%{__patch} %{-p:-p%{-p*}} %{-q:-s} --fuzz=%{_default_patch_fuzz} %{_default_patch_flags} -b --suffix ".%{2}"
%__scm_setup_hg(q)\
%{__hg} init %{-q} .\
%{__hg} add %{-q} .\
%{__hg} commit %{-q} --user "%{__scm_author}" -m "%{NAME}-%{VERSION} base"
%__scm_apply_hg(qp:m:)\
%{__hg} import - %{-p:-p%{-p*}} %{-q} -m %{-m*} --user "%{__scm_author}"
%__scm_setup_git(q)\
%{__git} init %{-q}\
%{__git} config user.name "%{__scm_username}"\
%{__git} config user.email "%{__scm_usermail}"\
%{__git} config gc.auto 0\
%{__git} add --force .\
%{__git} commit %{-q} --allow-empty -a\\\
        --author "%{__scm_author}" -m "%{NAME}-%{VERSION} base"
%__scm_apply_git(qp:m:)\
%{__git} apply --index --reject %{-p:-p%{-p*}} -\
%{__git} commit %{-q} -m %{-m*} --author "%{__scm_author}"
%__scm_setup_git_am(q)\
%{expand:%__scm_setup_git %{-q}}
%__scm_apply_git_am(qp:m:)\
%{__git} am --reject %{-q} %{-p:-p%{-p*}}
%__scm_setup_quilt(q) %{nil}
%__scm_apply_quilt(qp:m:)\
%{__quilt} import %{-p:-p%{-p*}} %{1} && %{__quilt} push %{-q}
%__scm_setup_bzr(q)\
%{__bzr} init %{-q}\
%{__bzr} whoami --branch "%{__scm_author}"\
%{__bzr} add .\
%{__bzr} commit %{-q} -m "%{NAME}-%{VERSION} base"
%__scm_apply_bzr(qp:m:)\
%{__patch} %{-p:-p%{-p*}} %{-q:-s}\
%{__bzr} commit %{-q} -m %{-m*}
%apply_patch(qp:m:)\
%{lua:\
local file = rpm.expand("%{1}")\
local num = rpm.expand("%{2}")\
if posix.access(file, "r") then\
    local options = rpm.expand("%{-q} %{-p:-p%{-p*}} %{-m:-m%{-m*}}")\
    local scm_apply = rpm.expand("%__scm_apply_%{__scm}")\
    print(rpm.expand("%{uncompress:"..file.."} | "..scm_apply.." "..options.."  "..file.." "..num.."\\n"))\
else\
    print("echo 'Cannot read "..file.."'; exit 1;".."\\n")\
end}
%autopatch(vp:m:M:)\
%{lua:\
local options = rpm.expand("%{!-v:-q} %{-p:-p%{-p*}} ")\
local low_limit = tonumber(rpm.expand("%{-m:%{-m*}}"))\
local high_limit = tonumber(rpm.expand("%{-M:%{-M*}}"))\
for i, p in ipairs(patches) do\
    local inum = patch_nums[i]\
    if ((not low_limit or inum>=low_limit) and (not high_limit or inum<=high_limit)) \
    then\
        print(rpm.expand("%apply_patch -m %{basename:"..p.."}  "..options..p.." "..i.."\\n")) \
    end\
end}
%autosetup(a:b:cDn:TvNS:p:)\
%setup %{-a} %{-b} %{-c} %{-D} %{-n} %{-T} %{!-v:-q}\
%{-S:%global __scm %{-S*}}\
%{expand:%__scm_setup_%{__scm} %{!-v:-q}}\
%{!-N:%autopatch %{-v} %{-p:-p%{-p*}}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值