如何创建自定义的Ubuntu服务器ISO?

我想创建一个定制的Ubuntu Server 12.04 ISO,但是找不到清晰的方法来实现。我知道Ubuntu-builder是一个非常好的应用程序,可以创建定制的Ubuntu Desktop,但是对于Ubuntu Server呢?
1个回答

下载

此位置下载Ubuntu服务器ISO文件。您可以选择32位或64位版本。服务器版的文件名将类似于以下内容:

ubuntu-13.10-server-i386.iso 
ubuntu-13.10-server-amd64.iso 

我将假设你使用的是13.10 64位版本,并根据你下载的内容调整命令。请保留你的下载副本,以便在需要改进项目时从原始下载创建多个新版本。我还会假设我们使用~/Downloads/作为我们所有工作的目录。 初始设置 这将在你的Downloads目录下创建两个文件夹"iso"和"isoNew",挂载ISO并将"iso"中的内容复制到"isoNew"以启动一个新项目。
将以下内容放入一个文本文件中,保存它,使其可执行并执行它:
# Ubuntu custom server 
# rinzwind askubuntu.com
# topic: http://askubuntu.com/questions/409607/how-to-create-a-customized-ubuntu-server-iso/409651#409651
cd ~/Downloads/    
mkdir -p iso newIso
sudo mount -o loop ./ubuntu-13.10-server-amd64.iso ./iso    
sudo cp -r ./iso/* ./newIso/
sudo cp -r ./iso/.disk/ ./newIso/    
sudo umount ./iso/
cd ~/Downloads/newIso/
  • 它将抛出1个错误消息:mount: block device /discworld/Downloads/ubuntu-13.10-server-amd64.iso is write-protected, mounting read-only

这将看起来像以下示例图像:

执行:

Executing

结果:

Result

添加启动菜单选项

安装程序的菜单选项存储在isolinux/txt.cfg中,您可以在default installlabel install之间创建新的选项。

这将创建一个名为“安装自定义Ubuntu服务器”的新选项,并添加一个kickstart文件(kickstart文件用于更改选项;下面会解释):

label myownoption
  menu label ^Install Custom Ubuntu Server
  kernel /install/vmlinuz
  append  file=/cdrom/preseed/ubuntu-custom.seed initrd=/install/initrd.gz quiet ks=cdrom:/preseed/ks-custom.cfg --
  • myownoption只是一个标签,你可以用它来识别你的选项。
  • "Install Custom Ubuntu Server"是在启动菜单中显示的文本。
  • 如果你想将你的菜单选项设为默认选项,你只需要将default install改为default myownoption

示例:

enter image description here

编辑文件(我使用nano,如果有的话,请使用gedit、vim或其他编辑器)。这是我对该文件的补充,我将“lampserver”用作标签,我的种子也将被命名为“lampserver”。

enter image description here

Kickstart(图形化设置配置文件)

红帽Kickstart安装方法主要(但不仅限于)用于自动执行未经管制的操作系统安装和配置,适用于红帽企业Linux操作系统。

Ubuntu的预先配置/ Kickstart文档。 Ubuntu对kickstart(和预先配置)的支持有限; 其中缺少的是预先配置的图形界面。 Kickstart 确实有这些选项(参见图像),但这些在Ubuntu上似乎无法正常工作。 您可以手动完成此操作(请参阅下面的预设)。

安装并启动kickstart:

sudo apt-get install system-config-kickstart
ksconfig

** 警告 **

在Ubuntu 13.10中,kickstart存在错误,并且在启动时出现错误。这里有一个修复方法。将补丁放入注释中的文本文件中,保存(我将其命名为“patch”)并提交:

enter image description here

之后,ksconfig 就可以正常工作了,并且它会启动一个配置编辑器,允许您对许多选项进行操作。

enter image description here

enter image description here

查看Red Hat Linux 7.2:官方Red Hat Linux定制指南以获取您可以设置的所有选项的描述。
完成后,将更改保存到ks.cfg文件中,并将其复制到我们正在更改的ISO中。
sudo cp ks.cfg ~/Downloads/newIso/preseed/ks-custom.cfg
  • 如果您在这里更改任何内容,安装程序将跳过询问该信息,如果被视为有效。如果您没有更改选项,安装程序仍然会要求您回答。
  • 您还可以下载kickstart files并将其保存为ks-custom.cfg~/Downloads/newIso/preseed/中。

示例,我插入了我的凭据。我从命令行以sudo ksconfig开始。

enter image description here

将其保存到项目中。

enter image description here

预设(手动设置配置文件) 预设提供了一种在安装过程中设置问题答案的方法,而无需在安装运行时手动输入答案。这使得大多数类型的安装可以完全自动化,并且甚至提供了一些在正常安装过程中不可用的功能。
将正常安装的预设复制到您自己的标签上:
sudo cp newIso/preseed/ubuntu-server.seed newIso/preseed/ubuntu-myownoption.seed
  • myownoption更改为您使用的选项。

现在来更改设置。使用debconf-utils中的debconf-get-selections,您可以查看特定软件可用的参数。

设置示例:

enter image description here

并使用tasksel安装lamp-server。

enter image description here

如果你想添加软件包"openssh"和"build-essential",你可以在seed文件中包含以下内容:
d-i pkgsel/include string openssh-server build-essential
关于openssh的一个例子:
debconf-get-selections | grep openssh openssh-server ssh/vulnerable_host_keys note openssh-server ssh/use_old_init_script boolean true openssh-server ssh/encrypted_host_key_but_no_keygen note openssh-server ssh/disable_cr_auth boolean false 你可以将这些选项添加到custom-iso/preseed/ubuntu-myownoption.seed中。 使用debconf设置的解释/示例一个预置文件的示例 有关本地化、网络配置、网络控制台、时钟和时间、分区的示例 在preseed文件的末尾,你可以像这样添加软件包(随机示例):
%packages openssh-server mysql-server apache2

离线安装

如果您添加的软件包不在ISO文件中,安装程序将从软件仓库下载这些软件包。如果您没有有效的互联网连接,这可能会成为问题,因此您需要将所有这些软件包(以及其依赖项)添加到您的项目中并刻录到DVD中。幸运的是,普通服务器ISO文件有很多空间,但请注意:CD和/或DVD的大小是有限的。

下载您所需的所有DEB软件包并将它们存储在~/Downloads/中。新ISO文件中需要这两个目录:

mkdir -p ~/Downloads/newIso/dists/stable/extras/binary-i386
mkdir -p ~/Downloads/newIso/pool/extras/
sudo cp ~/Downloads/*.deb newIso/pool/extras/

这将使用新的软件包更新我们的项目。
cd ~/Downloads/newIso
sudo apt-ftparchive packages ./pool/extras/ > dists/stable/extras/binary-i386/Packages
sudo gzip -c ./dists/stable/extras/binary-i386/Packages | tee ./dists/stable/extras/binary-i386/Packages.gz > /dev/null
cd ~/Downloads/

创建ISO

cd ~/Downloads/     
sudo md5sum `find ! -name “md5sum.txt” ! -path “./isolinux/*” -follow -type f` > md5sum.txt
sudo mkisofs -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -z -iso-level 4 -c isolinux/isolinux.cat -o ./ubuntu-13.10-myowninstall-amd64.iso -joliet-long newIso/
  • 第二行创建一个新的校验和,只在添加软件包时需要。
  • 第三行将您的项目制作成ISO文件,可以刻录到DVD上。

结果:

enter image description here

现在你可以通过实际烧录和安装来尝试它。我建议使用虚拟机,因为这样测试初始创建的ISO会更快(否则你需要不断重启)。
安装完VirtualBox后,我得到了以下菜单:

enter image description here

漏洞狩猎

在安装过程中遇到了1个问题:默认选项未被选择。

Shadin。来自你的评论中的种子文件

### Package Selection
tasksel tasksel/first multiselect Custom-Ubuntu-Server
d-i pkgsel/include string openssh-server build-essential
%packages openssh-server postgresql-9.1 postgresql-client-9.1 postgresql-contrib-9.1 libpq-dev postgresql-server-dev-9.1 pgadmin3

可能需要这样做:
### Package Selection
tasksel tasksel/first multiselect lamp-server
d-i pkgsel/include string openssh-server build-essential postgresql-9.1 postgresql-client-9.1 postgresql-contrib-9.1 libpq-dev postgresql-server-dev-9.1 pgadmin3

如果你不想要一个LAMP服务器(即Apache,Mysql,Php),就抛弃tasksel这一行。

可以用于桌面版本吗? - Braiam
非常感谢你!我真的无法用言语表达对你的感激之情,因为你让整个过程变得如此简单顺利!只是在安装VirtualBox并选择安装我的自定义服务器后,遇到了一个问题,我收到了这个错误信息Valid XHTML - Shadin
是的,我确实做了。实际上,我更喜欢你查看我的种子文件[http://www.megafileupload.com/en/file/493602/ubuntu-custominstall-seed.html]。我对我在文件末尾添加软件包的方式不太确定。 - Shadin
哦!谢谢!我会试一下然后回复你。另外,我想知道在这个过程中是否有办法从镜像中移除任何额外的服务器,比如邮件服务器、Web服务器、JBOSS等等。我希望它只包含PostgreSQL及其相关软件包。 - Shadin
一切都进行得很顺利!再次非常感谢你!真的非常感激你的帮助。我希望我能给你的回答投多次赞 :) - Shadin
2@shadin没问题,看看Lucio是怎么做的;-) 清理了评论。Braiam:是的,它可以。虽然在桌面上有很多其他需要修改的东西,但这是一个开始(如果你打补丁,kickstart也可以,但Ubuntu对其支持仍然有限)。 - Rinzwind
我在extras中添加的软件包的Releases文件中遇到了"无法找到预期条目"的错误。有什么想法是怎么回事,或者如何将额外的软件包添加到Releases文件中? - zmanian
有没有一个非 GUI 的 ksconfig 和 kickstart 配置工具? - nwgat
@wiak 不对。这是一个文本文件,所以你只能使用vi(m) ;) - Rinzwind