Ubuntu 也可以使用配置文件自动回答响应安装过程中的交互内容。他支持两种方式,一种是使用红帽系的kickstart配置文件,但这种方式功能支持的不全,比如磁盘分区等。Ubuntu其实有自己专用的配置方法,即debian系的preseed。他们两个也可共同使用。
本文只对preseed方式做介绍,因为相关资料不是很丰富,没有找到最准确完整的可配置项,遇到特殊的需求还是要自行google,一般搜索格式为:”preseed ubuntu xxxxxxx“,尽量使用英文搜索。
有些内容研究尚不彻底,望广大网友多提宝贵意见和建议。
参考资料:https://help.ubuntu.com/14.04/installation-guide/amd64/apb.html
http://ftp.dc.volia.com/pub/debian/preseed/partman-auto-recipe.txt
http://razvangavril.com/linux-administration/custom-ubuntu-server-iso/
preseed配置文件可以通过三种方式提供:initrd文件, 普通文件 和 网络文件.(txt.cfg也可以指定,不建议在此指定过多参数)
依据安装介质的不同,这三种方式并不能全部支持,如下表:
安装方式 | initrd文件 | 普通文件 | 网络文件 |
---|---|---|---|
CD/DVD(光盘安装) | 支持 | 支持 | 支持 |
netboot(PXE网络安装) | 支持 | 不支持 | 支持 |
hd-media (硬盘安装) | 支持 | 支持 | 支持 |
initrd文件:支持所有preseed参数 |
本人建议:
如果想在一个文件中配置所有参数那就选择initrd方式。否则可选择混合方式。
光盘安装,使用txt.cfg参数+普通文件的方式。PXE安装可选择initrd+网络方式。
Linux® 初始 RAM 磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd 文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM 磁盘卸载,并释放内存。在很多嵌入式 Linux 系统中,initrd 就是最终的根文件系统。(引自:http://www.ibm.com/developerworks/cn/linux/l-initrd.html)
安装镜像中包含有光盘安装(/install/initrd.gz)和PXE网络安装(/install/netboot/ubuntu-installer/amd64/initrd.gz)所需的两个initrd文件。他们的制作方式是相同的:
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
这样initrd.gz会变成一个initrd路径,进入路径添加一个preseed.cfg文件,文件名不能错,下文讲到的preseed参数写在里边。然后重新打包initrd.gz
find . | cpio -o -H newc | gzip -9 > ../initrd.gz
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如图中橙色背景处的参数,与preseed的中的区别在于:
preseed中为>
# Preseeding only locale sets language, country and locale.
d-i debian-installer/locale string en_US
txt.cfg中应该为>
debian-installer/locale=en_US
因为locale 是 debian-installer/locale的简写形式(见参考资料),所以最终我们可以写成:
locale=en_US
其他参数类似,不再赘述
光盘镜像中包含一个配置文件示例(/doc/install/manual/example-preseed.txt.gz),下文为尝试使用中文注释的可配项(英语不太好,不准确请见谅,欢迎指正),'#'为注释符
###########################################################################
## 地区 和 键盘 配置
## 在文件配置方式下不可用,可在txt.cfg中添加 locale=en_US 和 console-setup/ask_detect=false keyboard-configuration/layoutcode=us
#############################################################################
# 预置 区域语言,国家和地区.
d-i debian-installer/locale string en_US
# 灵活的单独配置语言、国家、地区.
#d-i debian-installer/language string en
#d-i debian-installer/country string NL
#d-i debian-installer/locale string en_GB.UTF-8
# 可选项,指定附加的地区.
#d-i localechooser/supported-locales en_US.UTF-8, nl_NL.UTF-8
# 键盘 选择.
# 禁用交互式键盘布局自动探测.
d-i console-setup/ask_detect boolean false
# 指定键盘模式和布局
#d-i keyboard-configuration/modelcode string pc105
d-i keyboard-configuration/layoutcode string us
# 选择布局变种,比如dvorak(如果省略, 将使用基本布局)
#d-i keyboard-configuration/variantcode string dvorak
######################################################################################
## 配置网络
## (PXE网络安装时不可用)
######################################################################################
# 彻底禁用配置网络. 在没有网络设备的机器上使用光盘安装时非常有用,
# 否则会遇到讨厌的网络警告,长时间的等待超时等.
#d-i netcfg/enable boolean false
# 网络配置程序将会自动选择一个连接有网线的网口.
# 这会跳过在多网卡的机器上显示网口列表.
#d-i netcfg/choose_interface select auto
# 或直接指定要配置的网口:
d-i netcfg/choose_interface select eth0
# 如果你的dhcp服务器很慢,安装程序等待dhcp的配置.
# 这个超时选项可能很有用.
d-i netcfg/dhcp_timeout string 60
# 如果你想手动配置网络,解注此处和后边静态配置网卡的内容.
#d-i netcfg/disable_autoconfig boolean true
# 如果你想让本配置文件在有或者没有dhcp服务器的情况下都起作用,
# 解除此处的注释和后边静态配置网口的内容.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually
# 静态网络配置.
#d-i netcfg/get_nameservers string 8.8.8.8
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true
# 从dhcp服务器获取的主机名和域名的优先级高于此处的配置
# 但是, 设置这些变量值仍然可以防止相关对话框的显示.
d-i netcfg/get_hostname string unassigned-hostname
#d-i netcfg/get_domain string unassigned-domain
# 禁用讨厌的 WEP 键 对话框.
#d-i netcfg/wireless_wep string
# 古怪的dhcp主机名,有些ISP使用它作为分类密码.
#d-i netcfg/dhcp_hostname string radish
# 如果需要不是自由软件的固件,网卡的或其他硬件的, 你可以配置安装程序总是加载他们而不提示,或者设置成false直接不询问.
#d-i hw-detect/load_firmware boolean true
######################################################################################
## 网络控制台
######################################################################################
# 使用后边的配置,如果你想使用网络控制台
# 通过SSH远程控制安装.这个只在你想手动控制剩下的安装时才有意义.
#d-i anna/choose_modules string network-console
#d-i network-console/password password r00tme
#d-i network-console/password-again password r00tme
# 用此处配置代替密码,如果你想用基于key文件的身份认证
#d-i network-console/authorized_keys_url http://host/authorized_keys
######################################################################################
## 镜像设置
######################################################################################
# 如果此处设置ftp,mirror/country 不需要设置.
#d-i mirror/protocol string ftp
#d-i mirror/country string manual
#d-i mirror/http/hostname string archive.ubuntu.com
#d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
# 第二选择:默认情况下,安装程序使用 CC.archive.ubuntu.com
# CC是选择的国家的 ISO-3166-2 代码 .
# 预置在此处安装过程中将不会再询问.
#d-i mirror/http/mirror select CC.archive.ubuntu.com
# 安装的软件包.
#d-i mirror/suite string trusty
# Suite to use for loading installer components (optional).
#d-i mirror/udeb/suite string trusty
# Components to use for loading installer components (optional).
#d-i mirror/udeb/components multiselect main, restricted
######################################################################################
## 时间和时区设置
######################################################################################
# 控制硬件时间是否设置为UTC.
d-i clock-setup/utc boolean true
# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string Asia/Shanghai
# Controls whether to use NTP to set the clock during the install
#d-i clock-setup/ntp boolean true
# NTP server to use. The default is almost always fine here.
#d-i clock-setup/ntp-server string ntp.example.com
######################################################################################
## Partitioning
######################################################################################
# If the system has free space you can choose to only partition that space.
# This is only honoured if partman-auto/method (below) is not set.
# Alternatives: custom, some_device, some_device_crypto, some_device_lvm.
#d-i partman-auto/init_automatically_partition select biggest_free
# auto unmount. This was missing in the example preseed
d-i preseed/early_command string umount /media || true
#d-i partman/unmount_active boolean true # this doesn't work
# Alternatively, you may specify a disk to partition. If the system has only
# one disk the installer will default to using that, but otherwise the device
# name must be given in traditional, non-devfs format (so e.g. /dev/hda or
# /dev/sda, and not e.g. /dev/discs/disc0/disc).
# For example, to use the first SCSI/SATA hard disk:
d-i partman-auto/disk string /dev/sda
# In addition, you'll need to specify the method to use.
# The presently available methods are:
# - regular: use the usual partition types for your architecture
# - lvm: use LVM to partition the disk
# - crypto: use LVM within an encrypted partition
d-i partman-auto/method string lvm
## with encrypted LVM you can set passphrase, it should more than 8 characters, I haven't find encrypt this and auto use weak passwd
#d-i partman-auto/method string crypto
#d-i partman-crypto/passphrase password 123456
#d-i partman-crypto/passphrase-again password 123456
partman-crypto partman-crypto/weak_passphrase boolean true
# If one of the disks that are going to be automatically partitioned
# contains an old LVM configuration, the user will normally receive a
# warning. This can be preseeded away...
d-i partman-lvm/device_remove_lvm boolean true
# The same applies to pre-existing software RAID array:
d-i partman-md/device_remove_md boolean true
# And the same goes for the confirmation to write the lvm partitions.
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true #NOTE: This was missing in the example preseed
# For LVM partitioning, you can select how much of the volume group to use
# for logical volumes.
d-i partman-auto-lvm/guided_size string max
#d-i partman-auto-lvm/guided_size string 10GB
#d-i partman-auto-lvm/guided_size string 50%
d-i partman-auto-lvm/new_vg_name string vg-workstation
# You can choose one of the three predefined partitioning recipes:
# - atomic: all files in one partition
# - home: separate /home partition
# - multi: separate /home, /usr, /var, and /tmp partitions
d-i partman-auto/choose_recipe select atomic
#d-i partman-auto/choose_recipe select custom-lvm
## Or provide a recipe of your own...
# If you have a way to get a recipe file into the d-i environment, you can
# just point at it.
#d-i partman-auto/expert_recipe_file string /hd-media/recipe
# If not, you can put an entire recipe into the preconfiguration file in one
# (logical) line. This example creates a small /boot partition, suitable
# swap, and uses the rest of the space for the root partition:
#d-i partman-auto/expert_recipe string \
# custom-lvm :: \
# 500 500 500 ext4 $primary{ } $bootable{ } \
# mountpoint{ /boot } \
# method{ format } \
# format{ } \
# use_filesystem{ } \
# filesystem{ ext4 } \
# . \
# 1024 1024 1024 ext4 $lvmok{ } \
# mountpoint{ /var } \
# lv_name{ var } \
# in_vg { vg-workstation } \
# method{ format } \
# format{ } \
# use_filesystem{ } \
# filesystem{ ext4 } \
# . \
# 1024 4096 1000000000 ext4 $lvmok{ } \
# mountpoint{ / } \
# lv_name{ root } \
# in_vg { vg-workstation } \
# method{ format } \
# format{ } \
# use_filesystem{ } \
# filesystem{ ext4 } \
# . \
# 64 512 300% linux-swap $lvmok{ } \
# lv_name{ swap } \
# in_vg { vg-workstation } \
# method{ swap } \
# format{ } \
# .
# If you just want to change the default filesystem from ext3 to something
# else, you can do that without providing a full recipe.
d-i partman/default_filesystem string ext4
# The full recipe format is documented in the file partman-auto-recipe.txt
# included in the 'debian-installer' package or available from D-I source
# repository. This also documents how to specify settings such as file
# system labels, volume group names and which physical devices to include
# in a volume group.
# This makes partman automatically partition without confirmation, provided
# that you told it what to do using one of the methods above.
d-i partman-partitioning/confirm_write_new_label boolean true
#d-i partman/choose_partition select finish # Note , this is worong! As follows
d-i partman/choose_partition \
select Finish partitioning and write changes to disk
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
######################################################################################
## Partitioning using RAID
######################################################################################
# The method should be set to "raid".
#d-i partman-auto/method string raid
# Specify the disks to be partitioned. They will all get the same layout,
# so this will only work if the disks are the same size.
#d-i partman-auto/disk string /dev/sda /dev/sdb
# Next you need to specify the physical partitions that will be used.
#d-i partman-auto/expert_recipe string \
# multiraid :: \
# 1000 5000 4000 raid \
# $primary{ } method{ raid } \
# . \
# 64 512 300% raid \
# method{ raid } \
# . \
# 500 10000 1000000000 raid \
# method{ raid } \
# .
# Last you need to specify how the previously defined partitions will be
# used in the RAID setup. Remember to use the correct partition numbers
# for logical partitions. RAID levels 0, 1, 5, 6 and 10 are supported;
# devices are separated using "#".
# Parameters are:
# <raidtype> <devcount> <sparecount> <fstype> <mountpoint> \
# <devices> <sparedevices>
#d-i partman-auto-raid/recipe string \
# 1 2 0 ext3 / \
# /dev/sda1#/dev/sdb1 \
# . \
# 1 2 0 swap - \
# /dev/sda5#/dev/sdb5 \
# . \
# 0 2 0 ext3 /home \
# /dev/sda6#/dev/sdb6 \
# .
# For additional information see the file partman-auto-raid-recipe.txt
# included in the 'debian-installer' package or available from D-I source
# repository.
# This makes partman automatically partition without confirmation.
#d-i partman-md/confirm boolean true
#d-i partman-partitioning/confirm_write_new_label boolean true
#d-i partman/choose_partition select finish
#d-i partman/confirm boolean true
#d-i partman/confirm_nooverwrite boolean true
######################################################################################
## Controlling how partitions are mounted
######################################################################################
# The default is to mount by UUID, but you can also choose "traditional" to
# use traditional device names, or "label" to try filesystem labels before
# falling back to UUIDs.
#d-i partman/mount_style select uuid
######################################################################################
## Base system installation
######################################################################################
# Configure APT to not install recommended packages by default. Use of this
# option can result in an incomplete system and should only be used by very
# experienced users.
#d-i base-installer/install-recommends boolean false
# The kernel image (meta) package to be installed; "none" can be used if no
# kernel is to be installed.
#d-i base-installer/kernel/image string linux-generic
######################################################################################
## Account setup
## The following command can be used to generate an MD5 hash for a password:
## $ printf "123456" | mkpasswd -s -m md5
######################################################################################
# Skip creation of a root account (normal user account will be able to
# use sudo). The default is false; preseed this to true if you want to set
# a root password.
d-i passwd/root-login boolean root
# Alternatively, to skip creation of a normal user account.
#d-i passwd/make-user boolean false
# Root password, either in clear text
#d-i passwd/root-password password 123456
#d-i passwd/root-password-again password 123456
# or encrypted using an MD5 hash.
d-i passwd/root-password-crypted password $1$mTX9z2NE$2GASUCmhyKysazfeD2jE80
# To create a normal user account.
d-i passwd/user-fullname string Ubuntu User
d-i passwd/username string ubuntu
# Normal user's password, either in clear text
#d-i passwd/user-password password 123456
#d-i passwd/user-password-again password 123456
# or encrypted using an MD5 hash.
d-i passwd/user-password-crypted password $1$z4dTGw4N$OvJwkB7XsVlLJBns2Y32m1
# Create the first user with the specified UID instead of the default.
#d-i passwd/user-uid string 1010
# The installer will warn about weak passwords. If you are sure you know
# what you're doing and want to override it, uncomment this.
d-i user-setup/allow-password-weak boolean true
# The user account will be added to some standard initial groups. To
# override that, use this.
#d-i passwd/user-default-groups string audio cdrom video
# Set to true if you want to encrypt the first user's home directory.
d-i user-setup/encrypt-home boolean false
######################################################################################
## Apt setup
######################################################################################
# You can choose to install restricted and universe software, or to install
# software from the backports repository.
#d-i apt-setup/restricted boolean true
#d-i apt-setup/universe boolean true
#d-i apt-setup/backports boolean true
# Uncomment this if you don't want to use a network mirror.
#d-i apt-setup/use_mirror boolean false
# Select which update services to use; define the mirrors to be used.
# Values shown below are the normal defaults.
#d-i apt-setup/services-select multiselect security
#d-i apt-setup/security_host string security.ubuntu.com
#d-i apt-setup/security_path string /ubuntu
# Additional repositories, local[0-9] available
#d-i apt-setup/local0/repository string \
# http://local.server/ubuntu trusty main
#d-i apt-setup/local0/comment string local server
# Enable deb-src lines
#d-i apt-setup/local0/source boolean true
# URL to the public key of the local repository; you must provide a key or
# apt will complain about the unauthenticated repository and so the
# sources.list line will be left commented out
#d-i apt-setup/local0/key string http://local.server/key
# By default the installer requires that repositories be authenticated
# using a known gpg key. This setting can be used to disable that
# authentication. Warning: Insecure, not recommended.
#d-i debian-installer/allow_unauthenticated boolean true
######################################################################################
## Package selection
## Available tasks as of this writing include:
## standard
## ubuntu-desktop
## kubuntu-desktop
## edubuntu-desktop
## xubuntu-desktop
## dns-server
## lamp-server
######################################################################################
#tasksel tasksel/first multiselect ubuntu-desktop
#tasksel tasksel/first multiselect lamp-server, print-server
#tasksel tasksel/first multiselect kubuntu-desktop
tasksel tasksel/first multiselect standard
# Individual additional packages to install
d-i pkgsel/include string openssh-server build-essential
# Whether to upgrade packages after debootstrap.
# Allowed values: none, safe-upgrade, full-upgrade
d-i pkgsel/upgrade select none
# Language pack selection
#d-i pkgsel/language-packs multiselect de, en, zh
# Policy for applying updates. May be "none" (no automatic updates),
# "unattended-upgrades" (install security updates automatically), or
# "landscape" (manage system with Landscape).
d-i pkgsel/update-policy select none
# Some versions of the installer can report back on what software you have
# installed, and what software you use. The default is not to report back,
# but sending reports helps the project determine what software is most
# popular and include it on CDs.
#popularity-contest popularity-contest/participate boolean false
# By default, the system's locate database will be updated after the
# installer has finished installing most packages. This may take a while, so
# if you don't want it, you can set this to "false" to turn it off.
d-i pkgsel/updatedb boolean false
######################################################################################
## Boot loader installation
######################################################################################
# Grub is the default boot loader (for x86). If you want lilo installed
# instead, uncomment this:
#d-i grub-installer/skip boolean true
# To also skip installing lilo, and install no bootloader, uncomment this
# too:
#d-i lilo-installer/skip boolean true
# With a few exceptions for unusual partitioning setups, GRUB 2 is now the
# default. If you need GRUB Legacy for some particular reason, then
# uncomment this:
#d-i grub-installer/grub2_instead_of_grub_legacy boolean false
# This is fairly safe to set, it makes grub install automatically to the MBR
# if no other operating system is detected on the machine.
d-i grub-installer/only_debian boolean true
# This one makes grub-installer install to the MBR if it also finds some other
# OS, which is less safe as it might not be able to boot that other OS.
d-i grub-installer/with_other_os boolean true
# Alternatively, if you want to install to a location other than the mbr,
# uncomment and edit these lines:
#d-i grub-installer/only_debian boolean false
#d-i grub-installer/with_other_os boolean false
#d-i grub-installer/bootdev string (hd0,0)
# To install grub to multiple disks:
#d-i grub-installer/bootdev string (hd0,0) (hd1,0) (hd2,0)
# Optional password for grub, either in clear text
#d-i grub-installer/password password r00tme
#d-i grub-installer/password-again password r00tme
# or encrypted using an MD5 hash, see grub-md5-crypt(8).
#d-i grub-installer/password-crypted password [MD5 hash]
# Use the following option to add additional boot parameters for the
# installed system (if supported by the bootloader installer).
# Note: options passed to the installer will be added automatically.
#d-i debian-installer/add-kernel-opts string nousb
# example:
##d-i debian-installer/add-kernel-opts string vga=normal nomodeset audit=0 intel_idle.max_cstate=0 processor.max_cstate=1 cgroup_enable=memory swapaccount=1
######################################################################################
## Finishing up the installation
######################################################################################
# During installations from serial console, the regular virtual consoles
# (VT1-VT6) are normally disabled in /etc/inittab. Uncomment the next
# line to prevent this.
#d-i finish-install/keep-consoles boolean true
# Avoid that last message about the install being complete.
d-i finish-install/reboot_in_progress note
# This will prevent the installer from ejecting the CD during the reboot,
# which is useful in some situations.
d-i cdrom-detect/eject boolean true
# This is how to make the installer shutdown when finished, but not
# reboot into the installed system.
#d-i debian-installer/exit/halt boolean true
# This will power off the machine instead of just halting it.
#d-i debian-installer/exit/poweroff boolean true
######################################################################################
## X configuration
######################################################################################
# X can detect the right driver for some cards, but if you're preseeding,
# you override whatever it chooses. Still, vesa will work most places.
#xserver-xorg xserver-xorg/config/device/driver select vesa
# A caveat with mouse autodetection is that if it fails, X will retry it
# over and over. So if it's preseeded to be done, there is a possibility of
# an infinite loop if the mouse is not autodetected.
#xserver-xorg xserver-xorg/autodetect_mouse boolean true
# Monitor autodetection is recommended.
xserver-xorg xserver-xorg/autodetect_monitor boolean true
# Uncomment if you have an LCD display.
#xserver-xorg xserver-xorg/config/monitor/lcd boolean true
# X has three configuration paths for the monitor. Here's how to preseed
# the "medium" path, which is always available. The "simple" path may not
# be available, and the "advanced" path asks too many questions.
#xserver-xorg xserver-xorg/config/monitor/selection-method \
# select medium
#xserver-xorg xserver-xorg/config/monitor/mode-list \
# select 1024x768 @ 60 Hz
d-i preseed/late_command string echo 'hehe' > /var/log/test.txt
######################################################################################
## Preseeding other packages
######################################################################################
# Depending on what software you choose to install, or if things go wrong
# during the installation process, it's possible that other questions may
# be asked. You can preseed those too, of course. To get a list of every
# possible question that could be asked during an install, do an
# installation, and then run these commands:
# debconf-get-selections --installer > file
# debconf-get-selections >> file