私はこれを自分で調べてきましたが、基本的にはそこにいます。
あらすじ
Canonical の既存の Go プロジェクトの 1 つの「package」ブランチから「借用」することで、dpkg-buildpackage を使用してパッケージをビルドできます。
依存関係をインストールし、別のレポから「パッケージ」ブランチを取得します。
# 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-stable 依存関係を golang-go に変更する必要がある場合があります。
- debian/controlファイルはマニフェストです。「ビルドの依存関係」(
Build-Depends: debhelper (>= 7.0.50~), golang-stable
) と 3 つのアーキテクチャに注意してください。Ubuntu (gophers ppa なし) を使用して、golang-stable を golang-go に変更する必要がありました。
- debian/rules ファイルを編集します (cobzr の代わりにパッケージ名を入れます)。
- debian/rulesファイルは基本的に「make」ファイルであり、パッケージのビルド方法を示しています。この場合、彼らは debhelper に大きく依存しています。ここで 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
またはeg2
cp .../yourpackage/ src/
パッケージをビルドする
# -us -uc skips package signing.
dpkg-buildpackage -us -uc
これにより、アーキテクチャのバイナリ .deb ファイルに加えて、「ソース deb」(.tgz) とソース deb 記述ファイル (.dsc) が生成されます。
詳細
そのため、Canonical (Ubuntu 関係者) が Go を使用しており、Go プロジェクトの一部で .deb パッケージを構築していることに気付きました。Ubuntu は Debian に基づいているため、ほとんどの場合、同じアプローチが両方のディストリビューションに適用されます (依存関係の名前はわずかに異なる場合があります)。
Ubuntu の Launchpad リポジトリには、いくつかの Go ベースのパッケージがあります。これまでのところ、cobzr (bzr の git スタイルの分岐) とjuju -core (Python から移植された devops プロジェクト) を見つけました。
これらのプロジェクトには両方とも「トランク」ブランチと「パッケージ」ブランチの両方がありdebian/
、パッケージ ブランチ内にフォルダーが表示されます。ここで最も重要な 2 つのファイルは、debian/controlとdebian/rulesです。「ソースの参照」にリンクしています。
ついに
私がカバーしていないのは、パッケージをクロスコンパイルすることです (3 の他の 2 つのアーキテクチャ、386/arm/amd64 に)。go ではクロスコンパイルはそれほど難しくありません (ターゲット プラットフォームごとにツールチェーンをビルドし、「go build」中にいくつかの ENV 変数を設定する必要があります)。最終的にはユーティリティに .deb サポートを追加したいと考えていますが、最初にこのタスクを具体化する必要があります。
幸運を。何か進展があれば、私の回答を更新するか、コメントを追加してください。ありがとう