我们有一个 war 文件、liquibase xml 文件和 sha1 校验和,我们要打包为 Debian 脚本以部署到一个平台:ubuntu 14.1 64bit with tomcat 7 和 java 7。
我们已经浏览了大量难以理解的(对于我们作为 Java 开发人员)Debian 打包指南,其中大部分需要“上游源 tar 球”(例如这个: https://wiki.debian.org/IntroDebianPackaging )和/或通过 make/生成的东西安装。
我们两者都没有,这是我们问题的症结所在。
我们有两个阶段:
指南没有提到如何管理这两个阶段。
初始安装(我们现在在每台服务器上手动执行的操作):
4.1 创建scripts目录并复制一个install.sh文件
4.2 编辑 install.sh 文件并更改数据库连接字符串、绝密用户和密码以匹配目标数据库(在另一台服务器上)
4.3 将 liquibase 二进制分发的 jars 和脚本复制到 liquibase 子目录中。
我们通过 Jenkins 构建的 tar 文件分发应用程序本身。 tar 中的内容如下:
我们将 tar 文件 scp 到/home/foo 目录中,然后运行 /home/foo/scripts/install.sh 执行以下操作:
我们的问题是:
我们知道我们需要将工件放在一个特殊的目录结构中,这以某种方式映射到目标服务器的文件结构,我们需要构建各种控制文件,但不知道它如何在各个阶段粘合在一起,以及什么脚本是必需的。
我们曾尝试阅读 Debian 政策手册 ( https://www.debian.org/doc/debian-policy/ ),但这是有经验的 linux 软件包开发人员的引用书。我们确信答案就在那里,但我们无法弄清楚在哪里。
本帖:https://help.ubuntu.com/community/Tomcat/PackagingWebapps有另外两个选项(我们选择“击败系统范围的实例提交”)但没有提供关于如何实际构建包的线索。
最佳答案
最简单的方法是安装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
或 systemctl
,取决于目标init 系统)在 postinst 和 postrm 脚本中。回答具体问题:
dpkg
用于管理系统上的包,而不是用于创建包。用合适的debian
目录,构建可以很简单 fakeroot debian/rules binary
诸如 pbuilder 之类的工具可用于确保在构建系统上安装诸如库之类的依赖项,而不是手动安排,如果您正在构建发行版,这会变得乏味。您不应该需要那种程度的自动化。$DESTDIR
下的任何目录中那个make install
把他们。/etc
中编辑文件更好的方式来配置 Tomcat .我不太了解那个服务器,所以我自己也不知道。make install
完全相同套。关于debian - 如何为 Ubuntu 的 war 文件创建 debian 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34800471/