问题描述
我想创建一个自定义的Ubuntu Server 12.04 ISO,但无法找到明确的方法来实现它。我看到Ubuntu-builder是一个非常好的应用程序来创建自定义的Ubuntu桌面,但是Ubuntu Server呢?
最佳解决思路
下载
从this location下载Ubuntu服务器ISO。您可以选择32位或64位。服务器版本的文件名将类似于:
ubuntu-13.10-server-i386.iso
ubuntu-13.10-server-amd64.iso
我将在以下说明中假设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/
-
它将抛出1条错误消息:
mount: block device /discworld/Downloads/ubuntu-13.10-server-amd64.iso is write-protected, mounting read-only
示例图像如何:
执行:
结果:
添加引导菜单选项
安装程序的菜单选项存储在isolinux/txt.cfg
中,您可以创建新选项in-between default install
和label 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
只是一个标签,可用于识别您的选项。 -
“安装自定义Ubuntu服务器”是将显示在启动菜单中的文本。
-
如果要将菜单选项设置为默认选项,则只需将
default install
更改为default myownoption
即可。
例:
并编辑文件(我使用nano但是如果可用则使用gedit,vim或其他编辑器)。这是我对此文件的补充,我使用”lampserver”作为标签,我的种子也将命名为”lampserver”。
Kickstart(以图形方式设置配置文件)
The Red Hat Kickstart installation method is used primarily (but not exclusively) by the Red Hat Enterprise Linux operating system to automatically perform unattended operating system installation and configuration.
Documentation on preseeding/kickstart for Ubuntu。 Ubuntu对kickstart(和preseeding)的支持有限;缺少的东西之一是用于预播的图形界面。 Kickstart确实有这方面的选项(见图片),但这些似乎不适用于Ubuntu。您可以手动执行此操作(请参阅下面的预置)。
安装和启动kickstart:
sudo apt-get install system-config-kickstart
ksconfig
** 警告 **
kickstart在Ubuntu 13.10中被窃听,当它启动时,它会出错。 Here is a fix。将注释中的补丁放入文本文件中,保存(我将其命名为”patch”)并提交:
之后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
-
如果您在此处更改任何内容,安装程序将跳过询问该信息是否有效。如果您没有更改选项,安装程序仍会要求您回答。
-
您也可以下载kickstart files并将其保存为〜/Downloads /newIso /preseed /中的ks-custom.cfg。
我插入凭据的示例。我从命令行开始使用sudo ksconfig
。
并将其保存到项目中:
预置(手动设置配置文件)
Preseeding提供了一种在安装过程中设置问题答案的方法,而无需在安装运行时手动输入答案。这使得可以完全自动化大多数类型的安装,甚至提供在正常安装期间不可用的一些功能。
将正常安装的preseed复制到您自己的标签:
sudo cp newIso/preseed/ubuntu-server.seed newIso/preseed/ubuntu-myownoption.seed
-
将
myownoption
更改为您使用的。
现在更改设置。使用debconf-utils
中的debconf-get-selections
,您可以研究可以使用特定软件的参数。
设置示例:
并添加lamp-server与tasksel一起安装:
-
如果要添加包”openssh”和”build-essential”,可以将其包含在种子文件中:
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
。 -
Examples关于:本地化,网络配置,网络控制台,时钟和时间,分区
-
在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/
-
第二行创建一个新的校验和,只在添加包时才需要。
-
第3个从您的项目中制作ISO,您可以刻录到DVD。
结果:
现在你可以通过实际刻录和安装来试试它。我建议使用虚拟机,因为它可以更快地测试初始创建的ISO(否则你会继续重启)。
安装VirtualBox后,我得到以下菜单:
寻找虫子
安装时遇到1个问题:未选择默认值。
Shadin。来自您的seed file评论
### 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)