Using rpmbuild when source tar directory doesn't correspond to name-version - rpmbuild

I'm trying to build an rpm from source-1.4.3-linux.tgz (that is downloaded so I don't control the name) and the file untars into the directory source-1.4.3-linux. In my source.spec file, I have
Name: source
Version: 1.4.3
So it is probably quite logical that I am getting an error:
cd: source-1.4.3: No such file or directory.
I tried tacking -linux onto the version, but rpmbuild wants only a number there. What do I have to do to tell rpmbuild that the source files are untarred into source-1.4.3-linux?

Just use the setup macro.
setup -n %{name}-%{version}.linux

Here is a simple.spec file that would help you understand the issue. Source tarball contains the following:
$ tar tzf simple-0.tar.gz
simple-0/
simple-0/simple.txt
Spec file:
Summary: Simple SPEC
Name: simple
Version: 0
Release: 1
License: NONE
Group: NONE
URL: NONE
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
" This is Simple "
%prep
%setup -q
%build
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/tmp/
install -m 0644 simple.txt %{buildroot}/tmp/simple.txt
%clean
rm -rf $RPM_BUILD_ROOT
%post
echo "In the Post section of Simple"
%files
%defattr(-,root,root,-)
%doc
/tmp/simple.txt
%changelog
* Wed Sep 12 2018 <iamauser#localdomain> -
- Initial build.

ok I got this working. Maybe a hack but it is working. As per the question my tarball is unconventionally named.
$ tar tzf source-1.4.3-linux-amd64.tar.gz
source-1.4.3-linux-amd64/
source-1.4.3-linux-amd64/simple.txt
in the specfile %prep section instead of using %setup or %autosetup, I unpacked manually and renamed the untarred directory.
Name: source
Version: 1.4.3
Release: 0
Source0: https://example.com/%{name}-%{version}-linux-amd64.tar.bz2
%prep
rm -fr %{name}-%{version}
tar -xjf %{SOURCE0}
mv %{name}-%{version}-linux-amd64 %{name}-%{version}

Related

rpmbuild %install section removes buildroot code. How do I keep rpmbuild from doing this

I am creating a new rpm for a rails app. However the default behavior of the %install section removes the BUILDROOT directory. I assumed that the %install section would install the files from buildroot. I must be doing something wrong because the buildroot is getting removed in the %install section. What is the proper way to do this?
This is the spec file
Summary: Rails APP API (replaces railsapp rpm)
Name: railsapp-api
Version: 6.0.0
Release: 1
License: GPL
URL: http://www.both.org
Group: System
Packager: Tommie Jones
Requires: bash
BuildRoot: ~/rpmbuild/
%description
A rewrite of railsapp from the HTML version to a Http API version
%prep
echo "BUILDROOT = $RPM_BUILD_ROOT"
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/veex/railsapp
unzip /home/realworx/rpmbuild/SOURCES/rwx-master.zip -d $RPM_BUILD_ROOT/usr/local/veex/
pushd $RPM_BUILD_ROOT/usr/local/veex/
rm -rf railsapp
mv rwx-master railsapp
pushd $RPM_BUILD_ROOT/usr/local/veex/railsapp
rm Gemfile.lock
bundle install
PWD=`pwd`
cat > gemrc <<EOGEMRC
gemhome: $PWD/vendor/bundle/ruby/1.8
gempath:
- $PWD/vendor/bundle/ruby/1.8
EOGEMRC
gem --config-file ./gemrc install bundler
# Don't need the gemrc any more...
rm ./gemrc
%files
%attr(0744, root, root) /usr/local/veex/railsapp/*
%install
echo %{buildroot}
echo "HELLO"
%clean
echo NOOP
Below is the log where the %install removes the buildroot.
(%install): /bin/sh -e /var/tmp/rpm-tmp.aX3U0b
+ umask 022
+ cd /home/railsapp-api/rpmbuild/BUILD
+ '[' /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch '!=' / ']'
+ rm -rf /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
++ dirname /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
+ mkdir -p /home/railsapp-api/rpmbuild/BUILDROOT
+ mkdir /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
+ echo /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
/home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch
+ echo HELLO
HELLO
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-ldconfig
/sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip /usr/bin/strip
+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile 1
+ /usr/lib/rpm/brp-python-hardlink
+ PYTHON3=/usr/libexec/platform-python
+ /usr/lib/rpm/redhat/brp-mangle-shebangs
Processing files: railsapp-api-6.0.0-1.noarch
error: File not found: /home/railsapp-api/rpmbuild/BUILDROOT/railsapp-api-6.0.0-1.noarch/usr/local/veex/railsapp/*
How do I keep %install from removing my buildroot?
you are misusing the %prep section. In very short how you should use those sections:
%prep: to extract your sources, apply patches etc.
%build: to compile or build your application (if you need to)
%install: to copy the files into $RPM_BUILD_ROOT
So it is logical that $RPM_BUILD_ROOT is emptied at the start of the %isntall section.
Change your code to extract your zip file in %prep, and use the %install section to put the files inside $RPM_BUILD_ROOT.

How to write a spec file not to run ./configure in CentOS7

I have written spec file just copy some files to some directory on CentOS7.
...(snip)...
%prep
%setup -q
%build
%install
install -m 644 -p $RPM_SOURCE_DIR/some/file \
$RPM_BUILD_ROOT%{_sysconfdir}/file
%clean
rm -rf $RPM_BUILD_ROOT
%files
%doc
%config(noreplace) %{_sysconfdir}/some/file
--------
$ cd rpmbuild
$ rpmbuild SPECS/my.spec
...(snip)...
+ ./configure --build=x86_64 ...
/var/tmp/rpm-tmp.RidAmi: line41: ./configure: No such file or directory
I have not written ./configure ... anywhere.
I don't know why rpmbuild fails.
I found an answer here.
Looks like deleting %build line.
https://www.centos.org/forums/viewtopic.php?t=51254

Why rpmbuild -bb doesnt create rpm binary file?

I'm trying to build a new rpm package for CentOS 6. Using my spec file I'm able to build src.rpm but for some reason I`m not able to create rpm binary file.
This is my spec file:
Name: mc
Version: 4.8.11
Release: 1%{?dist}
Summary: Midnight Commander
Group: System Environment/Base
License: GPLv2
URL: http://ftp.midnight-commander.org/mc-4.8.11.tar.bz2
Source0: mc-4.8.11.tar.bz2
Buildroot: <dir>
BuildRequires: glibc-utils
Requires: sland
%description
This is simply file manager for linux.
%prep
%setup -q
%build
%configure
make %{?_smp_mflags}
%check
make check
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
install -m 755 -d $RPM_BUILD_ROOT/%{_sbindir}
ln -s /home/rpmbuilder/bin/mckonrad $RPM_BUILD_ROOT/%{_sbindir}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%doc
%changelog
rpmlint command showing this:
[rpmbuilder#localhost SPECS]$ rpmlint mc.spec
mc.spec: W: invalid-url Source0: mc-4.8.11.tar.bz2
0 packages and 1 specfiles checked; 0 errors, 1 warnings.
[rpmbuilder#localhost SPECS]$
I executed command:
rpmbuild -bb mc.spec
and I cannot find *.rpm file in RPMS folder.
I suspect that something is wrong with my mc.spec file.
Would be perfect is somebody could help me.
You have no entries in the %files section of your spec file.
Try adding an entry in %files and then rebuilding.

"Package has no %description:" when packaging an rpm

I am packaging a very simple rpm of a redmine plugin, for internal use, and I am stuck with a "Package has no %description:" error.
The .spec has a description and I couldn't find anything relevant on the inet. Here goes my .spec:
codeName: redmine_knowledgebase
Version: 2.2.1
Release: 1%{?dist}
Summary: Redmine plugin to add knowledgbase functionality
Group: redmine-plugins
License: MIT
URL: https://github.com/alexbevi/redmine_knowledgebase
Source0: redmine_knowledgebase.tar.gz
BuildRoot: %(mktemp -ud %{tmp/%{name}-%{version}-%{release})
BuildRequires:
Requires: redmine, ruby, rubygems
%description
Redmine plugin to add knowledgbase functionality
%prep
%setup -q -n redmine_knowledgebase
%build
%install
rm -rf %{buildroot}
install -m 0755 / /var/www/redmine/plugins/
bundle install
rake redmine:plugins:migrate NAME=redmine_knowledgebase
%clean
rm -rf %{buildroot}
%files
%defattr(-,apache,apache,-)
/var/www/redmine/plugins/*
%post
echo " "
echo "This will display after rpm installs the package!"
echo "If the plugin does not work, check the permissions ans ownership of the newly created ../redmine/plugins/redmine_knowledgebase"
rpmlint gives me the following errors:
rpmlint ../SPECS/redmine_knowledgebase.spec
../SPECS/redmine_knowledgebase.spec:5: W: non-standard-group redmine-plugins
../SPECS/redmine_knowledgebase.spec: E: specfile-error error: Package has no %description: redmine_knowledgebase
../SPECS/redmine_knowledgebase.spec: E: specfile-error error: query of specfile ../SPECS/redmine_knowledgebase.spec failed, can't parse
0 packages and 1 specfiles checked; 2 errors, 1 warnings
Apparently "Package has no %description" pops up when an unidentified error occurs.
I solved this by formatting better the .spec:
-I have given a path to source0
-I have provided a BuildRequired package (anything will do, I put gcc in there)
-I have fixed indentation to use only tabs
Perhaps it's because your braces are not balanced?
BuildRoot: %(mktemp -ud %{tmp/%{name}-%{version}-%{release})
Balanced:
BuildRoot: %(mktemp -ud %{tmp}/%{name}-%{version}-%{release})

Newbie rpmbuild error

I'm trying to build my first RPM, but getting an error. My .rpmmarcos files looks like this:
%packager Your Name
%_topdir /home/snort/test
%_tmppath /home/snort/test/tmp
%_smp_mflags -j3
%__arch_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
When I run: "rpmbuild -v -bb SPECS/test.spec" I receive this error:
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd test-1
/home/snort/test/tmp/rpm-tmp.55712: line 36: cd: test-1: No such file or directory
error: Bad exit status from /home/snort/test/tmp/rpm-tmp.55712 (%prep)
File rpm-tmp.55712 ends with this:
cd '/home/snort/test/BUILD'
rm -rf 'test-1'
/bin/gzip -dc '/home/snort/test/SOURCES/test-1.c55.tar.gz' | tar -xvvf -
STATUS=$?
if [ $STATUS -ne 0 ]; then
exit $STATUS
fi
cd 'test-1'
I'm guessing rpmbuild does the "rm -rf 'test-1'" to remove any old/un-needed directories, then it untar's the test-1.c55.tar.gz file, then tries to "cd test-1" but the untar command doesn't make the directory so the scripts errors out. I'm not sure what to do now.
My spec file: more SPECS/test.spec
Name: test
Version: 1
Release: .c55
Summary: Just a Test
Group: MyJunk
License: GPL
URL: http://www.somesite.com
Source0: test-1.c55.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
This is just a test
<br>
%prep
%setup BUILD
%build<br>
%configure<br>
make %{?_smp_mflags}<br>
%install<br>
rm -rf $RPM_BUILD_ROOT<br>
make install DESTDIR=$RPM_BUILD_ROOT
<br>
%clean<br>
rm -rf $RPM_BUILD_ROOT<br>
%files
%defattr(-,root,root,-)
%doc
%changelog
Any ideas?
Thanks for the Help
Gary
RPM (or, to be exact, %setup macro) expects your source tarbal test-1.c55.... to contain the directory test-1.
If the directory there is different, you can fix that by using
%setup -n yourdir
See http://www.rpm.org/max-rpm/s1-rpm-inside-macros.html for more details.

Resources