LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (https://www.linuxquestions.org/questions/linux-software-2/)
-   -   .spec file: creating an RPM: Files don't appear in designated paths (https://www.linuxquestions.org/questions/linux-software-2/spec-file-creating-an-rpm-files-dont-appear-in-designated-paths-465666/)

CPUFreak91 07-19-2006 04:56 PM

.spec file: creating an RPM: Files don't appear in designated paths
 
Code:

Name: foo
Summary:  A bar of foo
Version: 1.0
Release: 334
License: GPL
Group: Amusements/Games
URL: http://foobar.net
Source0: %{name}-%{version}.tar.gz
Source1:start-foo
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root
Requires: python >= 2.4

%description
A bar made up of 100% foo.
%prep
%setup -q -c

%install
rm -fr %{buildroot}
mkdir -p %{buildroot}/usr/share/games
mkdir -p %{buildroot}/usr/games/bin

%clean
rm -fr %{buildroot}

%files
%defattr(-,root,root)

%changelog

I'm trying to create a binary rpm. The data files are supposed to go in /usr/share/games and an execuatable shell script in /usr/games/bin. For some reason I can't find any files in /usr/share/games and I can't find start-foo in /usr/games/bin.
Is there anything missing in my code?

[EDIT]I can't find a solution on Google (probably because I don't know what my problem is :))

unSpawn 07-19-2006 06:01 PM

I think it would be easier for you if you post an actual spec file you work with (can test). If you run rpmbuild it no doubt will spit out informative messages. This rpm will contain no files (not even empty dirs since they're not mentioned in the files section).

CPUFreak91 07-20-2006 01:07 PM

[QUOTE=unSpawn]I think it would be easier for you if you post an actual spec file you work with (can test).

OK. The actual spec file follows:
Code:

Name: bibledave
Summary:  A sidescroller game
Version: 0.6.6
Release: 2
License: GPL
Group: Amusements/Games
URL: http://bibledave.sourceforge.net
Source0: %{name}-%{version}.tar.gz
Source1:%{name}
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root
Requires: python >= 2.4

%description
A sidescroller game written in python involving a crashed pilot, scattered Bibles and a deadline.
This is a community project of ChristianCoders.com -- a site that connects people interested in
Christian video games
%prep
%setup -q -c

%install
rm -fr %{buildroot}
mkdir -p %{buildroot}/usr/share/games
mkdir -p %{buildroot}/usr/games/bin
%clean
rm -fr %{buildroot}

%files
%defattr(-,root,root)

%changelog


Quote:

Originally Posted by unSpawn
If you run rpmbuild it no doubt will spit out informative messages. This rpm will contain no files (not even empty dirs since they're not mentioned in the files section).

I have run rpmbuild but I have not gotten any usefull files.
I also have noticed some people mentioning some rpmrc file. Should I create one?

So, how would I mention the files in the files section?:confused:
Thanks for your help so far :)

unSpawn 07-20-2006 03:31 PM

I have run rpmbuild but I have not gotten any usefull files.
Because the spec file doesn't do nothing yet ;-p


I also have noticed some people mentioning some rpmrc file. Should I create one?
You don't have to create (=copy from default) a ~/.rpmrc. You may want to build RPM's as unprivileged user to keep from poisoning your buildsystem. Set up your own ~/.rpmmacros. It deals with setting your local RPM root (%_topdir ~/somedir) under which you'll have the source, build, temp dirs, etc, etc. For details see the excellent IBM developerWorks: Building without root, patching software, and distributing RPMs. Other docs to read would be the RPM HOWTO and any distribution-specific RPM docs.


So, how would I mention the files in the files section?
Basically what you do first is unpack the tarball (in this case a zipfile so watch your source directive), read the README or INSTALL files, run configure with appropriate args, run make and "make -n install" to see where it all goes to.
0. Download and unpack bibledave and in the bibledave_v0.6.6 dir there's no default configure(.in) (and or Makefile) but a file called "run.sh" which executes the game (python main.py) and when done deletes any compiled files (rm *.pyc -f).
1. Also all files and dirs are used in the current structure so you can't have it installed in /usr/share/games or /usr/games/bin but in /usr/share/games/bibledave or /usr/games/bin/bibledave
2. with a symlink from say /usr/local/bin/bibledave to /usr/share/games/bibledave/run.sh.
3. Decide on which dir and make the run.sh a proper Bash script:
Code:

#!/bin/sh
cd /usr/share/games/bibledave
python main.py
rm *.pyc -f
exit 0

4. Before installing we need to remove the CVS entries, batch files, etc. cd into where you unpacked bibledave and:
Code:

find . -type d -name CVS|xargs -iD rm -rf 'D'
, then
Code:

find . -type f -iname \*.bat -o -iname \*.ico -o -iname \*.nsi|xargs -iF rm -f 'F'
.
5. Make a files listing:
Code:

find . | xargs -iX stat -c "attr(%a,root,root) %n" X|sed -e "s/^a/%\0/g" -e "s/) \./) \/usr\/share\/games\/bibledave/g" > spec_files
and add the contents of spec_files to your spec file.
6. There's some more stuff but I guess it's time to finish off with a spec file, as always, YMMV(VM). Since LQ has a post limit I'll try and post in below. Edit: the spec file is too large. It will be available at this URI for aprox seven days from now.

Please note: the build process and spec file described with all the kludges and workarounds are definately NONSTANDARD. Do not use this unless you are forced to. Also it's better to use well-packaged source tarballs ( bug your maintainers about packaging standards).

bigrigdriver 07-20-2006 05:48 PM

For the most in-depth word on rpm, especially .spec files, see the book Maximum-RPM at the Red Hat website (somewhere under Documentation). You can read it on-line or download it.

CPUFreak91 07-20-2006 10:31 PM

Thanks for the links and getting me this far, but I have a few questions:

Code:

....
 inflating: bibledave_v0.6.6/dave/gettext.bat
  inflating: bibledave_v0.6.6/dave/LGPL-License
  inflating: bibledave_v0.6.6/dave/basegamelevel.py
  inflating: bibledave_v0.6.6/dave/setup.py
  inflating: bibledave_v0.6.6/dave/levelfile.py
  inflating: bibledave_v0.6.6/dave/ChangeLog.txt
+ mv bibledave_v0.6.6 bibledave-0.6.6
+ rm -rf ./bibledave-0.6.6
+ cd /home/therat/rpm/BUILD
+ rm -rf bibledave-0.6.6
+ /usr/bin/unzip -qq /home/therat/rpm/SOURCES/bibledave_v0.6.6.zip
replace dave/CVS/Root? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd bibledave-0.6.6
/var/tmp/rpm-tmp.10768: line 36: cd: bibledave-0.6.6: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.10768 (%prep)

I can't figure out why there is "No such file or directory".

unSpawn 07-21-2006 11:20 AM

+ /usr/bin/unzip -qq /home/therat/rpm/SOURCES/bibledave_v0.6.6.zip
(..)
/var/tmp/rpm-tmp.10768: line 36: cd: bibledave-0.6.6: No such file or directory

"unzip -l /home/therat/rpm/SOURCES/bibledave_v0.6.6.zip" and you'll notice the directoryname is different. That's why I said:
Code:

%prep
# DO THIS MANUALLY:
#cd ${RPM_SOURCE_DIR}
#unzip -d bibledave-0.6.6 bibledave_v0.6.6.zip
#mv bibledave_v0.6.6 bibledave-0.6.6
#tar -czf bibledave-0.6.6.tar.gz bibledave-0.6.6 --remove-files
#rm -rf ./bibledave-0.6.6


CPUFreak91 07-21-2006 11:45 AM

Oops. :) Sorry about that.
Well I fixed a few new errors on my own, but I was wondering why I'm getting a few strange errors:
Code:

... (huge list of duplicate names)
warning: File listed twice: /usr/share/games/bibledave/sounds/yeow.ogg
warning: File listed twice: /usr/share/games/bibledave/sounds/yeow.ogg
warning: File listed twice: /usr/share/games/bibledave/sounds/yeow.wav
warning: File listed twice: /usr/share/games/bibledave/sounds/yeow.wav
Provides: bibledave
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/sh /usr/bin/python python >= 2.4
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/therat/rpm/BUILD/bibledave
error: Installed (but unpackaged) file(s) found:
  /usr/share/games/bibledave/images/villager_3.png
  /usr/share/games/bibledave/pgu/gui/default/button.down.tga
  /usr/share/games/bibledave/pgu/gui/default/button.hover.tga
  /usr/share/games/bibledave/pgu/gui/default/button.normal.tga

I checked the source tar.gz file... these files exist but now I'm stumped. The I can also find all these files listed in the .spec file!

I'll continue to play around with this though. Thanks.

unSpawn 07-21-2006 12:39 PM

Well I fixed a few new errors on my own
I'm sure they are *your* errors because the rpm packaged w/o probs here.


... (huge list of duplicate names)
...well, yeah, OK, except for the duplicate names. But that won't keep rpm from building the package.


error: Installed (but unpackaged) file(s) found:
Sorry, you must have changed something because the rpm packaged w/o that specific prob here. IOW: find the differences.

BTW, are you going to be the rpm maintainer for that app?

CPUFreak91 07-21-2006 01:04 PM

Quote:

Originally Posted by unSpawn
Well I fixed a few new errors on my own
I'm sure they are *your* errors because the rpm packaged w/o probs here.

Sorry typo. Yes they are my errors.


Quote:

BTW, are you going to be the rpm maintainer for that app?
Considering how we have not been able to get any packager for linux packages, I guess that does make me the the RPM maintainer.

CPUFreak91 07-21-2006 02:34 PM

Strange. I've started from the beginning, following your instructions to the letter and I come with errors (yes again :() This one feels familiar but I can't seem to solve it:
Code:

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.96539
+ umask 022
+ cd /home/therat/rpm/BUILD
+ cd /home/therat/rpm/BUILD
+ rm -rf bibledave-0.6.6
+ /bin/gzip -dc /home/therat/rpm/SOURCES/bibledave-0.6.6.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd bibledave-0.6.6
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.37510
+ umask 022
+ cd /home/therat/rpm/BUILD
+ cd bibledave-0.6.6
+ find . -type d -name CVS
+ xargs -iD rm -rf D
+ find . -type f -iname '*.bat' -o -iname '*.ico' -o -iname '*.nsi'
+ xargs -iF rm -f F
+ find . -type d
+ xargs -iX stat -c 'mkdir -p ${RPM_BUILD_ROOT}%n' X
+ sed -e 's/}\./}\/usr\/share\/games\/bibledave/g'
+ echo 'mkdir -p ${RPM_BUILD_ROOT}/usr/local/bin'
+ find . -type f
+ egrep -ve '(installer.sh|SF.Comic.Script)'
+ xargs -iX stat -c 'install %n ${RPM_BUILD_ROOT}%n' X
+ sed -e 's/}\./}\/usr\/share\/games\/bibledave/g'
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.79485
+ umask 022
+ cd /home/therat/rpm/BUILD
+ cd bibledave-0.6.6
+ cat
+ sh ./installer.sh
+ rm -f ./installer.sh
+ install -m 0755 bibledave.x /home/therat/rpm/BUILD/bibledave/usr/local/bin/bibledave
+ install 'SF Comic Script.ttf' /home/therat/rpm/BUILD/bibledave/usr/share/games/bibledave
install: cannot stat `SF Comic Script.ttf': No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.79485 (%install)

I'll go over what I did. I copied your spec file to ~/bibledave.spec, Downloaded bibledave_v0.6.6.zip from SF.net, and unzipped it. Renamed the folder to bibledave-0.6.6. Tar'd and gziped the folder. Placed bibledave-0.6.6.tar.gz in ~/rpm/SOURCES. Then I ran rpmbuild -bb ~/bibledave.spec and got this error. Was there something I missed?

unSpawn 07-22-2006 05:18 AM

Let's just replace the install line with:
Code:

find ${RPM_BUILD_ROOT} -iname SF\*.ttf"|while read t; do
install "${t}" ${RPM_BUILD_ROOT}/usr/share/games/bibledave
done

* BTW, since you're the maintainer I think you would benefit from making a script that rearranges tarball contents (or downloads CVS), makes the spec file and builds the rpm once you get the hang of building an rpm. If you're interested in doing that we could build a script in this thread once all probs are fixed.

CPUFreak91 07-28-2006 09:57 AM

When I swapped
Code:

install "SF Comic Script.ttf" ${RPM_BUILD_ROOT}/usr/share/games/bibledave
for
Code:

find ${RPM_BUILD_ROOT} -iname SF\*.ttf"|while read t; do
install "${t}" ${RPM_BUILD_ROOT}/usr/share/games/bibledave
done

I got this error:
Code:

Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.67919
+ umask 022
+ cd /home/therat/rpm/BUILD
+ cd bibledave-0.6.6
+ cat
+ sh ./installer.sh
+ rm -f ./installer.sh
+ install -m 0755 bibledave.x /home/therat/rpm/BUILD/bibledave/usr/local/bin/bibledave
/var/tmp/rpm-tmp.67919: line 37: unexpected EOF while looking for matching `"'
error: Bad exit status from /var/tmp/rpm-tmp.67919 (%install)

Any idea what might have cause this?

Quote:

Originally Posted by unSpawn
* BTW, since you're the maintainer I think you would benefit from making a script that rearranges tarball contents (or downloads CVS), makes the spec file and builds the rpm once you get the hang of building an rpm. If you're interested in doing that we could build a script in this thread once all probs are fixed.

Yes, thanks, I'm interested :)

CPUFreak91 07-28-2006 10:01 AM

Oh, nvm, I removed the quote after -iname SF\*.ttf" that was causing the problem.

But now I'm at another obstacle. rpmbuild stops and displays this message:
Code:

Installed (but unpackaged) file(s) found:
  /usr/share/games/bibledave/images/villager_3.png
  /usr/share/games/bibledave/pgu/gui/default/button.down.tga
  /usr/share/games/bibledave/pgu/gui/default/button.hover.tga
  /usr/share/games/bibledave/pgu/gui/default/button.normal.tga


CPUFreak91 07-28-2006 10:03 AM

Oh, nvm, I removed the quote after -iname SF\*.ttf" that was causing the problem.

But now I'm at another obstacle. rpmbuild stops and displays this message:
Code:

Installed (but unpackaged) file(s) found:
  /usr/share/games/bibledave/images/villager_3.png
  /usr/share/games/bibledave/pgu/gui/default/button.down.tga
  /usr/share/games/bibledave/pgu/gui/default/button.hover.tga
  /usr/share/games/bibledave/pgu/gui/default/button.normal.tga


unSpawn 08-01-2006 07:05 AM

Installed (but unpackaged) file(s) found:
Reference then in the %files section.

Now lets try to build you a script that will get rid of all of this. What I would like you to do is attach your most recent .spec file by email, and also give the location of the source tarball and how you download it if it's not a browser (CVS etc).

CPUFreak91 08-01-2006 09:45 PM

Quote:

Originally Posted by unSpawn
Installed (but unpackaged) file(s) found:
Reference then in the %files section.

They are.

Quote:

Now lets try to build you a script that will get rid of all of this. What I would like you to do is attach your most recent .spec file by email, and also give the location of the source tarball and how you download it if it's not a browser (CVS etc).
Ok. Will do.

unSpawn 08-03-2006 07:37 AM

Here's your package...
 
Code:

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
jwAoAAA=

Save as "bibledave-files.tgz.b64" in the directory where your RPM sources are, "openssl enc -d -base64 -in ./bibledave-files.tgz.b64 -out ./bibledave-files.tgz", unpack and read the top of bibledave_build_spec.sh.


Good luck!

CPUFreak91 08-03-2006 09:43 AM

It works! Thanks!


All times are GMT -5. The time now is 04:13 AM.