Alpine 本地备份

来自 Alpine Linux

本地备份工具 (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.
注意:此信息以前保存在 /etc/lbu/include 中。现在,它与 exclude 列表一起保存在 /etc/apk/protected_paths.d/lbu.list 中。无论哪种方式,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.
注意:如上所述,此信息现在保存在 /etc/apk/protected_paths.d/lbu.list 中。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 被认为是活动的。


参见