Verpackungs-Go-Anwendung für Debian
Wie kann ich mein Gehen binary in ein Debian-Paket? Da Gehen ist statisch gelinkt, ich habe nur eine einzige ausführbare Datei--ich brauche nicht eine Menge von komplizierten Projekt-Metadaten-Informationen. Gibt es eine einfache Art und Weise Verpacken Sie die ausführbare Datei und Ressource-Dateien ohne den Umweg über das trauma der debuild
?
Ich habe sah überall für vorhandene Fragen; aber alle meine Forschung auftaucht, Fragen/Antworten über eine .deb-Datei mit dem golang Entwicklungsumgebung (d.h., was Sie erhalten würden, wenn Sie sudo apt-get install golang-go
).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut. Ich denke, das einzige "trauma" von
debuild
ist, dass es läuftlintian
nach Paket bauen, und es istlintian
wer versucht, zu erkennen, Probleme mit Ihrem Paket.Also gibt es zwei Möglichkeiten zur Bekämpfung der situation:
debuild
: dieses tool nur Anrufedpkg-buildpackage
die wirklich notwendigen Kraftdreikampf. Die üblichen call zu bauen, ein Binär-Paket istdpkg-buildpackage -us -uc -b
. Sie noch nennen könntedebuild
für andere Zwecke, wiedebuild clean
zum Beispiel.lintian
ein Auge zudrücken, um ausgewählt Probleme mit Ihrem Paket, das Sie darauf bestehen, keine Probleme.Beide Ansätze implizieren, dass Sie versuchen Sie nicht zu bauen Ihre Anwendung durch die Verpackung, tools, sondern behandeln Sie es wie ein blob, das ist nur eingewickelt in ein Paket. Dies würde erfordern etwas abstraining von der normalen Weg
debian/rules
Arbeit (nicht zu versuchen alles bauen).Andere Lösung, die könnte möglich (und ist wirklich Weg mehr Debian-ish), ist zu versuchen, zu verwenden
gcc-go
(plusgold
für die Verlinkung): da es ein GCC-Frontend, dieses tool erzeugt eine dynamisch verknüpfte Anwendung (links vorlibgo
oder so ähnlich). Ich persönlich habe keine Erfahrung mit ihm noch, und würde nur in Erwägung ziehen, es zu benutzen, wenn Sie wollen, um zu versuchen zu schieben Sie Ihr Paket in das Debian das richtige.Bezug auf die Allgemeine Frage nach der Verpackung Gehen die Programme für Debian, finden Sie vielleicht die folgenden Ressourcen hilfreich sein:
Update auf 2015-10-15.
(Da dieser post wird noch gesucht und gefunden und untersucht, Leute, ich habe beschlossen, zu aktualisieren, um besser reflec dem aktuellen Stand der Dinge.)
Da dann die situation mit Verpackung Gehen apps und Paketen habe sich dramatisch verbessert, und es ist möglich, erstellen Sie ein Debian-Paket mit "classic" Gehen (die so genannte
gc
suite Ursprung von Google) eher alsgcc-go
.Und es gibt eine gute Infrastruktur für die Pakete.
Den Schlüssel Werkzeug zu verwenden, wenn debianizing ein Go-Programm ist jetzt
dh-golang
beschrieben hier.Ich habe gerade in diesen suchen mich, und ich bin im Grunde es.
Synopsis
Durch 'leihen' aus dem 'Paket' Zweig von einem Kanonischen bestehenden Projekte Gehen, Sie können bauen Sie Ihr Paket mit dpkg-buildpackage.
installieren, Abhängigkeiten und schnappen Sie sich einen 'package' - Zweig aus einem anderen repo.
Bearbeiten Sie die Metadaten.
Build-Depends: debhelper (>= 7.0.50~), golang-stable
) und der 3 Architekturen. Mit Ubuntu (ohne die Erdhörnchen ppa), ich hatte zu ändern, golang-stabil zu golang-go.Hier ist die Magie, die 'go ' installieren' - Zeile:
cd $(GOPATH)/src && find * -name '*.go' -exec dirname {} \; | xargs -n1 go install
Legen Sie Ihre Quelle innerhalb des src-Ordners. z.B.
oder e.g.2
bauen Sie das Paket
Dieser sollte einen binäre .deb-Datei für Ihre Architektur, sowie die "source-deb' - (.tgz) und dem source-deb-description-Datei (.dsc).
Mehr details
So, ich habe gemerkt, dass Canonical (die Ubuntu-Leute) mit Gehen, und Gebäude .deb-Pakete für einige Ihrer Projekte Gehen. Ubuntu basiert auf Debian, also für den größten Teil der gleiche Ansatz sollte für beide Distributionen (Abhängigkeit können die Bezeichnungen leicht variieren).
Finden Sie ein paar Go-Pakete im Ubuntu Launchpad-repositories. So weit ich gefunden habe, cobzr (git-Stil Verzweigungen für bzr) und juju-core (ein devops-Projekt, portiert von Python).
Beide Projekte haben sowohl einen 'Stamm' und ein 'Paket' Zweig, und Sie sehen die
debian/
Ordner im Paket Filiale. Die 2 wichtigsten Dateien hier sind debian/control und debian/rules - habe ich verknüpft mit "browse source".Schließlich
Etwas, was ich noch nicht abgedeckt ist cross-kompilieren Ihrer package (zu den anderen 2 Architekturen der 3, 386/arm/amd64). Cross-compiling ist nicht allzu schwierig, in zu gehen (Sie brauchen, um zu bauen der toolchain für jede Ziel-Plattform, und legen Sie dann einige ENV vars während der 'go ' bauen'), und ich arbeite schon an einem cross-compiler utility selbst. Irgendwann werde ich hoffentlich hinzufügen .deb-support in meine Dienstprogramm, aber zuerst muss ich zu kristallisieren diese Aufgabe.
Glück. Wenn Sie keine Fortschritte machen, dann aktualisieren Sie bitte meine Antwort oder einen Kommentar hinzufügen. Dank
go get github.com/laher/goxc
danngoxc -bc='linux'
(erzeugt 3 debs, jeweils für 386,amd64 und arm). Es ist auch eine Aufgabe für die Erstellung einer source-deb:goxc pkg-source
. Diese Aufgaben sind nicht sehr konfigurierbar gerade noch aber das ist der nächste SchrittGebäude deb-oder rpm-Pakete von Go-Anwendungen ist auch sehr einfach mit fpm.
Schnappen Sie es von rubygems:
Nachdem Sie binäre, z.B. foobar, können Sie Verpacken es so:
fpm unterstützt alle Arten von advanced packaging-Optionen.
Gibt es eine offizielle Debian-policy-Dokument die Beschreibung der Verpackung Vorgehensweise für die Go: https://go-team.pages.debian.net/packaging.html
Für Bibliotheken: Verwenden Sie dh-make-golang um ein Paket zu erstellen Skelett. Benennen Sie Ihr package mit einem Namen, abgeleitet von import-Pfad, mit einem
-dev
suffix, z.B. golang-github-lib-pq-dev. Geben Sie die Abhängigkeiten ontDepends:
Linie. (Dies sind die source-Abhängigkeiten für Gebäude, nicht binäre Abhängigkeiten für den Betrieb, da Gehen statisch links alle Quellen.)Installation der library-Paket installieren, den Quellcode zu
/usr/share/golang/src
(evtl. die kompilierte Bibliotheken in gehen könnte.../pkg
). Gebäude je Gehen die Pakete verwenden, die Artefakte aus den system-weiten Standorten.Für ausführbaren Dateien: Verwenden Sie dh-golang um das Paket zu erstellen. Festlegen von Abhängigkeiten in
Build-Depends:
Zeile (siehe oben bezüglich der Verpackung der Abhängigkeiten).Ich vor kurzem entdeckt habe https://packager.io/ - ich bin sehr zufrieden mit dem, was Sie tun. Vielleicht öffnen Sie eines der Pakete, um zu sehen, was Sie tun?