我正在尝试第一次为Debian打包一个小型库。为此,我使用官方的Debian Policy手册,但是两天后我遇到了一个问题而不是我无法修复。
这就是我打包的方式:
到此为止,没有问题。但由于它是一个库,我需要在安装时创建一些符号链接,这与库的SONAME有关。这里我的库名为libvl。因此,例如,我正在构建一个名为libvl.so.1.0的文件,因为它是第一个版本。为了做到对,我想我应该创建这样的符号链接:
libvl.so -> libvl.so.1 -> libvl.so.1.0
为此,我正在尝试使用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
我想问题就在那里。我将不胜感激任何答案或评论: - )
答案 0 :(得分:5)
请参阅man 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
秘密是由line 18 (at the time of this writing)脚本创建的hello-world-0.1/debian/hello-world.links
文件。看看......
答案 1 :(得分:3)
$(LN) /usr/lib/$(LIB).$(MAJOR).$(MINOR) /usr/lib/$(LIB).1
$(LN) /usr/lib/$(LIB).$(MAJOR) /usr/lib/$(LIB)
在上面的代码中,您直接将目标链接到/ usr / lib(即构建机器上),但这样它就不会成为程序包的一部分。 相反,您应该在DESTDIR的子目录中进行链接,以便最终将符号链接放在打包的子树中。