我有一个源文件program.py
我希望打包到RPM。
我还在与program.py
相同的目录中有一个.spec文件。
我尝试在.spec文件中执行此操作:
%prep
cp ./program.py $RPM_BUILD_DIR
但这不起作用,因为rpmbuild
在cd
部分之前%prep
执行了此操作:
% rpm build program.spec
+ umask 022
+ cd /root/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cp ./program.py /root/rpmbuild/BUILD
cp: cannot stat `./program.py': No such file or directory
请注意,我无法硬编码.spec文件中源.py
文件的路径,因为它在源代码控制下(git,如果这有所不同)。
答案 0 :(得分:1)
yum install mock
mock -r fedora-22-x86_64 --scm-enable --scm-option method=git \
--scm-option package=your_package --scm-option git_get=set \
--scm-option spec=your_package.spec --scm-option branch=master \
--scm-option write_tar=True --scm-option \
git_get='git clone git@git_ip_address:SCM_PKG.git SCM_PKG'
这将从你的git(使用git-archive)创建tar.gz文件,它将根据Source0标签命名。 在%prep部分中,您将被更改为将此存档解压缩的目录。
有关详细信息,请参阅https://fedoraproject.org/wiki/Projects/Mock/Plugin/Scm
修改强> 如果你不想做额外的结账,你只需要自己创建tar.gz文件(git archive是你的朋友)。并将其作为Source0
列入规范然后你做
%prep
%setup -q
这将解压缩该tar.gz文件并更改为该解压缩树的根目录并更改为%name目录。有关%设置选项的更多信息,请访问:http://www.rpm.org/max-rpm/s1-rpm-inside-macros.html
然后你应该能够做到:
%install
install -d %{buildroot}%{python3_sitelib}/program
cp -a program.py %{buildroot}%{python3_sitelib}/program/program.py
请注意,存在程序“tito”,这应该简化这些步骤(创建存档,碰撞版本......):https://github.com/dgoodwin/tito
你可以看到我的旧博文,我会详细介绍: http://miroslav.suchy.cz/blog/archives/2013/12/17/how_to_create_new_release_of_rpm_package_in_5_seconds/
答案 1 :(得分:0)
这是我从当前目录中复制的内容:
Source: %{expand:%%(pwd)}
%prep
# clean out old files
find . -mindepth 1 -delete
cp -af %{SOURCEURL0}/. .
让rpmbuild自动将源URL设置为当前目录比使用命令行标志更简单。