我有一个奇怪的RPM问题,我是新手,所以请耐心等待…我创建了spec文件,当我运行构建时,我收到一个错误:
/var/tmp/rpm-tmp.ajKra4:第36行:cd:hero-01:没有这样的文件或目录
错误:来自/var/tmp/rpm-tmp.ajKra4的错误退出状态(%prep)
然后我检查那个临时文件,它正在尝试将CD发送到一个不存在的目录.它应该在spec文件中创建吗?如果有的话?
这是我的spec文件:
Summary: Install Hero Name: hero Version: 01 Release: 1 Group: Billing reporting Source: %{name}-%{version}.tar.gz License: SLA %description Hero billing reports system %prep rm -rf %{_topdir}/BUILD/* %setup %install mkdir -p /opt/%{name} cp -r * /opt/%{name} %post find /opt/%{name} -type d -exec chmod 755 {} \; find /opt/%{name} -type f -exec chmod 644 {} \; chmod -R 755 /opt/%{name}/bin %files /opt/%{name} %defattr(-,root,0755) %clean rm -rf $RPM_BUILD_ROOT %postun rm -rf /opt/%{name}
也许我错过了什么?不会是第一个大声笑,谢谢
#!/bin/sh RPM_SOURCE_DIR="/root/rpmbuild/SOURCES" RPM_BUILD_DIR="/root/rpmbuild/BUILD" RPM_OPT_FLAGS="-O2 -g" RPM_ARCH="x86_64" RPM_OS="linux" export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS RPM_DOC_DIR="/usr/share/doc" export RPM_DOC_DIR RPM_PACKAGE_NAME="hero" RPM_PACKAGE_VERSION="01" RPM_PACKAGE_RELEASE="1" export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE LANG=C export LANG unset CDPATH DISPLAY ||: RPM_BUILD_ROOT="/root/rpmbuild/BUILDROOT/hero-01-1.x86_64" export RPM_BUILD_ROOT PKG_CONFIG_PATH="/usr/lib64/pkgconfig:/usr/share/pkgconfig" export PKG_CONFIG_PATH set -x umask 022 cd "/root/rpmbuild/BUILD" rm -rf /root/rpmbuild/BUILD/* cd '/root/rpmbuild/BUILD' rm -rf 'hero-01' /usr/bin/gzip -dc '/root/rpmbuild/SOURCES/hero-01.tar.gz' | /bin/tar -xvvf - STATUS=$? if [ $STATUS -ne 0 ]; then exit $STATUS fi cd 'hero-01' /bin/chmod -Rf a+rX,u+w,g-w,o-w . exit 0
查看
http://www.rpm.org/max-rpm/s1-rpm-inside-macros.html,特别是“-n – 设置构建目录的名称”部分.
%setup宏期望在解开tar.gz后,会有一个hero-01目录可用,但你的hero-01.tar.gz可能会创建一些其他目录名,可能是名称中没有版本的名称.
因此,例如,如果在解除后的/ root / rpmbuild / BUILD中有一个’hero’目录而不是’hero-01’目录,那么更新spec文件以使用’%setup -n hero’而不是’ %建立’.