如何为Ubuntu的war文件创建debian包

Joh*_*tle 15 debian war

我们有一个war文件,liquibase xml文件和sha1校验和我们想要打包成Debian脚本部署到一个平台:ubuntu 14.1 64bit with tomcat 7和java 7.

我们已经搜索了大量难以理解的(对于我们作为Java开发人员)Debian打包指南,其中大部分需要"上游源tar球"(例如这一个:https://wiki.debian.org/IntroDebianPackaging)和/或者通过make/install生成的东西.

我们既没有,这也是我们问题的症结所在.

我们有两个阶段:

  1. 初始安装(完成一次)
  2. 更新(多次完成)

指南没有提到如何管理这两个阶段.

初始安装(我们现在在每台服务器上手动执行的操作):

  1. 使用apt-get作为root安装java,tomcat7.据推测,这可以通过依赖性自动化
  2. 使用目标数据库连接字符串/密码等大量编辑var/lib/tomcat7/conf/context.xml.据推测,安装后仍需手动完成.
  3. 为我们的应用创建一个新用户和组,例如"foo".
  4. 以foo身份登录
  5. 在foos home目录中,安装基本应用程序:4.1创建脚本目录并复制install.sh文件4.2编辑install.sh文件并更改数据库连接字符串,最高机密用户并传递以匹配目标数据库(在另一台服务器上) )4.3将liquibase二进制分布的jar和脚本复制到liquibase子目录中.

我们通过使用Jenkins构建的tar文件分发应用程序本身.在tar中如下:

  1. app.sha1
  2. migration/changelog.xml(以及一堆liquibase xml文件)
  3. app.war
  4. classes.sha1

我们将tar文件scp到/ home/foo目录中,并运行/home/foo/scripts/install.sh,它执行以下操作:

  1. 从/ home/foo删除旧焦油和未经处理的东西
  2. 解开新的tar文件.
  3. 停止tomcat
  4. 使用untarred migrations dir运行liquibase jar命令来创建/更新db
  5. 删除/ var/lib/tomcat7/webapps/*
  6. 将新战争复制到var/lib/tomcat7/webapps /
  7. 启动tomcat
  8. 等一下
  9. 使用sha1sum来确保类是正确的(除了客户的要求之外,这没有用处)

我们的问题是:

  1. 用户在哪里以及如何创建?例如foo在我们的情况下,或tomcat7在tomcats的情况下.
  2. 包"是否自行安装"?或者它只将文件放在文件系统中(因此需要管理员以后运行一个或多个脚本来完成工作?是否有一些标准用于执行工作的脚本,例如标准名称?
  3. 有很多包装工具,例如,Jenkins插件,dpkg,fpm,debuild,dpkg-buildpackage.我们应该使用哪个?我们查看了fpm,但它假设你有一个带有make文件等源代码安装的目录,我们没有.
  4. 包安装在哪里?它会以/ var/lib/foo或var/lib/foo-0.3.4结尾吗?如果是后者,我们就麻烦了,因为系统的其他部分需要访问.sha1文件,因此需要一个固定的地方来安装.
  5. 有没有比手动编辑每个服务器context.xml和install.sh更好的方法,以使每个客户拥有正确的数据库连接详细信息?例如,人们使用awk/sed从脚本中获取此类内容,还是有某种mysql密码和连接字符串存储库?
  6. 如何设置目标文件的所有权和权限?
  7. 有没有人碰到一个"Hello World"式包装的教程,不依赖于现有的"源焦油+制作+安装",并显示在目标服务器的安装后的包文件和文件之间的关系,以及包生命周期包括更新如何工作?
  8. 系统如何管理仅发送更新的文件,例如在这种情况下不是liquibase二进制文件?我假设我们需要两个软件包,一个用于基本安装,一个用于tar,以避免重复?

    我们知道我们需要将工件放在一个特殊的目录结构中,并且它以某种方式映射到目标服务器文件结构,我们需要构建各种控制文件,但不是它在各个阶段如何粘合在一起,以及什么脚本是需要.

    我们试图阅读Debian政策手册(https://www.debian.org/doc/debian-policy/),但这是对Linux体验开发人员的一个参考.我们确信答案在那里,但我们无法弄清楚在哪里.

这篇文章: https: //help.ubuntu.com/community/Tomcat/PackagingWebapps还有另外两个选项(我们选择"将系统范围的实例击败提交"),但没有提供有关如何实际构建软件包的线索.

Tob*_*ght 1

最简单的方法是安装dh-make并使用它来生成一个骨架debian/目录以帮助您入门。您可以删除不相关的文件(例如,如果您不提供手册页)。

您需要编辑以在- 可能和;debian/control中指定必要的包 你不需要提及,因为它在 中,这是一个 Essential 包。Depends: tomcat7tomcat7-javasha1sumcoreutils

如果(且仅当)您无法通过简单地在某处添加文件来覆盖现有设置,请context.xml向脚本添加必要的修改。postinst

添加一个带有install目标的 Makefile,将必要的文件放入以下子目录中$DESTDIR

install:
        install -d $(DESTDIR)/var/lib/tomcat7/webapps
        install -m 644 app.war $(DESTDIR)/var/lib/tomcat7/webapps
Run Code Online (Sandbox Code Playgroud)

我希望当依赖包更新时可以触发 Tomcat 重新加载(通过在 中提及debian/triggers),但如果没有,您需要在 postinst 和 postrm 脚本中重新启动它(使用invoke-rc.dsystemctl,取决于目标 init 系统) 。

回答具体问题:

  1. 如果您需要创建新用户,请在 preinst 脚本中执行此操作(来自另一个包的 crib,或阅读手册)。您确实需要另一个用户,还是 tomcat 用户合适?

  2. 包管理器安装和卸载提供的所有文件,并运行提供的 preinst、postinst、prerm 和 postrm 脚本。

  3. 该列表不是同类比较 - 例如dpkg用于管理系统上的包,而不是用于创建包。有了合适的debian目录,构建就可以如此简单

     fakeroot debian/rules binary
    
    Run Code Online (Sandbox Code Playgroud)

    pbuilder 等工具可用于确保在构建系统上安装库等依赖项,而不是手动安排,如果您正在构建发行版,这会变得乏味。您不应该需要那种级别的自动化。

  4. 软件包的文件将安装到放置它们的目录$DESTDIRmake install

  5. 可能有比编辑/etc. 我对那个服务器不太了解,我自己也不太了解。

  6. 目标文件的权限和所有权与make install设定的完全一致。

  7. Debian 打包手册中有很多内容值得阅读;我建议您在该机制开始变得有意义时经常参考该内容。

  8. 我不确定你所说的“发送文件”是什么意思。并且该软件包不需要包含您从中解压的 tarball - 这只是重复。