===== Shortest RPM-HowTo ===== ==== Preparation ==== Before you think about putting your code into an RPM, it is much useful if you have at least three targets in your Makefile: cleanremoved all generated files allcompile all necessary files installcopy the files into the system directories It is important that after **make install** the binaries are well installed, and that even after removal of the source-direcotry, the program still runs. Furthermore it is necessary to have an optional variable for the Makefile, preferably called RPM_BUILD_ROOT, that is prefixed on all installed files. So, for example, if RPM_BUILD_ROOT points to /tmp/rpm, a file usually installed in /usr/bin would be installed in /tmp/rpm/usr/bin. Once you have done this, you may take the next step: The spec file ==== Spec-files ==== If you are working with xemacs (I advise you too, but vi seems to be pretty OK, too), you can open a new file in your project-directory that is called .spec XEmacs then will fill it with the standard lines. I will go through the lines from Etrans.spec, the specification-file used in the Etrans-project: Summary: Etrans - the Software Radio from EPFL/Eurecom Name: Etrans Version: 0.3 Release: 1 URL: http://lcmpc10.epfl.ch] Source0: %{name}-%{version}.tar.gz License: GPL Group:Development/System BuildRoot: %{_tmppath}/%{name}-root Requires: rtlkernel = 2.4.4rtl rtlinux = 3.1 %description This is a remake of the software radio originally written by Raymond Knopp and others. It is put in a usable shape, bound with a frontend and should also get some documentation. %prep %setup -q %build make %install rm -rf $RPM_BUILD_ROOT make install %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) /opt/radio /etc/profile.d /dev/daq0 %changelog * Tue Mar 5 2002 root <> - Initial build. We will no go through the file line by line and look what this rpm-spec file is all about: * **Summary** is a one-liner for a description. * **Name** is the base-name of your Project. It has to match with your directory-name and with the name of your .tgz In our example the project Etrans in it's version 0.3 is stored in a directory called Etrans-0.3 and it's source-tarball is called Etrans-.0.3.tgz So the name would be Etrans * **Version** In our example, this is 0.3 * **URL** is an optional URL where the source can be get * **License** should be GPL, but of course may differ * **Group** is one of the groups described in /usr/share/doc/rpm-4.0.3/GROUPS * **Requires** gives a list of packages that need to be installed. It is important to have a space before and after the '=', ifnot the file 'rtlkernel=2.4.4rtl' is expected. * **description** is a longer description * **build** commands to build the binaries. In some cases you may want to include a ./configure here. * **install** the variable RPM_BUILD_ROOT is created in the **prep** step and points to the base directory for the installation. 'make install' then puts the files in this directory, if all is put up well. For some programs you'll need a 'configure --prefix=$RPM_BUILD_ROOT' in the **build** stage. But Etrans looks directly for the environment-variable RPM_BUILD_ROOT and puts the files under this directory * **clean** after the binaries are taken from the install-directory, this is called to clean up the installation-directory. The command presented here is a bit of a security-hazard, as RPM_BUILD_ROOT may point to '/' and thus the whole filesystem would be deleted. * **files** indicates which files need to be taken into the rpm-package. All names and directories are relative to $RPM_BUILD_ROOT. If a name points to a directory, it is stepped through recursively and all files are included in the rpm. * **changelog** don't forget to update your changes ==== Building of RPM ==== Once you have your spec-file, you only need to pack up your project and let it build: tar cvzf Etrans-0.3.tar.gz Etrans-0.3/. rpmbuild -ta Etrans-0.3.tar.gz The '.' in Etrans-0.3/. is there because on my system, Etrans-0.3 is a symbolic link. So rather than tarring a symbolic link, I'd like to tar the content of this symbolic link! The second command then does everything from decompressing the tar.gz to calling all necessary scripts and building up a rpm. If all goes right, you can find your rpm in /usr/src/redhat/RPMS/i386 If you're on an intel machine, of course. Try the file on a clean, freshly installed machine, to look if you didn't forget any dependencies. ==== Links ==== * [[http://www.linuxdoc.org/HOWTO/RPM-HOWTO/index.html|RPM @ LinuxDoc]] * [[http://www.rpm.org/max-rpm The official|RPM-guide]] * [[http://freshrpms.net/docs/fight.html|Fighting RPMs]]