私はこれまで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
パッケージ作成
単純なシェルスクリプトを使用してパッケージを作成することにしました。 順番にアクション:
- debディレクトリを作成します
- deb / DEBIANディレクトリを作成します
- プロジェクトバージョンの現在のバージョンを取得する= `git describe --match = v * HEAD`
- パッケージの説明をdeb / DEBIAN / controlに記述し、バージョンとして$ versionを使用します
- 設定ファイルのリストをdeb / DEBIAN / conffilesファイルに書き込みます
- deb /ディレクトリに、deb /がディスクのルートであるかのようにプロキシファイルを書き込みます(たとえば、deb / usr / local / bin / exe_name、deb / etc / config_nameなど)
- 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。 あまり蹴らないでください-これは私の最初の投稿です。