You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Yann Dirson 213f376970 Advertize qemu-user-static and binfmt-support, and warn about essential
config items.
13 years ago
default add cdn.debian.net as default mirror 13 years ago
kirkwood add cdn.debian.net as default mirror 13 years ago
notioninkadam add cdn.debian.net as default mirror 13 years ago
om-gta02 add cdn.debian.net as default mirror 13 years ago
touchbook add cdn.debian.net as default mirror 13 years ago
.gitignore initial commit 13 years ago
README Advertize qemu-user-static and binfmt-support, and warn about essential 13 years ago
newtarget.sh initial commit 13 years ago
polystrap.sh Multistrap's include mechanism is hairy enough that users may need some 13 years ago

README

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.