That's simpler than distributing an RPM to the repos, by a long ways. With that approach, all we'd need would be the spec (build) script. I append the example at the end of this email. As you can see, it's not very much. I'm sure it could be better written (I'm no RPM "maven" {grin}) but it's a place to start. I used the Tanuki Java wrapper as part of the dependency, because that software is commonly available for almost any Linux distro. I also included a separate body of source for the package (shown below as "wrapper-gear") which is just the files that Karaf creates from its "wrapper: " commands. These two inclusions allow the RPM to install Karaf as a Linux system service using the Tanuki wrapper.
Graham-- I'll send you a tarball of "wrapper-gear" off-list, just so you can see what I did. It's this worthy of opening an issue? --- A. Soroka Software & Systems Engineering :: Online Library Environment the University of Virginia Library On Jan 15, 2013, at 12:26 PM, Graham Leggett wrote: > On 15 Jan 2013, at 7:09 PM, aj...@virginia.edu wrote: > >> I have, for local consumption. I based the build on an ActiveMQ RPM script. >> It wasn't too difficult and I can send you the example, if you like. > > If you can, I would hugely appreciate it. > >> There has been discussion before on this list about maintaining a >> semi-"blessed" RPM of Karaf directly from the project. I'd be happy to work >> on that, if I could get guidance and help integrating it into the release >> process. > > I maintain the spec file that is shipped with Apache httpd, the idea is that > you can download a httpd tarball and run "rpmbuild -tb <tarball>" and it > "just works". All that is required is that a file called <package>.spec > exists in the root of the tarball. (It might also work if the spec file is > elsewhere in the tree, but I've not tried). > > I am busy looking at the jpackage version of karaf, and it seems to have a > significantly different structure to that shipped by Apache. Still need to > get my head around it. > > Regards, > Graham > -- > [ajs6f@esbdev2 SPECS]$ cat apache-karaf.spec # turn off Red Hat's jar repacking macro %define __jar_repack %{nil} # # Spec file for packaging Apach Karaf # Summary: Apache Karaf Name: apache-karaf Version: 2.2.7 Release: 1 License: Apache Group: Networking/Daemons Source0: http://www.apache.org/dyn/closer.cgi/karaf/2.2.7/apache-karaf-2.2.7.tar.gz Source1: wrapper-gear URL: http://karaf.apache.org/ Vendor: Apache Foundation Packager: A. Soroka <aj...@virginia.edu> BuildArch: noarch Requires: java Requires: tanukiwrapper %description Apache Karaf is a small OSGi runtime which provides a lightweight container into which various components and applications can be deployed. %define karaf_home /usr/share/karaf %define karaf_data /var/cache/karaf %define karaf_config /etc/karaf %define karaf_deploy /var/local/karaf-deploy %define karaf_startuplib /usr/local/lib/karaf %define karaf_systemlib /usr/local/lib/karaf-system %define karaf_logs /var/log/karaf %prep %setup %build # No build needed for a pure-Java application like Karaf /bin/true %install # Add the "karaf" user and group # the "|| :" ("or NOP") on the end allows for the condition that this user and group already exist /usr/sbin/groupadd --system karaf 2> /dev/null || : /usr/sbin/useradd --comment "Apache Karaf" -g karaf \ --shell /bin/bash --system --home-dir %{karaf_home} karaf 2> /dev/null || : # We put the various pieces of Karaf into FHS-appropriate places, then symln them # together in /usr/share/karaf. # First copy all of the Karaf tree into %{karaf_home} (should be /usr/share/karaf) mkdir -p $RPM_BUILD_ROOT%{karaf_home} mv --verbose * $RPM_BUILD_ROOT%{karaf_home}/ # Now we make the FHS locations for Karaf stuff mkdir -p $RPM_BUILD_ROOT%{karaf_config} $RPM_BUILD_ROOT%{karaf_deploy} $RPM_BUILD_ROOT%{karaf_deploy} \ $RPM_BUILD_ROOT%{karaf_startuplib} $RPM_BUILD_ROOT%{karaf_systemlib} $RPM_BUILD_ROOT%{karaf_data} \ $RPM_BUILD_ROOT%{karaf_logs} $RPM_BUILD_ROOT/etc/init.d # Now we move pieces of the tree out of there into FHS-appropriate spots and re-symln them pushd $RPM_BUILD_ROOT%{karaf_home} mv etc/* $RPM_BUILD_ROOT%{karaf_config} rmdir etc ln -s %{karaf_config} etc mv deploy/* $RPM_BUILD_ROOT%{karaf_deploy} rmdir deploy ln -s %{karaf_deploy} deploy mv lib/* $RPM_BUILD_ROOT%{karaf_startuplib} rmdir lib ln -s %{karaf_startuplib} lib mv system/* $RPM_BUILD_ROOT%{karaf_systemlib} rmdir system ln -s %{karaf_systemlib} system popd # Karaf logs show up in the data dir by default, so we make a symlink ln -s %{karaf_logs} $RPM_BUILD_ROOT%{karaf_data}/log # Tanuki wrapper configuration cp -v %{SOURCE1}/karaf-wrapper.conf $RPM_BUILD_ROOT/etc/karaf/karaf-wrapper.conf # init.d script cp -v %{SOURCE1}/karaf $RPM_BUILD_ROOT/etc/init.d/karaf # Java to support Wrapper operation cp -v %{SOURCE1}/*.jar $RPM_BUILD_ROOT%{karaf_startuplib} %post # install Karaf service (but don't activate) /sbin/chkconfig --add karaf %preun # turn off Karaf and remove it from the init.d services before uninstalling if [ $1 = 0 ]; then /etc/init.d/karaf stop /sbin/chkconfig --del karaf fi %files %doc %{karaf_home}/karaf-manual-2.2.7.pdf %doc %{karaf_home}/karaf-manual-2.2.7.html # Karaf startup script (uses Tanuki wrapper) %attr(755, root, root) /etc/init.d/karaf # Karaf configuration %config(noreplace) %attr(775, root, karaf) %{karaf_config} # Karaf bundle cache, ActiveMQ data, etc. This is the real location of KARAF_DATA %attr(775, karaf, karaf) %{karaf_data} # Karaf hot deploy directory %attr(775, karaf, karaf) %{karaf_deploy} # Karaf logs %attr(775, karaf, karaf) %{karaf_logs} # Karaf startup libraries %attr(755, root, root) %{karaf_startuplib} # Karaf packaged Maven repo. Most of Karaf code is here, not in the startup libraries %attr(755, root, root) %{karaf_systemlib} # Full of symlinks to files above, plus demos, a README or two, etc.: this is treated as KARAF_HOME and KARAF_BASE # we have to leave it writeable by the karaf group in order for user karaf to create the Karaf lockfile # (which should eventually move to KARAF_DATA: see https://issues.apache.org/jira/browse/KARAF-579) %attr(775, root, karaf) %{karaf_home}