如何使用grunt-debian-package填充源代码包?
我使用NodeJS
和grunt
+ grunt-debian-package
来构build.deb
文件,这对于创build部署文件foo_v.v.v_all.deb
可以很好地工作。
我也想分发在debian源包(foo_v.vvtar.xz)中的普通和unagglified源文件,但该文件是空的。
我需要做些什么才能正确填充源文件?
我的环境:
当前目录: /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
吗? 如果是的话:如何?
最后我得到了它。 我必须正确更新Gruntfile.js。
首先我在config
部分定义目标目录:
grunt.initConfig({ config: { // [...] src_pkg: 'node_modules/grunt-debian-package/packaging },
然后我在copy
任务中添加了一个源代码部分,从node_modules中分离出自己的源代码:
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
…并在./tmp
find完整的压缩包(查看大小!):
ll tmp/ -rw-r--r-- 1 dev dev 22678070 Okt 6 22:09 foo_0.1.78_all.deb -rw-r--r-- 1 dev dev 617 Okt 6 22:07 foo_0.1.78.dsc -rw-r--r-- 1 dev dev 1408 Okt 6 22:09 foo_0.1.78_i386.changes -rw-r--r-- 1 dev dev 38541304 Okt 6 22:07 foo_0.1.78.tar.xz
在Debian包装中, tar.xz
(称为“orig tarball”)的内容在软件包开始之前已经固定。 由于咕噜声似乎正在生成这个tarball,你可能需要find或者添加一个选项来咕噜咕噜包含实际的源代码)。 它很好奇它不是默认的,因为它是源代码压缩包。
Debian自己使用的另一个解决scheme是创build一个包含源代码的foo-source_0.1.63_all.deb
包。
(是的, 在构build过程中,你可以用tar.xz
,但这不仅难以置信,而且可能会打破各种校验和)