使用当前目录中的源文件创建RPM

时间:2015-08-10 22:33:04

标签: rpm

我有一个源文件program.py我希望打包到RPM。 我还在与program.py相同的目录中有一个.spec文件。

我尝试在.spec文件中执行此操作:

%prep
cp ./program.py $RPM_BUILD_DIR

但这不起作用,因为rpmbuildcd部分之前%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,如果这有所不同)。

2 个答案:

答案 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设置为当前目录比使用命令行标志更简单。