是否有可以在其 postinst、postrm 等中使用的常用脚本?

是否有可以在其 postinst、postrm 等中使用的常用脚本?

我正在从事许多独立的项目,每个项目都附带一个适用于 Ubuntu 的单独 Debian 软件包。

对于包括服务在内的所有项目,我最终都会在其preinstpostinstprermpostrm脚本中执行类似操作。例如,我创建一个用户和一个组,然后创建一个日志子目录,在/var/log该子目录中,我使用正确的用户和组创建第一个空日志文件(否则logrotate无法轮换这些文件)。

下面是一个关于如何在preinst脚本中安全地创建用户和组的示例(这样preinst一些解压的文件就可以使用该用户:组):

ENVIRONMENTNAME=communicatord
USERNAME=communicatord
GROUPNAME=communicatord

# add user and group
#
if ! getent group "${GROUPNAME}" >/dev/null
then
    addgroup --system "${GROUPNAME}"
fi
#
if ! getent passwd "${USERNAME}" >/dev/null
then
    adduser --quiet \
        --system \
        --ingroup "${GROUPNAME}" \
        --disabled-login \
        --disabled-password \
        --home "/var/lib/${ENVIRONMENTNAME}" \
        --no-create-home \
        -gecos "Communicator Daemons and Tools" \
            "${USERNAME}"
fi

当我可以编写一个脚本同时运行所有命令时,所有这些工作都是重复性的。也许是这样的:

setup-service <environmentname> <username> <groupname> <logname>

目前,我正在考虑创建一个包,将所有这些脚本集中到一个地方。然后我就可以setup-service从所有其他项目运行该脚本。但我想避免再创建另一个包(这需要额外的维护等)。

我想知道是否已经存在这样的软件包,它可以提供一组对许多 Debian/Ubuntu 软件包来说相当通用的默认脚本?

我当然使用/usr/share/debconf/confmodule。我还知道autoscripts当您使用特定文件或选项时会添加 (systemd自动处理服务的启用并启动它,debian/logrotate在 下安装文件/etc/logrotate.d,支持crontab文件等)。

是否可以(并且足够容易地)扩展autoscripts用户、日志等机制?例如,我可以有一个名为的文件users,它告诉autoscripts在安装时创建一个或多个用户,并在清除时自动删除这些用户。

答案1

在对 Deb Helpers 进行一些额外的研究之后,我发现了一个名为的软件包dh-sysuser,它的功能与我所期望的完全一致。

首先,安装该扩展:

sudo apt-get install dh-sysuser

然后在您的debian/rules文件中,像这样添加模块:

dh $@ --with sysuser

(注意:如果您已经有了,--with ...则添加逗号和名称,如--with python2,sysuser

最后,创建一个debian/<package>.sysuser包含用户名和选项的文件。就我而言,我希望按如下方式创建主目录:

# User Name     Options
sitter          home

您可以指定一个确切的主目录 ( home=/home/dir),而不必让dh_sysuser脚本创建默认主目录 ( home=/var/lib/<package>)。另一个选项是defaults

有了这个,创建我的用户就会更好/更容易。

此外,您必须确保dh-sysuser在构建时安装了该包,因此请编辑您的debian/control文件并添加:

Build-Depends: ... dh-sysuser ...

请注意,安装时dh-systemd我得到了我需要的一切,除了那个扩展!所以,你应该确保你也安装了那个。

我认为我不会找到一种方法来处理 logrotate 混乱,但是使用现有的dh_...脚本,我认为我可以轻松添加该功能。

资料来源:

相关内容