2015-09-18 3 views
2

Я использую NodeJS и grunt + grunt-debian-package для создания .deb файлов, которые отлично подходят для создания файла развертывания foo_v.v.v_all.deb.
Я также хочу распространять простые и не укрупненные исходные файлы в исходных пакетах debian (foo_v.v.v.tar.xz), но этот файл довольно пуст.Как заполнить исходные пакеты с помощью grunt-debian-пакета?

Что мне нужно сделать, чтобы правильно заполнить исходный файл?

Моя среда:
Текущий каталог: /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 

Я хочу, чтобы все файлы внутри директории /home/dev/src/foo/app которые содержатся в файле tmp/foo_0.1.63.tar.xz

Что я должен сделать для этого? Должен ли я обновить Makefile? Если да: как?

ответ

0

В упаковке Debian содержимое tar.xz (известное как «ориг-архив») фиксируется до начала сборки пакета. Поскольку grunt, похоже, создает этот tarball, вам, скорее всего, нужно будет найти или добавить вариант, чтобы хрюкать, чтобы включить в него фактический источник). Любопытно, что это не по умолчанию, учитывая его is исходный tarball.

Другим решением, которое используется с самим Debian, было бы также создание пакета foo-source_0.1.63_all.deb, который содержит источник.

(Да, вы можете быть в состоянии винт с tar.xzво время процесса сборки, но это не только невыразимо некрасиво, это, вероятно, сломать различные контрольные суммы)

1

Наконец я получил его. Я должен был правильно обновить 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 вы заполняете найти полный архив (посмотрите на размер!):

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