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