In regard to: Rpmbuild question., Jim Lynch said (at 11:32am on May 4, 2012):
Here's the %files section of the spec file:
%files
%defattr(-,root,root)
/usr/local/bin/logpoll
/etc/cron.daily/logpoll_cron
/etc/cron.d/logpoll_cmd
When I do a rpmbuild -bb logpoll.spec
I get a bunch of messages, "file not found" that reference (for example)
rpmbuild -bb logpoll.spec
Processing files: logpoll-1-62.x86_64
error: File not found:
/home/jim/rpmbuild/BUILDROOT/logpoll-1-62.x86_64/usr/local/bin/logpoll
error: File not found:
/home/jim/rpmbuild/BUILDROOT/logpoll-1-62.x86_64/etc/cron.daily/logpoll_cron
error: File not found:
/home/jim/rpmbuild/BUILDROOT/logpoll-1-62.x86_64/etc/cron.d/logpoll_cmd
I'm guessing something in the configuration changed. I tried rpmbuild
--buildroot=/ -bb logpoll.spec
and
rpmbuild --buildroot='' -bb logpoll.spec
But it complained that the buildroot can't be /.
Yeah, don't do that. With some specs it would be extremely dangerous,
especially if you build packages as root (don't do *that*, either).
I'm all for having software that works the way we want it to work, but
in this case RPM really is encouraging good habits from packagers.
In other words, don't fight it.
What you want to do is update your %install section, so that rather than
install your files into the real, final destination, you instead install
those files into the buildroot, for packaging.
How you do that depends on what you're packaging.
- If you're packaging some piece of opensource software that is configured
and built via GNU autotools, then the Makefile *likely* supports
setting DESTDIR at install time. In other words, nothing changes in
your %build (you run configure, make, and make check normally), but
your %install changes from
make install
to
make install DESTDIR=$RPM_BUILD_ROOT
Sometimes packages don't work *quite* right with DESTDIR installs,
perhaps they need you to pre-create the install hierarchy (.e.g.
/usr/local/bin, /etc/cron.d, etc. *under* your setting for buildroot)
or they have a custom "install-data" rule that hasn't been written to
support DESTDIR. These are usually pretty easy to fix or work around.
- If you're packaging your own software and it uses a Makefile with
an "install" target, you just need to modify your Makefile so that
somewhere in the file you have
DESTDIR=
(i.e. DESTDIR is blank/undefined most of the time) and then you need
to modify the install target so that each destination directory listed
in the install target is prefixed with $(DESTDIR). In other words
install: foo bar baz.conf
cp -p src/foo /usr/local/bin/foo
cp -p data/bar /usr/local/share/bar
cp -p etc/baz.conf /etc/foo/baz.conf
becomes
install: foo bar baz.conf
cp -p src/foo $(DESTDIR)/usr/local/bin/foo
cp -p data/bar $(DESTDIR)/usr/local/share/bar
cp -p etc/baz.conf $(DESTDIR)/etc/foo/baz.conf
Better yet, you fix your install target so that it also depends on
all of the destination directories being present (and a target creates
them if they're not).
- If your %install just uses cp or install directly (no Makefile), then
just modify the commands so that each destination directory is prefixed
with $RPM_BUILD_ROOT.
With most packages, it's relatively straightforward to get them to install
using a buildroot. The trickiest situation I typically run into is with
libtool libraries that I'm packaging where the same ABI version is
*already* installed on the system. Everything else is easy to work
around.
Good luck,
Tim
--
Tim Mooney Tim.Mooney@xxxxxxxx
Enterprise Computing & Infrastructure 701-231-1076 (Voice)
Room 242-J6, IACC Building 701-231-8541 (Fax)
North Dakota State University, Fargo, ND 58105-5164
_______________________________________________
Rpm-list mailing list
Rpm-list@xxxxxxxxxxxxx
http://lists.rpm.org/mailman/listinfo/rpm-list