包装库(Debian的),当创建符号链接?(Creating symlinks when packa

2019-07-29 08:22发布

我想在第一时间为打包为Debian小型图书馆。 对于这一点,我使用的是Debian官方政策手册,但因为这两天我遇到比我无法修复的问题。

这是我的包装方式:

  • 创建压缩包(这里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

要做到这一点,我试图同时运行具有使安装过程中创建这些链接。 这是,如果你推出的“让安装”命令工作。 但是,使用dpkg安装时,如果没有创建的链接,我不知道为什么。 我也尝试过使用的postinst脚本,但没有任何结果。 这里是我下面的生成文件:

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

我想这个问题是存在的。 我欢迎任何答复或本评论:-)

Answer 1:

见男子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

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

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



Answer 2:

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

在上面的代码中,直接链接到目标到/ usr / lib中(即在构建机上),但这种方式,不会是包的一部分。 相反,你应该在DESTDIR的子目录进行连接,这样的符号链接也最终被放进包装子树。



文章来源: Creating symlinks when packaging a Library (Debian)?