-1

debian パッケージを作成し、postinst スクリプトに次のコードを追加しました。

path="$HOME/sample"
echo "$path"
if [ -d "$path" ]
then
 rm -rf "$path"
 echo 'File deleted successfully :)'
fi

パスが存在する場合は、インストール中に削除されます。を介して .deb パッケージをインストールすると、完全に機能しますdpkg。しかし、Ubuntu ソフトウェア センターからインストールしている間は、どれも機能しません。なぜこれが起こるのですか?

背景として、システムにインストールするユーザーまたはルートのホームディレクトリにディレクトリを作成するアプリを作成しました。そのため、アンインストール後に再インストールまたは再インストールする場合は、ディレクトリが存在するかどうかを確認する必要があります。存在する場合は、削除する必要があります。アプリを Debian パッケージとして配布しました。問題は、ディレクトリがホーム ディレクトリに存在するかどうかを確認する方法です。アプリのインストール中にディレクトリは作成されません。アプリの実行中に外部で作成されます。また、アプリを変更できないため、別のフォルダーに変更することはできません。

4

1 に答える 1

2

問題は Ubuntu ではなくHOMEpostinst. どうやらsudo dpkg自分のアカウントから動作するようです (ただし、一部の設定でsudoは、その後も伝播HOMEされません) が、これはサポートされていないか、明確に定義されていません。

HOMEHOMEシステム全体のインストールであり、ユーザーごとの変数であるため、とにかく Debian パッケージでは意味がありません。

あなたの要件を正しく理解している場合は、すべてのユーザーのホーム ディレクトリをループして、sample存在する場合はそれぞれからフォルダーを削除する必要があります。

# Ad-hoc
getent passwd | cut -d: -sf6 |
while read dir; do
    test -d "$dir" || continue
    rm -rvf "$dir/sample"
done

これは非常に煩わしいので、代わりにアプリを変更してみる必要があります。ユーザーがsample別の理由で名前を付けたディレクトリを持っている場合はどうでしょうか。アプリは、.appname-sample代わりに合理的に一意のドット名 (?) を使用するか、システムによって適切に管理できるシステムの場所にユーザーごとのデータを保存する必要があります。

実際、それまでの間、postinstスクリプトはおそらくsampleディレクトリを のような場所に移動するだけ.sample.dpkg-oldです。これはそれほど煩わしいものではありませんが、少なくとも、ばかげたミスによってユーザーのデータが完全に破壊されることを回避できます。

于 2015-01-23T06:48:49.200 に答える