.. _customisation_hooks: Developing live scripts and customisation hooks =============================================== :file:`vmdebootstrap` is available in git and in Debian. The live image processing requires several options which are only available in versions of vmdebootstrap newer than version 0.5-2 available in Debian Jessie. vmdebootstrap is able to run on Stretch, Jessie or Wheezy and able to build any suite supported by debootstrap (and and architecture supported by QEMU) on any of those versions of Debian. This leads to a large matrix of build options and hooks. Calls to vmdebootstrap are best scripted. See the README for notes on which options and settings are required to make a live image using vmdebootstrap. The 'common' library contains functions and parameters which need to be used in *all* images, including:: export_env mount_proc disable_daemons prepare_apt_source replace_apt_source remove_daemon_block cleanup .. _cleanup: cleanup ------- Ensure that :file:`proc` is unmounted even if the customisation fails or else the image build itself will fail to unmount :file:`${rootdir}`. .. _export_env: export_env ---------- Debconf needs to be set in noninteractive mode to prevent the image build waiting for keyboard intervention. .. _mount_proc: mount_proc ---------- Many packages require ``/proc`` to be mounted inside the chroot during installation - cleanup must be specified as a trap if ``mount_proc`` is used:: trap cleanup 0 .. _disable_daemons: disable_daemons --------------- Packages which include a daemon **must not** start those daemons inside the chroot as this will make the ``${rootdir}`` appear busy and the unmount will fail. All scripts need to use :ref:`remove_daemon_block` after package installation is complete. .. _prepare_apt_source: prepare_apt_source ------------------ The final Debian mirror location is not useful during the build when there is a faster mirror available during the build. This function moves the specified mirror file aside and uses the nearby mirror. Always use with :ref:`replace_apt_source`. Ensure that the mirror and suite are passed as arguments to prepare_apt_source:: prepare_apt_source http://mirror/debian jessie .. _remove_daemon_block: remove_daemon_block ------------------- After using :ref:`disable_daemons`, a policy script remains which needs to be removed to allow daemons to start normally when the image itself is booted. Use ``remove_daemon_block`` as the next step once package installation is complete. .. _replace_apt_source: replace_apt_source ------------------ Requires :ref:`prepare_apt_source` to have been run first, then undoes the change to the apt sources and cleans up. .. index: task .. _task_packages: TASK_PACKAGES ------------- Some task packages are useful to all images, these are specified here and should be included in the set of packages to be installed using all customisation scripts. .. index: extra .. _extra_packages: EXTRA_PACKAGES -------------- Packages which are not part of an existing task but which are useful for all images and should be included in the set of packages to be installed using all customisation scripts. .. _new_architectures: New architectures ----------------- The precursor to new architecture support is :file:`vmdebootstrap` support. A default :file:`vmdebootstrap` (with no customisation hook) will need to work and any changes to the settings (e.g. ``--no-kernel --package linux-myarch-flavour``) There is default support for some architectures in :file:`vmdebootstrap` (e.g. armhf architectures select the armmp kernel), such support depends on how many users would use the same kernel compared to the number of possible kernel flavours for that architecture. For a Debian LIVE image, **all** packages must exist in Debian. The package list also needs a review - some packages will simply not exist for the specified architecture. Some architecture-specific packages need to be added, so each architecture has a particular customisation hook script. Package names frequently change between releases, so the package selection needs to be suite specific as well.