10. Customizing run time behaviours
运行时完成的所有配置都由live-config完成。以下是用户感兴趣的live-config的一些最常见的选项。在live-config的手册页中可以找到所有可能性的完整列表。
10.1 Customizing the live user
一个重要的考虑是,live用户是在引导时由live-boot创建的,而不是在构建时由live-build创建的。这不仅影响在构建中引入与Live/chroot local includes中所讨论的与live用户相关的材料,还影响与live用户相关的任何组和权限。
您可以通过使用live-config配置的任何可能性来指定live用户将属于的其他组。例如,要将live用户添加到fuse组,可以在config/includes.chroot/etc/live/config.conf.d/10-user-setup.conf中添加以下文件:
LIVE_USER_DEFAULT_GROUPS="audio cdrom dip floppy video plugdev netdev powerdev scanner bluetooth fuse"
或者使用live-config.user-default-groups=audio,cdrom,dip,floppy,video,plugdev,netdev,powerdev,scanner,bluetooth,fuse作为引导参数。
也可以更改默认用户名“user”和默认密码“live”。如果你出于某种原因想要做到这一点,你可以很容易地实现它:
要更改默认用户名,只需在配置中指定即可:
$ lb config --bootappend-live "boot=live components username=live-user"
更改默认密码的一种可能方法是通过Boot-time hooks中描述的钩子。为了做到这一点,你可以使用/usr/share/doc/live-config/examples/hooks中的“passwd”钩子,并相应地添加前缀(例如2000-passwd),并将其添加到config/includes.chroot/lib/live/config/中。
10.2 Customizing locale and language
当活动系统启动时,语言涉及两个步骤:
-
区域设置生成
-
设置键盘配置
构建Live系统时的默认语言环境是locales=en_US.UTF-8。要定义应该生成的语言环境,请使用lb config的–bootappend-live选项中的locale参数,例如:
$ lb config --bootappend-live "boot=live components locales=de_CH.UTF-8"
可以将多个区域设置指定为逗号分隔的列表。
这个参数,以及下面指出的键盘配置参数,也可以在内核命令行中使用。您可以通过language_country(在这种情况下使用默认编码)或完整的language_country.encoding字来指定区域设置。在/usr/share/i18n/SUPPORTED中可以找到支持的语言环境列表和每个语言环境的编码
控制台和X键盘配置都是由live-config使用控制台设置包执行的。要配置它们,可以通过–bootappend-live选项使用键盘布局、键盘变体、键盘选项和键盘模型启动参数。这些有效的选项可以在/usr/share/X11/xkb/rules/base.lst中找到要查找给定语言的布局和变体,请尝试搜索该语言的英文名称和/或使用该语言的国家,例如:
$ egrep -i '(^!|german.*switzerland)' /usr/share/X11/xkb/rules/base.lst
! model
! layout
ch German (Switzerland)
! variant
legacy ch: German (Switzerland, legacy)
de_nodeadkeys ch: German (Switzerland, eliminate dead keys)
de_sundeadkeys ch: German (Switzerland, Sun dead keys)
de_mac ch: German (Switzerland, Macintosh)
! option
注意,每个变体都在描述中列出了它所应用的布局。
通常,只需要配置布局。例如,要获取X中德语和瑞士德语键盘布局的区域设置文件,使用:
$ lb config --bootappend-live "boot=live components locales=de_CH.UTF-8 keyboard-layouts=ch"
然而,对于非常具体的用例,您可能希望包含其他参数。例如,要在TypeMatrix EZ-Reach 2030 USB键盘上设置French-Dvorak布局(称为Bepo)的法语系统,使用:
$ lb config --bootappend-live \
"boot=live components locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-variants=bepo keyboard-model=tm2030usb"
对于每个keyboard-*选项,可以将多个值指定为逗号分隔的列表,但keyboard-model例外,它只接受一个值。有关XKBMODEL, XKBLAYOUT, XKBVARIANT和XKBOPTIONS变量的详细信息和示例,请参阅keyboard(5)手册页。如果给出了多个键盘变体值,它们将与键盘布局值一对一匹配(参见setxkbmap(1) -variant选项)。允许空值;例如,要定义两种布局,默认是美国QWERTY,另一种是美国Dvorak,使用:
$ lb config --bootappend-live \
"boot=live components keyboard-layouts=us,us keyboard-variants=,dvorak"
10.3 Persistence
活动cd范例是一种预安装的系统,它从只读介质(如cdrom)上运行,其中的写入和修改在运行它的主机硬件重新启动后失效。
live系统是这种范例的概括,因此支持除cd之外的其他媒体;但是,在其默认行为中,它应该被认为是只读的,并且在关闭时丢失系统的所有运行时演化。
‘Persistence’是不同类型的解决方案的通用名称,用于在重新启动时保存系统的部分或全部运行时演化。要理解它是如何工作的,最好知道即使系统是从只读介质引导和运行的,对文件和目录的修改也会写入可写介质上,通常是ram磁盘(tmpfs),并且ram磁盘的数据在重新引导后无法保存。
存储在该ramdisk上的数据应该保存在可写的持久介质上,比如本地存储介质、网络共享,甚至是多会话(可重写)CD/DVD的一个会话。所有这些媒体都以不同的方式在live系统中得到支持,除了最后一种之外,其他所有媒体都需要在引导时指定一个特殊的引导参数:persistence。
如果设置了引导参数persistence(而没有设置nopersistence),将在引导过程中探测本地存储介质(例如硬盘、USB驱动器)以查找持久化卷。可以通过指定live-boot(7)手册页中描述的某些引导参数来限制使用哪种类型的持久性卷。持久化卷是以下任意一种:
-
分区,由其GPT名称标识。
-
一个文件系统,由它的文件系统标签标识。
-
位于任何可读文件系统(甚至是外国操作系统的NTFS分区)的根目录上的映像文件,由其文件名标识。
覆盖层的卷标签必须是持久性,但它将被忽略,除非它在其根目录中包含一个名为persistence.conf的文件,该文件用于完全自定义卷的持久性,也就是说,指定您想要在重新启动后保存在持久性卷中的目录。请参阅The persistence.conf file了解更多细节。
下面是一些示例,说明如何准备用于持久化的volume。例如,它可以是硬盘上的ext4分区或usb存储器上创建的分区,例如:
# mkfs.ext4 -L persistence /dev/sdb1
另请参阅Using the space left on a USB stick.
如果你的设备上已经有一个分区,你可以用下面的方法来改变标签:
# tune2fs -L persistence /dev/sdb1 # for ext2,3,4 filesystems
下面是一个如何创建一个基于ext4的映像文件用于持久化的示例:
$ dd if=/dev/null of=persistence bs=1 count=0 seek=1G # for a 1GB sized image file
$ /sbin/mkfs.ext4 -F persistence
例如,创建映像文件后,要使/usr持久,但只保存对该目录所做的更改,而不保存/usr的所有内容,可以使用”union”选项。如果映像文件位于您的主目录,将其复制到硬盘文件系统的根目录,并按如下方式将其挂载到/mnt中:
# cp persistence /
# mount -t ext4 /persistence /mnt
然后,创建persistence.conf文件,添加内容并卸载镜像文件。
# echo "/usr union" >> /mnt/persistence.conf
# umount /mnt
现在,使用引导参数“persistence”重新引导到活动介质。
10.3.1 The persistence.conf file
带有持久性标签的卷必须通过persistence.conf文件配置,以使任意目录具有持久性。该文件位于卷的文件系统根目录上,控制将哪些目录持久化以及以何种方式持久化。
如何配置自定义覆盖挂载在persistence.conf(5)手册页中有详细描述,但一个简单的示例应该足以满足大多数用途。假设我们想在/dev/sdb1分区的ext4文件系统中创建主目录和APT缓存:
# mkfs.ext4 -L persistence /dev/sdb1
# mount -t ext4 /dev/sdb1 /mnt
# echo "/home" >> /mnt/persistence.conf
# echo "/var/cache/apt" >> /mnt/persistence.conf
# umount /mnt
然后重启。在第一次引导期间,/home和/var/cache/apt的内容将被复制到持久性卷中,从那时起,对这些目录的所有更改都将保存在持久性卷中。请注意,persistence.conf文件中列出的任何路径都不能包含空格或特殊的。和. .路径组件。此外,/lib、/lib/live(或它们的任何子目录)和/都不能使用自定义挂载来持久化。作为解决此限制的方法,您可以在persistence.conf文件中添加/ union以实现完全持久化。
10.3.2 Using more than one persistence store
对于不同的用例,使用多个持久性存储有不同的方法。例如,同时使用几个卷,或者在各种各样的卷中只选择一个卷,用于非常特定的目的。
可以同时使用几个不同的自定义覆盖卷(带有它们自己的persistence.conf文件),但是如果几个卷使同一个目录持久,则只使用其中一个。如果任何两个挂载是“嵌套的”(即一个是另一个的子目录),父挂载将在子挂载之前挂载,所以没有挂载被另一个隐藏。如果嵌套的自定义挂载列在同一个persistence.conf文件中,则会出现问题。如果您确实需要的话,请参阅persistence.conf(5)手册页了解如何处理这种情况(提示:您通常不需要)。
一个可能的用例:如果您希望将用户数据(即/home)和超级用户数据(即/root)存储在不同的分区中,请创建两个带有持久性标签的分区,并在每个分区中添加一个persistence.conf文件,如下所示:# echo “/home” > persistence.conf用于保存用户文件的第一个分区,# echo “/root” > persistence.conf用于存储超级用户文件的第二个分区。最后,使用持久性引导参数。
如果用户需要多个相同类型的持久性存储用于不同的位置或测试,例如私有和工作,那么与引导参数持久性结合使用的引导参数持久性标签将允许多个但唯一的持久性媒体。例如,如果用户希望使用标记为private的持久性分区来存储浏览器书签或其他类型的个人数据,他们将使用引导参数:persistence persistence-label=private。为了存储与工作相关的数据,如文档、研究项目或其他类型的数据,他们将使用引导参数:persistence persistence-label=work。
重要的是要记住,这些卷中的每个卷(私有卷和工作卷)在其根目录中也需要一个persistence.conf文件。live-boot手册页包含有关如何将这些标签与遗留名称一起使用的更多信息。
10.3.3 Using persistence with encryption
使用持久性特性意味着一些敏感数据可能会暴露在风险中。特别是如果持久数据存储在便携式设备上,如usb棒或外部硬盘驱动器。这就是加密派上用场的时候。即使整个过程看起来很复杂,因为要采取的步骤很多,但是用live-boot处理加密分区确实很容易。为了使用luks(这是一种受支持的加密类型),您需要在创建加密分区的机器上以及要使用加密持久分区的live系统上安装cryptsetup。
在您的机器上安装cryptsetup:
# apt-get install cryptsetup
要在运行系统中安装cryptsetup,请将其添加到package-lists中:
$ lb config
$ echo "cryptsetup" > config/package-lists/encryption.list.chroot
一旦使用cryptsetup创建了活动系统,基本上只需要创建一个新的分区,对其进行加密,然后使用persistence和persistence-encryption=luks参数进行引导。我们可能已经预料到这一步,并按照通常的过程添加启动参数:
$ lb config --bootappend-live "boot=live components persistence persistence-encryption=luks"
让我们为那些不熟悉加密的人详细介绍一下。在下面的示例中,我们将使用u盘上对应于/dev/sdc2的分区。请注意,您需要确定在您的特定情况下要使用哪个分区。
第一步是插入u盘,确定是哪个设备。在live-manual中列出设备的推荐方法是使用ls -l /dev/disk/by-id。之后,创建一个新的分区,然后用密码短语加密它,如下所示:
# cryptsetup --verify-passphrase luksFormat /dev/sdc2
然后在虚拟设备映射器中打开luks分区。用任何你喜欢的名字。我们在这里用live作为例子:
# cryptsetup luksOpen /dev/sdc2 live
下一步是在创建文件系统之前用零填充设备:
# dd if=/dev/zero of=/dev/mapper/live
现在,我们已经准备好创建文件系统了。注意,我们正在添加持久性标签,以便在引导时将设备挂载为持久性存储。
# mkfs.ext4 -L persistence /dev/mapper/live
为了继续我们的设置,我们需要挂载设备,例如在/mnt中。
# mount /dev/mapper/live /mnt
并在分区的根目录下创建persistence.conf文件。如前所述,这是绝对必要的。参见The persistence.conf file.
# echo "/ union" > /mnt/persistence.conf
然后卸载挂载点:
# umount /mnt
虽然这可能是保护我们刚刚添加到分区的数据的好方法,但我们可以选择关闭设备:
# cryptsetup luksClose live
让我们总结一下这个过程。到目前为止,我们已经创建了一个具有加密功能的live系统,可以像Copying an ISO hybrid image to a USB stick中解释的那样将其复制到usb棒中。我们还创建了一个加密分区,它可以位于相同的usb随身携带,我们已经配置了加密分区作为持久性存储。现在,我们只需要启动live系统。在引导时,live-boot将提示我们输入密码短语,并将挂载用于持久化的加密分区。