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


137

ソースコードを使用して、次のような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....

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

回答:


177

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

make uninstall

または

sudo make uninstall

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

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

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

make -n install

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

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

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


私もそうしました。しかし、まだそれは/usr/lib/myplugin/libXYZ.soのpkg-configおよびLSを示すように、存在する
YumYumYum

36
使用するための+1- checkinstallこの問題全体を解消します。
オリ

6
@Google:makeのアンインストールが機能しない場合、make installが何をしたかを追跡し、手動で元に戻す必要があります。
ハビエルリベラ

4
留意すべきもう1つのことは、make installrootとして実行された場合(例:)、sudo make install通常はそうであるsudo make uninstallため、ソフトウェアを削除するために実行することが常に仮想的に必要であるということです。
エリアケイガン

5
すでに実行make installしている場合は、まだ使用できますcheckinstall。通常checkinstallmake install作成したものはすべて上書きされます。その後、を使用しdpkg -r <package.deb>、すべてを削除する必要があります。
user502144

28

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

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

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

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

http://checkinstall.izto.org/


16

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

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

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


3

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

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


私は知っていますが、時には避けられないことがあります...この場合、それは本当に必要ではない小さなゲームでしたが、いつかはMATLABを大学で使用されている計算ツールにインストールしなければならず、 checkinstallとdhbuild ...おかげdebファイルはUbuntuのためにファイルを持っている...しかし、私は間違いなく、メソッドを介して行くではない
nik90

1

"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 you@youraddress.com \
 --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にも投稿しました


0

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

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

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

paco -lp php5 "make install"

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

私は、コンパイルされていたのphp-5.6.30を opensslのとそれを構成せず、ソースから、私は戻って、アンインストールが作るscratch.Usingからそれをインストールする必要がありましたしませんでした PHPはそれをサポートしていないためのMakefileとして働いています。

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

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

whereis php

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.