构建 Debian 软件包

构建 Debian 软件包

已经在这里待了几天了,我觉得是时候获取一些更有经验的建议了。

我正在打包一个 perl 应用程序 - 其所有文件都应放在/var/www/<packagename>系统目录中。

到目前为止,我已经能够构建包 - 但它没有将我的文件放在这个目录中,而且我还没有读到任何关于如何执行此操作的简明方法。

现在我的包可以正常构建 - 除了 lintian 警告之外,主要是因为我使用了来自 dh_make 的模板文件,一旦我让它正常工作,我就会更新它。

基本上现在我的结构是这样的:

ls:

packagedirectory-1.0
 - debian directory with control/copyright/rules/ ...
 - directory belonings to app
 - directory belonging to app
 - files belonging to app
package)1.0-1.tar.gz

我一直在建造

dpkg-buildpackage -us -uc

(现在不签名,正确构建后会签名)并从包目录执行此操作。这将输出我的.deb、、和.changes.orig.tar.gz.dsc

任何帮助都将不胜感激。再次重申 - 我在这里遇到的主要问题是我想/var/www/<packagename>在安装时将应用程序文件/目录放入。

答案1

Debian 软件包不应将文件安装在 /var/www 下。这不是文件层次结构标准中的 /var 目录之一,并且由本地管理员控制。软件包不应假定它是 Web 服务器的文档根目录;用户更改默认文档根目录是很常见的,软件包不应假定用户会保留任何特定设置。

想要通过已安装的 Web 服务器提供文件的软件包应该将本地管理员的说明放在 README.Debian 文件中,并且最好包含常见 Web 服务器(如 Apache)的配置片段。

http://lintian.debian.org/tags/dir-or-file-in-var-www.html

phpldapadmin - 一个流行的基于 php 的 ldap 管理工具 - 附带一个文件,包含在 /etc/apache2/conf.d/ 中,其中包含两个选项:

# Option 1: Define /phpldapadmin alias, this is the default
<IfModule mod_alias.c>
    Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
</IfModule>

# OR Option 2: You can also use phpLDAPadmin as a VirtualHost
<VirtualHost *:*>
 ServerName ldap.example.com
 ServerAdmin [email protected]
 DocumentRoot /usr/share/phpldapadmin/htdocs
 ErrorLog logs/ldap.example.com-error.log
 CustomLog logs/ldap.example.com-access.log common
</VirtualHost>

#Then define the directory options like default index, access control etc.
<Directory /usr/share/phpldapadmin/htdocs/>
 DirectoryIndex ...
 ...
</Directory>

按照此示例,您需要将要在 /var/www/yourpackage 中显示的文件安装在 /usr/share/yourpackage/htdocs 中,然后编辑你的相应地包含 apache conf。然后将包含的 apache conf 片段保存在 /usr/share/doc/yourpackage/examples/ 中,或直接将其与包一起安装到 /etc。在 README.Debian(在同一个 doc 目录中)中添加说明,让用户将 /etc/yourapp.conf 或 /etc/yourapp/apache.conf 链接到 /etc/apache2/conf.d/yourapp.conf,然后重新启动 Apache。

答案2

我最终使用了在此处找到的信息:https://stackoverflow.com/questions/3214319/i-need-my-debian-rules-file-to-simply-copy-files-to-its-target问题来了。虽然这是不是如果您的软件包要用于外部用途,则将文件放置在 /var/www 文件中的正确方法 - 这对我来说很有效,因为它是一个内部使用的软件包。

请参见overprescribed 的评论关于这一点,因为它确实有非常详细的信息,但它没有被接受,因为它没有回答实际的问题,只是说我不应该这样做,而应该绕过它。

相关内容