RPMBUILD //SOURCES - rpmbuild

I'm trying to build a RPM for barnyard2-1.9, but when I attempt it I receive this error. These are the last few lines of the rpmbuild output:
+ /usr/bin/install -d -p /home/snort/rpm/barnyard2-1.9/tmp/barnyard2-1.9-root/usr/share/doc/barnyard2-1.9/contrib
+ /usr/bin/install -d -p /home/snort/rpm/barnyard2-1.9/tmp/barnyard2-1.9-root/usr/share/man/man8
+ /usr/bin/install -d -p /home/snort/rpm/barnyard2-1.9/tmp/barnyard2-1.9-root/usr/share/doc/barnyard2-1.9/doc
+ /usr/bin/install -m 644 etc/barnyard2.conf /home/snort/rpm/barnyard2-1.9/tmp/barnyard2-1.9-root/etc/snort/
+ /usr/bin/install -m 644 /home/snort/rpm/barnyard2-1.9//SOURCES/barnyard2.config /home/snort/rpm/barnyard2-1.9/tmp/barnyard2-1.9-root/etc/sysconfig/barnyard2
/usr/bin/install: cannot stat `/home/snort/rpm/barnyard2-1.9//SOURCES/barnyard2.config': No such file or directory
error: Bad exit status from /home/snort/rpm/barnyard2-1.9/tmp/rpm-tmp.66176 (%install)
RPM build errors:
Bad exit status from /home/snort/rpm/barnyard2-1.9/tmp/rpm-tmp.66176 (%install)
I'm not sure where it's getting the "//" in "/home/snort/rpm/barnyard2-1.9//SOURCES/barnyard2.config" line.
Here are the top few lines from rpm-tmp.66176 file:
RPM_SOURCE_DIR="/home/snort/rpm/barnyard2-1.9//SOURCES"
RPM_BUILD_DIR="/home/snort/rpm/barnyard2-1.9//BUILD"
RPM_OPT_FLAGS="-O2 -g -m64 -mtune=generic"
RPM_ARCH="x86_64"
RPM_OS="linux"
export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS
RPM_DOC_DIR="/usr/share/doc"
export RPM_DOC_DIR
RPM_PACKAGE_NAME="barnyard2"
RPM_PACKAGE_VERSION="1.9"
RPM_PACKAGE_RELEASE="1"
export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE
RPM_BUILD_ROOT="/home/snort/rpm/barnyard2-1.9/tmp/barnyard2-1.9-root"
export RPM_BUILD_ROOT
PKG_CONFIG_PATH="/usr/lib64/pkgconfig:/usr/share/pkgconfig"
export PKG_CONFIG_PATH
set -x
umask 022
cd "/home/snort/rpm/barnyard2-1.9//BUILD"
Any ideas?

I got it.
In my .rpmmacros file, I had:
%_topdir /home/snort/rpm/barnyard2-1.9/
The last / caused it. I'm not sure how RPM_SOURCE_DIR and %_topdir got connected, but whatever. It's working now.

Related

How to skip elf checks when packing AppImage?

I have an AppImage file and want to package it in an rpm package.
Here is my .spec file:
%prep
%clean
rm -rf $RPM_BUILD_ROOT
%install
mkdir -p $RPM_BUILD_ROOT/opt/Movavi/
cp ~/RPM/SOURCES/MyProduct.AppImage $RPM_BUILD_ROOT/opt/MyCompany/
%files
# %doc
/opt/MyCompany/MyProduct.AppImage
When i call rpmbuild -ba ~/RPM/SPECS/MyProduct.spec it throws an error on ELF validation step
Whole output:
Executing(%prep): /bin/sh -e /tmp/rpm-tmp.71228
+ umask 022
+ /bin/mkdir -p /home/user/RPM/BUILD
+ cd /home/user/RPM/BUILD
+ exit 0
Executing(%install): /bin/sh -e /tmp/rpm-tmp.95497
+ umask 022
+ /bin/mkdir -p /home/user/RPM/BUILD
+ cd /home/user/RPM/BUILD
+ /bin/chmod -Rf u+rwX -- /tmp/MyProduct-buildroot
+ /bin/rm -rf -- /tmp/MyProduct-buildroot
+ mkdir -p /tmp/MyProduct-buildroot/opt/MyCompany/
+ cp /home/user/RPM/SOURCES/MyProduct.AppImage /tmp/MyProduct-buildroot/opt/MyCompany/
+ /usr/lib/rpm/brp-alt
Cleaning files in /tmp/MyProduct-buildroot (auto)
Verifying and fixing files in /tmp/MyProduct-buildroot (binconfig,pkgconfig,libtool,desktop)
Checking contents of files in /tmp/MyProduct-buildroot/ (default)
Compressing files in /tmp/MyProduct-buildroot (auto)
056-debuginfo.brp: WARNING: You have 1 stripped ELF objects. Please compile with debugging information!
056-debuginfo.brp: WARNING: An excerpt from the list of affected files follows:
./opt/MyCompany/MyProduct.AppImage
Verifying ELF objects in /tmp/MyProduct-buildroot (arch=normal,fhs=normal,lfs=relaxed,lint=relaxed,rpath=normal,stack=normal,textrel=normal,unresolved=normal)
unsupported ABI version e_ident[8] == 65
e_ident[9] is not zero
e_ident[10] is not zero
verify-elf: WARNING: ./opt/MyCompany/MyProduct.AppImage: eu-elflint failed
ldd: ERROR: ./opt/MyCompany/MyProduct.AppImage: failed to find the program interpreter
verify-elf: ERROR: ./opt/MyCompany/MyProduct.AppImage: ldd failed
error: Bad exit status from /tmp/rpm-tmp.95497 (%install)
RPM build errors:
Bad exit status from /tmp/rpm-tmp.95497 (%install)
Fixed the problem adding %set_verify_elf_method skip at the bottom of the spec file

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

Expanding directories in variables with make

I have a makefile (below) for a project where I've been given a folder of "Raw Data" - a set of files from a colleague, and I've made an R script that does an analysis on some of those files. What I want to do with a the makefile then is assign the directory to a variable RAWDIR, and then use that variable in specifying the make dependencies of the R script, and as a command line argument for the script. Usually in the shell, directories with spaces are expanded when using double quotes and curly braces, but I do not know if this is also correct for make files, as with the following makefile I get the message make: *** No rule to make target""../Raw', needed by pulls'. Stop. So I do not think my file path assigned to RAWDIR is being expanded properly.
Thanks.
RAWDIR="../Raw Data/Fc Project Raw Data"
.PHONY: dirs
pulls: dirs "${RAWDIR}/pm_fc_dnds_cleandata.csv" "${RAWDIR}/fc1_seqs.fasta" "${RAWDIR}/fc2_seqs.fasta" "${RAWDIR}/pm1_seqs.fasta" "${RAWDIR}/pm2_seqs.fasta"
Rscript Allele_Pulling.R "${RAWDIR}/" "${RAWDIR}/pm_fc_dnds_cleandata.csv"
dirs:
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/PM
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/Both
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC1PM1
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC1PM2
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC2PM1
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC2PM2
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC
mkdir -p -v Pulled_Allelic_Pairs/Aligned/PM
mkdir -p -v Pulled_Allelic_Pairs/Aligned/Both
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC1PM1
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC1PM2
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC2PM1
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC2PM2
In general spaces in pathnames are not well supported by make. At least some functions in GNU make could handle spaces that are escaped by \.
The following should work in your use case:
RAWDIR="../Raw\ Data/Fc\ Project\ Raw\ Data"

how ${buildroot} is created automatically during rpmbuild?

I want to create the binary rpm files from generated binary packages in centos 6.4 and noticed in one of my build system the ${buildroot} is created automatically, I want to know how it can be achieved.
The sample wget.spec looks like below. detail spec is in my gist https://gist.github.com/larrycai/1ffe134bce1860f1cf87
%install
tar xf ~/wget.tar.gz -C %{buildroot}/
%files
%defattr(-,root,root)
/usr/bin/wget
The wget.tar.gz can be created tar -zcvf ~/wget.tar.gz /usr/bin/wget
When I build it using rpmbuild -bb wget.spec, I got the
+ rpmbuild -bb wget.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.VNDZg4
+ umask 022
+ cd /home/larry/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.S8koPW
+ umask 022
+ cd /home/larry/rpmbuild/BUILD
+ '[' /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64 '!=' / ']'
+ rm -rf /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64
++ dirname /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64
+ mkdir -p /home/larry/rpmbuild/BUILDROOT
+ mkdir /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64
+ LANG=C
+ export LANG
+ unset DISPLAY
+ tar xf /home/larry/wget.tar.gz -C /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64/
+ /usr/lib/rpm/check-buildroot
... (it is successful)
I wonder why line mkdir /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64 is executed automatically.
Are there any script or rpmmacros is enabled for this ?
The main reason is that build machines installed redhat-rpm-config package, the detail list below
This macro setting is in /usr/lib/rpm/redhat/macros
%__spec_install_pre %{___build_pre}\
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\
mkdir -p `dirname "$RPM_BUILD_ROOT"`\
mkdir "$RPM_BUILD_ROOT"\
%{nil}
We can either install this package or put this macros into ~/.rpmmacros
I find it by running command rpmbuild --showrc can see that mkdir code segment is there, so I start to check whether there is special package is installed.

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