Некоторое время назад я написал простой php-скрипт gcconline для сжатия javascript-файлов через онлайн-сервис Google Closure Compiler. Его можно скачать из github, однако обновлять таким образом скачанный скрипт на операционных системах Debian/Ubuntu не очень удобно. Учитывая, что теперь у меня есть deb-репозиторий, то самое время создать deb-пакет, который будет содержать скрипт gcconline. Этим мы сейчас и займемся…
Минимальный состав deb-пакета должен содержать сам скрипт или исполняемую программу, а также специальный файл с описанием пакета. Сам deb-пакет мы будем собирать с помощью утилиты dpkg-deb, которая входит в состав пакета dpkg-dev. Поэтому первым делом установим пакет dpkg-dev, если он еще не установлен:
sudo aptitude install dpkg-dev |
Затем нужно создать каталог, в который мы поместим все необходимые исходные и служебные файлы. Назовем этот каталог debian и расположим его в домашнем каталоге. Внутри создадим структуру каталогов /usr/bin, а в нее скопируем скрипт gcconline. Именно по пути /usr/bin и будет устанавливаться наш скрипт после установки deb-пакета.
sudo mkdir -p ~/debian/usr/bin cp /usr/bin/gcconline ~/debian/usr/bin |
Затем нужно создать файл control, в котором должно содержаться описание deb-пакета. Сам файл должен лежать в каталоге DEBIAN:
sudo mkdir -p ~/debian/DEBIAN sudo nano ~/debian/DEBIAN/control |
Подробности о том, какое должно быть содержимое у файла control, можно найти на сайте debian.org. У меня получилось такое содержание файла с описанием пакета:
Package: gcconline Version: 0.1-1 Section: utils Priority: optional Architecture: all Depends: php5-cli (>= 5.1.2-1), php5-curl (>= 5.1.2-1) Maintainer: Andrey Anosov <andrey@anosov.org.ru> Description: JavaScript compression tool The Closure Compiler is a tool for making JavaScript download and run faster. It is a true compiler for JavaScript. Instead of compiling from a source language to machine code, it compiles from JavaScript to better JavaScript. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls. |
Все почти готово. Остается только собрать пакет и переименовать его согласно названиям других пакетов в Debian/Ubuntu:
sudo dpkg-deb --build ~/debian sudo mv ~/debian.deb ~/gcconline_0.1-1_all.deb |
Однако если подходить к вопросу сборки deb-пакета более серьезно, то выяснится, что мы забыли включить в состав deb-пакета несколько обязательных составляющих. В обнаружении недостающих компонентов нам поможет утилита lintian. Установим ее и проверим с ее помощью только что собранный deb-пакет:
sudo aptitude install lintian lintian ~/gcconline_0.1-1_all.deb |
В ответ получим две ошибки и одно предупреждение:
E: gcconline: no-copyright-file E: gcconline: debian-changelog-file-missing W: gcconline: binary-without-manpage usr/bin/gcconline |
Наш deb-пакет не выглядит безупречным. Ну что же, исправим это. Подробное описание ошибок, выдаваемых утилитой lintian, можно найти на официальном сайте этой утилиты.
Итак, во-первых, мы должны поместить в deb-пакет файл ~/debian/usr/share/doc/gcconline/copyright примерно с таким содержимым:
Copyright 2011 Andrey Anosov <andrey@anosov.org.ru> The home page of gcconline is at: http://anosov.me/services#gcconline The entire code base may be distributed under the terms of the GNU General Public License (GPL), which appears immediately below. Alternatively, all of the source code as any code derived from that code may instead be distributed under the GNU Lesser General Public License (LGPL), at the choice of the distributor. The complete text of the LGPL appears at the bottom of this file. See /usr/share/common-licenses/(GPL|LGPL) |
А во вторых, нужно создать файл ~/debian/usr/share/doc/gcconline/changelog.Debian.gz, в котором должна вестись история изменений, происходящих в различных версиях нашего пакета. Содержимое файла changelog.Debian получилось у меня таким:
gcconline (0.1-2) stable; urgency=low * Deb-package for gcconline. -- Andrey Anosov <andrey@anosov.org.ru> Sun, 31 Jul 2011 22:00:00 +0300 gcconline (0.1-1) stable; urgency=low * First version of gcconline. -- Andrey Anosov <andrey@anosov.org.ru> Thu, 14 Jul 2011 22:00:00 +0300 |
Не забудьте выполнить gz-сжатие файла changelog.Debian:
sudo gzip --best ~/debian/usr/share/doc/gcconline/changelog.Debian |
После этого снова собираем deb-пакет и проверяем его утилитой lintian:
sudo dpkg-deb --build ~/debian sudo mv ~/debian.deb ~/gcconline_0.1-1_all.deb lintian ~/gcconline_0.1-1_all.deb |
Ошибки должны исчезнуть. Предупреждение же binary-without-manpage связано с отсутствием man-страниц для нашей утилиты gcconline. Но вопрос создания man-страниц довольно обширен и заслуживает отдельной статьи. Поэтому пока оставим deb-пакет собранным с этим предупреждением.
Таким образом, наш простой deb-пакет готов. Его можно установить через менеджер пакетов или командой:
sudo dpkg -i ~/gcconline_0.1-1_all.deb |
Также этот пакет можно разместить в репозитории (что я и сделаю в ближайшее время), что позволит всем легко и свободно устанавливать утилиту gcconline и использовать онлайн-сервис Google Closure Compiler из командной строки linux.