Issues while packaging java app with rpmbuild...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 17 Oct 2008, Ann Basso wrote:

> I am trying to package a java application into an RPM. I have gone through
> several tutorials and I am also able to make an RPM but there are some issue
> with it that I am unable to figure out.
> Basically, the java app consists of a couple of jars, a property file, and a
> shell script to trigger the app. jars are generated by ant.
> Now, even after reading so much about rpm spec files, I am totally confused
> about the following things -
> ?
> 1. Where should I put my jars and other files? rpm/SOURCES or rpm/BUILD?
> Since my jars are already ready (created by ant) I don't want to do anything
> in "build" section. There is nothing to build. Right?

Since you're packaging things that are already "built", then yes there's 
nothing to build. You still want to treat the jars and such as 
sources to be able to create a src.rpm of the thing and to avoid 
hardcoding paths to your own setup etc.

So you'd have something like

SOURCE0: myapp-1.jar
SOURCE1: myapp-2.jar
SOURCE2: myapp.sh

> 2. What should I do in "Install" section? I would like to have the user
> install the application (i.e. the jars) in /home/username/javaapps/myapp.
> Should I actually install (i.e. just create this directory structure
> /home/annb/javaapps/myapp) or should I create this dir structure under
> Install?

Putting things into users' home directory is not going to work well and 
goes against the ideas of rpm. Install the app into a system-wide 
location, such as %{_libdir}/myapp for the jars and other misc bits and 
%{_bindir}/myapp for the launcher script.

Assuming the example SOURCE's from above, you'd have something like:

%install
mkdir -p $RPM_BUILD_ROOT%{_bindir} $RPM_BUILD_ROOT%{_libdir}
install -m 644 %{SOURCE0} %{SOURCE1} $RPM_BUILD_ROOT%{_libdir}/
install -m 755 %{SOURCE2} $RPM_BUILD_ROOT%{_bindir}/

For this to work you'll need to set BuildRoot in your spec (you'll always 
want to have it anyway), something like this'll do:

BuildRoot: %{_tmppath}/%{name}-%{version}

> 3. what should go in the files section? As I understand, all the files that
> I want in the rpm should be listed here. But I am totally lost about from
> where should I pick the files? From BUILD or from INSTALL?

%install is used to put the results to a directory tree (again, you'll 
want the buildroot in your spec)

> 4. This is what I have in my spec file. (Shown below). When it creates an
> rpm, the rpm contains the hardcoded directoty structure i.e. /home/annb/...
> Please help. I am really tired of this now.
> ?
> [code]
> %define _prefix???????? /home/robert/javaapps
> %define name????? PCMonitor
> %define summary?? PC Monitor
> %define version?? 1
> %define release?? 1
> %define license?? GPL
> %define group???? Development/Languages
> %define source??? http://none.net
> %define url?????? http://none.net
> %define vendor??? None
> %define packager? Ann B

While defining name, version etc this way isn't "wrong", it's unnecessary 
and redundant, see below.

> 
> Name:????? %{name}
> Version:?? %{version}
> Release:?? %{release}
> Packager:? %{packager}
> Vendor:??? %{vendor}
> License:?? %{license}
> Summary:?? %{summary}
> Group:???? %{group}
> Source:??? %{source}
> URL:?????? %{url}
> Prefix:??? %{_prefix}
> BuildArchitectures: noarch
> 
> %description
> PC Monitor
> %prep
> %build
> cp -r %{_topdir}/SOURCES/*? %{_topdir}/BUILD/pcmonitor
> %install
> cp -r %{_topdir}/BUILD/*? %{_prefix}/pcmonitor

Never blindly copy what's in build or sources directories, you don't know 
what other packages have their sources and builds in there (eg on my 
system, this is gigabytes of stuff)

> %clean
> %files
> %{_prefix}/pcmonitor

Try something like this:

---
Name:      PCMonitor
Release:?? 1
License:?? GPL
Summary:?? PC Monitor
Group:???? Development/Languages
Source0:   pcmonitor.jar
Source1:   pcmonitor-util.jar
Source2:   pcmonitor.sh
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}

%description
PC Monitor

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/%{_bindir}
mkdir -p $RPM_BUILD_ROOT/%{_libdir}/pcmonitor
install -m 644 %{SOURCE0} %{SOURCE1} $RPM_BUILD_ROOT%{_libdir}/pcmonitor
install -m 755 %{SOURCE2} $RPM_BUILD_ROOT%{_bindir}/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%{_bindir}/pcmonitor.sh
%{_libdir}/pcmonitor

---

I don't know the names of your jar files and scripts so you'll need to 
adjust them, and probably you need to adjust the launcher script to take 
into account that the location of jar's which is not your home directory 
anymore etc.

 	- Panu -


[Index of Archives]     [RPM Ecosystem]     [Linux Kernel]     [Red Hat Install]     [PAM]     [Red Hat Watch]     [Red Hat Development]     [Red Hat]     [Gimp]     [Yosemite News]     [IETF Discussion]

  Powered by Linux