2014-12-01 64 views
2

我創建了一個* .deb包,它將一些文件保存到工作正常的所需位置。在postinst期間,我生成一個新文件(使用我自己的腳本「mergeconfig」將兩個文件合併在一起),該文件創建正常。不是由* .deb包後綴創建的符號鏈接。創建新文件

但是,在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來安裝軟件包,並且我有其他軟件包以相同的方式創建符號鏈接而沒有問題。 任何幫助將是巨大的

UPDATE

經過調查,原來是被正確創建符號鏈接的postinst腳本,但有一個sed命令的路徑之後被直接調用另一個文件符號鏈接的:

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

這似乎取數據形成的文件太多符號鏈接點,但覆蓋與新文件的符號鏈接。我已經更新了SED線使用的readlink命令,這已經解決了這一問題:

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

感謝您的幫助

+0

如果你'設置-x'並運行它,會發生什麼?你可以通過'set + x'將它設置回去 – jmunsch 2014-12-01 18:26:52

+0

嘿@jmunsch,之前沒有看到設置-x和set + x,快速谷歌似乎正在調試標誌?我正確地認爲你的意思是把它添加如下: 'echo「 - 更新conf-enabled符號鏈接」' 'set -x' 'sudo ln -s -f $ CONFAVAILABLEDIR/$ SERVERNAME- $ APPNAME $ CONFENABLEDDIR/$ CONFIGNAME' 'set + x' 'exit 0' – 2014-12-01 18:52:46

+1

爲什麼使用sudo? postinst(等)已經以root身份運行。 – Flimzy 2014-12-02 13:10:21

回答

0

更經過調查,原來是由postinst腳本正確創建符號鏈接,但有一個sed命令符號鏈接的路徑後直接另一個文件被稱爲:

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

這似乎取數據形成的文件太多符號鏈接點,但覆蓋與新文件的符號鏈接。我已經更新了SED線使用的readlink命令,這已經解決了這一問題:

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

- 馬丁高夫