5

私は初めてDebian用に小さなライブラリをパッケージ化しようとしています。このために、私は公式のDebianポリシーマニュアルを使用していますが、2日後に修正できない問題が発生しました。

これは私がパッケージしている方法です:

  • tarballの作成(ここではlibvl_1.0.orig.tar.gz)
  • dh_makeを使用してdebianディレクトリにdebianconfファイルを生成する
  • 制御ファイル、変更ログ、および著作権を適切に変更します。
  • dpkg-buildpackageコマンドを使用してパッケージをビルドします。

ここまでは問題ありません。ただし、ライブラリであるため、インストール中にいくつかのシンボリックリンクを作成する必要があります。これは、ライブラリのSONAMEに関連しています。ここで私のライブラリはlibvlと呼ばれています。たとえば、最初のバージョンであるlibvl.so.1.0という名前のファイルを作成しています。それを正しく行うには、次のようなシンボリックリンクを作成する必要があると思います。

libvl.so -> libvl.so.1 -> libvl.so.1.0

これを行うために、makeを使用してインストールプロセスを実行しながら、これらのリンクを作成しようとしています。これは、「makeinstall」コマンドを起動した場合に機能します。しかし、dpkgを使用してインストールする場合、リンクが作成されていて理由がわからない場合は何もありません。postinstスクリプトも使用しようとしましたが、結果はありませんでした。これが私のmakefileの下にあります:

DESTDIR =
LIBDIR = usr/lib

LIB = libvl.so
MAJOR = 1
MINOR = 0

CC = gcc
CC_FLAGS = -Wall -ansi -Isrc/
LD_FLAGS =
LN = ln -s

SRC = very_long.c

OBJ = $(SRC:.c=.o)

all: libvl

libvl: $(OBJ)
    $(CC) -fPIC -c $(SRC)
    $(CC) -shared -a -o $(LIBDIR)/$(LIB).$(MAJOR).$(MINOR) $(OBJ)

install:
    install -d -m 0755 -o root -g root $(DESTDIR)/$(LIBDIR)
    install -m 0755 -o root -g root $(LIBDIR)/$(LIB).$(MAJOR).$(MINOR) $(DESTDIR)/$(LIBDIR)

    $(LN) /usr/lib/$(LIB).$(MAJOR).$(MINOR) /usr/lib/$(LIB).1
    $(LN) /usr/lib/$(LIB).$(MAJOR) /usr/lib/$(LIB)

clean:
    rm $(OBJ) $(LIBDIR)/$(LIB).1.0

問題はそこにあると思います。私はこれについての答えやコメントをいただければ幸いです:-)

4

2 に答える 2

7

mandh_linkを参照してください

githubに、作成する要点の例/bin/helloと、それへのシンボリックリンクがあります。/bin/helloworld

次のように、システムでデモを行うことができます。

# Create the deb package
curl -O https://gist.github.com/RichardBronosky/5358867/raw/deb-packaging-example.sh
bash deb-packaging-example.sh

# Install the deb package
dpkg --install hello-world*.deb

# Check the scripts
ls -la /bin/hello*
/bin/hello
/bin/helloworld

シークレットは、スクリプトの18行目(この記事の執筆時点)でhello-world-0.1/debian/hello-world.links作成されたファイルです。見てみな...

https://gist.github.com/RichardBronosky/5358867

于 2013-04-11T05:45:31.663 に答える
2
$(LN) /usr/lib/$(LIB).$(MAJOR).$(MINOR) /usr/lib/$(LIB).1
$(LN) /usr/lib/$(LIB).$(MAJOR) /usr/lib/$(LIB)

上記のコードでは、ターゲットに直接/ usr / lib(つまり、ビルドマシン上)にリンクしていますが、この方法では、パッケージの一部にはなりません。代わりに、DESTDIRのサブディレクトリにリンクして、シンボリックリンクが最終的にパッケージ化されたサブツリーに配置されるようにする必要があります。

于 2012-05-16T09:38:05.453 に答える