符号链接不是由postinst * * .deb包创建的。而是创建了新文件

时间:2014-12-01 17:17:55

标签: bash package debian post-install

我创建了一个* .deb包,它将一些文件保存到所需的位置,工作正常。在postinst期间,我生成一个新文件(使用我自己的脚本“mergeconfig”将两个文件合并在一起),文件创建正常。

但是,在postinst的下一行,我尝试为这个新文件创建一个符号链接,这不能按预期工作。

我没有获得链接,而是获得了一个硬拷贝/一个新文件:

$ ls -la /etc/app/conf-enabled/
-rw-r--r-- 1 root root 2600 Dec  1 17:00 enabledconfig

我尝试将代码拉出到它自己的文件中并从postinst文件中执行它(在赋予它可执行权限之后)并得到相同的结果。虽然如果我手动运行该文件,我会创建一个有效的符号链接:

$ /../../updateEnabledConf
 -- Merge this package's server config into app config
Complete
 -- Update conf-enabled symlink

$ ls -la /etc/app/conf-enabled/
lrwxrwxrwx 1 root root   42 Dec  1 17:06 enabledconfig -> /etc/app/conf-available/server-app

updateEnableConf中的代码是:

#!/bin/bash
SERVERNAME="server"

APPNAME="app"
CONFIGNAME="enabledconfig"
ETCAPPDIR="/etc/app"
CONFAVAILABLEDIR="$ETCAPPDIR/conf-available"
CONFENABLEDDIR="$ETCAPPDIR/conf-enabled"
CONFAPPDIR="$ETCAPPDIR/conf-app"
CONFSERVERDIR="$ETCAPPDIR/conf-server"

echo " -- Merge this package's server config into app config"
sudo mergeconfig $CONFAPPDIR/$APPNAME $CONFSERVERDIR/$SERVERNAME $CONFAVAILABLEDIR/$SERVERNAME-$APPMNAME

echo " -- Update conf-enabled symlink"
sudo ln -s -f $CONFAVAILABLEDIR/$SERVERNAME-$APPNAME $CONFENABLEDDIR/$CONFIGNAME

exit 0

我不确定我做错了什么,因为在安装deb软件包时没有正确创建符号链接,但是当我从putty手动运行相同的文件时。两个用户都有sudo访问权限,我使用gdebi来安装软件包,我有其他软件包以同样的方式创建符号链接而没有问题。 任何帮助都会很棒

更新

经过更多调查后,事实证明,postinstinst脚本正确地创建了符号链接,但是在使用sed命令到符号链接的路径之后,还有另一个文件被直接调用:

ENABLEDCONF="/etc/app/conf-enabled/enabledconfig"
sed -i 's#<search>#<replace>#g' $ENABLEDCONF

这似乎也是symlink指向文件的数据形式,但是用新文件覆盖了符号链接。我已经更新了sed行以使用readlink命令,这解决了问题:

sed -i 's#<search>#<replace>#g' $(readlink $ENABLEDCONF)

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

经过更多调查后,事实证明,postinstinst脚本正确地创建了符号链接,但是在使用sed命令到符号链接的路径之后,还有另一个文件被直接调用:

ENABLEDCONF="/etc/app/conf-enabled/enabledconfig"
sed -i 's#<search>#<replace>#g' $ENABLEDCONF

这似乎也是symlink指向文件的数据形式,但是用新文件覆盖了符号链接。我已经更新了sed行以使用readlink命令,这解决了问题:

sed -i 's#<search>#<replace>#g' $(readlink $ENABLEDCONF)

- Martyn Gough