web-dev-qa-db-ja.com

ソースからパッケージをビルドする場合、どうすれば完全にアンインストールまたは削除できますか?

ソースコードを使用して、次のような1つのパッケージをビルドしました。

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib --with-package-name="Myplugin" --with-package-Origin="http://www.ubuntu.org/" --enable-gtk-doc --disable-static
make
make install

しかし、残念ながら、私はその最新バージョンであり、多くのバグがあることを発見したので、それを削除/アンインストールする必要があります。しかし、どうすればできますか? make clean; make uninstallを試しましたが、それでも存在することがわかります。

# pkg-config --list-all | grep Myplugin
myplugin-....
$ ls /usr/lib/myplugin/libXYZ.so
exist....

今、これをどのように削除しますか?

136
YumYumYum

通常は次のものを使用できます。

make uninstall

または

Sudo make uninstall

アプリがルートとしてインストールされた場合。

ただし、これは、パッケージの開発者が適切なアンインストールルールを作成した場合にのみ機能します。

次のコマンドを実行して、ソフトウェアのインストールに使用される手順を確認することもできます。

make -n install

そして、それらの手順を手動で逆にしようとします。

将来的には、この種の問題を回避するために、可能な場合はいつでもmake installの代わりに checkinstall を使用してみてください(コンパイル済みバージョンとパッケージ化バージョンの両方を同時に保持する場合を除き、常に知る必要があります)。 debファイルが作成およびインストールされ、お気に入りのパッケージマネージャーを使用してアンインストールできます。

make cleanは通常、ビルドディレクトリを消去します。パッケージはアンインストールされません。変更されたファイルだけでなく、全体がコンパイルされていることを確認したいときに使用されます。

172
Javier Rivera

これはバグだとは思いません。ソースからインストールするときにcheckinstallを読み、使用することを学ぶことをお勧めします。

パッケージの簡単な説明であるリポジトリからcheckinstallをインストールできます。

CheckInstallは、インストールスクリプト(「make install」、「make install_modules」、「setup」など)によって作成または変更されたすべてのファイルを追跡し、標準のバイナリパッケージをビルドしてシステムにインストールし、アンインストールできるようにします。ディストリビューションの標準パッケージ管理ユーティリティ。

以下のリンクは、理解を深めるのに役立ちます。 http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

28
Sabacon

これはバグではありません。ソースからコンパイルすることは、パッケージ管理システム(ソフトウェアセンターで使用される)を完全にバイパスするソフトウェアのインストール方法としてサポートされていません。

ソースからコンパイルされたソフトウェアをインストールまたはアンインストールする標準的な方法はないため、Ubuntuが何をすべきかを知ることはできません。ソフトウェアはインストール済みプログラムとしてリストされていません。

このようなカスタムソフトウェアのインストールおよび削除については、ディストリビューターの指示に従ってください。開発者に連絡して、パッケージ管理システムを使用できるようにDebianパッケージを作成するよう依頼することもできます。

16
dv3500ea

これはバグではなく、開発者がネイティブパッケージングメソッドではなくソースを介して配布を行う場合に発生することです。

Checkinstallまたはdhbuildを使用して、ソースファイルを取得してdebianパッケージにすることができます。正直なところ、私の意見では、新しいユーザーはソースからのインストールを避け、開発者はソースのみによる配布を避けるべきです。

3
RolandiXor

"make uninstall"をサポートするパッケージはほとんどありませんが、ステージングインストールでmake install DESTDIR = xxx "をサポートするパッケージは他にもたくさんあります。

これを使用して、ソースから直接インストールする代わりに、インストールするパッケージを作成できます。私はcheckinstallで運がなかったが、 fpm は非常にうまく機能する。

これは、以前にmake installを使用してインストールしたパッケージを削除するのにも役立ちます。 make installされたものの上にビルドされたパッケージを強制的にインストールし、それをアンインストールします。

たとえば、最近、protobuf-3.3.0を扱うためにこれを使用しました。 RHEL7の場合:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m [email protected] \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 Sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 Sudo rpm -e protobuf-3.3.0      

可能であれば、rpmよりもyumを優先します。

Debian9の場合:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 Sudo apt install -f *.deb
 Sudo apt-get remove protobuf

可能な場合はdpkgをお勧めします。

また、この回答を stackoverflow に投稿しました

1
Bruce Adams

Opensslで設定せずにソースからphp-5.6.をコンパイルしたので、最初から戻ってインストールする必要がありました。makeuninstall did notを使用してPHPのMakefileはサポートしていません。

ただし、この手順はうまくいきました。phpに関連するすべてのファイルをリストし、手動で削除しました。汗をかくことなく約5分かかりました。同様に、これらの手順を使用して、コンパイル済みソフトウェアをアンインストールできます。

phpをアンインストールする必要のあるソフトウェアに置き換えます

whereis php

上記のコマンドは、バイナリがインストールされているディレクトリをリストします。例:/ usr/local/bin/php、/ usr/bin/php ..出力にリストされている各ファイル/ディレクトリを削除します。

Sudo rm -f /usr/local/bin/php

上記の出力にリストされているすべてのファイルでこれを実行すると、新しいバージョンを最初からインストールするように設定されます。

0
Abhinay

make uninstallnot常に機能するという事実について交渉する必要があるため、以下はより積極的なソリューションです。

これには、Ubuntu Software Centerで利用可能なpacoプログラムの使用が含まれます。 pacoをインストールしたら、プログラムを「インストールする」ときにログモードで使用できます。 Pacoは「make install」のラッパーのように機能し、さまざまなディレクトリにコピーされたファイルのリストを使用して/ var/log/pacoディレクトリにログを作成します。さらに、Pacoフロントエンドでファイルを確認できます。

たとえば、ソースからphpをコンパイルしたとき、次のことを行いました。

paco -lp php5 "make install"

パラメーターlは、pacoをログモードで実行します。これにより、/ var/log/pacoにphp5(コマンドで指定した名前)という名前のログファイルが作成されます。インストール中にさまざまな標準の場所にコピーされるすべてのファイルが含まれていました。コマンドラインエディタまたはpaco guiを使用して、ファイルを表示できます。

以下は、sedコマンドラインエディタを使用してファイルリストを取得する例です
(php5をファイル名に置き換えます)。

cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'

ファイルのリストを取得したら、それらを削除する方法を知っていますか?確かに、上記のコマンドの結果をrmに渡すには、以下に示すようなバックティックを使用します。

Sudo rm `cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'`

仕事完了!

注:LD_PRELOADの制限により、pacoはsuidプログラムのトレースを追跡できません。 manページを参照してください。

0
sjsam