个人工具

“UbuntuHelp:InstallCDCustomization”的版本间的差异

来自Ubuntu中文

跳转至: 导航, 搜索
 
(未显示同一用户的8个中间版本)
第3行: 第3行:
 
== Introduction ==
 
== Introduction ==
 
The process of customizing or "remastering" Ubuntu install CDs is not especially complex, but it is a little tedious and finicky. This page documents all the problems you might find; if it doesn't, please edit it!
 
The process of customizing or "remastering" Ubuntu install CDs is not especially complex, but it is a little tedious and finicky. This page documents all the problems you might find; if it doesn't, please edit it!
The Ubuntu install CD (since Ubuntu 6.06, the 'alternative install' or 'server' CD) has three main parts: a boot-loader (ISOLINUX on AMD64/x86 systems, yaboot on PowerPC) and its configuration, which start everything up; debian-installer (also known as d-i), which in this case is really a specialized miniature Ubuntu system; and a Debian-style repository structure, which is what takes up all that space on the disk in the directories "pool" and "dists". Building a new CD may involve modifications to all three parts.
+
The Ubuntu install CD (since Ubuntu 6.06, the 'alternative install' or 'server' CD) has three main parts: a boot-loader (ISOLINUX on AMD64/x86 systems, yaboot on PowerPC) and its configuration, which starts everything up; debian-installer (also known as d-i), which in this case is really a specialized miniature Ubuntu system; and a Debian-style repository structure, which is what takes up all that space on the disk in the directories "pool" and "dists". Building a new CD may involve modifications to all three parts.
This page shows a simple recipe for customizing the CD. It assumes that you copy the contents of the install CD to `/opt/build/` on your local system and create a couple of other dirs in `/opt/`. Modify as needed.
+
This page shows a simple recipe for customizing the CD. It assumes that you copy the contents of the install CD to `/opt/cd-image/` on your local system and create a couple of other dirs in `/opt/`. Modify as needed.
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=note.png You might speed up the development cycle by using a virtual Ubuntu session, for example, using [[UbuntuHelp:VirtualBox|VirtualBox]].  You can then use the .ISO file to test rather than burning a CD.  If you do, please note that you need to perform ALL operations described here on the GUEST system.  Note that with [[UbuntuHelp:VirtualBox|VirtualBox]], during an installation (Host key)-F4 will display the installation output and (Host key)-F1 will return you to the general status screen.  Note that the host key is set to the right Ctrl key by default.
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=note.png This guide is for the Alternative Install or Server Install CDs. There is a page referring to customization of the [[UbuntuHelp:LiveCDCustomization | Desktop (Live) CD]], and another guide on [[UbuntuHelp:LiveCDCustomizationFromScratch | how to create a Live CD without using an existing CD at all.]]
 +
== Get the Alternate CD image ==
 +
Use the "complete list of download mirrors"
 +
http://www.ubuntu.com/getubuntu/downloadmirrors#mirrors
 +
Then select correct Ubuntu version and from the next page start downlaoding the iso file from "Alternate install CD" section. Server version should also work.
 
== Copy the CD to your hard drive ==
 
== Copy the CD to your hard drive ==
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=warning.png This guide is for the Alternative Install or Server Install CDs; there is another page referrring to [[UbuntuHelp:LiveCDCustomization| customization of the Desktop/Live CD]].
 
 
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.
 
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 /path/to/iso /some/mountpoint`.
+
If you have an ISO file, you can mount it and copy files out of it without burning it to CD: `mount -o loop /path/to/iso /some/mountpoint`. Use "Gmount-iso" program for a GUI method of mounting iso files. You can also try "ISO Master" to access the iso file directly without mounting.
You can use '''rsync''' to copy the CD, or just
+
You can use '''rsync''' to copy the CD:
 +
<pre><nowiki>
 +
rsync -av /cdrom/ /opt/cd-image
 +
</nowiki></pre>
 +
or just
 
<pre><nowiki>
 
<pre><nowiki>
 
mkdir -p /opt/cd-image
 
mkdir -p /opt/cd-image
第15行: 第24行:
 
</nowiki></pre>
 
</nowiki></pre>
 
Be sure to catch the folder ''.disk'' - if you try and copy /cdrom/*, it will ignore the .disk folder, as Bash expands the * to mean "everything it can see".
 
Be sure to catch the folder ''.disk'' - if you try and copy /cdrom/*, it will ignore the .disk folder, as Bash expands the * to mean "everything it can see".
 +
If you use a filemanager program like Nautilus, be sure to launch it with "gksu nautilus" and mark "Show Hidden Files" from "View" menu or you miss some important files. After the copy is done, change file ownership from "root" if you don't plan to do the rest of the work with sudo.
 
== Modify installer behaviour using a Preseed file ==
 
== Modify installer behaviour using a Preseed file ==
When the CD boots up, a Linux kernel is started and the installation tasks are initiated.  The installer's default behavior can be modified through the use of a "preseed" file, which feeds d-i answers to questions normally asked by debconf, or in other contexts.  If you look in the `preseed` folder in the install CD, you'll see that certain options (e.g. "server", "expert", "oem") already have preseed files assigned to them. The Edgy (6.10) [https://help.ubuntu.com/6.10/ubuntu/installation-guide/i386/appendix-preseed.html installation guide] has a detailed appendix on preseeding (although see below for details on differences between Edgy and earlier versions).
+
When the CD boots up, a Linux kernel is started and the installation tasks are initiated.  The installer's default behavior can be modified through the use of a "preseed" file, which feeds d-i answers to questions normally asked by debconf, or in other contexts.  If you look in the `preseed` folder in the install CD, you'll see that certain options (e.g. "server", "expert", "oem") already have preseed files assigned to them. The [https://help.ubuntu.com/9.10/installation-guide/i386/preseed-using.html installation guide] has a detailed appendix on preseeding.
 
Suppose you are installing Ubuntu on a bunch of identical computers, and you already know the answers to certain questions (what country and time zone you're in, what keyboard you have, how the network should be configured, how you want to partition the hard disk, etc).  You can "preseed" the answers to these questions in a very simple configuration file.
 
Suppose you are installing Ubuntu on a bunch of identical computers, and you already know the answers to certain questions (what country and time zone you're in, what keyboard you have, how the network should be configured, how you want to partition the hard disk, etc).  You can "preseed" the answers to these questions in a very simple configuration file.
 
=== Changing isolinux.cfg to identify your preseed ===
 
=== Changing isolinux.cfg to identify your preseed ===
We will create a preseed file called 'firewall.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:
+
We will create a preseed file called 'firewall.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 (or in 8.10 or later, isolinux/text.cfg), to pass appropriate parameters on the kernel command line.  In /opt/cd-image/isolinux/isolinux.cfg, add a new section labeled like this:
 
<pre><nowiki>
 
<pre><nowiki>
 
LABEL firewall
 
LABEL firewall
 
   menu label ^Firewall installation
 
   menu label ^Firewall installation
 
   kernel /install/vmlinuz
 
   kernel /install/vmlinuz
   append  preseed/file=/cdrom/preseed/firewall.seed debian-installer/locale=en_NZ kbd-chooser/method=us initrd=/install/initrd.gz ramdisk_size=16384 root=/dev/ram rw quiet --
+
   append  preseed/file=/cdrom/preseed/firewall.seed debian-installer/locale=en_NZ console-setup/layoutcode=us initrd=/install/initrd.gz ramdisk_size=16384 root=/dev/ram rw quiet --
 
</nowiki></pre>
 
</nowiki></pre>
If you want to set the default action to booting with your custom seed, change the DEFAULT line to read 'DEFAULT firewall'.
+
If you want to set the default selected menu item to your custom seed, change the DEFAULT line to read 'DEFAULT firewall'.
 +
For totally automatic installation with a predefined language (in this example, Estonian), you need to add some more parameters:
 +
<pre><nowiki>
 +
LABEL firewall
 +
  menu label ^Firewall installation (Estonian)
 +
  kernel /install/vmlinuz
 +
  append  file=/cdrom/preseed/firewall.seed debian-installer/locale=et_EE console-setup/layoutcode=et localechooser/translation/warn-light=true localechooser/translation/warn-severe=true initrd=/install/initrd.gz ramdisk_size=16384 root=/dev/ram rw quiet
 +
--
 +
</nowiki></pre>
 +
To make the installer autochoose the default option and start installing after a timeout, add this line to isolinux/isolinux.cfg (in all versions).
 +
<pre><nowiki>
 +
timeout 10
 +
</nowiki></pre>
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=note.png Timeout values are in tenths of a second, therefore a timeout value of 10 is equal to one second.
 
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 DEBCONF_PRIORITY here to ensure you don't see any unnecessary debconf questions.
 
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 DEBCONF_PRIORITY here to ensure you don't see any unnecessary debconf questions.
 +
(On Ubuntu 6.06 and older, use `kbd-chooser/method=us` rather than `console-setup/layoutcode=us`.)
 
=== Writing the preseed file ===
 
=== Writing the preseed file ===
 
A preseed file has 4 fields per line:
 
A preseed file has 4 fields per line:
# identity of the program which will pick up this command
+
<ol><li>identity of the program which will pick up this command
2. name of the variable whose value will be passed
+
</li><li>name of the variable whose value will be passed
3. variable type
+
</li><li>variable type
4. value of variable
+
</li><li>value of variable</li></ol>
 +
 
 
It looks something like this (from the default ubuntu-server.seed on the 6.06 CD):
 
It looks something like this (from the default ubuntu-server.seed on the 6.06 CD):
 
<pre><nowiki>
 
<pre><nowiki>
第52行: 第77行:
 
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png  d-i expects there to be [http://d-i.alioth.debian.org/manual/en.i386/apbs03.html exactly one tab or space between variable type and variable value] (any other space is seen as being part of the value)
 
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png  d-i expects there to be [http://d-i.alioth.debian.org/manual/en.i386/apbs03.html exactly one tab or space between variable type and variable value] (any other space is seen as being part of the value)
 
The easiest way to create a preseed file is to start with an example and modify it:
 
The easiest way to create a preseed file is to start with an example and modify it:
# You could check out [http://wiki.debian.org/DebianInstaller/Preseed Debian's wiki page on preseeding the installer] - 6.06 and higher use the Etch version of the Debian installer.
+
<ol><li>The Ubuntu installation guide ([https://help.ubuntu.com/8.04/installation-guide/i386/preseed-contents.html 8.04], [https://help.ubuntu.com/9.04/installation-guide/i386/preseed-contents.html 9.04], [https://help.ubuntu.com/9.10/installation-guide/i386/preseed-contents.html 9.10], [https://help.ubuntu.com/10.04/installation-guide/i386/preseed-contents.html 10.04]) has examples of many common preseed directives. (Bear in mind that you may need to modify some to work on older versions.)
2. The Edgy (6.10) [https://help.ubuntu.com/6.10/ubuntu/installation-guide/i386/preseed-contents.html install guide] has examples of many common preseed directives. (Bear in mind that you may need to modify some to work on older versions.)
+
</li><li>You could check out [http://wiki.debian.org/DebianInstaller/Preseed Debian's wiki page on preseeding the installer] - 6.06 and higher are aligned with Etch and newer versions of the Debian installer, although there are some important differences that apply to preseeding.
3. 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`
+
</li><li>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`</li></ol>
 +
 
 
`debconf-get-selections` usage:
 
`debconf-get-selections` usage:
 
<pre><nowiki>
 
<pre><nowiki>
第64行: 第90行:
 
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=warning.png debconf-get-selections prints '''2''' spaces between variable type and variable value.  You need to change this to one space before putting the line in a preseed file.
 
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=warning.png debconf-get-selections prints '''2''' spaces between variable type and variable value.  You need to change this to one space before putting the line in a preseed file.
 
==== Installing extra packages in your preseed file ====
 
==== Installing extra packages in your preseed file ====
base-config has been removed from debian-installer since Ubuntu 6.06. Use:
+
base-config has been removed from debian-installer since Ubuntu 6.06.
 +
In Ubuntu 6.06 and older:
 
<pre><nowiki>
 
<pre><nowiki>
 
d-i    pkgsel/install-pattern          string ~t^ubuntu-standard$|~n^openssh-server$
 
d-i    pkgsel/install-pattern          string ~t^ubuntu-standard$|~n^openssh-server$
 +
</nowiki></pre>
 +
In Ubuntu 8.04 and newer: (packages may be separated with commas and/or spaces and continued to another line with a back-slash):
 +
<pre><nowiki>
 +
d-i    pkgsel/include  string  gstreamer0.10-plugins-base \
 +
gstreamer0.10-plugins-good \
 +
gstreamer0.10-plugins-ugly \
 +
gstreamer0.10-plugins-bad
 
</nowiki></pre>
 
</nowiki></pre>
 
==== Installing language support ====
 
==== Installing language support ====
第73行: 第107行:
 
d-i localechooser/supported-locales multiselect bn_IN, ta_IN
 
d-i localechooser/supported-locales multiselect bn_IN, ta_IN
 
</nowiki></pre>
 
</nowiki></pre>
 +
==== Running a Final Script ====
 +
You can run a script in the final part of the installation. The following example runs a script that has been copied onto the installation CD in the setup/install folder.  This script runs in the target environment, thus can run scripts in any language (e.g. Python or Perl) that has been installed on the target system.
 +
<pre><nowiki>
 +
d-i preseed/late_command string chroot /target bash /cdrom/setup/install/settings.sh
 +
</nowiki></pre>
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=warning.png The above command may not work on 8.10 or later; to copy the script to the target and then execute it, try this:
 +
<pre><nowiki>
 +
d-i preseed/late_command string cp /cdrom/finisher/finisher.sh /target/root/; chroot /target chmod +x /root/finisher.sh; chroot /target bash /root/finisher.sh
 +
</nowiki></pre>
 +
Generally, a script run from the seed file via late_command, cannot interact with the user. If you need to interact, there are generally three options:
 +
* Create a custom UDEB that interacts with debconf, and include it with the CD.
 +
* Create a 'firstrun' script that executes the first time the system boots, and disables itself on completion.
 +
* [[UbuntuHelp:InstallCDCustomization/AccessDebconfFromYourScript|Access debconf directly within your script]].
 
== Modify pool structure to include more packages ==
 
== 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.
 
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.
第78行: 第125行:
 
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.
 
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 an "Extras" component ===
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png The following examples reference Ubuntu 8.04 ("hardy").  Substitute your version where appropriate.
 
Create directories for your new component (substituting your version where appropriate):
 
Create directories for your new component (substituting your version where appropriate):
 
<pre><nowiki>
 
<pre><nowiki>
 
cd /opt/cd-image
 
cd /opt/cd-image
mkdir -p dists/dapper/extras/binary-i386 pool/extras/ isolinux preseed
+
mkdir -p dists/hardy/extras/binary-i386/pool/extras/
 
</nowiki></pre>
 
</nowiki></pre>
 
Put all the extra .debs you want on your CD into `pool/extras`.
 
Put all the extra .debs you want on your CD into `pool/extras`.
Create the file `dists/dapper/extras/binary-i386/Release` with the following content:
+
Create the file `dists/hardy/extras/binary-i386/Release` with the following content:
 
<pre><nowiki>
 
<pre><nowiki>
Archive: dapper
+
Archive: hardy
Version: 6.06
+
Version: 8.04
 
Component: extras
 
Component: extras
 
Origin: Ubuntu
 
Origin: Ubuntu
第97行: 第145行:
 
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.
 
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 "[email protected]". Enter an appropriate passphrase.
 
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 "[email protected]". 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`.
+
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'.)
 
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'.)
 
<pre><nowiki>
 
<pre><nowiki>
第110行: 第158行:
 
sudo apt-get install fakeroot  # requires the fakeroot package which may not be installed on your system.
 
sudo apt-get install fakeroot  # requires the fakeroot package which may not be installed on your system.
 
apt-get source ubuntu-keyring
 
apt-get source ubuntu-keyring
cd ubuntu-keyring-2005.01.12.1/keyrings
+
cd ubuntu-keyring-2008.03.04/keyrings
 
gpg --import < ubuntu-archive-keyring.gpg
 
gpg --import < ubuntu-archive-keyring.gpg
 
gpg --list-keys "Signing Key Name"
 
gpg --list-keys "Signing Key Name"
 
gpg --export FBB75451 437D05B5 YOURKEYID > ubuntu-archive-keyring.gpg
 
gpg --export FBB75451 437D05B5 YOURKEYID > ubuntu-archive-keyring.gpg
cd ..    # you are now on ubuntu-keyring-2005.01.12.1
+
cd ..    # you are now on ubuntu-keyring-2008.03.04
 
dpkg-buildpackage -rfakeroot -m"Your Name <[email protected]>" -kYOURKEYID
 
dpkg-buildpackage -rfakeroot -m"Your Name <[email protected]>" -kYOURKEYID
 
cd ..  # you are now on the directory where you started, in the example, /opt/build
 
cd ..  # you are now on the directory where you started, in the example, /opt/build
第122行: 第170行:
 
=== Building the repository with apt-ftparchive ===
 
=== 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.
 
`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.
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png If you will be adding .deb files to pool/universe (eg. customizing xubuntu) you will also need to wget extra.universe and universe files.
 
We will put the index files in `/opt/indices`:
 
We will put the index files in `/opt/indices`:
 
<pre><nowiki>
 
<pre><nowiki>
 
mkdir -p /opt/indices /opt/apt-ftparchive
 
mkdir -p /opt/indices /opt/apt-ftparchive
 
cd /opt/indices/
 
cd /opt/indices/
DIST=dapper; wget http://archive.ubuntu.com/ubuntu/indices/override.$DIST.{extra.main,main,main.debian-installer,restricted,restricted.debian-installer}
+
DIST=hardy
 +
for SUFFIX in extra.main main main.debian-installer restricted restricted.debian-installer; do
 +
  wget http://archive.ubuntu.com/ubuntu/indices/override.$DIST.$SUFFIX
 +
done
 
</nowiki></pre>
 
</nowiki></pre>
 
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.
 
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.
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png The .conf files shown here are sufficient if you are ONLY making changes to .deb files under pool/main and pool/restricted.  If you are adding security updates to a Xubuntu customized CD, though, you will be updating .deb files under pool/universe also, so you will need to add lines to `apt-ftparchive-deb.conf` for universe, similar to the lines shown for main.  You will also need to run extraoverride.pl for universe as well as for main - see below.
 
<u>/opt/apt-ftparchive/apt-ftparchive-deb.conf:</u>
 
<u>/opt/apt-ftparchive/apt-ftparchive-deb.conf:</u>
 
<pre><nowiki>
 
<pre><nowiki>
第140行: 第193行:
  
 
BinDirectory "pool/main" {
 
BinDirectory "pool/main" {
   Packages "dists/dapper/main/binary-i386/Packages";
+
   Packages "dists/hardy/main/binary-i386/Packages";
   BinOverride "/opt/indices/override.dapper.main";
+
   BinOverride "/opt/indices/override.hardy.main";
   ExtraOverride "/opt/indices/override.dapper.extra.main";
+
   ExtraOverride "/opt/indices/override.hardy.extra.main";
 
};
 
};
  
 
BinDirectory "pool/restricted" {
 
BinDirectory "pool/restricted" {
  Packages "dists/dapper/restricted/binary-i386/Packages";
+
  Packages "dists/hardy/restricted/binary-i386/Packages";
  BinOverride "/opt/indices/override.dapper.restricted";
+
  BinOverride "/opt/indices/override.hardy.restricted";
 
};
 
};
  
第161行: 第214行:
 
};
 
};
 
</nowiki></pre>
 
</nowiki></pre>
The ExtraOverride component above is needed to add the Task header to main packages, referenced from the preseed file with ~t<task name>. This is not supplied - but can be extracted from the existing main Packages file with a simple perl script :-
+
The ExtraOverride component above is needed to add the `Task:` line to main packages, referenced from the preseed file with ~t<task name>. This is not supplied - but can be extracted from the existing main Packages file with the simple perl script below.
 
<pre><nowiki>
 
<pre><nowiki>
 
#! /usr/bin/perl
 
#! /usr/bin/perl
第167行: 第220行:
 
# generate ExtraOverride file
 
# generate ExtraOverride file
 
# use as follows :-
 
# use as follows :-
# extraoverride.pl < /opt/cd-image/dists/dapper/main/binary-i386/Packages >> /opt/indices/override.dapper.extra.main
+
# extraoverride.pl < /opt/cd-image/dists/hardy/main/binary-i386/Packages >> /opt/indices/override.hardy.extra.main
  
 
while (<>) {
 
while (<>) {
第186行: 第239行:
 
}
 
}
 
</nowiki></pre>
 
</nowiki></pre>
 +
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=note.png If customizing Xubuntu, and adding new .deb files to pool/universe, run this script for the universe repository also.
 
<u>/opt/apt-ftparchive/apt-ftparchive-udeb.conf:</u>
 
<u>/opt/apt-ftparchive/apt-ftparchive-udeb.conf:</u>
 
<pre><nowiki>
 
<pre><nowiki>
第197行: 第251行:
  
 
BinDirectory "pool/main" {
 
BinDirectory "pool/main" {
   Packages "dists/dapper/main/debian-installer/binary-i386/Packages";
+
   Packages "dists/hardy/main/debian-installer/binary-i386/Packages";
   BinOverride "/opt/indices/override.dapper.main.debian-installer";
+
   BinOverride "/opt/indices/override.hardy.main.debian-installer";
 
};
 
};
  
 
BinDirectory "pool/restricted" {
 
BinDirectory "pool/restricted" {
   Packages "dists/dapper/restricted/debian-installer/binary-i386/Packages";
+
   Packages "dists/hardy/restricted/debian-installer/binary-i386/Packages";
   BinOverride "/opt/indices/override.dapper.restricted.debian-installer";
+
   BinOverride "/opt/indices/override.hardy.restricted.debian-installer";
 
};
 
};
  
第228行: 第282行:
  
 
BinDirectory "pool/extras" {
 
BinDirectory "pool/extras" {
   Packages "dists/dapper/extras/binary-i386/Packages";
+
   Packages "dists/hardy/extras/binary-i386/Packages";
 
};
 
};
  
第242行: 第296行:
 
};
 
};
 
</nowiki></pre>
 
</nowiki></pre>
<u>release.conf</u>
+
https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=important.png
 +
You need to build the Packages file in ''dists/hardy/extras/binary-i386/Packages'' using ''dpkg-scanpackages''. See [http://www.debian.org/doc/manuals/repository-howto/repository-howto here] for an explanation.
 +
<u>/opt/apt-ftparchive/release.conf</u>
 
This is the configuration file for apt-ftparchive.  Change to suit your distribution version:
 
This is the configuration file for apt-ftparchive.  Change to suit your distribution version:
 
<pre><nowiki>
 
<pre><nowiki>
 
APT::FTPArchive::Release::Origin "Ubuntu";
 
APT::FTPArchive::Release::Origin "Ubuntu";
 
APT::FTPArchive::Release::Label "Ubuntu";
 
APT::FTPArchive::Release::Label "Ubuntu";
APT::FTPArchive::Release::Suite "dapper";
+
APT::FTPArchive::Release::Suite "hardy";
APT::FTPArchive::Release::Version "6.06";
+
APT::FTPArchive::Release::Version "8.04";
APT::FTPArchive::Release::Codename "dapper";
+
APT::FTPArchive::Release::Codename "hardy";
 
APT::FTPArchive::Release::Architectures "i386";
 
APT::FTPArchive::Release::Architectures "i386";
 
APT::FTPArchive::Release::Components "main restricted extras";
 
APT::FTPArchive::Release::Components "main restricted extras";
APT::FTPArchive::Release::Description "Ubuntu 6.06 LTS";
+
APT::FTPArchive::Release::Description "Ubuntu 8.04 LTS";
 
</nowiki></pre>
 
</nowiki></pre>
 
To build the repository, sign it, and update the MD5SUM file, you can use a script like this:
 
To build the repository, sign it, and update the MD5SUM file, you can use a script like this:
第258行: 第314行:
 
BUILD=/opt/cd-image
 
BUILD=/opt/cd-image
 
APTCONF=/opt/apt-ftparchive/release.conf
 
APTCONF=/opt/apt-ftparchive/release.conf
DISTNAME=dapper
+
DISTNAME=hardy
  
 
pushd $BUILD
 
pushd $BUILD
第270行: 第326行:
 
popd
 
popd
 
</nowiki></pre>
 
</nowiki></pre>
 +
"YOURKEYID" is the key id you put in your own compiled keyring package before.
 
== Burning the CD ==
 
== Burning the CD ==
 
At this point, you have a directory which is ready to be collected into an .ISO file and then burnt to a CD.
 
At this point, you have a directory which is ready to be collected into an .ISO file and then burnt to a CD.
第295行: 第352行:
 
             -chrp-boot -iso-level 2 -part -no-desktop \
 
             -chrp-boot -iso-level 2 -part -no-desktop \
 
             -hfs-bless $BUILD/install \
 
             -hfs-bless $BUILD/install \
             -hfs-volid Ubuntu/PowerPC_dapper \
+
             -hfs-volid Ubuntu/PowerPC_hardy \
 
             -o $IMAGE $BUILD
 
             -o $IMAGE $BUILD
 
</nowiki></pre>
 
</nowiki></pre>
第318行: 第375行:
 
== Troubleshooting ==
 
== Troubleshooting ==
 
* If your CD fails to read, try re-burning it, possibly at a slower speed.
 
* If your CD fails to read, try re-burning it, possibly at a slower speed.
* If you get a red d-i screen, check the error message (use Alt-F2, Alt-F3 etc to cycle through the terminals to read the log), and fix your CD appropriately.
+
* If you get a red d-i screen, check the error message (use Alt-F2, Alt-F3 etc to cycle through the terminals to read the log), and fix your CD appropriately. The log file is  /var/log/syslog , check the last lines.
 
== See also ==
 
== See also ==
Check out some [[UbuntuHelp:InstallCDCustomization/Scripts|install CD customization scripts]] that can be used to automate this process.
+
* Check out some [[UbuntuHelp:InstallCDCustomization/Scripts|install CD customization scripts]] that can be used to automate this process.
 +
* An [http://striimer.ee/UnattendedUbuntu/MainPage/index.html "Unattended Ubuntu"] guide in Estonian is also available.
  
 
[[category:UbuntuHelp]]
 
[[category:UbuntuHelp]]

2010年5月19日 (三) 22:52的最新版本

Introduction

The process of customizing or "remastering" Ubuntu install CDs is not especially complex, but it is a little tedious and finicky. This page documents all the problems you might find; if it doesn't, please edit it! The Ubuntu install CD (since Ubuntu 6.06, the 'alternative install' or 'server' CD) has three main parts: a boot-loader (ISOLINUX on AMD64/x86 systems, yaboot on PowerPC) and its configuration, which starts everything up; debian-installer (also known as d-i), which in this case is really a specialized miniature Ubuntu system; and a Debian-style repository structure, which is what takes up all that space on the disk in the directories "pool" and "dists". Building a new CD may involve modifications to all three parts. This page shows a simple recipe for customizing the CD. It assumes that you copy the contents of the install CD to `/opt/cd-image/` on your local system and create a couple of other dirs in `/opt/`. Modify as needed. IconsPage?action=AttachFile&do=get&target=note.png You might speed up the development cycle by using a virtual Ubuntu session, for example, using VirtualBox. You can then use the .ISO file to test rather than burning a CD. If you do, please note that you need to perform ALL operations described here on the GUEST system. Note that with VirtualBox, during an installation (Host key)-F4 will display the installation output and (Host key)-F1 will return you to the general status screen. Note that the host key is set to the right Ctrl key by default. IconsPage?action=AttachFile&do=get&target=note.png This guide is for the Alternative Install or Server Install CDs. There is a page referring to customization of the Desktop (Live) CD, and another guide on how to create a Live CD without using an existing CD at all.

Get the Alternate CD image

Use the "complete list of download mirrors" http://www.ubuntu.com/getubuntu/downloadmirrors#mirrors Then select correct Ubuntu version and from the next page start downlaoding the iso file from "Alternate install CD" section. Server version should also work.

Copy the CD to your hard drive

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 /path/to/iso /some/mountpoint`. Use "Gmount-iso" program for a GUI method of mounting iso files. You can also try "ISO Master" to access the iso file directly without mounting. You can use rsync to copy the CD:

rsync -av /cdrom/ /opt/cd-image

or just

mkdir -p /opt/cd-image
cp -rT /cdrom /opt/cd-image

Be sure to catch the folder .disk - if you try and copy /cdrom/*, it will ignore the .disk folder, as Bash expands the * to mean "everything it can see". If you use a filemanager program like Nautilus, be sure to launch it with "gksu nautilus" and mark "Show Hidden Files" from "View" menu or you miss some important files. After the copy is done, change file ownership from "root" if you don't plan to do the rest of the work with sudo.

Modify installer behaviour using a Preseed file

When the CD boots up, a Linux kernel is started and the installation tasks are initiated. The installer's default behavior can be modified through the use of a "preseed" file, which feeds d-i answers to questions normally asked by debconf, or in other contexts. If you look in the `preseed` folder in the install CD, you'll see that certain options (e.g. "server", "expert", "oem") already have preseed files assigned to them. The installation guide has a detailed appendix on preseeding. Suppose you are installing Ubuntu on a bunch of identical computers, and you already know the answers to certain questions (what country and time zone you're in, what keyboard you have, how the network should be configured, how you want to partition the hard disk, etc). You can "preseed" the answers to these questions in a very simple configuration file.

Changing isolinux.cfg to identify your preseed

We will create a preseed file called 'firewall.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 (or in 8.10 or later, isolinux/text.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 firewall
  menu label ^Firewall installation
  kernel /install/vmlinuz
  append  preseed/file=/cdrom/preseed/firewall.seed debian-installer/locale=en_NZ console-setup/layoutcode=us initrd=/install/initrd.gz ramdisk_size=16384 root=/dev/ram rw quiet --

If you want to set the default selected menu item to your custom seed, change the DEFAULT line to read 'DEFAULT firewall'. For totally automatic installation with a predefined language (in this example, Estonian), you need to add some more parameters:

LABEL firewall
  menu label ^Firewall installation (Estonian)
  kernel /install/vmlinuz
  append  file=/cdrom/preseed/firewall.seed debian-installer/locale=et_EE console-setup/layoutcode=et localechooser/translation/warn-light=true localechooser/translation/warn-severe=true initrd=/install/initrd.gz ramdisk_size=16384 root=/dev/ram rw quiet
 --

To make the installer autochoose the default option and start installing after a timeout, add this line to isolinux/isolinux.cfg (in all versions).

timeout 10

IconsPage?action=AttachFile&do=get&target=note.png Timeout values are in tenths of a second, therefore a timeout value of 10 is equal to one second. 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 DEBCONF_PRIORITY here to ensure you don't see any unnecessary debconf questions. (On Ubuntu 6.06 and older, use `kbd-chooser/method=us` rather than `console-setup/layoutcode=us`.)

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 6.06 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; don't waste time and disk space copying it.
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

IconsPage?action=AttachFile&do=get&target=important.png The version of this file on some Breezy CD images was buggy: it set base-config/package-selection to `"~tubuntu-standard"` rather than `"~t^ubuntu-standard$"`. Use the new format in preference; the old one will break with Ubuntu 6.06 and newer.) IconsPage?action=AttachFile&do=get&target=important.png d-i expects there to be exactly one tab or space between variable type and variable value (any other space is seen as being part of the value) The easiest way to create a preseed file is to start with an example and modify it:

  1. The Ubuntu installation guide (8.04, 9.04, 9.10, 10.04) has examples of many common preseed directives. (Bear in mind that you may need to modify some to work on older versions.)
  2. You could check out Debian's wiki page on preseeding the installer - 6.06 and higher are aligned with Etch and newer versions of the Debian installer, although there are some important differences that apply to preseeding.
  3. 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 package.
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. IconsPage?action=AttachFile&do=get&target=warning.png debconf-get-selections prints 2 spaces between variable type and variable value. You need to change this to one space before putting the line in a preseed file.

Installing extra packages in your preseed file

base-config has been removed from debian-installer since Ubuntu 6.06. In Ubuntu 6.06 and older:

d-i     pkgsel/install-pattern          string ~t^ubuntu-standard$|~n^openssh-server$

In Ubuntu 8.04 and newer: (packages may be separated with commas and/or spaces and continued to another line with a back-slash):

d-i     pkgsel/include  string  gstreamer0.10-plugins-base \
 gstreamer0.10-plugins-good \
 gstreamer0.10-plugins-ugly \
 gstreamer0.10-plugins-bad

Installing language support

A different mechanism is used to install additional languages. Preseed the detailed locale question asked by the installer in expert mode. See the first column of `/usr/share/i18n/SUPPORTED` for the locale names you can use here. For example, to add support for Bengali and Tamil, use this line:

d-i localechooser/supported-locales multiselect bn_IN, ta_IN

Running a Final Script

You can run a script in the final part of the installation. The following example runs a script that has been copied onto the installation CD in the setup/install folder. This script runs in the target environment, thus can run scripts in any language (e.g. Python or Perl) that has been installed on the target system.

d-i preseed/late_command string chroot /target bash /cdrom/setup/install/settings.sh

IconsPage?action=AttachFile&do=get&target=warning.png The above command may not work on 8.10 or later; to copy the script to the target and then execute it, try this:

d-i preseed/late_command string cp /cdrom/finisher/finisher.sh /target/root/; chroot /target chmod +x /root/finisher.sh; chroot /target bash /root/finisher.sh

Generally, a script run from the seed file via late_command, cannot interact with the user. If you need to interact, there are generally three options:

  • Create a custom UDEB that interacts with debconf, and include it with the CD.
  • Create a 'firstrun' script that executes the first time the system boots, and disables itself on completion.
  • Access debconf directly within your script.

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

IconsPage?action=AttachFile&do=get&target=important.png The following examples reference Ubuntu 8.04 ("hardy"). Substitute your version where appropriate. Create directories for your new component (substituting your version where appropriate):

cd /opt/cd-image
mkdir -p dists/hardy/extras/binary-i386/pool/extras/

Put all the extra .debs you want on your CD into `pool/extras`. Create the file `dists/hardy/extras/binary-i386/Release` with the following content:

Archive: hardy
Version: 8.04
Component: extras
Origin: Ubuntu
Label: Ubuntu
Architecture: i386

On the scripts page there is a useful script that will strip out all of the packages from your CD image that are not currently installed. 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 "[email protected]". 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 <[email protected]>
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 which may not be installed on your system.
apt-get source ubuntu-keyring
cd ubuntu-keyring-2008.03.04/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-2008.03.04
dpkg-buildpackage -rfakeroot -m"Your Name <[email protected]>" -kYOURKEYID
cd ..  # you are now on the directory where you started, in the example, /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. IconsPage?action=AttachFile&do=get&target=important.png If you will be adding .deb files to pool/universe (eg. customizing xubuntu) you will also need to wget extra.universe and universe files. We will put the index files in `/opt/indices`:

mkdir -p /opt/indices /opt/apt-ftparchive
cd /opt/indices/
DIST=hardy
for SUFFIX in extra.main main main.debian-installer restricted restricted.debian-installer; do
  wget http://archive.ubuntu.com/ubuntu/indices/override.$DIST.$SUFFIX
done

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. IconsPage?action=AttachFile&do=get&target=important.png The .conf files shown here are sufficient if you are ONLY making changes to .deb files under pool/main and pool/restricted. If you are adding security updates to a Xubuntu customized CD, though, you will be updating .deb files under pool/universe also, so you will need to add lines to `apt-ftparchive-deb.conf` for universe, similar to the lines shown for main. You will also need to run extraoverride.pl for universe as well as for main - see below. /opt/apt-ftparchive/apt-ftparchive-deb.conf:

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

TreeDefault {
  Directory "pool/";
};

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

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

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

Contents {
  Compress "gzip";
};

The ExtraOverride component above is needed to add the `Task:` line to main packages, referenced from the preseed file with ~t<task name>. This is not supplied - but can be extracted from the existing main Packages file with the simple perl script below.

#! /usr/bin/perl
# extraoverride.pl
# generate ExtraOverride file
# use as follows :-
# extraoverride.pl < /opt/cd-image/dists/hardy/main/binary-i386/Packages >> /opt/indices/override.hardy.extra.main

while (<>) {
        chomp;
        next if /^ /;
        if (/^$/ && defined($task)) {
                print "$package Task $task\n";
                undef $package;
                undef $task;
        }
        ($key, $value) = split /: /, $_, 2;
        if ($key eq 'Package') {
                $package = $value;
        }
        if ($key eq 'Task') {
                $task = $value;
        }
}

IconsPage?action=AttachFile&do=get&target=note.png If customizing Xubuntu, and adding new .deb files to pool/universe, run this script for the universe repository also. /opt/apt-ftparchive/apt-ftparchive-udeb.conf:

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

TreeDefault {
  Directory "pool/";
};

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

BinDirectory "pool/restricted" {
  Packages "dists/hardy/restricted/debian-installer/binary-i386/Packages";
  BinOverride "/opt/indices/override.hardy.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/hardy/extras/binary-i386/Packages";
};

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

Contents {
  Compress "gzip";
};

IconsPage?action=AttachFile&do=get&target=important.png You need to build the Packages file in dists/hardy/extras/binary-i386/Packages using dpkg-scanpackages. See here for an explanation. /opt/apt-ftparchive/release.conf This is the configuration file for apt-ftparchive. Change to suit your distribution version:

APT::FTPArchive::Release::Origin "Ubuntu";
APT::FTPArchive::Release::Label "Ubuntu";
APT::FTPArchive::Release::Suite "hardy";
APT::FTPArchive::Release::Version "8.04";
APT::FTPArchive::Release::Codename "hardy";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Components "main restricted extras";
APT::FTPArchive::Release::Description "Ubuntu 8.04 LTS";

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=hardy

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

"YOURKEYID" is the key id you put in your own compiled keyring package before.

Burning the CD

At this point, you have a directory which is ready to be collected into an .ISO file and then burnt to a CD.

Building the ISO image

x86 and AMD64

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

Power PC Download the HFS map, then use the following command:

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

mkisofs -r -V "Custom Ubuntu Install CD" \
            --netatalk -hfs -probe -map hfs.map \
            -chrp-boot -iso-level 2 -part -no-desktop \
            -hfs-bless $BUILD/install \
            -hfs-volid Ubuntu/PowerPC_hardy \
            -o $IMAGE $BUILD

ia64

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

mkisofs -r -V 'Custom Ubuntu Install CD' \
        -o $IMAGE -no-emul-boot \
        -J -b boot/boot.img -c boot/boot.catalog $BUILD

$IMAGE is just the location of your iso image.

Burning the image to CD

To detect the location of your CD drive, try `cdrecord --scanbus`. For a primary IDE CD drive on /dev/hdc:

sudo nice -18 cdrecord dev=ATA:0,1,0 --speed=24 --blank=fast -v -gracetime=2 -tao $IMAGE

You will burn a lot of coasters in experimenting with this process, so please use rewritable media!

Testing

You can now boot off your CD. Select the new menu item you created. If you've used preseeding to stop the CD asking questions, the installation could be totally automatic.

Troubleshooting

  • If your CD fails to read, try re-burning it, possibly at a slower speed.
  • If you get a red d-i screen, check the error message (use Alt-F2, Alt-F3 etc to cycle through the terminals to read the log), and fix your CD appropriately. The log file is /var/log/syslog , check the last lines.

See also