linux install party customization kit
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
contrib
legacy_scripts
patches
scripts
.gitignore
COPYING
Makefile
README
TODO

README

Linux Install Party Customization Kit (lipck)
=============================================

Content
-------

0. License
1. About
2. Requirements
3. HowTo
4. Tips

License
-------

lipck is licensed under the GPLv3. See the COPYING file for further
details.


About
-----

lipck is a helper tool for remastering Ubuntu based distributions. Amongst
others it can
- apply patches to rootfs/isofs/initramfs,
- update the initramfs kernel,
- preinstall packages into the rootfs,
- provide a custom package archive on the install media; this allows a user
  to install extra packages without internet access,
- merge i386 and amd64 install media (including file deduplication and
  automated architecture recognition in grub),
- autogenerate grub configuration from templates.

In comparison to other tools, like UCK, the host system is independent of the
system remastered. Furthermore, the host is kept clean with respect to resources
(like mount points). This is achieved by using linux namespaces/lxc.

However, in its current state each version of lipck (git tag/commit) is designed
for a specific Ubuntu version. While the version/source image can be configured
freely, patches and static files (i.e. those in the contrib directory) are
not versionized and do only apply to a single Ubuntu image.

Originally, lipck was (or still is) created to remaster install images for
linux install fests organized by members of the Open Source Arbeitskreis of
the Fachschaft 1/1 Mathematik, Physik, Informatik of the RWTH Aachen University.
It is published in hope that it will be useful for someone else as well.


Requirements
------------

lipck makes use of the following tools (make sure they are installed):

- 7z
- bzip2
- cpio
- diff
- git
- (GNU) ddrescue
- (GNU) make
- grub (i386-pc, i386-efi, x86_64-efi)
- lxc
- patch
- rsync
- squashfs-tools (mksquashfs, unsquashfs)
- tar
- util-linux
- wget
- xz/lzma

And, optionally,

- VirtualBox tools (vboxmanage) to create a vmdk image.

HowTo
-----

In short: run
	$ make WORKSPACE=/media/drivewithspace config
	# make image
	# make repo  #build offline repository (optionally)
	# make IMAGE_FILE=/somewhere/myfinalimage.img image_deploy
	# make IMAGE_FILE=/somewhere/myfinalimage.img image_deploy_vmdk

where the first command should be executed as user (the owner of the lipck git)
and all others as root. /media/drivewhitspace should provide enough disk space
to store the basic isos, the extracted rootfs/initramfs, etc. (~40G should
suffice). image_deploy will assemble the final (raw) image. The last command
is optional again (note that IMAGE_FILE should have the same value as in the
previous line).

In practise, you may want to edit some configuration files/patches prior to
invoking make as described above:

- the most important config file is config/Makefile.conf where, among others,
  the base iso can be configured. See config/examples for more details.

- contrib/rootfs/{hold_packages,pre_installed_packages*} lets you control the
  packages that will be installed preinstalled in the rootfs.

- contrib/rootfs/offline_repo.json defines all packages available in the
  offline repository.

- Files in contrib/rootfs/{modprobe.d,skel,sysctl.d} will be copied as is
  to the corresponding folders in the rootfs.

- patches/{initrd,iso,rootfs} contains patches for the initramfs,
  iso/images root, and the rootfs. Probably they have to be adapted for
  new iso base images. Unfortunaly, version/iso specific patches are not
  supported yet.

Lastly, you may want to spawn a shell in the rootfs being remastered with

	# make rootfs_console

to debug stuff.


Tips
-----

- If the rootfs_remaster target failed, it may the neccessary to execute the
  next make command two times (the first time a dirty state will be discovered
  and fixed).

- code executed in the rootfs is located in scripts/, you may need to execute

	# make rootfs_finalize

  to trigger a reload of this code.


Happy hacking!