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

Sha*_*din 45 custom-distributions

我想创建一个自定义的 Ubuntu Server 12.04 ISO,但找不到明确的方法。我看到 Ubuntu-builder 是一个非常好的应用程序来创建一个定制的 Ubuntu 桌面,但是 Ubuntu Server 呢?

Rin*_*ind 66

下载

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

ubuntu-13.10-server-i386.iso 
ubuntu-13.10-server-amd64.iso 
Run Code Online (Sandbox Code Playgroud)

我将在以下说明中假设 13.10 64 位版本,因此请根据您所做的下载调整命令。保留下载的副本,以便在需要改进项目时可以从原始下载创建多个新版本。我还将假设我们~/Downloads/用来完成我们所有的工作。

最初设定

这将在您的下载目录中创建 2 个目录“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/
Run Code Online (Sandbox Code Playgroud)
  • 它将抛出 1 条错误消息: mount: block device /discworld/Downloads/ubuntu-13.10-server-amd64.iso is write-protected, mounting read-only

关于这将是什么样子的示例图像:

执行:

执行

结果:

结果

添加启动菜单选项

安装程序的菜单选项都存储在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 --
Run Code Online (Sandbox Code Playgroud)
  • myownoption 只是一个标签,您可以用来识别您的选择。
  • “安装自定义 Ubuntu 服务器”是将显示在启动菜单中的文本。
  • 如果您想让您的菜单选项成为默认选项,您只需default install要将default myownoption.

例子:

在此处输入图片说明

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

在此处输入图片说明

Kickstart(以图形方式设置配置文件)

Red Hat Kickstart 安装方法主要(但不是唯一)由 Red Hat Enterprise Linux 操作系统用于自动执行无人值守的操作系统安装和配置。

Ubuntu 预置/kickstart 文档。Ubuntu 对 kickstart(和预置)的支持有限;缺少的东西之一是用于预置的图形界面。Kickstart确实有这方面的选项(见图片),但这些在 Ubuntu 上似乎不起作用。不过,您可以手动执行此操作(请参阅下面的预置)。

安装和启动 kickstart:

sudo apt-get install system-config-kickstart
ksconfig
Run Code Online (Sandbox Code Playgroud)

** 警告 **

kickstart 在 Ubuntu 13.10 中被窃听,启动时出错。这是一个修复。将注释中的补丁放入文本文件中,保存(我将其命名为“补丁”)并提交:

在此处输入图片说明

完成后,ksconfig它将启动一个配置编辑器,允许您操作许多选项。

在此处输入图片说明

在此处输入图片说明

有关您可以设置的所有选项的说明,请参阅Red Hat Linux 7.2:The Official Red Hat Linux Customization Guide

完成后,将更改保存到ks.cfg文件并将其复制到我们正在更改的 ISO:

sudo cp ks.cfg ~/Downloads/newIso/preseed/ks-custom.cfg
Run Code Online (Sandbox Code Playgroud)
  • 如果您在此处更改任何内容,安装程序将跳过要求该信息(如果它被认为是有效的)。如果您没有更改选项,安装程序仍会要求您回答。
  • 您还可以下载 kickstart文件并将其保存ks-custom.cfg~/Downloads/newIso/preseed/.

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

在此处输入图片说明

并将其保存到项目中:

在此处输入图片说明

预置(手动设置配置文件)

预置提供了一种方法来设置安装过程中提出的问题的答案,而无需在安装运行时手动输入答案。这使得大多数类型的安装完全自动化成为可能,甚至提供一些在正常安装过程中不可用的功能。

将正常安装的 preseed 复制到您自己的标签:

sudo cp newIso/preseed/ubuntu-server.seed newIso/preseed/ubuntu-myownoption.seed
Run Code Online (Sandbox Code Playgroud)
  • 更改myownoption为您使用的。

现在更改设置。使用debconf-get-selectionsfromdebconf-utils您可以调查可以与特定软件一起使用的参数。

设置示例:

在此处输入图片说明

并添加要与 tasksel 一起安装的灯服务器:

在此处输入图片说明

  • 如果要添加包“openssh”和“build-essential”,可以将其包含在种子文件中:

    d-i pkgsel/include string openssh-server build-essential
    
    Run Code Online (Sandbox Code Playgroud)
  • 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 您可以将这些选项添加到custom-iso/preseed/ubuntu-myownoption.seed.

  • 使用 debconf 设置的说明/示例
  • 一个示例预置文件
  • 有关示例:本地化、网络配置、网络控制台、时钟和时间、分区
  • 在 preseed 文件的末尾,您可以像这样添加包(随机示例):

    %packages openssh-server mysql-server apache2

离线安装

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

下载您需要的所有 DEB 包并将它们存储在~/Downloads/. 新 ISO 需要这 2 个目录:

mkdir -p ~/Downloads/newIso/dists/stable/extras/binary-i386
mkdir -p ~/Downloads/newIso/pool/extras/
sudo cp ~/Downloads/*.deb newIso/pool/extras/
Run Code Online (Sandbox Code Playgroud)

这将使用新包更新我们的项目:

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/
Run Code Online (Sandbox Code Playgroud)

创建 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/
Run Code Online (Sandbox Code Playgroud)
  • 第二行创建一个新的校验和,只有在添加包时才需要。
  • 第三个从您的项目中制作一个 ISO,您可以将其刻录到 DVD。

结果:

在此处输入图片说明

现在您可以通过实际刻录和安装来试用它。我建议将其用作虚拟机,因为它可以更快地测试初始创建的 ISO(否则您会不断重新启动)。

安装 VirtualBox 后,我得到以下菜单:

在此处输入图片说明

猎虫

安装时遇到 1 个问题:未选择默认值。

沙丁。从您的种子文件评论

### 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
Run Code Online (Sandbox Code Playgroud)

大概需要是这样的:

### 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
Run Code Online (Sandbox Code Playgroud)

放弃你不想要 LAMP 服务器的任务线(即 Apache、Mysql、Php)

  • @shadin 没关系,看看 Lucio 是如何做到的 ;-) 清理评论。Braiam:是的,它可以。虽然在桌面上还有很多东西需要改变,但这只是一个开始(如果你打补丁,kickstart 也能工作,但它仍然受到 Ubuntu 的支持)。 (2认同)