libnss-ldap パッケージのインストール失敗 (2006/06/27)

libnss-ldap パッケージのバージョン 251-3 のインストールに失敗しました.後で分かりましたが,これは dc=example-city,dc=net のように,ハイフン "-" があるパラメータをインストール時に指定すると失敗します.エラーメッセージは次の通りです.

Bareword found where operator expected at -e line 1, \
 near "s-^base .*-base dc=excample-city"
syntax error at -e line 1, near "s-^base .*-base dc=example-city"
Execution of -e aborted due to compilation errors.

/var/lib/dpkg/info/libnss-ldap.postinst を見ると,change_value() 内の次の行でのエラーであることが分かりました.

perl -i -p -e "s-$replacestring-$parameter $value-i

先のエラーは,「replacestring="^base .*"」,「prameter="base"」,「value="dc=example-city,dc=net"」のときに出ています.展開した形にすると

perl -i -p -e "s-^base .*-base dc=excample-city,dc=net-i
の形になります.デリミタに "-" を指定しているにもかかわらず,変換先の文字列に "-" が含まれるのが,問題です."-" をエスケープする必要があり,その前の行に,"-" をバックスラッシュにより,エスケープするための行が書かれてありました.

value=`echo $value | sed -s 's#-#\\-#g'`

コマンドを次のように打つと,一見,エスケープはうまく機能しているように見えます.

# echo example-city | sed -s 's#-#\\-#g'
example\-city

ところが,bash 上で次のようにコマンドを打つと,

# value=`echo example-city | sed -s 's#-#\\-#g'`; echo $value
example-city
となります.value に代入された時点で,バックスラッシュが消えています.そこで,/var/lib/dpkg/info/libnss-ldap.postinst を value に代入時にもバックスラッシュが残るように修正しました.

- value=`echo $value | sed -s 's#-#\\-#g'`
+ value=`echo $value | sed -s 's#-#\\\-#g'`

この修正により,インストールは問題なく完了しました.


梅原 大祐 / UMEHARA Daisuke umehara@kit.ac.jp
Last modified: 2020/05/01 15:37
Total Access Count