Using remote-rpm

Sam Isaacson (sbi@nbcs.rutgers.edu)

Setting up your remote_rpm accounts

There are currently (11 Dec. 2001) six build machines:

Hostname Repository
miracleman sparc-sun-solaris2.6
pumpkinhead sparc-sun-solaris2.7
omahacatdancer sparc-sun-solaris2.8
johndee sparc64-sun-solaris2.7
mistere sparc64-sun-solaris2.8
rosewalker sparc64-sun-solaris2.8_sun-perl,gnome
Get accounts on these machines. Make sure you are in the studsys group (i.e. the group which has write permission to /usr/local/src/rpm-packages).

On your workstation, generate a keypair with ssh-keygen(1) (run ssh-keygen -t dsa or ssh-keygen -t rsa). Add the contents of your public key (~/.ssh/id_dsa.pub or ~/.ssh/id_rsa.pub) to ~/.ssh/authorized_keys2 on each build machine.

Setting up remote_rpm

On your workstation, install the remote-rpm RPM. Alternatively, check out remote-rpm from smeagol.rutgers.edu. Install buildmachinetab in your home directory and put remote_rpm somewhere on your path. Edit remote_rpm accordingly (you only need to change the $remote_rpm and $default_tab variables). Either way, you should change the $default_key variable to match the filename of the private key you created earlier.

Edit buildmachinetab (this file is explained in detail in build-repository/instructions.html on smeagol.rutgers.edu). The only important field on each line is USER: change sbi to your username on each respective build machine.

Test remote_rpm: try running remote_rpm -- -q emacs. After each machine finishes, you should get a log file named LOG with the output of rpm -q emacs on each build machine.

Using remote_rpm

The interface of remote_rpm is designed to mimic the interface of rpm:

Usage: remote_rpm [-n] [-h] [-k key] [-t tab] [-m machines] [-o log file]
                  [-x excluded specfiles] -- <rpm arguments>

  -h: Print this usage message
  -k: Specify by colon-delimited list the ssh keys to use (the default
        list is /stooges/u1/sbi/.ssh/id_rsa)
  -m: Specify by colon-delimited list the build architectures to use (the 
        default consists of all architectures listed in the tab file)
  -n: Print the commands to conduct a remote build, but do not execute them
  -o: Specify the output file (the default is LOG)
  -r: Specify the rpm build directory (the default is
        /usr/local/src/rpm-packages)
  -t: Specify the build machine tab to use (the default is
        /stooges/u1/sbi/buildmachinetab)
  -x: Specify by colon-delimited list the spec files not to copy (the default
        list is machine-header.spec)

  After the '--', write the arguments to rpm that you wish to execute
  on each machine.
You can use remote_rpm to query the remote RPM databases (e.g. remote_rpm -- -q emacs: is emacs installed on the build farm?) install RPMs on the build machines (e.g. remote_rpm -- -i foobar.rpm: copy foobar.rpm to each machine and install it); or, most importantly, build RPMs on the build machines.

To build an RPM, copy your specfile and any specfiles it includes into a working directory. Make sure the sources and patches it references are in /usr/local/src/rpm-packages/SOURCES. Run remote_rpm -- -ba your-spec-here. You should get a list such as this:

sparc-sun-solaris2.6: 11689, /var/tmp/aaaTjai1w
sparc-sun-solaris2.7: 11692, /var/tmp/aaaulaG1w
sparc-sun-solaris2.8: 11695, /var/tmp/aaaxna41w
sparc64-sun-solaris2.7: 11698, /var/tmp/aaaCsaq2w
sparc64-sun-solaris2.8/sun-perl,gnome: 11702, /var/tmp/aaaswaW2w
sparc64-sun-solaris2.8: 11706, /var/tmp/aaa6zaq3w
remote_rpm will copy all of your specfiles, sources, and patches onto the build machines. It will then run rpm -ba your-spec-here (with additional flags if necessary). As the compile proceeds, you may tail any of these files to see the output from the build machines. After the compile is done (or remote_rpm is interrupted), these files will be concatenated together in a file named LOG. remote_rpm will copy the RPMs back into the current directory, as well as the source rpm from the first machine that finishes compiling.

If want to build RPMs on a subset of the build machines, use the `-m' switch, e.g. remote_rpm -m "sparc-sun-solaris2.8:sparc64-sun-solaris2.8" -- -ba tcp_wrappers_ipv6.spec. By default, remote_rpm will use all the build machines.

If you want to exclude spec files from being copied to the build machines, use `-x'. This can be useful with headers such as machine-header.spec, which record information specific to the configuration of the build machine (e.g. which_gnome and which_perl variables). It is unnecessary to include headers such as perl-header.spec, which should remain consistent regardless of machine configuration.

If you only want to build binary packages, use the `-bb' switch, e.g. remote_rpm -- -bb your-spec-here.