4. The basics
本章简要概述了构建过程,并说明了如何使用三种最常用的映像类型。最通用的映像类型iso-hybrid可用于虚拟机、光学介质或USB便携式存储设备。在某些特殊情况下,如后面解释的,hdd类型可能更合适。本章包括构建和使用netboot类型映像的详细说明,由于需要在服务器上进行设置,这有点复杂。对于那些还不熟悉网络引导的人来说,这是一个稍微高级的主题,但是这里包含了它,因为一旦完成了设置,就可以非常方便地在本地网络上测试和部署用于引导的映像,而无需处理映像介质的麻烦。
本节以对webbooting的快速介绍结束,这可能是为不同目的使用不同图像的最简单方法,使用互联网作为一种手段,根据需要从一个切换到另一个。
在本章中,我们将经常提到live-build生成的默认文件名。如果您下载预构建的映像,则实际文件名可能会有所不同。
4.1 What is a live system?
Live系统通常是指从可移动介质(如CD-ROM或u盘)或网络上在计算机上启动的操作系统,无需在通常的驱动器上安装即可使用,在运行时完成自动配置(参见Terms)。
对于live系统,它是一个操作系统,为支持的体系结构之一(目前是amd64和i386)构建。它由以下部分组成:
-
Linux kernel image, 通常命名为vmlinuz*
-
Initial RAM disk image (initrd): 为Linux引导设置的RAM磁盘,其中包含挂载系统映像可能需要的模块和一些脚本。
-
System image: 操作系统的文件系统映像。通常,使用SquashFS压缩文件系统来最小化live系统映像大小。注意,它是只读的。因此,在引导过程中,live系统将使用RAM磁盘和’union’机制来允许在运行系统中写入文件。然而,所有的修改将在关机时丢失,除非使用可选的持久性(参见Persistence)。
-
Bootloader: 为从选定的介质启动而编写的一小段代码,可能会显示一个提示符或菜单,以允许选择options/configuration。它装载Linux内核及其initrd,以便与相关的系统文件系统一起运行。根据目标介质和包含前面提到的组件的文件系统的格式,可以使用不同的解决方案:isolinux用于从ISO9660格式的CD或DVD启动,syslinux用于从VFAT分区启动的HDD或USB驱动器,extlinux用于ext2/3/4和btrfs分区,pxelinux用于PXE netboot, GRUB用于ext2/3/4分区,等等。
您可以使用live-build从您的规范构建系统映像,设置Linux内核、它的initrd和引导加载程序来运行它们,所有这些都以一种介质相关的格式(ISO9660映像、磁盘映像等)。
4.2 First steps: building an ISO hybrid image
无论映像类型如何,每次都需要执行相同的基本步骤来构建映像。作为第一个例子,创建一个构建目录,切换到该目录,然后执行以下一系列live-build命令来创建一个基本的ISO hybrid映像,其中包含一个缺省的live系统,没有X.org。它适合刻录到CD或DVD媒体,也可以复制到u盘上。
工作目录的名称完全由您决定,但是如果您看一下整个live-manual中使用的示例,最好使用一个名称来帮助您识别每个目录中正在处理的映像,特别是如果您正在处理或试验不同的映像类型。在本例中,您将构建一个默认系统,例如,我们将其称为live-default。
$ mkdir live-default && cd live-default
然后执行lb config命令。这将在当前目录中创建一个”config/”层次结构,供其他命令使用:
$ lb config
没有向这些命令传递任何参数,因此将使用它们的所有各种选项的默认值。请参阅The lb config command了解更多细节。
现在”config/”层次结构已经存在,使用lb build命令构建镜像:
# lb build
这个过程可能需要一段时间,这取决于你的电脑速度和网络连接。当它完成后,应该有一个live-image-i386.hybrid.iso镜像文件,可以使用,在当前目录下。
注意: 如果在amd64系统上构建,生成的映像的名称将是live-image-amd64.hybrid.iso。在整个手册中都要记住这个命名约定。
4.3 Using an ISO hybrid live image
在构建或下载ISO混合映像(可在https://www.debian.org/CD/live/上获得)之后,通常的下一步是准备启动介质,CD-R(W)或DVD-R(W)光学介质或u盘。
4.3.1 Burning an ISO image to a physical medium
刻录ISO映像很容易。只需安装xorriso并在命令行中使用它来刻录映像。例如:
# apt-get install xorriso
$ xorriso -as cdrecord -v dev=/dev/sr0 blank=as_needed live-image-i386.hybrid.iso
4.3.2 Copying an ISO hybrid image to a USB stick
用xorriso准备的ISO映像,可以简单地用cp程序复制到u盘或等效程序。插入一个大小足以容纳您的图像文件的u盘,并确定它是哪个设备,我们将其称为 ${USBSTICK}。这是您的密钥的设备文件,如 /dev/sdb,而不是分区,如/dev/sdb1!插入磁盘后,您可以通过查看dmesg的输出来找到正确的设备名称,或者更好的方法是ls -l /dev/disk/by-id。
一旦您确定您有正确的设备名称,使用cp命令将图像复制到u盘。这肯定会覆盖任何以前的内容在你的u盘!
$ cp live-image-i386.hybrid.iso ${USBSTICK}
$ sync
注意: sync命令用于确保在复制映像时由内核存储在内存中的所有数据都被写入u盘。
4.3.3 Using the space left on a USB stick
将live-image-i386.hybrid.iso复制到u盘后,设备上的第一个分区将由live系统填充。要使用剩余的空闲空间,请使用分区工具(如gparted或parted)在磁盘棒上创建一个新分区。
# gparted ${USBSTICK}
在创建分区之后,其中 ${PARTITION} 是分区的名称,例如 /dev/sdb2,您必须在其上创建文件系统。一个可能的选择是ext4。
# mkfs.ext4 ${PARTITION}
注意: 如果您想在Windows上使用额外的空间,显然操作系统通常不能访问除第一个分区之外的任何分区。这个问题的一些解决方案已经在我们的mailing list中讨论过,但似乎没有简单的答案。
请记住:每次在存储棒上安装新的live-image-i386.hybrid.iso时,存储棒上的所有数据都将丢失,因为分区表被映像的内容覆盖,因此首先备份额外的分区,以便在更新活动映像后再次恢复。
4.3.4 Booting the live medium
第一次引导活动介质(无论是CD、DVD、USB存储器还是PXE引导)时,可能首先需要在计算机的BIOS中进行一些设置。由于bios在特性和键绑定方面差别很大,我们在这里无法深入讨论这个主题。一些bios提供了一个键来在引导时打开引导设备菜单,如果您的系统上有的话,这是最简单的方法。否则,您需要进入BIOS配置菜单并更改引导顺序,将live系统的引导设备置于正常引导设备之前。
一旦启动了介质,就会出现一个启动菜单。如果你只按这里的enter键,系统将使用默认项,Live和默认选项启动。有关引导选项的更多信息,请参阅菜单中的“帮助”条目,以及在live系统中找到的live-boot和live-config手册页。
假设您选择了Live并启动了一个默认的桌面Live映像,在启动消息滚动之后,您应该自动登录到user帐户并看到一个桌面,准备使用。如果您已经启动了一个仅用于控制台的映像,那么您应该自动登录到控制台的user帐户,并看到一个shell提示符,可以使用了。
4.4 Using a virtual machine for testing
在虚拟机(VM)中运行实时映像可以极大地节省开发时间。这并非没有警告:
-
运行虚拟机需要为客户操作系统和主机提供足够的内存,建议使用硬件支持虚拟化的CPU。
-
在VM上运行有一些固有的限制,例如较差的视频性能,有限的仿真硬件选择。
-
在针对特定硬件进行开发时,没有什么可以替代在硬件本身上运行。
-
偶尔会有只与在VM中运行有关的错误。如果有问题,请直接在硬件上测试映像。
如果您可以在这些限制条件下工作,请调查可用的VM软件并选择适合您需求的软件。
4.4.1 Testing an ISO image with QEMU
Debian中最通用的虚拟机是QEMU。如果您的处理器具有虚拟化硬件支持,请使用qemu-kvm包;qemu-kvm包描述简要列出了需求。
首先,安装qemu-kvm,如果你的处理器支持的话。如果没有安装,请安装qemu,此时程序名称为qemu,而不是下面示例中的kvm。qemu-utils包对于使用qemu-img创建虚拟磁盘映像也很有价值。
# apt-get install qemu-kvm qemu-utils
启动ISO镜像很简单:
$ kvm -cdrom live-image-i386.hybrid.iso
有关更多详细信息,请参阅手册页。
4.4.2 Testing an ISO image with VirtualBox
为了用virtualbox测试ISO:
# apt-get install virtualbox virtualbox-qt virtualbox-dkms
$ virtualbox
创建一个新的虚拟机,将存储设置更改为使用 live-image-i386.hybrid.iso 作为CD/DVD设备,并启动机器。
注意:对于包含X.org的live系统,您希望使用virtualbox进行测试,您可能希望在您的live-build配置中包含virtualbox X.org驱动程序包virtualbox-guest-dkms和virtualbox-guest-x11。否则,分辨率限制为800x600。
$ echo "virtualbox-guest-dkms virtualbox-guest-x11" >> config/package-lists/my.list.chroot
为了使dkms包工作,还需要安装镜像中使用的内核风格的内核头文件。与其在上面创建的包列表中手动列出正确的linux-headers包,还不如通过实时构建自动选择正确的包。
$ lb config --linux-packages "linux-image linux-headers"
4.5 Building and using an HDD image
除了指定 -b hdd 和生成的文件名是 live-image-i386.img 之外,构建HDD映像在所有方面都类似于ISO混合映像。它适用于从USB棒,USB硬盘驱动器和各种其他便携式存储设备启动。通常,ISO混合映像可以用于此目的,但如果您的BIOS不能正确处理混合映像,则需要HDD映像。
注意:如果你用上面的例子创建了一个ISO混合镜像,你需要用lb clean命令清理你的工作目录(参见The lb clean command):
# lb clean --binary
和前面一样运行lb config命令,只是这次指定了硬盘镜像类型:
$ lb config -b hdd
现在使用lb build命令构建镜像:
# lb build
当构建完成时,一个live-image-i386.img文件应该存在于当前目录中。
生成的二进制映像包含一个VFAT分区和syslinux引导加载程序,可以直接写入USB设备。再一次,使用HDD映像就像在USB上使用ISO混合映像一样。按照 Using an ISO hybrid live image 中的说明操作,除了使用文件名 live-image-i386.img 代替 live-image-i386.hybrid.iso。
同样,要用Qemu测试硬盘镜像,请按照上面 Testing an ISO image with QEMU 中的描述安装Qemu。然后运行kvm或qemu,这取决于主机系统需要的版本,指定live-image-i386.img作为第一个硬盘驱动器。
$ kvm -hda live-image-i386.img
4.6 Building a netboot image
下面的命令序列将创建一个基本的netboot映像,其中包含一个没有X.org的缺省live系统。它适用于通过网络启动。
注意:如果你执行了前面的任何例子,你需要用lb clean命令清理你的工作目录:
# lb clean
在这种特殊情况下,lb clean –binary不足以清理必要的阶段。造成这种情况的原因是在netboot设置中,需要使用不同的initramfs配置,以便在构建netboot映像时自动执行实时构建。由于initramfs创建属于chroot阶段,因此在现有构建目录中切换到netboot意味着也要重新构建chroot阶段。因此,需要使用lb clean(它也将删除chroot阶段)。
运行如下命令lb config配置网络引导镜像:
$ lb config -b netboot --net-root-path "/srv/debian-live" --net-root-server "192.168.0.2"
与ISO和HDD映像不同,网络引导本身并不向客户机提供文件系统映像,因此必须通过NFS提供文件。可以通过lb配置选择不同的网络文件系统。–net-root-path 和 –net-root-server 选项分别指定在引导时文件系统映像将位于的NFS服务器的位置和服务器。确保将这些设置为适合您的网络和服务器的值。
现在使用 lb build 命令构建镜像:
# lb build
在网络引导中,客户端运行一小部分软件,该软件通常驻留在以太网卡的EPROM上。这个程序发送一个DHCP请求来获取一个IP地址和关于下一步该做什么的信息。通常,下一步是通过TFTP协议获得更高级别的引导加载程序。它可以是pxelinux、GRUB,甚至可以直接引导到Linux这样的操作系统。
例如,如果您在/srv/debian-live目录下解压缩生成的live-image-i386.netboot.tar文件,您将在live/filesystem.squashfs目录下找到文件系统映像,在tftpboot/目录下找到内核、initrd和pxelinux引导加载程序。
现在,我们必须在服务器上配置三个服务以启用网络引导:DHCP服务器、TFTP服务器和NFS服务器。
4.6.1 DHCP server
我们必须配置网络的DHCP服务器,以确保为网络引导客户端系统提供IP地址,并公布PXE引导加载程序的位置。
下面是一个启发的例子,在/etc/dhcp/dhcpd.conf配置文件中为ISC DHCP服务器isc-dhcp-server编写:
# /etc/dhcp/dhcpd.conf - configuration file for isc-dhcp-server
ddns-update-style none;
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.1 192.168.0.254;
filename "pxelinux.0";
next-server 192.168.0.2;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
}
4.6.2 TFTP server
这将在运行时为系统提供内核和初始ramdisk。
您应该安装tftpd-hpa包。它可以提供根目录中包含的所有文件,通常是/srv/tftp。要让它服务于/srv/debian-live/tftpboot中的文件,以root身份运行以下命令:
# dpkg-reconfigure -plow tftpd-hpa
并在被询问时填写新的TFTP服务器目录。
4.6.3 NFS server
一旦客户机计算机下载并启动了Linux内核并加载了它的initrd,它将尝试通过NFS服务器挂载Live文件系统映像。
需要安装nfs-kernel-server包。
然后,通过在/etc/exports中添加如下一行,使文件系统镜像通过NFS可用:
/srv/debian-live *(ro,async,no_root_squash,no_subtree_check)
然后用下面的命令告诉NFS服务器这个新的导出:
# exportfs -rv
设置这三个服务可能有点棘手。你可能需要一些耐心才能让他们一起工作。有关更多信息,请参阅syslinux wiki https://wiki.syslinux.org/wiki/index.php?title=PXELINUX或Debian安装手册的TFTP网络引导部分https://www.debian.org/releases/stable/i386/ch04s05.en.html。它们可能会有所帮助,因为它们的过程非常相似。
4.6.4 Netboot testing HowTo
通过live-build可以轻松创建Netboot映像,但是在物理机器上测试映像可能非常耗时。
为了使我们的生活更轻松,我们可以使用虚拟化。
4.6.5 Qemu
- 安装 qemu, bridge-utils, sudo.
Edit /etc/qemu-ifup:
#!/bin/sh
sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1
echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
sudo /usr/sbin/brctl addif br0 $1
sleep 2
获取或构建一个 grub-floppy-netboot.
启动 qemu 使用参数 “-net nic,vlan=0 -net tap,vlan=0,ifname=tun0”.
4.7 Webbooting
Webbooting是一种使用internet作为手段检索和启动live系统的方便方法。对网络引导的要求很少。一方面,您需要一个带有引导加载程序、初始ram磁盘和内核的介质。另一方面,存储包含文件系统的压缩文件的web服务器。
4.7.1 Getting the webboot files
像往常一样,您可以自己构建映像,也可以使用预构建的文件,这些文件可以在项目的下载页面https://www.debian.org/CD/live/上获得。使用预构建的映像可以方便地进行初始测试,直到可以调整自己的需求为止。如果你已经构建了一个实时映像,你会在binary/live/下的构建目录中找到webbooting所需的文件。文件名为vmlinuz, initrd.img 和 filesystem.squashfs。
也可以从已经存在的iso映像中提取这些文件。为了实现这一点,按如下方式环回挂载映像:
# mount -o loop image.iso /mnt
这些文件将在live/目录下找到。在本例中,它将是/mnt/live/。这种方法的缺点是,您需要具有root权限才能挂载映像。然而,它的优点是易于编写脚本,因此易于自动化。
但毫无疑问,从iso镜像中提取文件并同时将其上传到web服务器的最简单方法是使用midnight commander或mc。如果您安装了genisoimage包,则双窗格文件管理器允许您在一个窗格中浏览iso文件的内容,并在另一个窗格中通过ftp上传文件。尽管此方法需要手工操作,但它不需要root权限。
4.7.2 Booting webboot images
虽然有些用户更喜欢虚拟化来测试网络启动,但我们在这里参考真实的硬件来匹配以下可能的用例,这些用例只应作为示例。
为了启动webboot映像,拥有上面提到的组件就足够了,即vmlinuz和initrd.img在一个名为live/的u盘目录下,并安装syslinux作为引导加载程序。然后从u盘引导,在引导选项中输入fetch=URL/PATH/TO/FILE。live-boot将检索squashfs文件并将其存储到ram中。这样,就可以将下载的压缩文件系统用作常规的live系统。例如:
append boot=live components fetch=http://192.168.2.50/images/webboot/filesystem.squashfs
用例:您有一个web服务器,其中存储了两个压缩文件,其中一个包含完整的桌面,例如gnome,另一个包含标准桌面。如果您需要一台机器的图形化环境,您可以插入usb棒,然后webboot gnome映像。如果您需要第二种类型的映像中包含的工具之一(可能用于另一台机器),则可以使用标准映像进行webboot。