我一直在努力将(主要是PHP)网站部署为.deb文件一段时间,并想知道是否有比我相当复杂的方法更好的方法。 我的目标是在我的登台服务器上进行持续集成,并通过一键式部署到Jenkins内的现场服务器。
我的用例现在:
我试图build立一个Jenkins CI服务器来观察Git仓库提交并自动执行构build。 问题在于Jenkins以自己的用户身份运行,他们没有像上面那样设置文件权限的权限。 我也看不到一个明显的方法来在Jenkins内部的fakeroot环境中运行Phing版本。
我的问题是:
我可能误解了.debs的工作方式,但是看起来相当不方便的是,本地文件系统源代码的文件所有权必须镜像到目的地!
我接受任何其他构build和CI系统上人们用来执行类似任务的build议。
看来你几乎手工使用dpkg-deb命令创build了一个二进制debian软件包。 虽然这种方法并没有那么糟糕,但是如果您尝试通过创build源包来构build包,然后构build二进制包(即使它是独立于架构的文件,如PHP包),也可以更好地处理很多事情。 。 这需要在debian/目录下一次性configuration好几个文件。
有一个特殊的debian/rules文件,它决定了为了构build不同风格的Debian软件包(即源代码,二进制文件,二进制无关文件)以及维护构build目录本身所要运行的内容。 你可能会考虑从这个文件中运行所有的构build工具,而不是逐个调用它们。 要解决这个问题,在从非特权用户的构build过程中设置所有者/权限,您需要运行在fakeroot包装下构buildDebian包的整个过程。 对于官方的debian软件包,这可以通过运行fakeroot debian/rules binary来实现。 然而,这是从dpkg-buildpackage调用的,所以你只需要运行fakeroot dpkg-buildpackage 。
Debian在开发工具方面非常出色(参见软件包debhelper , devscripts和相关的debhelper ),看起来你并没有使用它(显然是因为你在另一个操作系统下构build了这个软件包)。 他们会为你节省很多时间。 例如,有dh_fixperms将修复您的权限和所有权问题, dh_install将文件放置到正确的位置, dh_link创build必要的符号链接和其他dh_的脚本。 你可能想看看它在现实世界中是如何工作的,所以这里是一个用PHP实现的软件列表,并且打包在Debian中 。
另一个好的工具是git-buildpackage ,它是debian构build工具的包装器,用于构build在Git DVCS下维护的包。
您可能需要查看在Debian wiki页面上使用Git构build的一般信息。
不幸的是,在Debian中没有phing,所以你可能想问问别人为Debian打包(这样你就可以在Debian中获得完整的构build栈),或者只是用debootstrap来做一个Debian chroot,然后手动安装phing。
如果你坚持把Debian软件包作为一个主要的部署机制和一些CI系统一起使用,这里有一些要点:
pbuilder或cowbuilder等工具在干净的Debian chroot中构build软件。 否则,做一个Debian的盒子build设。 您可能想创build一个虚拟机,并为其他开发人员提供。 /etc/apt/sources.list.d/my-repository.listconfiguration文件中。 不要忘记导入您的密钥。 这将为您提供有关依赖关系的信息,如果您仅使用dpkg -i *.deb安装包,则直到安装阶段本身才会知道这些依赖关系。 sudo invoke-rc.d nginx reload更新web服务器configuration时,如果是,则分别通过修改/etc/sudoers文件限制运行精确命令。 Debian软件包是一个包含数据和控制信息/debian的多部分档案。 数据存档基本上是按原样提取的。 控制归档文件被提取出来,大部分移动到/var/lib/dpkg/info ,适当的时候会调用pre | post-inst | rm脚本。 如果你想在你的文件被提取后改变一些东西,那就在你的postinst中做。
但是在你本地文件系统源代码上的文件所有权必须镜像到目的地似乎相当不方便!
通常,人们将构build一个chroot或虚拟机,以反映他们构build软件包的体系结构。 试图从OSX构build一个Debian系统的包是非常罕见的。
dpkg-deb命令是否真的需要事先在文件系统上设置的所有文件权限?
这是权限处理的正常方式。 修改权限后安装是例外,而不是规则。