许多PHP Web应用程序都遵循此模型进行安装和升级:
- 解压源tar球。
- 将Apache指向源代码。
- 将Web浏览器导航到主页。
- 浏览几个设置页面(例如,检查是否存在库,询问数据库连接信息,创建或更新数据库架构等)。
- 用户将
install/
目录重命名为其他目录,以便应用程序知道该目录已安装。
在没有让用户安装软件包的过程中,我看不出有任何(简单)的方式来创建Debian软件包。请注意,我不是该应用程序的开发人员,因此无法直接更改该应用程序的安装方式。
打包此类应用程序的典型方法是什么?
许多PHP Web应用程序都遵循此模型进行安装和升级:
install/
目录重命名为其他目录,以便应用程序知道该目录已安装。在没有让用户安装软件包的过程中,我看不出有任何(简单)的方式来创建Debian软件包。请注意,我不是该应用程序的开发人员,因此无法直接更改该应用程序的安装方式。
打包此类应用程序的典型方法是什么?
Answers:
我创建了几个PHP Web应用程序,这些应用程序通过Debian软件包(内部)分发。借助脚本(此处已简化)可以自动执行此过程,因此这样做非常简单:
create_package.sh:
# create a clean debian package directory
rm -rf debian
mkdir -p debian/DEBIAN
mkdir -p debian/var/www/myapp
# populate the debian directory
cp control debian/DEBIAN
cp myapp.php debian/var/www/myapp
cp index.html debian/var/www/myapp
# finish through fakeroot so we can adjust ownerships without needing to be root
fakeroot ./finish_package.sh debian .
finish_package.sh:
# $1 is the debian directory, $2 is the output directory
# adjust ownerships
chown -R root:root $1
chown -R nobody:nobody $1/var/www/myapp
# finally build the package
dpkg-deb --build $1 $2
控制:
Package: myapp
Version: 1.2.3
Maintainer: Your Name <yourname@email.com>
Architecture: all
Depends: apache2, php5
Description: The myapp web application.
所有这一切都非常容易做到,并且对于我所做的内部软件包分发非常有效。我不确定是否足以在全球范围内分发,但这可能与Ubuntu和Debian人员在获取源程序包(可能使用安装脚本以tarball的形式分发)并为其创建.deb程序包时的操作类似。
我认为这可以顺利解决您的五个要点:
安装Debian软件包后,它会自动解压缩到目标系统上的正确位置。
您可以让Debian软件包自动配置Apache。某些软件包(例如MySQL和Apache)在/ etc中具有“ conf.d”目录,您可以在其中放置配置文件。这是理想的。您的打包脚本可以创建debian / etc / apache2 / conf.d目录,并在其中复制配置文件。它将安装在目标系统上,您可以使用放置在debian / DEBIAN中的名为postinst的脚本重新启动Apache。
如果必须输入自定义信息,这可能是不可避免的,尽管许多人更喜欢可以“开箱即用”运行而无需进行配置的系统。
通过在控制文件中包含适当的程序包依赖关系,可以保证库的存在。数据库连接信息可以默认安装,也可以在配置页面上询问管理员。输入后,配置页应调用幂等数据库迁移脚本以更新数据库架构。几个Web框架(例如Django)使此操作变得容易。
配置页面后面的代码应将系统标记为已配置,而不是管理员。
我有时使用的一种方法是通过将配置的安装与应用程序的安装分开,从而将其与安装分开。然后,我可以拥有几个可以随意安装的不同配置包(发行版,开发版等)。这种解耦也是有利的,因为配置和应用程序可以分别发展,而在重新安装时不会互相影响。