Package Management

From GlueXWiki
Revision as of 10:01, 7 June 2007 by Davidl (Talk | contribs)

Jump to: navigation, search

HOWTO install and/or create Hall-D software packages

This page gives information on accessing as well as adding to the Hall-D pre-compiled binary repository. This is not where we keep the source code written for Hall-D. Rather, this is where we will place support packages needed to compile and/or run the Hall-D specific code. The intent is to make it easier to setup new systems or update old ones without having to track down and install numerous other 3rd party packages. Inter-package dependancies should be handled by the package manager your system uses. For Fedora, Red Hat EL (>=5), and SuSE it YUM and for Mac OS X, Ubuntu Linux and OpenSolaris, it's APT.

If you're just trying to install existing packages, go to the section on "Accessing the Repositories",


Accessing the YUM repository

If you already have yum installed (if you're using fedora than you do) you can just install the rpm that adds the JLab Physics repository to your yum configuration. You can get it from here:

http://www.jlab.org/12gev_phys/yum/linux/i386/jlab-phys-0.0-0.i386.rpm

Adding to the repository

Creating an RPM

Here are instructions on how I created an RPM. There are other ways, but this one seemed to work easily enough so I'm documenting it here for myself and others. This was done on a Fedora Core 6 system running on a virtual machine on my MacBook Pro using Parallels.

  1. Prerequisites:
    • You must have root access on the machine you are building the RPM on. This is because the rpmbuild tools like to write things into /usr/src which usually only root has access to. I believe there are ways around this, but I have not explored them as of yet.
    • The rpm tools must be installed on your system. I believe this is done by default on FC6 if you install the developer tools. Otherwise, you can get them with
      yum install rpm-build
    • Install the "RPM Package Maker"" program. This provides a nice graphical interface to creating the RPM and it's what the instructions below refer to.
  2. Preparing the files for the package:
    1. Create a directory to hold the files you wish to be included in the RPM. The directory name should be the base name and version number of the RPM package. e.g. "xerces-c-2.7.0". This can be anywhere you want and does not need to be owned by root.
    2. Copy the files into this directory. Subdirectories should be created as necessary to include the full path of the final destination directory where the file(s) should be installed. For example, to get the include and lib directories to install into /usr/local, I created a usr/local directory inside my xerces-c-2.7.0 directory.
    3. Create any README, INSTALL, Changelog, or TODO files that you want to include in your package. Put them in the topmost directory and they will be found automatically.
  3. Run the /opt/kde/bin/rpmpm program as root.
    1. Click the "Dir..." button and select the directory that holds your files.
    2. Click the "New Spec File" button on the top left. (If you already tried creating an RPM, a spec file may already exist. In this case select it from the list on the left hand side and click the "Edit" button. If you want to get rid of the old spec file and start fresh, delete it from /usr/src/packages/SPECS/mini).
    3. Fill in the fields. Note that:
      • The "Release" field should contain the target platform for the RPM. For example, for Fedora Core 6, I put "fc6".
      • The "Distribution" field should contain something about the home repository where this RPM will be kept. I put "JLab".
      • The summary field is required to be filled out as well.
    4. In the main window, deselect the "Autodetect" checkbox and select the "RPM" radiobutton.
    5. Click "Start". The output window should appear and after several seconds it should complete with numerous informational messages.
    6. Copy the new RPM file from where it was built to somewhere more convienient. For my system, it was left in /usr/src/redhat/RPMS/i386.

You can check the contents of your new rpm file with

rpm -qlp file.rpm

You can test installation and removal of you new RPM with:

rpm -i file.rpm
rpm -e file.rpm

Creating a yum repository

yum is a package management system built on top of RPM. It is used by several Linux distributions, most notably Fedora. Creating a yum repository is pretty easy. Since I have done this already, you probably don't need to. You just need to get the RPMs in the right place and re-run the "createrepo" program to rebuild the database. I document how I set up the repository here anyway.

  1. Prerequisites:
    • Install the createrepo package (if not already). I did this using
      yum install createrepo
  2. Create a directory to hold the yum repository. I did this in /group/12gev_phys/www/yum on the JLab CUE. This is because I wanted the repository to be accessible via http. Note that in order for this to work, directory listing must be enabled. I did this by creating a .htaccess file in the /group/12gev_phys/www directory that contained the following:
    Options +Indexes
    LayoutHeaderOff
  3. Put all of your RPMs in the yum repository directory. I believe they can be placed inside subdirectories if you desire. The directory tree will be traversed when the repository database is created.
  4. Run the createrepo program giving the name of the directory holding the yum repository. This will generate a few files and place them in a directory called "repodata" at the top of your repository.
  5. Create a configuration file with the location of you repository. Here's the one I set up called jlab-phys.repo":
    [jlab-phys]
    name=JLab - Physics
    baseurl=http://www.jlab.org/12gev_phys/yum/linux
    enabled=1
    gpgcheck=0
  6. Now you have a choice, you can just post this file with instructions to install it into /etc/yum/yum.repos.d or you can put it in an RPM that installs it there automatically. I did the latter and created a file jlab-phys-0.0-0.i386.rpm.

Now you should be all set. You can use your favorite yum client to look at the repository (once you've installed the configuration file in /etc/yum/yum.repos.d). I've use kyum which provides a nice graphical interface that allows me to check that my repository is being recognized by yum as well as temporarily disable other repositories while testing.

Creating a DEB file (fink)

The Mac OS X package fink uses debian package files and the apt-get program to manage the interpackage dependancies. The debian package management system is also used by a number of other Unix-like OSes including Debian Linux, Ubuntu Linux, and OpenSolaris. Creating a package is fairly straightforward and unlike RPMs, it seems to not require root access. Here is how I was able to create a debian package on Mac OS X.

  1. Prerequisites:
    • If you're on Mac OS X, you should have fink installed.
    • The dpkg program must be installed. Any system based on debian packages, including fink on Mac OS X, will already have this.
  2. Setup a directory to hold your package contents and control file. This can be anywhere and any name you want. Inside this should be a subdirectory called "DEBIAN". This directory will hold information used by dpkg when building the package, but will not be included in the files the package installs.
  3. Inside the DEBIAN directory, create a file called "control". This is where the configuration info about the package is supplied. Here is what mine looked like:
    Package: xerces-c
    Version: 2.7.0
    Section: libs
    Architecture: darwin-i386
    Essential: no
    Depends:
    Installed-Size: 10916
    Maintainer: David Lawrence <davidl@jlab.org>
    Provides: xerces-c
    Description: Binary package of xerces-c 2.7.0
    There are more options than listed here and one should check the web for an up-to-date list with descriptions.
  4. Two other files must exist in the DEBIAN directory. These are scripts called postinst and prerm wich are run before installation and after package removal repsectively. For my package, I did not have any special tasks that I needed these for so I just made them trivial scripts that did nothing:
    #!/bin/sh
  5. Copy all of your files into the directory that hold the DEBIAN directory (not the DEBIAN directory itself!). This should be considered the root of the install files system so if you want a file to end up in /usr/local/lib, you need to create a usr/local/lib directory here to put the file in. NOTE: if you are making a package to be installed with fink on Mac OS X, then you should place everything in the /sw directory path. This will keep all fink-installed packages consistent and contained.
  6. Run the dpkg program to create your package. The first argument is the directory with all of your files and the second is the name of the final package file. Naming conventions dictate they follow this format:
    package-version_os-arch.deb
    For example, my package was named xerces-c-2.7.0_darwin-i386.deb

You can check the contents of your new package with:

dpkg -c file.deb

To test installation and removal do:

dpkg -i file.deb 
dpkg -r file.deb