膝の上のdebパッケージ

タスク:デーモン/サイトをサーバーにアップロードするDebianのパッケージを作成します。

私はこれまでdebパッケージで作業したことがないので、ソリューションが最適ではない可能性があります。 しかし、それは機能し、かなり使いやすいです。



準備する


まず、サーバーへの定期的なダウンロードには、コードのバージョン管理が必要です。 svnを使用する場合、ほとんどの場合、リビジョン番号を使用できます。 私はgitを使用しているため、プロジェクトのバージョンを維持するための簡単なスクリプトを作成しました: tag.sh

プロジェクトのバージョンを増やすには、。/ tag.sh build、。/ tag minorまたは./tag majorを呼び出します。 このスクリプトは、フォームv <MAJOR>。<MINOR>。<BUILD>(たとえば、v0.1.25)のラベルを作成します

バージョンを取得するには、git describe --match = v * HEADを呼び出して、v0.2.1(またはタグの後にコミットがあった場合はv0.2.1-59-g919ab19)の形式でバージョンを取得します。



ネットワークには、dh_makeを使用するか、パッケージを最初から作成するためのすべての可能なオプションを説明する多くのパッケージ作成マニュアルがあります。 しかし、debianをリポジトリに取り込むための適切なパッケージは必要ありません。サーバーにインストールするプロジェクトのパッケージだけが必要です。



すべてのパッケージ構成ファイルのうち、重要なのは2つだけです。

control-パッケージの説明

conffiles-パッケージの設定ファイルの説明(新しいバージョンをインストールするとき、aptはファイルを置き換えるか古いバージョンを保持するかを尋ねます)。



制御


ファイル形式は非常に簡単です:

Package: _

Version: - git describe

Architecture: - amd64 all -

Depends: -

Maintainer: _

Description:







例:

Package: ggseductionserver

Version: v0.2.1-59-g919ab19

Architecture: amd64

Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1), libboost-system1.38.0 (>=1.38.0),

libboost-thread1.38.0 (>=1.38.0), libboost-regex1.38.0 (>=1.38.0), libboost-serialization1.38.0 (>=1.38.0), libboost-program-options1.38.0 (>=1.38.0),

tokyotyrant, tokyocabinet, mysql-client (>=5.0), libssl0.9.8 (>=0.9.8), libreadline5 (>= 5.2), libmysql++3 (>= 3.0),

libpcre3 (>= 7.6), libpcrecpp0 (>= 7.6), libgd2-xpm (>= 2.0)

Maintainer: Alexander Fedora <alexander.fedora at gmail.com>

Description: glagol games server

<>This is server







依存関係は、lddおよびapt-fileを使用して取得できます

$ ldd ./build/server | grep libboost_thread

/usr/lib/libboost_thread-mt.so.1.38.0

$ apt-file search /usr/lib/libboost_thread-mt.so.1.38.0

libboost-thread1.38.0: /usr/lib/libboost_thread-mt.so.1.38.0

libboost1.38-dbg: /usr/lib/debug/usr/lib/libboost_thread-mt.so.1.38.0







conffiles


このファイルには、パッケージ構成ファイルのリストが含まれています。 例:

/etc/seduction/seductiond.conf

/etc/seduction/seductiond.log.properties








パッケージ作成


単純なシェルスクリプトを使用してパッケージを作成することにしました。 順番にアクション:

  1. debディレクトリを作成します
  2. deb / DEBIANディレクトリを作成します
  3. プロジェクトバージョンの現在のバージョンを取得する= `git describe --match = v * HEAD`
  4. パッケージの説明をdeb / DEBIAN / controlに記述し、バージョンとして$ versionを使用します
  5. 設定ファイルのリストをdeb / DEBIAN / conffilesファイルに書き込みます
  6. deb /ディレクトリに、deb /がディスクのルートであるかのようにプロキシファイルを書き込みます(たとえば、deb / usr / local / bin / exe_name、deb / etc / config_nameなど)
  7. dpkg -b deb / BACK_NAME_ $ version'.deb 'コマンドを使用してパッケージを作成します


パッケージ名の後に、バージョンの前にアンダースコア(_)を付けることが必須です。

動作するスクリプトの例はここにあります (これはc ++デーモンの例、phpのサイトの例です)



サーバーにリポジトリを作成する


dpkg-devパッケージをインストールします。

ディレクトリ/ var / opt / repo /を作成し、その中に2つのサブディレクトリバイナリとソースを作成します。

パッケージをバイナリに入力し、コマンドを実行してアーカイブディレクトリを作成します。



dpkg-scanpackages -m binary /dev/null | gzip -9c > binary/Packages.gz







サーバーの更新を自動化するシェルスクリプトを作成します。



rsync -av -e ssh $HOME/projects/repo/*.deb server_name:/var/opt/repo/ || exit 1

ssh server_name 'cd /var/opt/repo; dpkg-scanpackages -m binary /dev/null | gzip -9c > binary/Packages.gz' || exit 1









リポジトリにアクセスするためにnginxを上げる


nginxをインストールし、新しいサイトを追加します。

$ cat /etc/nginx/sites-available/repo

server {

listen 9977;

server_name localhost;

access_log /var/log/nginx/repo.access.log;

location / {

autoindex on;

allow 127.0.0.1;

allow 192.168.0.2;

root /var/opt/repo;

}

}









サイトを上げて、それが機能することを確認します。

$ ln -s /etc/nginx/sites-available/repo /etc/nginx/sites-enabled/repo

$ sudo /etc/init.d/nginx restart

$ wget 192.168.0.1:9977/binary/Packages.gz









作成されたリポジトリからパッケージをインストールする


サイトを/etc/apt/sources.listに追加します。

deb 192.168.0.1:9977/ binary/





そして、パッケージをインストールします。

$ sudo apt-get update

$ sudo apt-get install package_name









おわりに


パッケージをインストールするとき、apt-getはパッケージを認証できないと叫ぶでしょう。 原則として、パッケージにデジタル署名を追加できますが、リポジトリからインストールされていることが既にわかっているため、-y --force-yesキーを追加してパッケージを自動モードでインストールできます。



PS。 あまり蹴らないでください-これは私の最初の投稿です。




All Articles