- debian/
- 如何为Ubuntu的war文件创建debian包
如何为Ubuntu的war文件创建debian包
如何为Ubuntu的war文件创建debian包,debian,war,Debian,War,我们有一个war文件、liquibase xml文件和sha1校验和,我们想打包成Debian脚本,部署到一个平台:Ubuntu14.1 64位、tomcat 7和java 7
我们已经浏览了大量难以理解的Debian打包指南(对于我们java开发人员来说),其中大多数都需要一个“上游源tarball”(例如,这个:)和/或通过make/install生成的东西
我们两者都没有,这是我们问题的症结所在
我们分两个阶段:
初始安装(完成一次)
更新(多次完成)
指南没有提到如何管理这两个阶段
初始
我们有一个war文件、liquibase xml文件和sha1校验和,我们想打包成Debian脚本,部署到一个平台:Ubuntu14.1 64位、tomcat 7和java 7
我们已经浏览了大量难以理解的Debian打包指南(对于我们java开发人员来说),其中大多数都需要一个“上游源tarball”(例如,这个:)和/或通过make/install生成的东西
我们两者都没有,这是我们问题的症结所在
我们分两个阶段:
初始安装(完成一次)
更新(多次完成)
指南没有提到如何管理这两个阶段
初始安装(我们现在在每台服务器上手动执行的操作):
使用apt get作为根安装java、tomcat7。据推测,这可以通过依赖关系实现自动化
使用目标数据库连接字符串/密码等大量编辑var/lib/tomcat7/conf/context.xml。可能在安装后仍需手动完成
为我们的应用程序创建新用户和组,例如“foo”
以foo身份登录
在foos home dir中,安装基本应用程序:
4.1创建脚本目录并复制install.sh文件
4.2编辑install.sh文件并更改数据库连接字符串、绝密用户和密码,以匹配目标数据库(在另一台服务器上)
4.3将JAR和脚本的liquibase二进制分发复制到liquibase子目录中
我们通过Jenkins构建的tar文件分发应用程序本身。tar中包含以下内容:
app.sha1
migration/changelog.xml(和一堆liquibase xml文件)
app.war
第1.1节
我们将tar文件scp到/home/foo目录中,然后运行/home/foo/scripts/install.sh,它执行以下操作:
从/home/foo中删除旧焦油和未经处理的内容
卸载新的tar文件
阻止雄猫
使用untarred migrations dir运行liquibase jar命令以创建/更新数据库
删除/var/lib/tomcat7/webapps/*
将新war复制到var/lib/tomcat7/webapps/
启动雄猫
稍等
使用sha1sum确保类是正确的(这只是客户的要求,没有其他用途)
我们的问题是:
用户在何处以及如何创建?例如,在我们的案例中是foo,在tomcats案例中是tomcat7
软件包是否“自行安装”?或者它只是将文件放在文件系统中(因此需要管理员稍后运行一个或多个脚本来执行该工作?是否为执行该工作的脚本制定了一些标准,例如标准名称
有很多打包工具,例如Jenkins插件、dpkg、fpm、Debild、dpkg buildpackage。我们应该使用哪一种?我们看了fpm,但它假设您有一个从源安装生成的目录,其中包含make文件等,我们没有
软件包安装到哪里?它最终会出现在例如/var/lib/foo或var/lib/foo-0.3.4中吗?如果是后者,我们就有麻烦了,因为系统的其他部分需要访问.sha1文件,因此需要一个固定的位置来安装
有没有比手动编辑每个servers context.xml和install.sh更好的方法来让每个客户都拥有正确的数据库连接详细信息?例如,人们是否使用awk/sed从脚本中获取这些信息,或者是否有某种mysql密码和连接字符串存储库
如何设置目标文件的所有权和权限
是否有人遇到过“hello world”类型的打包教程,它不依赖于现有的“源tar+make+install”,并显示了安装后包中的文件和目标服务器中的文件之间的关系,以及包生命周期,包括更新的工作方式
系统如何管理仅发送更新的文件,例如在本例中不发送liquibase二进制文件?我假设我们需要两个软件包,一个用于基本安装,另一个用于tar,以避免重复
我们理解,我们需要将工件放在一个特殊的目录结构中,这以某种方式映射到目标服务器的文件结构上,我们需要构建各种控制文件,但不需要在各个阶段将其粘在一起,也不需要脚本
我们试图阅读Debian策略手册(),但这是一本供有经验的linux软件包开发人员参考的手册。我们确信答案就在这里,但我们不知道在哪里
这篇文章:还有两个选择(我们选择了“击败系统范围的实例提交”)但是没有给出关于如何实际构建软件包的线索。最简单的方法是安装dh make
,并使用它生成一个框架debian/
目录来开始。您可以删除不相关的文件(例如,如果不提供手册页)
您需要编辑debian/control
来指定依赖项中的必要包:
-可能是tomcat7
和tomcat7java
;您不需要提及sha1sum
,因为它在coreutils
中,这是一个基本包
如果(且仅当)您无法通过简单地在某处添加文件来覆盖现有设置,请将对context.xml
的必要修改添加到postinst
脚本中
添加一个带有安装
目标的Makefile,该目标将必要的文件放入$DESTDIR
的子目录中:
install:
install -d $(DESTDIR)/var/lib/tomcat7/webapps
install -m 644 app.war $(DESTDIR)/var/lib/tomcat7/webapps
我希望在更新依赖包时(通过在debian/triggers
中提及),Tomcat可以被触发重新加载,但如果没有,则需要在postinst和postrm脚本中重新启动它(使用invoke rc.d
或systemctl
,具体取决于目标init系统)
回答具体问题:
如果需要创建新用户,请在preinst脚本中执行此操作
fakeroot debian/rules binary