![是否有可以在其 postinst、postrm 等中使用的常用脚本?](https://linux22.com/image/1072024/%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%85%B6%20postinst%E3%80%81postrm%20%E7%AD%89%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%9A%84%E5%B8%B8%E7%94%A8%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
我正在从事许多独立的项目,每个项目都附带一个适用于 Ubuntu 的单独 Debian 软件包。
对于包括服务在内的所有项目,我最终都会在其preinst
、postinst
、prerm
和postrm
脚本中执行类似操作。例如,我创建一个用户和一个组,然后创建一个日志子目录,在/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_...
脚本,我认为我可以轻松添加该功能。
资料来源: