No description
Find a file
Geert Stappers da509267c7 polystrap [PATCH] Informational messages to standard out
In good UNIX tradition is it possible to do
  foo > /dev/null
to make foo silent and get only the error messages of foo

For polystrap should that also be possible.
2011-07-06 06:45:10 +02:00
default add cdn.debian.net as default mirror 2011-06-30 08:11:28 +02:00
kirkwood add cdn.debian.net as default mirror 2011-06-30 08:11:28 +02:00
notioninkadam add cdn.debian.net as default mirror 2011-06-30 08:11:28 +02:00
om-gta02 add cdn.debian.net as default mirror 2011-06-30 08:11:28 +02:00
touchbook add cdn.debian.net as default mirror 2011-06-30 08:11:28 +02:00
.gitignore initial commit 2011-06-22 09:50:36 +02:00
newtarget.sh initial commit 2011-06-22 09:50:36 +02:00
polystrap.sh polystrap [PATCH] Informational messages to standard out 2011-07-06 06:45:10 +02:00
README Advertize qemu-user-static and binfmt-support, and warn about essential 2011-06-30 08:56:36 +02:00

Polystrap is a tool to create a foreign architecture rootfs without
needing superuser privileges by using multistrap, fakeroot, fakechroot
and qemu user mode emulation from the qemu-user-static package.

The proper qemu-*-static binary must be properly configured
(eg. /etc/qemu-binfmt/arm pointing to /usr/arm-linux-gnueabi/ with
xapt-installed libc and possibly other packages); package
binfmt-support (which is only a "Recommends" of qemu-user-static) must
also be installed.

While I wanted to build without superuser privileges, multistrap would never
offer mechanisms that would allow me to do so. Hence I wrote this script which
wraps multistrap. Since I wanted to keep it as simple as possible, a fully
functional polystrap will need nothing more than a multistrap.conf, a hooks
directory and a rootfs tree skeleton. Stuff like packages directory, and config
file are optional and can be replaced by editing multistrap.conf and passing
commandline options. Without comments the scripts is currently around 120 lines
and I have no intention to make it much more complex.

Polystrap is invoked as such:

	./polystrap.sh PLATFORM

PLATFORM is a directory that at least contains a multistrap.conf. The
multistrap.conf may contain variables from polystrap.sh.

In the normal case PLATFORM will contain some additional bits.

	PLATFORM/config - A file that is sourced by ./polystrap.sh and
	                  contains variable declarations like:
	                      SUITE   - stable, testing, unstable
	                      ARCH    - armel, armhf, amd64, i386
	                      ROOTDIR - where the rootfs is created
	                      MIRROR  - debian mirror to use for packages
	                  The file is not strictly needed because the options
	                  can also be set by commandline arguments and the
	                  script will fall back to ./default/config.
	                  Correct settings for ARCH and ROOTDIR are necessary
	                  for proper operation, whereas other parameters are
	                  only used if your multistrap.conf references them.
	PLATFORM/debconfseed.txt - as the name suggests
	PLATFORM/hooks  - A directory that contains files that are sourced by
	                  polystrap after packages are installed.
	PLATFORM/packages - Contains files with one debian package per line.
	                    Grouping packages by that allows easier selection.
	PLATFORM/root   - Contains a rootfs tree that is copied to the target
	                  directory after packages are unpacked by multistrap.

Reasonable examples of how those pieces look like can be found in the defaults
directory.

Everything from the PLATFORM/config file can be overwritten by commandline
options:

	-s suite
	-a arch
	-d rootdir
	-m mirror

Additionally the following option allows to specify a list of packages that is
then used instead of the contents of the PLATFORM/packages directory:

	-p packages

How the script works:

 *) re-execute itself in fakeroot
 *) source default/config
 *) source PLATFORM/config
 *) determine package selection by PLATFORM/packages or commandline argument
 *) create multistrap.conf in /tmp from PLATFORM/multistrap.conf
 *) run multistrap
 *) copy contents of PLATFORM/root
 *) copy qemu usermode binary
 *) set debconf selections
 *) run preinst scripts
 *) configure packages
 *) source PLATFORM/hooks
 *) cleanup
 *) generate tarball

When creating a directory for a new target one can either just copy the defaut
directory or use the ./newtarget.sh script which will use symlinks where it
makes sense, will not copy the whole package selection and will set hostname
according to the target name.

Example config and multistrap.conf for usage of armhf is given in the default
directory as config.armhf and multistrap.conf.armhf. Some fakechroot bugs
(#611156) is unfortunately blocking this functionality right now.