Linux Debian软件包创建-如何安装配置文件?

Linux Debian软件包创建-如何安装配置文件?,linux,ubuntu,debian,package,Linux,Ubuntu,Debian,Package,我真的被困在这个小问题上(我肯定),所以任何帮助都将不胜感激。我用dh_make创建了一个标准的ubuntu包。此包的目的是创建一个包,该包将设置系统需要的所有ldap相关包,包括其配置。我尝试执行的步骤之一是在备份现有文件的同时复制/etc/ldap.conf文件。我该怎么做?我试图创建一个postinst脚本,它看起来基本上如下所示,但是我不清楚包是如何存储文件的,我得到一个错误,说missing etc/ldap.conf file。最好的方法是什么?以下是我的postinst脚本: #/

我真的被困在这个小问题上(我肯定),所以任何帮助都将不胜感激。我用dh_make创建了一个标准的ubuntu包。此包的目的是创建一个包,该包将设置系统需要的所有ldap相关包,包括其配置。我尝试执行的步骤之一是在备份现有文件的同时复制/etc/ldap.conf文件。我该怎么做?我试图创建一个postinst脚本,它看起来基本上如下所示,但是我不清楚包是如何存储文件的,我得到一个错误,说missing etc/ldap.conf file。最好的方法是什么?以下是我的postinst脚本:

#/bin/bash-xv

install -v -b etc/ldap.conf /etc/ldap.conf  > /tmp/tst 2>&1
这是我的骨架结构:

root@hqd-clientb-16:~/navldapubuntu-0.1/debian# tree ├── changelog ├── compat ├── control ├── copyright ├── docs ├── etc    └── ldap.conf ├── install ├── postinst ├── README.Debian ├── README.source ├── rules ├── source    └── format ├── navldapubuntu    └── etc ├── navldapubuntu.debhelper.log ├── navldapubuntu.dirs └── navldapubuntu.doc-base.EX root@hqd-clientb-16:~/navldapuntubuntu-0.1/debian#tree ├── 变更日志 ├── 同胞 ├── 控制 ├── 版权 ├── 文件 ├── 等    └── ldap.conf ├── 安装 ├── postinst ├── Debian自述文件 ├── 自述文件源 ├── 规则 ├── 来源    └── 格式 ├── navldapubuntu    └── 等 ├── navldapubuntu.debhelper.log ├── navldapubuntu.dirs └── navldapubuntu.doc-base.EX 下面是我创建的包的一些附加信息。 dpkg --contents tnoldapubuntu_0.1-1_all.deb (truncated output) ./usr/ ./usr/share/ ./usr/share/doc
./usr/share/doc/navldapubuntu/ ./usr/share/doc/navldapubuntu/copyright ./usr/share/doc/navldapubuntu/README.Debian ./usr/share/doc/navldapubuntu/changelog.Debian.gz ./etc/ldap.conf dpkg——内容tnoldapubuntu_0.1-1_all.deb(截断输出) /美国/ /美元/股/ ./usr/share/doc
./usr/share/doc/navldapuntubuntu/ ./usr/share/doc/navldapuntubuntu/版权所有 ./usr/share/doc/navldapuntubuntu/README.Debian ./usr/share/doc/navldapuntubuntu/changelog.Debian.gz /etc/ldap.conf

您需要在DEBIAN目录中“控制”文件旁边创建一个“conffiles”文件,并在其中声明/etc/ldap.conf。因此,此文件将自动视为配置文件,对其进行更改将提示“新建配置文件,是否要覆盖,yadda yadda”。

有一个专门为创建配置包而设计的工具:

下面是一个简单的模板,可以帮助您快速入门

文件清单

  • 模板(目录)
  • 模板/debian(目录)
  • 模板/debian/控件
  • 模板/debian/changelog
  • 模板/debian/displace
  • 模板/debian/规则
  • 模板/debian/postinst
  • 模板/debian/install
  • 模板/debian/docs
  • 模板/debian/compat
  • 模板/自述
  • 模板/构建
  • 模板/文件(目录)
  • template/files/etc/ldap.conf.mycompanyname
内容

模板/debian/控件:

Source: PACKAGE_NAME
Section: morpho/misc
Priority: optional
Maintainer: MAINTAINER
Build-Depends: debhelper, config-package-dev (>= 5.0~)

Package: PACKAGE_NAME
Architecture: all
Depends: ${misc:Depends}, DEPENDENCY [, DEPENDENCY ...]
Provides: ${diverted-files}
Conflicts: ${diverted-files}
Description: PACKAGE_DESCRIPTION_SHORT
PACKAGE_DESCRIPTION_LONG.
模板/debian/displace

/etc/ldap/ldap.conf.mycompanyname
模板/debian/install

files/* /
模板/debian/postinst

#!/bin/sh
set -e
#DEBHELPER#

POSTINST_SCRIPT
模板/debian/规则

#!/usr/bin/make -f

# Exclude *.svn* from building 
# you probably don't need this if don't use SVN
export DH_ALWAYS_EXCLUDE=.svn

# Core (check http://debathena.mit.edu/config-packages for more information)
%:
        dh $@ --with=config-package

# Prevent dh_installdeb of treating files in /etc as configuration files
# you need this if need configuration files been always rewritten
# even if changed
override_dh_installdeb:
        dh_installdeb
        rm debian/*/DEBIAN/conffiles
模板/debian/docs

README
BUILD
最后,您可以使用以下命令构建此包:

dpkg-buildpackage -us -uc -I.svn

在postinst中备份?也许在普赖斯特?检查文件是否存在:
如果[-f/etc/ldap.conf],那么cp/etc/ldap.conf/etc/ldap.conf.dist fi
,对吗?问题不在cp的逻辑中。问题是源/etc/ldap.conf不存在。如何将其包含在包中,以便postinstall脚本可以看到/etc/ldap.conf文件?现在我的脚本中出现了一个错误,它的状态如下:install:cannot stat`/navlap-0.1/debian/etc/ldap.conf”:没有这样的文件或目录通常,您在
/etc
中没有文件,并抛出一个错误,说明您在其他目录中没有该文件?脚本无法在包中的文件上运行
stat
,您从哪个目录运行安装?很抱歉..我不清楚您的评论。我试图做的是将文件存储在包中(参见上面的dpkg--contents)。创建包之后,我希望安装包中的文件,并且该文件不是本地文件。我不知道怎么做,非常感谢。在创建包含/etc/ldap.conf的conffiles文件之后,我现在在构建时遇到了一个错误。另外,是否可以传递一个标志来创建/etc/ldap.conf的备份文件dpkg deb——构建debian/navldapubuntu。。dpkg-deb:error:conffile`/etc/ldap.conf'未出现在包dh_builddeb:dpkg-deb--build debian/tnoldapubuntu中。。返回退出代码2实际上,conffiles文件看起来只保留该文件。我希望该软件包包含一个ldap.conf文件版本,在执行apt get安装时安装。例如:(1)使用定制的ldap.conf文件构建包(2)apt get install“package name”,这个定制的ldap.conf也将被安装。希望这有意义?有意义,所以您应该在包中包含/etc/ldap.conf。如果你这样做会怎么样?谢谢你提供了一个完整的例子,这正是我想要的!我发现替换的文件后缀“mycompanyname”必须是带有
config package dev
5.1.2的包名前缀(例如“mycompanyname ldap config”)