36

我有一个大项目,我们有以下文件:

  • 一些第 3 方预编译的二进制文件
  • 我们自己的内部二进制文件
  • Ruby 脚本集合
  • 一个相当大的 Ruby on Rails 项目

该产品将安装在我的雇主已经选择的设备硬件上,使用 Ubuntu Linux (Lucid) 作为目标操作系统,我们的目标是将存档作为 Debian 软件包分发以简化安装和升级。此外,我们有许多 ERB 模板,我们需要在每个客户的基础上“填写”适当的值,因此postinst脚本的使用对于我们的目的来说特别方便。

附带说明一下,Debian 软件包将存储在我们内部管理的服务器存储库中。

在这个阶段,我已经使用dh_make创建了 Debian 目录和相关文件(例如,规则、控件等),但是生成的规则文件对于我的目的来说似乎是多余的。

根据这个描述,我真正需要“规则”文件做的只是将文件从源目录(或存档中)复制到如下所示的目标目录

/opt/company_product/3rd_party_binaries/bin
/opt/company_product/3rd_party_binaries/etc
/opt/company_product/in_hourse_binaries/bin
/opt/company_product/in_hourse_binaries/etc
/opt/company_product/ruby
/opt/company_product/rails_project
/opt/company_product/etc
/opt/company_product/shared/logs
/opt/company_product/shared/tmp
/opt/company_product/shared/license

...等等。

我已经阅读了 Debian Policy Manual 和几个 How-To,它们表明您不应该更改mkdir用于创建目录的规则文件,并且通常有一个dh_应用程序(例如 dh_installdirs 等)可以满足您的需求几乎任何安装目的。这些dh_相关应用程序的手册页充其量是粗略的,我是一个“示例”类型的人。

也就是说,我有点迷失了最好的方法是让我的规则文件将我的各种预编译二进制文件和 Ruby/Rails 文本文件安装到所需的位置。

这是我的初始规则文件。它几乎是 dh_make 创建的标准样板规则文件。我的想法是我应该注释掉除安装之外的所有部分,然后在该部分中找到适当的命令来创建目录、复制文件等。

非常感谢任何意见或建议。

#!/usr/bin/make -f

package = testapp

CC = gcc
CFLAGS = -g -Wall

ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
  CFLAGS += -O2
endif

#export DH_VERBOSE=1

clean:
        dh_testdir
        dh_clean
        rm -f build

install: build
        dh_clean
        dh_installdirs
        echo "Place the Install Script here"
        cp $(CURDIR)/testapp-2.0.tar.gz $(CURDIR)/debian/$(package)/opt/testapp-2.0
        echo "Finished copying folders"


build:
        touch build

binary-indep: install
# There are no architecture-independent files to be uploaded
# generated by this package.  If there were any they would be
# made here.

binary-arch: install
        dh_testdir -a
        dh_testroot -a
        dh_installdocs -a 
        dh_installchangelogs -a 
        dh_strip -a
        dh_compress -a
        dh_fixperms -a
        dh_installdeb -a
        dh_shlibdeps -a
        dh_gencontrol -a
        dh_md5sums -a
        dh_builddeb -a

binary: binary-indep binary-arch

.PHONY: binary binary-arch binary-indep clean checkroot
4

2 回答 2

62

尽管您已经有了自己的答案,但我还是要指出几件事。

您似乎以非常复杂的方式执行此操作。如果您只是需要将文件复制到某些目录中,debian/mypackagename.install请使用以下格式编写 a:

path/to/file/relative/to/source/root path/to/install/relative/to/system/root

(不要//usr、 或/opt或任何您的目标目录之前添加。阅读man dh_install以获取更多信息)

那么你debian/rules可以:

#!/usr/bin/make -f

%:
    dh $@

如果您的源根目录中有某种 makefile 等,则将其附加到上述rules文件中:

override_dh_auto_build:

override_dh_auto_install:

别忘了放进7debian/compat

此外,您不应该将文件安装到/opt/or/usr/local/等​​中。这些文件适用于 Debian 软件包未安装的文件。Debian建议安装在/usr/share/yourcompany/. 正如juzzlin在下面指出的那样,Ubuntu 软件中心可能有不同的要求。

更具体地说,您的mypackage.install文件应如下所示:

src/bin/* usr/bin
src/etc/* etc/
于 2010-07-10T08:27:45.413 回答
-2

您可以像这样安装cdbs并更改规则文件

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk

binary-install/package_name::
                   mkdir debian/$(cdbs_curpkg)/destination_path 
                   cp path_of_your_files  debian/$(cdbs_curpkg)/destination_path
于 2013-12-26T15:54:24.567 回答