Подтвердить что ты не робот

Приложение Packaging Go для Debian

Как я могу поместить my Go в пакет Debian? Поскольку Go статически связан, у меня просто один исполняемый файл - мне не нужно много сложной информации метаданных проекта. Есть ли простой способ упаковать исполняемые файлы и файлы ресурсов, не пройдя травму debuild?

Я рассмотрел все существующие вопросы; тем не менее, все мои исследования вызывают вопросы/ответы о файле .deb, содержащем среду разработки golang (т.е. что вы получите, если будете делать sudo apt-get install golang-go).

4b9b3361

Ответ 1

Ну. Я думаю, что единственная "травма" debuild заключается в том, что она запускает lintian после сборки пакета, а она lintian пытается обнаружить проблемы с вашим пакетом.

Итак, есть два способа борьбы с ситуацией:

  • Не используйте debuild: этот инструмент просто вызывает dpkg-buildpackage, который действительно выполняет необходимую пауэрлифтинг. Обычный вызов для создания бинарного пакета - dpkg-buildpackage -us -uc -b. Вы по-прежнему можете вызвать debuild для других целей, например debuild clean.
  • Добавьте так называемый "lintian override" , который можно использовать, чтобы сделать lintian закрывать глаза на выбранные проблемы с вашим пакетом, который, вы настаиваете, не являются проблемами.

Оба подхода подразумевают, что вы не пытаетесь создать приложение с помощью упаковочных инструментов, а относитесь к нему как к блобу, который просто завернут в пакет. Это потребовало бы незначительного отклонения от обычного способа работы debian/rules (чтобы не пытаться ничего построить).

Другим решением, которое может быть возможно (и это действительно больше Debian-ish), является попытка использовать gcc-go (плюс gold для привязки): поскольку он является интерфейсом GCC, этот инструмент производит динамически- (которое ссылается на libgo или что-то вроде этого). У меня лично нет опыта с этим, и я буду рассматривать его только в том случае, если вы намереваетесь подтолкнуть свой пакет к самому Debian.

Что касается общего вопроса о упаковке Go программ для Debian, возможно, вам понадобятся следующие ресурсы:

  • Этот поток начал работать на гайках одним из пакетов Go для Debian.
  • В частности, первое сообщение в этом потоке связывается с этим обсуждением на debian-devel.
  • Второй поток по debian-devel относительно этой же проблемы (это логическое продолжение предыдущего потока).

Обновить в 2015-10-15 годах.

(Поскольку этот пост, похоже, все еще находится в поиске, найден и изучен людьми, которых я решил обновить, чтобы лучше отразить текущее состояние дел.)

С тех пор ситуация с упаковкой Go приложений и пакетов значительно улучшилась, и можно создать пакет Debian с использованием "классического" Go (так называемого пакета gc, исходящего из Google), а не gcc-go. И есть хорошая инфраструктура для пакетов.

Ключевым инструментом, который будет использоваться при девиации программы Go, теперь dh-golang описан здесь.

Ответ 2

Я просто изучал это сам, и я в основном там.

Описание

Посредством "заимствования" из ветки "package" из одного из канонических существующих проектов Go вы можете создать свой пакет с помощью dpkg-buildpackage.

  • установить зависимости и захватить ветвь 'package' из другого репо.

     # I think this list of packages is enough. May need dpkg-dev aswell.
     sudo apt-get install bzr debhelper build-essential golang-go
     bzr branch lp:~niemeyer/cobzr/package mypackage-build
     cd mypackage-build
    
  • Отредактируйте метаданные.

    • изменить файл debian/control (имя, версия, источник). Вам может потребоваться изменить стабильную стабильность, связанную с голангом, на golang-go.
    • Файл debian/control является манифестом. Обратите внимание на "зависимости сборки" (Build-Depends: debhelper (>= 7.0.50~), golang-stable) и 3 архитектуры. Используя Ubuntu (без сусликов ppa), мне пришлось менять голанг-стабильный на golang-go.
    • отредактируйте файл debian/rules (поместите имя своего пакета вместо cobzr).
    • Файл debian/rules в основном представляет собой файл "make", и он показывает, как создается пакет. В этом случае они сильно зависят от дебюта. Здесь они настраивают GOPATH и вызывают "go install". Здесь волшебная строка "go install":

    cd $(GOPATH)/src && find * -name '*.go' -exec dirname {} \; | xargs -n1 go install

    • Также обновите файл авторского права, readme, лицензию и т.д.
  • Поместите свой источник в папку src. например.

     git clone https://github.com/yourgithubusername/yourpackagename src/github.com/yourgithubusername/yourpackagename
    

    или, например,

     cp .../yourpackage/ src/
    
  • создать пакет

     # -us -uc skips package signing.
     dpkg-buildpackage -us -uc
    

    Это должно создать двоичный файл .deb для вашей архитектуры, а также "исходный deb" (.tgz) и файл описания исходного deb (.dsc).

Подробнее

Итак, я понял, что Canonical (люди Ubuntu) используют Go и создают пакеты .deb для некоторых своих проектов Go. Ubuntu основан на Debian, поэтому по большей части один и тот же подход должен применяться к обоим дистрибутивам (имена зависимостей могут незначительно меняться).

В репозиториях Ubuntu Launchpad вы найдете несколько пакетов на основе Go. До сих пор я нашел cobzr (git -строчное разветвление для bzr) и juju-core (проект devops, портированный с Python).

В обоих этих проектах есть ветвь "trunk" и "package", и вы можете увидеть папку debian/ внутри ветки пакета. 2 наиболее важных файла здесь debian/control и debian/rules - я связался с 'view source.

Наконец

Что-то, что я не рассматривал, это кросс-компиляция вашего пакета (для остальных 2-х архитектур 3, 386/arm/amd64). Кросс-компиляция не слишком сложна в работе (вам нужно построить инструментальную цепочку для каждой целевой платформы, а затем установить некоторые ENV-вары во время "сборки go" ), и я сам работал над утилитой кросс-компилятора. В конце концов, я надеюсь, добавлю поддержку .deb в мою утилиту, но сначала мне нужно кристаллизовать эту задачу.

Удачи. Если вы сделаете какой-либо прогресс, пожалуйста, обновите мой ответ или добавьте комментарий. Благодаря

Ответ 3

Создание пакетов deb или rpm из Go Applications также очень просто с fpm.

Возьмите его с rubygems:

gem install fpm

После создания двоичного кода, например. foobar, вы можете упаковать его следующим образом:

fpm -s dir -t deb -n foobar -v 0.0.1 foobar=/usr/bin/

fpm поддерживает всевозможные расширенные варианты упаковки.

Ответ 4

Существует официальный документ политики Debian, описывающий процедуру упаковки для Go: http://pkg-go.alioth.debian.org/packaging.html

Для библиотек. Используйте dh-make-golang для создания скелета пакета. Назовите свой пакет именем, полученным из пути импорта, с суффиксом -dev, например. golang-GitHub Пб-рд-DEV. Укажите зависимости ont Depends:. (Это исходные зависимости для построения, а не бинарные зависимости для запуска, поскольку Go статически связывает весь источник.)

Установка пакета библиотеки установит исходный код на /usr/share/golang/src (возможно, скомпилированные библиотеки могут войти в .../pkg). В зависимости от типа Go пакеты будут использовать артефакты из этих общесистемных локаций.

Для исполняемых файлов. Используйте dh-golang для создания пакета. Укажите зависимости в строке Build-Depends: (см. Выше, касающуюся упаковки зависимостей).

Ответ 5

Недавно я обнаружил https://packager.io/ - Я доволен тем, что они делают. Может быть, открыть один из пакетов, чтобы посмотреть, что они делают?