我有一个奇怪的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,root,0755)
%clean
rm -rf $RPM_BUILD_ROOT
%postun
rm -rf /opt/%{name}
也许我错过了什么?不会是第一个大声笑,谢谢
这也是tmp文件输出的内容:
#!/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
答案 0 :(得分:8)
查看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'代替只是'%setup'。
答案 1 :(得分:2)
在您的rpmbuild文件夹中,转到SOURCES
并以这种方式重命名源文件夹:
mypackage-1.0
然后创建tarball:
mypackage-1.0.tar.gz
它应该有用。
在解压归档之后,rpmbuild需要一个名为mypackage-1.0的文件夹,而不是mypackage或mypackage,而不是其他东西。
尊重命名约定。检查指南
答案 2 :(得分:0)
还值得注意的是,某些tarball不会将其自身创建为安装路径的父目录。也就是说,我的tarball有这棵树:
usr
├── bin
│ ├── check_for_incorrect_quotes
│ └── check_for_incorrect_quotes.py
└── lib
└── python2.6
└── site-packages
├── incorrectquotes
│ ├── check_for_incorrect_quotes.py
│ ├── check_for_incorrect_quotes.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ └── test
│ ├── __init__.py
│ └── __init__.pyc
└── IncorrectQuotes-0.2.0-py2.6.egg-info
├── dependency_links.txt
├── entry_points.txt
├── PKG-INFO
├── requires.txt
├── SOURCES.txt
└── top_level.txt
Because this is where it wants to install these packages
要执行此操作,请you can just change setup -n
to setup -c
to create and move to that directory before untarring(您需要使用ctrl + f来表示“创建目录(并更改为目录)”)
TL; DR:setup -n
-> setup -c
可能有帮助