「make install」の反対は何ですか、すなわちLinuxでライブラリをどのようにアンインストールしますか?


396

実行中

./configure --prefix=/mingw 

以前に実行したライブラリのMinGW / MSYSシステム

'./configure --prefix=/mingw && make && make install' 

私はこのメッセージに出くわしました:

警告:VampプラグインSDKのバージョンがすでにインストールされています。最初に古いバージョンを削除せずに新しいバージョンをインストールする場合は、心配と悲しみを期待してください。(続く)

これは私を心配させました。「make install」の反対は何ですか、すなわち、ライブラリはどのようにLinuxでアンインストールされますか?'make clean'は仕事をしますか、それとも他のステップが含まれますか?



1
同様の答えについては、askubuntu.com / questions / 87111 /…を参照してください。主な解決策は、現在sudo make uninstall、インストール構成ファイルがまだ利用可能であるか、他の明らかな解決策がない場合です。 "ユーティリティ。
エドワード

7
実行した後、make install私はmake uninstallそれらを削除する必要はありませんでした。私はいつも使用してきましたxargs rm < install_manifest.txt
John Strood

回答:


508

make cleanソース/ビルドツリーから中間ファイルまたは出力ファイルを削除します。ただし、ソース/ビルドツリーにのみ影響します。それはファイルシステムの残りに触れないので、以前にインストールされたソフトウェアを削除しません。

運が良ければ、ランニングmake uninstallはうまくいきます。ただし、それを提供するのはライブラリの作成者次第です。一部の著者はuninstallターゲットを提供し、他の人は提供しません。

運が悪い場合は、手動でアンインストールする必要があります。実行make -n installすると、ソフトウェアがそれ自体をインストールするために実行するステップが表示されますが、実際には何も実行されないため、役立ちます。その後、これらの手順を手動で元に戻すことができます。


10
+1; 他のパッケージによってインストールされた可能性のあるファイルに注意してください。これらのファイルを単に削除すると(「手動でこれらのステップを逆にする」と解釈すると)、他のパッケージが壊れる可能性があります。これが(多くの理由の1つ)、パッケージマネージャーが発明された理由です。
Merlyn Morgan-Graham 2013

3
これは、同じ構成およびコンパイル済みビルドディレクトリを正しく保持している場合にのみ可能ですか?したがって、ほとんどの人がインストール後に削除するため、あまり役に立ちません。彼は、ビルドフォルダーを保持しているかどうか、およびパッケージがmake uninstallオプション用に正しく構成されているかどうかに関係なく、アンインストールしたいと考えています。明確化:彼がやりたいことは、彼が自分でコンパイルしたもので機能するパッケージの何らかの管理を可能にすることです。
Nisse 2013

360

場合はsudo make uninstall使用できません。

Debianベースのシステムでは、代わりに(または後で*)make install実行sudo checkinstallして、.deb自動的にインストールされるファイルを作成できます。その後、システムパッケージマネージャー(例:apt/ synaptic/ aptitude/ dpkg)を使用して削除できます。Checkinstallは、RPMなどの他のタイプのパッケージの作成もサポートしています。

http://community.linuxmint.com/tutorial/view/162およびいくつかの基本的なcheckinstallの使用法debian checkinstallパッケージも参照してください


*:インストール後にこれを読んでいる場合make installでも、上記の指示に従って、dpkg -r $PACKAGE_NAME_YOU_CHOSEN後で実行できます。


53
この回答は、最良の回答では多くの賛成票が得られないことを証明しています。ありがとう!私は長い間これを行う方法を知りたいと思っていました。ほぼ確実に削除するのは面倒なので、「make install」をするのはいつもためらいます。
doug65536 2013年

1
LFSブックには、パッケージ管理システムに関する情報も含まれています。自分で設定する必要があるためです。そこにある情報は、この種のものをよりよく機能させるために役立つはずです(よりクリーンで、より一般的です)。インストールされている内容をリッスンし、起動時にそれらすべてのファイルを削除するスクリプトなどを作成するスクリプトがあります。
Nisse 2013

13
代わりmake installに使用する前にすでに実行していたにもかかわらず、これは私にとっては美しく機能しましたcheckinstall
LukeGT 2014年

9
checkinstallこの優れた答えが機能するようにパッケージをインストールします。
quimnuss

1
ユーザー "LukeGT"がコメントしたのと同様に、インストール構成ファイルは利用できないがインストーラーファイルは利用できる場合、それらを使用してコンパイルおよびインストールできcheckinstall、新しいコンパイルが古いものと同じ設定で行われた場合、インストールされたパッケージをアンインストールします。checkinstall以前にインストールしたファイルを削除する必要があります。
エドワード

62

manifest一緒にインストールされたすべてのファイルを一覧表示するファイルがある場合make installは、別の回答からこのコマンドを実行できます。

cat install_manifest.txt | xargs echo rm | sh

sudo make installアンインストールにsudoを追加する必要がある場合:

cat install_manifest.txt | xargs echo sudo rm | sh

4
これが賛成票を獲得しなかったことに驚いています。これは、他のオプションが機能しないときにシステムからファイルを削除するために機能しました。私の場合、プログラムのバージョンが数字で始まっておらずビルドできないため、checkinstallはdebを作成できませんでした。これはうまくいきました。
DWils

3
@DWils非常に危険なため、これ以上の投票は得られなかったと思います。さらに、xargs echo rm | sh?これを提案した人は、シェルの使用に関して特に経験や知識がないわけではないことは明らかです。
fstd 2014年

4
(参考のために、それは、シェルによって解釈されているファイル名に任意の文字の上に嘔吐します(そして、あなたは不正な「RMさんが実行されています!)、さらにそれは、シェル拡張のすべてのソートを行います。場合だけでは何が起こるか想像install_manifest.txtアスタリスクが含まれています... rm *シェルにパイプされます。)このため、反対投票されます。
fstd 2014年

@fstd正解です。いつものように、この種の回答は慎重に使用する必要があります。このコマンドを実行する前に、マニフェストファイルを確認してください。しかし、シェルを使用している場合、私はあなたが何をしているか知っていると思います。
3

install_manifest.txt存在することが予想される状況を説明できますか?
アインポクルム2018年

28

問題のプログラムのmakefile / configureスクリプト/ autofooマジックがどれだけ適切であるかに応じて、以下が問題を解決する可能性があります。

make uninstall

問題は、これを、インストールしたバージョンのソースツリーで、インストールに使用した構成とまったく同じ構成で実行する必要があることです。


19

「make install」後にアンインストールする方法

方法#1(アンインストールする)

手順1:ビルドディレクトリを何らかの方法で削除または変更した場合にのみ、この手順に従う必要があります。以前とまったく同じ手順を使用して、ダウンロードして、make / make installを実行します。

手順2:アンインストールを実行してみます。

cd $SOURCE_DIR 
sudo make uninstall

これが成功すれば完了です。偏執的である場合は、「方法#3」の手順を試して、make uninstallファイルを見逃していないことを確認することもできます。

方法2(checkinstall-debianベースのシステムのみ)

プロセスの概要

Debianベースのシステム(Ubuntuなど)では.deb、というツールを使用して、パッケージを非常に簡単に作成できますcheckinstall。次に.debパッケージをインストールし(これにより、Debianシステムはパッケージのすべての部分が実際にインストールされたことを認識します)、最後にパッケージをアンインストールして、パッケージマネージャーがシステムを適切にクリーンアップできるようにします。

一歩一歩

sudo apt-get -y install checkinstall
cd $SOURCE_DIR 
sudo checkinstall

この時点checkinstallで、パッケージ名の入力を求められます。少しわかりやすいものを入力して、すぐに使用できるようにメモしてください。また、無視できるいくつかのデータの入力も求められます。受け入れられないバージョンについて文句を言う場合は、のような適切なものを入力してください1.0。完了したら、インストールして最後にアンインストールできます。

sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED

方法#3(install_manifest.txt)

install_manifest.txtソースディレクトリにファイルが存在する場合は、インストールによって作成されたすべてのファイルのファイル名が含まれている必要があります。

したがって、最初にファイルのリストとそのmod-timeを確認します。

cd $SOURCE_DIR 
sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt

あなたは得るべきであるゼロのエラーでなければなりませんと表示されているファイルのMOD-回日以降にインストール時間。すべて問題なければ、一度に削除できます。

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt

ただし、ユーザーMerlyn Morgan-Grahamは、この方法について、次の点に注意する必要があります(ここではそのままコピーします)。他のパッケージを壊してください。」。これが、deleted-by-uninstalldirを作成し、ファイルを削除する代わりにそこに移動した理由です。


この投稿の99%は他の回答に存在していました。(うまくいけば)簡単に理解できるハウツーで有用なすべてのものを収集し、重要な詳細(xarg引数の引用や削除されたファイルのバックアップの保持など)に特別な注意を払おうとしました。


METHOD 2がうまくいきました!
Aizzaac

10

make clean 通常、ソースコード自体を含むディレクトリ内のビルドされたファイルのみをクリーンアップし、インストールされているソフトウェアにはほとんど触れません。

Makefileには通常、アンインストールのターゲットは含まれていません。通常、アンインストールの対象となるディレクトリからファイルを削除することにより、自分でアンインストールする必要があります。たとえば、あなたがプログラムを構築し、(使用して、それをインストールした場合make install)に/usr/local、あなたは目を通すにしたいと思い/usr/local/bin/usr/local/libexec/usr/local/share/man、など、不要なファイルを削除します。Makefileにはuninstallターゲットが含まれる場合もありますが、常に含まれるわけではありません。

もちろん、通常Linuxシステムでは、ソフトウェアを「自動的に」アンインストールできるパッケージマネージャを使用してソフトウェアをインストールします。


8

「stow」ユーティリティは、この問題を解決するために設計されました:http : //www.gnu.org/software/stow/


5
stowこの問題を解決するにはどうすればよいでしょうか?
3D1T0R 2017

stowユーティリティを使用すると、各バージョンを別々の場所にインストールして、同じマシンで複数のバージョンを管理できるようになります。これを行うと、アンインストールは、インストールディレクトリ全体を削除するのと同じくらい簡単になります。
Bruce Adams

6

残念ながら標準はありませんが、これはソースからのインストールの危険の1つです。一部のMakefileには「アンインストール」が含まれるため、

make uninstall

ソースディレクトリから動作する可能性があります。それ以外の場合は、何をしたかを手動で元に戻すだけの問題かもしれませんmake install

make clean 通常は単にソースディレクトリをクリーンアップします。生成/コンパイルされたファイルなどを削除します。


0

「make uninstall」をサポートするいくつかのパッケージを知っていますが、ステージインストール用のmake install DESTDIR = xxxをサポートする多くのパッケージを知っています。

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

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

たとえば、最近これを使用して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を使用することをお勧めします。

私もここに回答を投稿しまし


0

Makeそれが何を知っているか、何をするかを教えてくれます。次のようなコマンドを実行する「インストール」ターゲットがあるとします。

cp <filelist> <destdir>/

一般的なルールに、以下を追加します。

uninstall :; MAKEFLAGS= ${MAKE} -j1 -spinf $(word 1,${MAKEFILE_LIST}) install \
              | awk '/^cp /{dest=$NF; for (i=NF; --i>0;) {print dest"/"$i}}' \
              | xargs rm -f

同様のトリックでジェネリックを実行できますmake clean


0

前文

以下は機能する場合と機能しない場合がありますが、これはすべて現状のままであり、何らかの損傷、データの損失などが発生した場合の責任は、あなたとあなただけにあります。しかし、私は物事がスムーズに進むことを願っています!

make installに戻すには、次のようにします(私もしました)。

アイデア:インストールされているスクリプトを確認し、単純なbashスクリプトでこれを元に戻します。

  1. ビルドディレクトリを再構成して、いくつかのカスタムディレクトリにインストールします。私は通常これを行います:--prefix=$PWD/install。CMakeの場合、ビルドディレクトリに移動し、CMakeCache.txtを開いて、CMAKE_INSTALL_PREFIX値を修正できます。
  2. プロジェクトをカスタムディレクトリにインストールします(make installもう一度実行するだけです)。
  3. ここで、仮定からプッシュしmake installます。そのスクリプトは、他の場所(通常は/usr/local)から削除するのと同じコンテンツをカスタムディレクトリにインストールします。したがって、スクリプトが必要です。3.1。スクリプトはカスタムdirと、クリーンにしたいdirを比較する必要があります。私はこれを使います:

anti-install.sh

RM_DIR=$1
PRESENT_DIR=$2

echo "Remove files from $RM_DIR, which are present in $PRESENT_DIR"

pushd $RM_DIR

for fn in `find . -iname '*'`; do
#  echo "Checking $PRESENT_DIR/$fn..."
  if test -f "$PRESENT_DIR/$fn"; then
    # First try this, and check whether things go plain
    echo "rm $RM_DIR/$fn"

    # Then uncomment this, (but, check twice it works good to you).
    # rm $RM_DIR/$fn
  fi
done

popd

3.2。今、このスクリプトを実行するだけです(ドライランになります)

bash anti-install.sh <dir you want to clean> <custom installation dir>

たとえば、/ usr / localをクリーンアップする必要はなく、カスタムインストールディレクトリは/user/me/llvm.build/installであれば、次のようになります。

bash anti-install.sh /usr/local /user/me/llvm.build/install

3.3。ログを注意深く確認し、コマンドに問題がない場合は、コメントを外しrm $RM_DIR/$fnて再度実行してください。しかし、やめて!本当によく確認しましたか?もう一度確認してもよろしいですか?

手順のソース:https : //dyatkovskiy.com/2019/11/26/anti-make-install/

幸運を!

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