Alpine 本地备份

来自 Alpine Linux
(重定向自 Lbu

本地备份工具 (lbu) 是 Alpine Linux 用于管理 无盘模式 安装的工具。对于这些安装,无论何时使用 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 运行与上次提交的差异
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 使用 - 作为 apkovl 名称的 lbu package

在服务器上

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 的包含列表中

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 中。现在它与排除列表一起保存在 /etc/apk/protected_paths.d/lbu.list 中。无论哪种方式,命令 lbu include 仅修改 lbu 的配置。您需要运行 lbu commit 才能实际创建/修改您的 apkovl。


从 apkovl 中排除特定文件/文件夹

假设您有一些位于 /etc 或其子文件夹中的文件,您不想保存。它可能是日志文件或状态文件,由于某些原因,它不在 /var/log/ 中,而是在其他会被 lbu 跟踪的位置。可以通过手动编辑文件或使用以下命令将此类文件/文件夹添加到 lbu 的排除列表中

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 提交结束时被删除。

在灾难性恢复时,数据库不会自动恢复(这不是 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 被认为是活动的。


另请参阅