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})
Related
I wrote a bash script to install multiple packages and calling the bash script in %post. But its not executing the script. I am new to this area and I am not sure what I am missing.
If i manually execute the script its working fine but not through the rpm package.
InstallRPM.spec file:
Name: InstallRPM
Version: 1
Release: 1%{?dist}
Summary: Install RPM Packages
License: Script
URL: NA
Source0: InstallRPM-1.tar.gz
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-buildroot
Requires: /bin/sh
%description
Install RPM files from the /tmp/ folder
%prep
%setup -q
%install
mkdir -p "$RPM_BUILD_ROOT"
cp -R * "$RPM_BUILD_ROOT"
%post
echo "Executing the script /tmp/InstallRPM.sh"
/tmp/InstallRPM.sh
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
/tmp/InstallRPM.sh
Shell Script:
#!/bin/bash
echo "Installing package using YUM"
package="vim zip"
echo "Install $package ..."
if [ "`cat /etc/centos-release | awk '{print $1}'`" == "CentOS" ]
then
{
for i in $package
do
{
#if [ "`/bin/rpm -qa $i | cut -d. -f1`" == "" ]
if [ "`/bin/rpm -qa $i`" == "" ]
then
{
echo "Clean Install"
/usr/bin/sudo /bin/yum install -y $i
}
else
{
echo "Upgrade"
/usr/bin/sudo /bin/yum update -y $i
}
fi
echo "****************"
}
done
}
fi
I ran the rpmbuild -ba InstallRPM.spec and it created a rpm file which I executed but nothing happened. Its getting hung in the below mentioned spot.
Downloading packages:
vim-enhanced-7.4.629-6.el7.x86_64.rpm | 1.1 MB 00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
^C
You are using rpm the wrong way. Don't install dependencies in a %post script. I suggest you to read the rpm packaging guide first.
You should use Requires in your spec file, like this:
Requires: vim
Requires: zip
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}
Getting below error during platform installation:
"Required libaio package is not found. ..."
However, above package is already installed:
rpm -q libaio
libaio-0.3.107-10.el6.x86_64
Here is output from the installation script:
./platform-setup-x64-linux-4.4.3.10393.sh
Unpacking JRE ...
Preparing JRE ...
Starting Installer ...
May 30, 2018 6:51:23 PM java.util.prefs.FileSystemPreferences$2 run
INFO: Created system preferences directory in java.home.
Verifying if the libaio package is installed. /opt/appdynamics/platform/installer/checkLibaio.sh
I got this too... I was running from command-line as a non-root user:
./platform-setup-x64-linux-4.4.3.10393.sh -q -varfile /appd/home/Install/response.varfile
I added the shell expand(-x) switch and log to the command(s) like so:
bash -x ./platform-setup-x64-linux-4.4.3.10393.sh -q -varfile /appd/home/Install/response.varfile > install.log 2>&1
If we tail the last bit of that log you get, this response in debug mode:
Verifying if the libaio package is installed. /opt/appdynamics/platform/installer/checkLibaio.sh
Required libaio package is not found. For instructions on installing
the missing package, refer to https://docs.appdynamics.com/display/PRO44/Enterprise+Console+Requirements
and the script checkLibaio.sh isn't left there... so you cannot figure it out easily. I also have a RedHat variant with the packages installed:
rpm -qa | grep libaio
libaio-0.3.109-13.el7.x86_64
Strangely enough I have one VM from the same image that will install the distribution just fine, and one that will not, so on the broken install (where I really want to install this). I ran another command from the expanded view of the install.log, which was a really long JVM command line. Anyways I got it to work and then made a looping script to retrieve the file (Because AppD for some reason removes the check script before you can look at it). The script is as follows:
#!/bin/sh
# Script used to check if the machine has libaio on it or not.
cat /dev/null > /opt/appdynamics/platform/installer/.libaio_status
chmod 777 /opt/appdynamics/platform/installer/.libaio_status
# Check if the dpkg or rpm command exists before running it.
command -v dpkg >/dev/null 2>&1
OUT=$?
if [ $OUT -eq 0 ];
then
if [ `dpkg -l | grep -i libaio* | wc -l` -gt 0 ];
then
echo SUCCESS >> /opt/appdynamics/platform/installer/.libaio_status
exit 0
fi
else
command -v rpm >/dev/null 2>&1
OUT=$?
if [ $OUT -eq 0 ];
then
if [ `rpm -qa | grep -i libaio* | wc -l` -gt 0 ];
then
echo SUCCESS >> /opt/appdynamics/platform/installer/.libaio_status
exit 0
fi
fi
fi
echo FAILURE >> /opt/appdynamics/platform/installer/.libaio_status
exit 1
I you run this script like me on the faulty platform what you will discover is that your version of Linux has both:
dpkg
and
rpm
installed. To work around this you should temporarily make a name change to one of these two package manager executables so it cannot be found (by your shell environment).
Most common here will be that you are running a RedHat variant where someone chose to install dpkg (For who knows what reason). If so desired remove that package and the install should be successful.
I tried to build binaries in RHEL6 using rpmbuild command.It throws file not found error during rpmbuild command execution. But In RHEL5 the same rpmbuild command is working fine.
RHEL5 execution result:
*Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.77266
umask 022
cd /usr/src/redhat/BUILD
LANG=C
export LANG
unset DISPLAY*
RHEL6 execution result:
*Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.BeMhyH
umask 022
cd //rpmbuild/BUILD
'[' //rpmbuild/BUILDROOT/ '!=' / ']'
rm -rf //rpmbuild/BUILDROOT/
++ dirname //rpmbuild/BUILDROOT/
mkdir -p //rpmbuild/BUILDROOT
mkdir //rpmbuild/BUILDROOT/
LANG=C
export LANG
unset DISPLAY
/usr/lib/rpm/check-buildroot*
I am not able to find any %install changes between the spec files. Any one please help me to understand what am i doing wrong?
Thanks in Advance..!
The only problem that is clear from the snippets provided is that $HOME is not defined in your rpmbuild environment. $HOME/rpmbuild is the default build root for 'rpmbuild' in RHEL6, instead of /usr/src/redhat as in RHEL5.
Things to consider:
Is there an '~/.rpmmacros' file that is altering the rpmbuild
directives.
The temporary %install script will not be deleted on
error-exit. Inspecting it directly might tell you more about why it failed.
Ex:
[user#host rpmbuild]$ rpmbuild -bb nano
<snip>
+ exit 1
error: Bad exit status from /var/tmp/rpm-tmp.2uw1tZ (%install)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.2uw1tZ (%install)
[user#host rpmbuild]$ cat /var/tmp/rpm-tmp.2uw1tZ
#!/bin/sh
RPM_SOURCE_DIR="/home/user/rpmbuild/SOURCES"
RPM_BUILD_DIR="/home/user/rpmbuild/BUILD"
...
Older recommendations were to nuke the target buildroot as the first step of %install. To help force a separation between the %build and %install steps, newer versions of rpmbuild strictly enforce it by doing it for you for the first step, as shown in what you pasted in.
I am assuming that your %build stage is putting one or more files into the target buildroot area, which it shouldn't be doing. It should all be in the build area only.
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.