Alpine 本地备份
本地备份工具 (lbu
) 是 Alpine Linux 工具,用于管理 Diskless Mode 安装。对于这些安装,每当使用 Alpine Package Keeper 时,都必须使用 lbu
工具。
当 Alpine Linux 以无盘模式启动时,它最初仅从启动设备加载一些必需的软件包。但是,可以对加载到 RAM 中的内容进行本地调整,例如,通过 安装软件包 或调整 /etc 中的配置文件。修改可以保存到一个覆盖文件 (.apkovl) 中,该文件可以在启动时自动加载,以恢复保存的状态。
包含自定义配置的 .apkovl 文件可以使用 Alpine 的本地备份工具 lbu
保存到可写存储中。通过配置 本地软件包缓存,配置依赖的其他软件包也可以保存在本地可写存储中。
默认情况下,lbu commit
仅存储 /etc 下的修改,但 /etc/init.d/ 目录除外。如果在 setup-alpine
脚本期间创建了用户,则该用户的主目录也会添加到 lbu
将备份的路径中。但是,lbu include 允许修改包含文件的集合,并且可以用于指定其他文件或文件夹。
概述
lbu
工具具有多个子命令来管理 .apkovl
lbu commit | lbu ci | 创建配置备份到可写介质 |
lbu package | lbu pkg | 创建备份包 |
lbu status | lbu st | 检查自上次提交以来已更改的文件 |
lbu list | lbu ls | 列出将包含在 tar 包中的文件。与以下命令相同: lbu package -v /dev/null |
lbu diff | 针对上次提交运行 diff | |
lbu include | lbu inc 或 lbu add | 将文件名添加到包含列表/etc/apk/protected_paths.d/lbu.list |
lbu exclude | lbu ex 或 lbu delete | 将文件名添加到排除列表 /etc/apk/protected_paths.d/lbu.list |
lbu list-backup | lbu lb | 显示旧提交 |
lbu revert | 恢复到旧提交 |
在下面的示例中,您将找到一些具有特殊含义的字符
- | = 或 ('lbu commit|ci' 表示您可以输入 'lbu commit' 或 'lbu ci')
- [ ] = 可选 (在 'lbu commit|ci [-nv]' 中,如果您不需要,可以跳过 '-n'、'-v' 或 '-nv' 部分)
提交更改
当您“提交”或保存对系统所做的更改时,lbu
将生成一个名为 myboxname.apkovl.tar.gz 的文件 ('myboxname' 将与主机名相同)。该文件(包含您的修改)称为您的 “apkovl”。您需要将您的 apkovl 保存在合适的介质上(软盘、usb、cf 等)。
usage: lbu commit|ci [-nv] [<media>] Options: -d Remove old apk overlay files. -e Protect configuration with a password. -n Don't commit, just show what would have been committed. -p <password> Give encryption password on the command-line -v Verbose mode. The following values for <media> are supported: floppy usb If <media> is not specified, the environment variable LBU_MEDIA will be used. Password protection will use aes-256-cbc encryption. Other ciphers can be used by setting the DEFAULT_CIPHER or ENCRYPTION environment variables. For possible ciphers, try: openssl -v The password used to encrypt the file, can be specified with the -p option or by using the PASSWORD environment variable. The environment variable can also be set in /etc/lbu/lbu.conf
在配置介质之外的其他位置创建 .apkovl “软件包”
要“提交”更改,但覆盖生成的 apkovl 文件的目标位置,请使用 lbu package
而不是 lbu commit
usage: lbu package|pkg -v [<dirname>|<filename>] Options: -v Verbose mode. If <dirname> is a directory, a package named <hostname>.apkovl.tar.gz will be created in the specified directory. If <filename> is specified, and is not a directory, a package with the specified name will be created. If neither <dirname> nor <filename> is specified, a package named <hostname>.apkovl.tar.gz will be created in the current working directory.
从远程主机创建和保存 apkovl
要从远程服务器上的客户端创建 apkovl,可以通过 SSH 使用 lbu package
,并将 - 用作 apkovl 名称
在服务器上
ssh root@client "lbu package -" >client.apkovl.tar.gz
保存和加载 ISO 镜像自定义项
本节内容已移动到 这里。
检查将添加到您的 apkovl 的内容
lbu status
列出了下次运行 lbu commit
时将保存的内容。其默认输出是增量的,也就是说,它仅显示自上次提交以来已更改的文件。
可以使用 -a
标志覆盖此行为
usage: lbu status|st [-av] Options: -a Compare all files, not just since last commit. -v show include and exclude lists.
另一个选项是 lbu list
。它的工作方式类似于 lbu status -a
,但输出格式略有不同。(它与 lbu package -v /dev/null
完全等效)。
usage: lbu list|ls
第三个选项是 lbu diff
。这显示了与 lbu status
(不带 -a
) 相同的增量更改,但格式不同。
usage: lbu diff
将特殊文件/文件夹包含到 apkovl 中
假设您有一些想要永久保存的文件,但它们不在 /etc 中。
例如,/root/.ssh/authorized_keys (由 sshd
用于验证 ssh 用户)。可以使用以下命令将此类文件/文件夹添加到 lbu 的 include 列表中
usage: lbu include|inc|add [-rv] <file> ... lbu include|inc|add [-v] -l Options: -l List contents of include list. -r Remove specified file(s) from include list. -v Verbose mode.
lbu include
命令仅修改 lbu 的配置。您需要运行 lbu commit
才能实际创建/修改您的 apkovl。
从 apkovl 中排除特定文件/文件夹
假设您有一些位于 /etc 或其子文件夹中的文件,而您 不 想要保存它们。它可能是日志文件或状态文件,由于某种原因,它不在 /var/log/ 中,而是在其他会被 lbu
跟踪的位置。可以通过手动编辑文件或使用以下命令将此类文件/文件夹添加到 lbu 的 exclude 列表中
usage: lbu exclude|ex|delete [-rv] <file> ... lbu exclude|ex|delete [-v] -l Options: -l List contents of exclude list. -r Remove specified file(s) from exclude list. -v Verbose mode.
lbu exclude
命令也仅修改 lbu 的配置。您需要运行
lbu commit
才能实际创建/修改您的 apkovl。
执行脚本作为备份的一部分
有时需要在备份之前或之后运行脚本。两个可选目录中的脚本可以实现这一点
/etc/lbu/pre-package.d /etc/lbu/post-package.d
这些目录中的文件使用 run-script 规则运行(意味着它们必须设置可执行位,它们按字母顺序运行,并且不能包含扩展名。例如,runme 可以工作,但 runme.sh 不行。另外,应在第一行指示 shebang 行,例如 #!/bin/sh 。)
pre-package.d
中的脚本在创建 apkovl 之前运行。post-package.d
中的脚本在创建 apkovl 之后运行。
示例
与其将原始数据库目录添加到 /etc/lbu/include,不如执行“数据库转储”。例如,postgresql
- 创建 /etc/lbu/pre-package.d/sqldump,内容如下
pg_dumpall -U postgres | gzip -c >/root/pgdatabases.gz
- 标记文件为可执行:
chmod +x /etc/lbu/pre-package.d/sqldump
- 创建 /etc/lbu/post-package.d/sqldumpdelete,内容如下
rm -f /root/pgdatabases.gz
- 标记文件为可执行:
chmod +x /etc/lbu/post-package.d/sqldumpdelete
- 最后,将数据库转储文件添加到要备份的文件列表中:
lbu include root/pgdatabases.gz
现在,当您执行 lbu commit
时,sql 数据库将被转储并 gzip 压缩到 /root/pgdatabases.gz。临时文件在 lbu commit 结束时被删除。
在灾难性恢复时,数据库不会自动恢复(这不是 lbu 的工作),但您将在 /root 目录中找到完整的数据库转储,可以在其中手动恢复。
附注:启动命令 diff、list-backup、package、revert、status 时也会启动这些脚本。
多个备份版本
Lbu 现在可以保留多个备份,因此您可以恢复到较旧的配置。在 /etc/lbu/lbu.conf 中将 BACKUP_LIMIT 设置为您要保留的备份数量。
如果您已设置 BACKUP_LIMIT,则在创建新文件之前,将重命名先前活动的 .apkovl。
您可以使用以下命令列出当前可用的备份
lbu list-backup [<media>]
您可以使用以下命令恢复到较旧的备份
lbu revert <filename> [<media>]
注意:当“恢复”时,您的运行系统上没有任何更改,它仅影响在下次启动时哪个 apkovl 被认为是活动的。