cRUST is more than simply a console version of the RUST. It is the backend
for the GUI but it also allows you to perform additional tasks, such as
creating RPMs from source tar balls by using the sandbox and a few additional functions,
like listing the files that have been added or modified since
the last initialization.
Creating an RPM with cRUST is simple - although not so much as with
the rust GUI. The steps required to do so are:
- Select and initialize a new root
- Place your files under the new root.
- Run cRUST to create the RPM
1. Select a new root and initialize it
Select a directory (it doesn't need to exist in advance) in which you will
place the files to include in the RPM, for example
~/newroot, and run
$ crush --init --nomd5 ~/newroot
You will find that the directory now contains many of the directories
typically found under /.
$ ls ~/newroot
bin build etc lib opt root tmp var
boot dev home mnt proc sbin usr
2. Place the files
Place the files you wish to include in the RPM in the filesystem created
under the new root (~/newroot). For example,
if you want a program to be installed by your RPM in /usr/local/myproject
$ mkdir ~/newroot/usr/local/myproject
$ cp myprog ~/newroot/usr/local/myproject
Do this for every file and directory you wish to include in the RPM.
3. Create the RPM
You can create the RPM with cRUST by calling the program from the
command line like so
$ crust --makerpm --nomd5 --name myrpm \
--version 0.1 --release 2 --group \
"Applications/Text" --license "GNU GPL" \
--sum "A short summary" --desc "A longer \
description of the package"
The RPM will be created and installed in the rust directory in your
home, do an
$ rpm -qlp ~/rust/RPMS/i386/myrpm-0.1-2.i386.rpm
to see the files included in the RPM.
A more interesting use of cRUST involves creating sandbox,
installing programs from within the sandbox and automatically generating
RPMs for these third party sources.
The following crust manpage is included in the
The crust manpage
Section: User Manuals (1)
Updated: AUGUST 2001
- OPTIONS (Administrative)
- OPTIONS (Package Creation)
- SEE ALSO
crust - console RUST, rpm creator and sandbox.
crust --diff|--clean|--chroot|--init [--include
include-dir ] [--copy|--fullcopy] [--nomd5]
[--nocreate]|--makerpm [--name NAME ] [--version VER
] [--release REL ] [--group GRP ] [--license
LICENSE ] [--requires REQ ] [--sum SUM
] [--desc DESC ] [--post post-file ] [--postun
postun-file ] DIRECTORY
crust is more than
simply a console version of rust(1). It is the backend for the GUI
(so anything you can do with rust(1) may also be done on the command
line with crust ) but it also allows you to perform additional tasks,
such as creating RPMs from source tar balls by using the sandbox.
- Specifying --chroot NEWROOT
with NEWROOT being a previously initialized directory,
will cause crust to change root to NEWROOT and spawn a
shell. The directory must have been initialized with --init
--copy or --init --fullcopy for the chroot to
succeed. This is the one instance in which crust must be run
as root (in order to make the chroot() system call. To
use the --chroot feature to create RPMs from arbitrary
source code tar balls:
a directory with:
--init --copy /path/to/a/newroot
the source into the build subdirectory and build it:
source.tar.gz /path/to/a/newroot/build and do
what you need to do to compile the software (./configure; make or
- Get into
the sandbox. As root, do:
the software in the sandbox:
/build/source-0.2/ ; make install
- Get out
of the sandbox
yourself the owner of all the files:
-R username /path/to/a/newroot
to your lowely normal user status:
--makerpm --name myrpm --version 0.2 ...
- Calling crust with --clean
causes it to remove all files and directories added under the 'new root'
directory since the last --init
- Used with --init,
--copy copies a minimal set of files over under the new root
directory. These programs and files will be needed when entering the
sandbox (with --chroot ).
- Ouput a list of directories and files that have
been added or modified (when not using
--nomd5) since the last initialization.
- Similare to the --copy argument,
but uses a more complete list of files and directories, which includes
those duplicated with --copy
Using fullcopy will be necessary in cases where make
install causes the software to attempt to recompile in the sandbox
but some required files or programs are not available within the chroot
ed environment. If even --fullcopy is not enough
to get things going, you need to figure out what is missing and use
crust --init --include /path/to/missingstuff --include
or modify the /usr/local/rust/conf/rustdirs.fullcp.conf file
and redo the
crust --init --fullcopy /path/to/a/newroot
- Using --include FILE|[R ]DIRECTORY
or -I [FILE|[R ]DIRECTORY] in conjunction with --init
and possibly --copy or --fullcopy
also duplicates FILE or DIRECTORY (recursively if the 'R' option is
used, as in --include 'R /path/to/dir/'
) when initializing the new root.
- Initialize the DIRECTORY. This creates the basic
file system directory structure under DIRECTORY and a file containing
the initial (or 'clean') contents of the directory. This list is then
compared with the current list when creating the packages.
- If the DIRECTORY to use as the 'new root' does
not exist and the --nocreate option is used, DIRECTORY
will not be created and crust will exit.
- By default, md5 sums are calculated for each
file under DIRECTORY and then recalculated and compared when doing a
--diff or creating the package (with --makerpm
). It is usually important to leave this md5sum checking active when
using the sandbox and related commands ( --chroot
, --(full)copy ... ), as crust will
not be able to determine wether a file has been replaced (as opposed
to simply added or removed) without the md5sums. However, in cases where
the sandbox is not being used, e.g. when using the rust(1) GUI
interface, it may be desirable to skip this time consumming process
(crust can take 2 minutes doing all the md5 sums on an --init
--fullcopy new root directory). The --nomd5
allows you to do so.
OPTIONS (Package Creation)
- DIRECTORY Using the --makerpm
argument tells crust find the files which have been added or modified
under DIRECTORY since the last initialization. These files are
then packaged into an RPM file. The created RPM can be found
in ~/rust/i386/RPMS . The options below
all affect the properties of the created RPM.
Specifies DESC (a single word or quoted string) as the description
for the package to build.
Specifies GRP (a single word or quoted string) as the group of the
package to build. Defaults to Applications/Rust
Specifies LICENSE (a single word or quoted string) as the software
distribution license of the contents of the package to build. Defaults
Specifies NAME (a single word, no spaces) as the name of the package
to build. Defaults to NoNameRPM
Specifies FILE (a /path/to/file.sh), a file who's contents are a
script to be executed after RPM installation.
Specifies FILE (a /path/to/file.sh), a file who's contents are a
script to be executed after RPM un installation.
Specifies REL (a single word, no spaces) as the release of the package
to build. Defaults to 1
Specifies REQ (a single word or quoted string) as the list of additional
RPMs that are required to be installed on the system before the dependancies
are met and this package may be installed.
Specifies SUM (a single word or quoted string) as the summary for
the package to build.
Specifies VER (a single word, no spaces) as the version of the package
to build. Defaults to 0.1
- The configuration files that determine which
directories are created and copied when calling crust with --init
and --copy or --fullcopy
See rustdirs.conf(5) for further details.
- Directory containing RPMs created by crust
crust does not deal
with symbolic links at this time.
Patrick Deegan <
crust is part of
the rust package and is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.
rust, crust and their associated configuration and support
files are distributed in the hope that they will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA