Tuesday, June 19, 2007

Ubuntu Install CD Customization (Feisty 7.04)

This guide is for the Alternative Install or Server Install CDs

Copy the entire installation CD to a directory on your hard drive. This guide will assume your CD image is in /opt/cd-image/, but you can put it wherever you like. It will take around 1GB of hard drive space.

If you have an ISO file, you can mount it and copy files out of it without burning it to CD:

mount -o loop /image.iso /mnt
mkdir -p /opt/cd-image
cp -rT /mnt /opt/cd-image

Changing isolinux.cfg to identify your preseed

We will create a preseed file called 'my.seed', which will live in the /preseed folder of the CD-ROM. We tell d-i where to find this file by modifying the boot-loader configuration file, located in isolinux/isolinux.cfg, to pass appropriate parameters on the kernel command line. In /opt/cd-image/isolinux/isolinux.cfg, add a new section labeled like this:
LABEL my
menu label ^My Installation
kernel /install/vmlinuz
append file=/cdrom/preseed/my.seed locale=en_US
console-setup/ask_detect=false console-setup/layoutcode=us
priority=critical initrd=/install/initrd.gz ramdisk_size=16384
root=/dev/ram rw quiet --
If you want to set the default action to booting with your custom seed, change the DEFAULT line to read 'DEFAULT my'.

You must specify a locale and keyboard on the command line, as these questions are asked before the seed is loaded. You can also set priority=critical here to ensure you don't see any unnecessary debconf questions.


Writing the preseed file

A preseed file has 4 fields per line:

  1. identity of the program which will pick up this command

  2. name of the variable whose value will be passed

  3. variable type

  4. value of variable

It looks something like this (from the default ubuntu-server.seed on the 7.04 CD):

# Always install the server kernel.
d-i base-installer/kernel/override-image string linux-server
# Don't install usplash.
d-i base-installer/kernel/linux/extra-packages-2.6 string
# Desktop system not installed.
d-i archive-copier/desktop-task string ubuntu-standard
d-i archive-copier/ship-task string
# Only install the standard system and language packs.
d-i pkgsel/install-pattern string ~t^ubuntu-standard$
d-i pkgsel/language-pack-patterns string
# No language support packages.
d-i pkgsel/install-language-support boolean false
The easiest way to create a preseed file is to start with an example and modify it:

https://help.ubuntu.com/7.04/installation-guide/example-preseed.txt

If you can't find the option you're looking for you can generate a comprehensive preseed file based on your own install time choices by using debconf-get-selections

debconf-get-selections
usage:
sudo apt-get install debconf-utils # It is part of the debconf-utils.
debconf-get-selections --installer > somefile.txt
debconf-get-selections >> somefile.txt

This will output a list of all debconf options you've chosen throughout your install; you can pick options out of this and put them into your preseed file.


Modify pool structure to include more packages

Probably the prime motivation to build your own install CDs is to modify which packages are installed; in particular you may want to add some packages to the CD.

The easiest way to do this is to build an 'extras' repository structure, containing only your extra .debs, and merge these into the CD file hierarchy before rebuilding the .ISO image. This guide will step you through how to do this.

This requires you to generate the Packages files that defines what files are in your repository; the Release file that indexes your Packages files, and the signed Release.gpg file, approving the repository as being official.


Create an "Extras" component

Create directories for your new component (substituting your version where appropriate):

cd /opt/cd-image
mkdir -p dists/feisty/extras/binary-i386 pool/extras/ isolinux preseed

Put all the extra .debs you want on your CD into pool/extras.

Create the file dists/feisty/extras/binary-i386/Release with the following content:

Archive: feisty
Version: 7.04
Component: extras
Origin: Ubuntu
Label: Ubuntu
Architecture: i386

You will need to run apt-ftparchive (below) to generate the Packages file.


Generating a new ubuntu-keyring .deb to sign your CD

In order to sign the Release file, we need to use GPG. The install system will then check the signature against the public keys held in the package ubuntu-keyring. You do not have a private key that matches one of the ones in the shipped ubuntu-keyring, so we need to build a custom version of the ubuntu-keyring package. Install the gnupg package if you do not have it already.

To create a signing key, enter gpg --gen-key. Accept the defaults, (for this use, it is probably OK to use "No expiry"). For your Real Name and E-mail address, you might like to use something like "XXX Signing Key" and "packages@xxx.example.org". Enter an appropriate passphrase.

In another directory (I use /opt/build/), we will download the source for the ubuntu-keyring package, unpack it, add our own GPG key, and rebuild the package. These steps import the 2 Ubuntu public signing keys into your main keyring, then exports them, along with your own public signing key, into a replacement keyring. "YOURKEYID" should be replaced with the 8-digit hexadecimal code that gpg tells you when you do the --list-keys command."Signing Key Name" is what you used in the previous step, when running gpg --gen-key.

To clarify, below is an example 'gpg --list-keys' response. In this example, "YOURKEYID" immediately follows the '/' on the line beginning with 'pub' (which in this example is '437D05B5'.)

gpg --list-keys
pub 1024D/437D05B5 2006-09-08
uid XXX Signing Key
sub 2048g/79164387 2006-09-08

Here is an example, which you will need to customize to suit your own setup:

cd /opt/build
sudo apt-get install fakeroot # requires the fakeroot package
apt-get source ubuntu-keyring
cd ubuntu-keyring-2005.01.12.1/keyrings
gpg --import < ubuntu-archive-keyring.gpg
gpg --list-keys "Signing Key Name"
gpg --export FBB75451 437D05B5 YOURKEYID > ubuntu-archive-keyring.gpg
cd .. # you are now on ubuntu-keyring-2005.01.12.1
dpkg-buildpackage -rfakeroot -m"Your Name " -kYOURKEYID
cd .. # you are now on /opt/build
cp ubuntu-keyring*deb /opt/cd-image/pool/main/u/ubuntu-keyring

You will end up with a udeb file for the installer, and a .deb file for the system. Both files need to be copied into the main component of your CD, because the CD will not check the extras directory.


Building the repository with apt-ftparchive

apt-ftparchive builds the Packages and Packages.gz files, needed by the installer. In order to use apt-ftparchive we will need to provide it with some configuration and some index files.

We will put the index files in /opt/indices:

mkdir -p /opt/indices /opt/apt-ftparchive
cd /opt/indices/
DIST=feisty; wget http://archive.ubuntu.com/ubuntu/indices/override \
.$DIST.{extra.main,main,main.debian-installer,restricted, \
restricted.debian-installer}

Create the files apt-ftparchive-deb.conf, apt-ftparchive-udeb.conf, apt-ftparchive-extras.conf, and release.conf in a directory (/opt/apt-ftparchive), substituting /opt/cd-image/ for the path to your CD image directory, and /opt/indices/ for the location of the index files, if they differ.

/opt/apt-ftparchive/apt-ftparchive-deb.conf:
Dir {
ArchiveDir "/opt/cd-image/";
};

TreeDefault {
Directory "pool/";
};

BinDirectory "pool/main" {
Packages "dists/feisty/main/binary-i386/Packages";
BinOverride "/opt/indices/override.feisty.main";
ExtraOverride "/opt/indices/override.feisty.extra.main";
};

BinDirectory "pool/restricted" {
Packages "dists/feisty/restricted/binary-i386/Packages";
BinOverride "/opt/indices/override.feisty.restricted";
};

Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};

Contents {
Compress "gzip";
};
/opt/apt-ftparchive/apt-ftparchive-udeb.conf:
Dir {
ArchiveDir "/opt/cd-image/";
};

TreeDefault {
Directory "pool/";
};

BinDirectory "pool/main" {
Packages "dists/feisty/main/debian-installer/binary-i386/Packages";
BinOverride "/opt/indices/override.feisty.main.debian-installer";
};

BinDirectory "pool/restricted" {
Packages "dists/feisty/restricted/debian-installer/binary-i386/Packages";
BinOverride "/opt/indices/override.feisty.restricted.debian-installer";
};

Default {
Packages {
Extensions ".udeb";
Compress ". gzip";
};
};

Contents {
Compress "gzip";
};
/opt/apt-ftparchive/apt-ftparchive-extras.conf:

Dir {
ArchiveDir "/opt/cd-image/";
};

TreeDefault {
Directory "pool/";
};

BinDirectory "pool/extras" {
Packages "dists/feisty/extras/binary-i386/Packages";
};

Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};

Contents {
Compress "gzip";
};

release.conf

APT::FTPArchive::Release::Origin "Ubuntu";
APT::FTPArchive::Release::Label "Ubuntu";
APT::FTPArchive::Release::Suite "feisty";
APT::FTPArchive::Release::Version "7.04";
APT::FTPArchive::Release::Codename "feisty";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Components "main restricted extras";
APT::FTPArchive::Release::Description "Ubuntu 7.04";

To build the repository, sign it, and update the MD5SUM file, you can use a script like this:

BUILD=/opt/cd-image
APTCONF=/opt/apt-ftparchive/release.conf
DISTNAME=feisty

pushd $BUILD
apt-ftparchive -c $APTCONF generate \
/opt/apt-ftparchive/apt-ftparchive-deb.conf

apt-ftparchive -c $APTCONF generate \
/opt/apt-ftparchive/apt-ftparchive-udeb.conf

apt-ftparchive -c $APTCONF generate \
/opt/apt-ftparchive/apt-ftparchive-extras.conf

apt-ftparchive -c $APTCONF release $BUILD/dists/$DISTNAME \
>$BUILD/dists/$DISTNAME/Release

gpg --default-key "YOURKEYID" \
--output $BUILD/dists/$DISTNAME/Release.gpg \
-ba $BUILD/dists/$DISTNAME/Release

find . -type f -print0 | xargs -0 md5sum > md5sum.txt
popd

Building the ISO image

IMAGE=custom.iso
BUILD=/opt/cd-image/

mkisofs -r -V "Custom Ubuntu Install CD" \
-cache-inodes \
-J -l -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table \
-o $IMAGE $BUILD

6 comments:

Anonymous said...

Download videos and read stories about incest: [url=http://www.adambagatto.com/picture_library/bbw-mature-homemade-porn.html ]Bbw Mother [/url], [url=http://www.adambagatto.com/video/video/mom-porn-thumbs.html ]Incest Rape Stories [/url], [url=http://www.adambagatto.com/images/gallery/3D/photograph-incest.html ]Hot Sexy Moms [/url], [url=http://www.andrewdabeka.ca/images/full-family-incestous.html ]Ambicom Wp Sa Wireless Printer Slave Adapter [/url], [url=http://www.andrewdabeka.ca/img/icons/abused-grannies-porn.html ]Mom Fuckers [/url], [url=http://www.andrewdabeka.ca/picture_library/mom-and-son-incst.html ]Incest Daughter Father [/url], [url=http://www.ashphotography.ca/images/big-sister-porn-germany.html ]Leland Dog The Bounty Hunters Son [/url], [url=http://www.ashphotography.ca/zenphoto/uploaded/sex-mature-porn.html ]Big Family Incests [/url], [url=http://www.ashphotography.ca/jes-new/pages/incest-sex-move.html ]Daughter Incest Incest [/url], [url=http://www.ashphotography.ca/justine/granny-and-grandson-porn.html ]Gay Dad Son Sex [/url]

Anonymous said...

Download videos and read stories about incest: [url=http://dannycraig.com/img/glyph ]Mom And Son Fuck [/url], [url=http://creditvalleyexplorertourtrain.com/map.html ]My Hot Mom [/url], [url=http://degeneratemeonline.com/httpdocs ]Moms Need Dick [/url], [url=http://debbiebraden.ca//1124/map.html ]Incest Story [/url], [url=http://dannycraig.com/images/small ]Teen Mothers On Welfare [/url], [url=http://dannycraig.com/tracks/map.html ]Forced Incest [/url], [url=http://creditvalleyexplorertourtrain.com ]Mom And Son Fucking [/url], [url=http://dannycraig.com/images/small/map.html ]Drunk Mom Fucks Son [/url], [url=http://debbiebraden.ca/img/glyph ]Nude Hot Moms [/url], [url=http://degeneratemeonline.com/winoverwomen/map.html ]Amanda Father 3D Incest [/url]

Anonymous said...

What phrase... super, excellent idea

Anonymous said...

Big to you thanks for the help in this question. I did not know it.

Anonymous said...

[url=http://www.lkinney.com/images]son incest mother [/url] : [url=http:/www.triplestarmfg.com/Downloads]aunt nephew nude [/url] : [url=http://www.tekcelsolar.com/TEKCEL web images]erotic incest pics [/url] : [url=http://www.strathconatriclub.ca/aussi_pics_files/_vti_cnf]father and daughter sex [/url] : [url=http://www.stgert.com/blog]incest private collection [/url] : [url=http://www.sharonfox.ca/img]sexy sister [/url]

Anonymous said...

[url=http://www.lkinney.com/images][url=http://www.richardreid.ca/picture_library]incest on video [/url] <> [url=http:/www.tekcelsolar.com/images]family mpegs [/url] <> [url=http://www.stgert.com/images]mom son incest gallery [/url] <> [url=http://www.peinteck.com/img]family incest sites [/url] <> [url=http://www.sharonfox.ca/images]drunk mom son [/url] <> [url=http://www.strathconatriclub.ca/photogallery/photo00023542]art porn incest [/url]