我使用NodeJS
和grunt
+ 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
吗?如果是:如何?
答案 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
,但这不仅难以形容,而且可能会破坏各种校验和)