我们有一个war文件,liquibase xml文件和sha1校验和,我们想要打包成Debian脚本,以便部署到一个平台:ubuntu 14.1 64位,带有tomcat 7和java 7.
我们已经浏览了大量难以理解的(对于我们作为java开发人员)Debian打包指南,其中大部分需要“上游源tar球”(例如这一个:https://wiki.debian.org/IntroDebianPackaging)和/或生成的东西从制作/安装。
我们都没有,这是我们问题的症结所在。
我们有两个阶段:
指南没有提到如何管理这两个阶段。
初始安装(我们现在在每台服务器上手动执行的操作):
我们通过使用Jenkins构建的tar文件分发应用程序本身。在tar中有以下内容:
我们将tar文件scp到/ home / foo目录中,并运行/home/foo/scripts/install.sh,它执行以下操作:
我们遇到的问题是:
系统如何管理仅发送更新的文件,例如在这种情况下不是liquibase二进制文件?我假设我们需要两个软件包,一个用于基本安装,另一个用于tar,以避免重复?
我们理解我们需要将工件放在一个特殊的目录结构中,并且这会以某种方式映射到目标服务器文件结构,我们需要构建各种控制文件,但不是如何在各个阶段粘合在一起,以及需要什么脚本。
我们已经尝试阅读Debian政策手册(https://www.debian.org/doc/debian-policy/),但这是对Linux软件包开发人员的参考资料。我们确信答案在那里,但我们无法弄清楚在哪里。
这篇文章:https://help.ubuntu.com/community/Tomcat/PackagingWebapps还有其他两个选项(我们选择“将系统范围的实例击败提交”),但没有提供有关如何实际构建软件包的线索。
答案 0 :(得分:0)
最简单的方法是安装 dh-make
并使用它生成一个骨架 debian/
目录以帮助您入门。您可以删除不相关的文件(例如,如果您不提供手册页)。
您需要编辑 debian/control
以在 Depends:
中指定必要的包 - 可能是 tomcat7
和 tomcat7-java
;您无需提及 sha1sum
,因为它位于 coreutils
中,这是一个 Essential 包。
将 context.xml
的必要修改添加到 postinst
脚本,如果(且仅当)您无法通过简单地在某处添加文件来覆盖现有设置。
添加一个带有 install
目标的 Makefile,将必要的文件放入 $DESTDIR
的子目录中:
install:
install -d $(DESTDIR)/var/lib/tomcat7/webapps
install -m 644 app.war $(DESTDIR)/var/lib/tomcat7/webapps
我希望在更新依赖包时可以触发 Tomcat 重新加载(通过在 debian/triggers
中提及),但如果没有,您需要重新启动它(使用 invoke-rc.d
或 { {1}},具体取决于目标 init 系统)在 postinst 和 postrm 脚本中。
回答具体问题:
如果您需要创建新用户,请在 preinst 脚本中创建(从另一个包中获取,或阅读手册)。你真的需要另一个用户,还是tomcat用户合适?
包管理器安装和卸载提供的所有文件,并运行提供的 preinst、postinst、prerm 和 postrm 脚本。
该列表不是与同类比较 - 例如systemctl
用于管理系统上的包,而不是用于创建包。使用合适的 dpkg
目录,构建可以像
debian
诸如 pbuilder 之类的工具可用于确保在构建系统上安装诸如库之类的依赖项,而不是手动安排,如果您正在构建发行版,这会变得乏味。您不应该需要那种程度的自动化。
软件包的文件安装到 fakeroot debian/rules binary
下 $DESTDIR
放置它们的任何目录中。
可能有比在 make install
中编辑文件更好的方式来配置 Tomcat。我不太了解那个服务器,所以我自己也不知道。
目标文件的权限和所有权与 /etc
集完全相同。
Debian 打包手册中有很多内容需要阅读;我建议您在机制开始变得有意义时经常回顾它。
我不确定您所说的“发送文件”是什么意思。并且该包不应该包含您从中解压缩的 tarball - 那只是重复。