Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Generic build system for GNU/Linux distributions

branch: master
README
 _ __ ___   __ _ _ __   ______   _ __   __ _
| '__/ _ \ / _` | '__| |______| | '_ \ / _` |
| | | (_) | (_| | |             | | | | (_| |
|_|  \___/ \__,_|_|             |_| |_|\__, |
                                        __/ |
                                       |___/

roar-ng is deprecated; roar-ng II is the future ... and it's here.
See https://github.com/iguleder/roar-ng-ii.

############
# Overview #
############

roar-ng is a generic GNU/Linux distribution building system.

It provides an architecture-independent, flexible and portable infrastructure
for the creation of fast and portable GNU/Linux distributions. It provides
support for the binary package format and repositories of various GNU/Linux
distributions.

The development of roar-ng started as a collection of source hacks of Woof (the
Puppy Linux build system) and evolved into a complete, independent
re-implementation. It provides advanced features not found in Woof, such as
parallel downloads, automatic package splitting, simple branding and easy
porting to different processor architectures.

The name "roar-ng" was originally a pun on the name "Woof". roar-ng's early
prototypes were called "Moo", "Meow", "Tweet" and finally, "Roar". The latter
was the first to show potential and roar-ng is originally a complete rewrite
of it.

#########
# Goals #
#########

roar-ng's key goals are:
 - Be simple.
 - Be generic and independent.
 - Be as thin as possible and provide extra functionality (e.g support for a new
   distribution) via a file system hierarchy, rather than modification of the
   core.

roar-ng provides a simple API for all operations performed in order to build a
distribution (e.g package search, file download, etc') via one common core
("functions") and consists of scripts built on top of it.

#############################################
# Supported Architectures and Distributions #
#############################################

roar-ng supports packages of the following distributions:
 - Slackware
 - Debian GNU/Linux
 - Arch Linux
 - Ubuntu
 - CentOS
 - Fedora
 - OpenSUSE
 - Mageia
 - Raspbian
 - Subito GNU/Linux (e.g packages built through roar-ng itself)

roar-ng is architecture-independent; it can be used to build a distribution for
any processor architecture, as long as there are binary packages for it and
roar-ng is able to produce an image of a supported bootable media.

Each supported distribution has its own sub-directory under the "distro"
directory, containing tools required to handle its package format and
repositories.

Expanding roar-ng's distribution or architecture support is easy and does not
involve changes in existing code: this is one of its main design goals and key
strength.

#################
# Configuration #
#################

Before roar-ng can be executed to produce a distribution, it must be properly
configured. Its configuration resides under the "conf" directory and consists
of three files:
 - bootrc - various boot-related or system initialization parameters, such as
            the console font.
 - distrorc - the distribution's details, such as its name, version and most
              importantly, its target processor architecture.
 - package_list - the list of packages included in the distribution's bootable
                  media.

The package list is a text file containing package entries; each line contains
one entry, which corresponds to a group of packages. Package entries
consist of four fields, delimited by the "|" character:
 - The distribution the packages come from.
 - A name for the package group.
 - A comma-delimited list of packages included in the group.
 - How to split the result package.

The fourth field can be confusing; in most cases, it will contain the sane
default of "exe,dev,doc,nls". However, it can be also used to affect how roar-ng
splits the result package, by suffixing one of the tokens with ">", followed by
another, e.g "exe,dev,doc>dev,nls". Each token stands for a part of the package:
the main package, development files, documentation or language support files.
Once a token is suffixed this way, the relevant part of the package gets merged
into another: in this example, documentation ("doc") gets redirected into the
development files ("dev") part.

Remember, intimate knowledge of the contents of packages and proper use of
package splitting rules (another key strength of roar-ng) are the key for the
creation of compact, simple and tidy distributions.

#########
# Usage #
#########

roar-ng consists of independent scripts, intended to run in a given order, with
the roar-ng directory as the working directory.

The scripts are:
 - 0setup, which downloads package lists from repositories and converts them to
   a common, simple format.
 - 1download, which downloads all packages included in the distribution.
 - 2createpackages, which extracts, optimizes, splits and processes the
   packages.
 - 3builddistro, which builds a bootable media image. It accepts one parameter:
   the media type. Each media is built through a script under the "media"
   directory.
 - 4buildpackage, an optional script which builds a binary package from source,
   using chroot and 3builddistro's result. It accepts the package name as a
   parameter and cannot be used for cross-compilation; it must run on a host
   distribution of the same processor architecture as the result package's one.

roar-ng's development model is based on incremental improvements, rather than
"stable" releases. Therefore, always obtain a fresh snapshot before using it.

################
# Contributing #
################

If you wish to contribute to roar-ng's development, there are many things you
can do (in the following priority):
 - Fix bugs.
 - Locate and fix inefficiencies.
 - Add support for another bootable media (e.g a SD card image for your favorite
   SoC).
 - Add support for another distribution.
 - Add bits of documentation.

Before you send a request to merge your changes, please:
 - Make sure your code doesn't conflict with roar-ng's current state, due to
   changes between time you began your development and the present.
 - Make sure your code is easy to understand, simple as possible, efficient and
   matches roar-ng's coding style.
 - Document your code.
 - Make sure you have a full history of changes; always document changes. Pay
   attention to issues you solved and interface changes.
 - Make sure your code is as future-proof as possible.
 - Make sure your code doesn't have a hard dependency on a third-party
   component (e.g a parser). This is required to keep roar-ng independent.

The actual code should be accompanied by all this information. If everything
seems good (which is a very subjective thing), it might be merged into roar-ng
and you will be credited. However, no guarantees are made.

Any code contributed to roar-ng should conform with its license. Code which
doesn't simply won't be merged.

#####################
# Legal Information #
#####################

roar-ng is licensed under the GPLv3 license, see COPYING for the license text.
For a list of its authors and contributors, see AUTHORS and THANKS.

The ASCII art logo at the top was made using FIGlet (http://www.figlet.org/).
Something went wrong with that request. Please try again.