我需要我的Debian规则文件来简单地将文件复制到它的目标

Chi*_*tle 33 debian rules package deb

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

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

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

作为旁注,Debian软件包将存储在我们内部管理的服务器存储库中.

在这个阶段,我使用dh_make来创建debian目录和相关文件(例如,规则,控制等),但生成的规则文件对我来说似乎有点过分.

基于此描述,我真正需要的"规则"文件只是将文件从源目录(或存档内)复制到下面显示的目标目录:

  • /选择/有限公司_产品/ 3rd_party_binaries /箱
  • /选择/有限公司_产品/ 3rd_party_binaries的/ etc
  • /选择/有限公司_产品/ in_hourse_binaries /箱
  • /选择/有限公司_产品/ in_hourse_binaries的/ etc
  • /选择/有限公司_产品/红宝石
  • /选择/有限公司_产品/ rails_project
  • /选择/有限公司_产品的/ etc
  • 的/ opt /有限公司_产品/共享/日志
  • 的/ opt /有限公司_产品/共享/ TMP
  • 的/ opt /有限公司_产品/共享/许可
  • ...等等.

我已经阅读了Debian Policy Manual和几个How-To,它们表明你不应该改变规则文件来使用mkdir来创建目录,而且通常有一个dh_ app(例如,dh_installdirs,et.al.)可以适合你的几乎所有安装目的都需要.这些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

Uma*_*ang 59

虽然你已经有了自己的答案,但我会指出一些事情.

你似乎是以一种非常复杂的方式做到这一点.如果您只需要将文件复制到某些目录中,请debian/mypackagename.install使用以下格式编写:

path/to/file/relative/to/source/root path/to/install/relative/to/system/root
Run Code Online (Sandbox Code Playgroud)

(不要/在之前/usr,或者/opt或者目标目录之前添加.请阅读man dh_install以获取更多信息)

然后你debian/rules可以:

#!/usr/bin/make -f

%:
    dh $@
Run Code Online (Sandbox Code Playgroud)

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

override_dh_auto_build:

override_dh_auto_install:
Run Code Online (Sandbox Code Playgroud)

不要忘了把7debian/compat.

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

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

src/bin/* usr/bin
src/etc/* etc/
Run Code Online (Sandbox Code Playgroud)

  • 只需注意/ opt:Ubuntu软件中心,例如,需要/要求,应用程序安装到/ opt. (2认同)