如何使用grunt-debian-package填充源包?

时间:2015-09-18 09:43:39

标签: node.js gruntjs debian packaging

我使用NodeJSgrunt + grunt-debian-package来构建.deb个文件,这对于创建部署文件foo_v.v.v_all.deb很有用。 我还想在debian源包(foo_v.v.v.tar.xz)中分发普通和未使用的源文件,但该文件是空的。

如何正确填充源文件?

我的环境:
当前目录:/home/dev/src/foo
我的Grunt.js

的相关部分
debian_package: {
  options: {
    maintainer: {
      name: "xxx",
      email: "xxx"
    },
    prefix: "",
    name: "foo",
    postfix: "",
    short_description: "xxx",
    long_description: "xxx",
    version: "<%=pkg.version%>",
    preinst: {
      src: "scripts/preinst",
    },
    postinst: {
      src: "scripts/postinst",
    },
    postrm: {
      src: "scripts/postrm",
    },
    prerm: {
      src: "scripts/prerm",
    },
    dependencies: "xxx",
    replaces: "xxx",
    conflicts: "xxx"
  },
  deploy: {
    files: [{
      expand: true, // enable dynamic expansion
      cwd: 'dist', // src matches are relative to this path
      src: ['**'],
      dest: '/usr/lib/foo'
    }, {
      src: "scripts/foo",
      dest: "/etc/init.d/foo"
    }, {
      src: 'root-ca.conf',
      dest: '/usr/lib/foo/root-ca.conf'
    }]

  }
}
// ----- snip -----
grunt.registerTask('package', ['debian_package']);

已正确执行的命令:

grunt build
grunt package

检查文件的结果:

ll tmp/
-rw-r--r--  1 dev dev 22758744 Sep 16 00:10 foo_0.1.63_all.deb
-rw-r--r--  1 dev dev      608 Sep 16 00:10 foo_0.1.63.dsc
-rw-r--r--  1 dev dev     1400 Sep 16 00:10 foo_0.1.63_i386.changes
-rw-r--r--  1 dev dev    76288 Sep 16 00:10 foo_0.1.63.tar.xz

tar -tJf tmp/foo_0.1.63.tar.xz
packaging/
packaging/debian/
packaging/debian/postinst
packaging/debian/compat
packaging/debian/postrm
packaging/debian/preinst
packaging/debian/dirs
packaging/debian/source/
packaging/debian/source/format
packaging/debian/changelog
packaging/debian/prerm
packaging/debian/copyright
packaging/debian/links
packaging/debian/control
packaging/debian/rules
packaging/Makefile

我希望dir /home/dev/src/foo/app中的所有文件都包含在文件tmp/foo_0.1.63.tar.xz

我该怎么做?我应该更新Makefile吗?如果是:如何?

2 个答案:

答案 0 :(得分:1)

最后我明白了。我必须正确更新Gruntfile.js。

首先,我在LEFT JOIN部分中定义了目标目录:

config

然后我在 grunt.initConfig({ config: { // [...] src_pkg: 'node_modules/grunt-debian-package/packaging }, 任务中添加了一个源代码部分,将自己的源代码与node_modules分开:

copy

稍后注册任务(此处称为 copy: { // [...] src_pkg: { files: [{ expand: true, dot: true, dest: '<%= config.src_pkg %>', src: [ '**', '!**/tmp/**', '!**/.tmp/**', '!**/dist/**', '!**/.git/**', '!**/node_modules/**', // node_modules will be copied separately ] }] }, src_pkg_modules: { files: [{ expand: true, cwd: 'node_modules', dest: '<%= config.src_pkg %>/node_modules', src: [ // list all node_modules you want to copy also here ] }] }, }, ):

package

在命令行上,通过调用

启动打包
grunt.registerTask('package', [
    'copy:src_pkg', 
    'copy:src_pkg_modules', 
    'debian_package']);

...并在grunt package 内填写找到完整的tarball(看看大小!):

./tmp

答案 1 :(得分:0)

在Debian打包中,tar.xz(称为“orig tarball”)的内容在包构建开始之前就已得到修复。由于grunt似乎正在生成此tarball,您可能需要在grunt中找到或添加一个选项以包含实际的源代码。奇怪的是它没有默认,因为它源tarball。

与Debian本身一起使用的另一个解决方案是创建一个包含源代码的foo-source_0.1.63_all.deb包。

(是的,您可以在构建过程中使用tar.xz ,但这不仅难以形容,而且可能会破坏各种校验和)