打包库(Debian)时创建符号链接?

Cha*_*rly 4 debian symlink shared-libraries package

我是第一次尝试为Debian打包一个小型图书馆。为此,我使用的是官方的Debian Policy手册,但是由于两天后遇到了无法解决的问题。

这是我包装的方式:

  • 创建压缩包(此处为libvl_1.0.orig.tar.gz)
  • 使用dh_make在debian目录中生成debian conf文件
  • 正确修改控制文件,变更日志和版权。
  • 使用dpkg-buildpackage命令构建软件包。

到这里,没有问题。但是因为它是一个库,所以我需要在安装它时创建一些符号链接,这与库的SONAME有关。在这里,我的库称为libvl。因此,例如,我正在构建一个名为libvl.so.1.0的文件,因为它是第一个版本。为了做对,我想我应该创建这样的符号链接:

libvl.so -> libvl.so.1 -> libvl.so.1.0
Run Code Online (Sandbox Code Playgroud)

为此,我正在尝试使用make运行安装过程时创建那些链接。如果启动“ make install”命令,则此方法有效。但是当使用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
Run Code Online (Sandbox Code Playgroud)

我想问题就在那里。我将不胜感激对此的任何答复或评论:-)

Bru*_*sky 6

男人dh_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
Run Code Online (Sandbox Code Playgroud)

秘密是hello-world-0.1/debian/hello-world.links由脚本的第18行(在撰写本文时)创建的文件。看看这个...

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