sme*_*eeb 6 package-management upstart deb services software-installation
我有一个 Java 应用程序 - 尽管这里的答案应该是相同的,无论它是 Java、Ruby、Python 等 - 我想以这样的方式分发它,当开发人员去安装它时,它会自动运行作为守护进程,他们的配置为零。我对此的灵感来自Docker 守护进程,它是用 Go 编写的,但它会自动将自己配置为 Ubuntu 机器上的守护进程。我也想这样做,但不知道从哪里开始。
我会想象:
deb; 或者init/ systemd/ upstart/ 等一起发送。以某种方式在本地安装的脚本,而最终用户不必运行它们。但是,在这种情况下,我不确定如何选择要安装的脚本,因为用户可能具有多种init类似工具设置中的任何一种。有任何想法吗?
在 Ubuntu(和 Debian)上,创建deb包将是最好的方法,因为一切都可以自动化,因此不需要最终用户干预。软件包安装或升级不自动化的唯一情况是,软件包有一些需要用户输入的配置选项(主要仅在安装期间),或者配置文件被用户修改,并且也被较新版本的修改。包(升级期间)。此外,安装/升级软件包后,它安装的任何启动脚本都会自动启动。
您可以init安装多个脚本,并且一切仍然有效。systemd在用户计算机上安装使用的情况下,如果同一个服务同时存在init脚本和脚本,则忽略该脚本并使用该脚本。systemdinitsystemd
就打包本身而言,Debian 提供了帮助程序脚本(除其他外)自动安装您提供的任何启动脚本(我认为upstart他们的帮助程序脚本不支持,因为这仅在 Ubuntu 上使用)并启动服务。有关打包示例,请参阅该包的此 文件夹。(免责声明:这是我的 Github 帐户)请注意,文件包含脚本,而文件包含脚本。请注意,这些文件的名称应该是和,其中是正在创建的二进制包的名称。(参见和获取 systemd 案例。)debiandump1090-mutabilitydump1090-mutability.initinitdump1090-mutability.servicesystemdpackage-name.initpackage-name.servicepackage-nameman dh_systemd_enableman dh_systemd_start
打包时,这两个文件都被放置在用户系统上的适当目录中,然后启动服务。对于该rules文件,我建议您使用如下所示的内容,以便您从自动化中受益(请参阅该部分--with systemd):
#!/usr/bin/make -f
%:
dh $@ --with systemd
override_dh_auto_build:
# Specify how to build the Java files here, if there is no Makefile provided
override_dh_auto_install:
# Specify how to install the Java files here, if there is no `install` target in the Makefile. Don't worry about anything in the `debian` directory unless you need to install some icons.
Run Code Online (Sandbox Code Playgroud)
override_dh_auto_build(源文件编译并打包到 JAR 的位置)和override_dh_auto_install(安装 JAR 的位置)。install目标,请删除override_dh_auto_build目标并填写override_dh_auto_install.install目标(可以使用),请删除这两个目标。override_dh_auto_build并填写override_dh_auto_install。