在Ubuntu(和Debian)上,创建一个
deb
包将是最好的方法,因为可以自动化处理所有事情,这样就不需要任何最终用户干预。唯一不自动化安装或升级软件包的情况是如果软件包有一些需要用户输入的配置选项(主要仅在安装期间),或者如果用户修改了配置文件并且也被新版本的软件包修改(在升级期间)。此外,在安装/升级软件包之后,它安装的任何启动脚本都会自动启动。
您可以安装多个
init
脚本,并使一切正常。如果在用户的计算机上安装并使用了
systemd
,则如果同一服务既有
init
脚本又有
systemd
脚本,则忽略
init
脚本并使用
systemd
脚本。
关于软件包本身,Debian提供了辅助脚本,可以自动安装您提供的任何启动脚本(我认为它们的辅助脚本不支持upstart,因为这只在Ubuntu上使用),并启动服务。软件包示例,请参阅
this中的
debian
文件夹,对应
dump1090-mutability
软件包。(免责声明:这是我的Github账户)请注意,
dump1090-mutability.init
文件包含
init
脚本,而
dump1090-mutability.service
文件包含
systemd
脚本。请注意,这些文件的名称应为
package-name.init
和
package-name.service
,其中
package-name
是正在创建的二进制软件包的名称。(有关systemd的情况,请参阅
man dh_systemd_enable
和
man dh_systemd_start
。)
在打包过程中,这两个文件都会被放置在用户系统的适当目录中,然后启动服务。对于
rules
文件,我建议您使用类似以下内容的配置,以便从自动化中受益(参见
this关于
--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.
如果您的应用程序没有Makefile,只是一组Java源文件,请填写
override_dh_auto_build
(编译和打包源文件为JAR)和
override_dh_auto_install
(安装JAR文件)。
如果您的应用程序有一个Makefile,但没有
install
目标,请删除
override_dh_auto_build
目标,并填写
override_dh_auto_install
。
如果您的应用程序有一个Makefile,并且有一个可以使用的
install
目标,请删除这两个目标。
如果您的应用程序只是一个JAR文件,请删除
override_dh_auto_build
,并填写
override_dh_auto_install
。
deb
安装程序可以直接安装打包好的JAR文件 - 这种可能吗?无论如何,请您更新您的答案,包括一个示例,展示最终分发的ZIP/TAR文件的目录结构会是什么样子?我想象中这个ZIP/TAR文件应该包含deb
安装程序、安装脚本和JAR文件,但是对于整体的结构还不太清楚。再次感谢! - smeebdeb
文件包含了所有内容;你不需要在deb
文件之外再放其他文件,所以不需要将其放入zip/tar文件中。 - saiarcot895--with systemd
部分。但是,如果需要的话,通过添加一些代码,您可以选择在Ubuntu 14.04+或Debian Wheezy上进行编译,并使得生成的软件包能够在init
和systemd
系统上都能正常工作。 - saiarcot895