소스에서 패키지를 빌드하면 어떻게 완전히 제거하거나 제거 할 수 있습니까?


137

소스 코드를 사용하여 다음과 같은 하나의 패키지를 작성했습니다.

./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하십시오 (컴파일 된 버전과 패키지 된 버전을 동시에 유지하지 않는 한 항상 AFAIK). deb 파일을 생성 및 설치 한 후 선호하는 패키지 관리자를 사용하여 제거 할 수 있습니다.

make clean일반적으로 건물 디렉토리를 정리하고 패키지를 제거하지는 않습니다. 변경된 파일뿐만 아니라 모든 것이 컴파일되었는지 확인하려는 경우에 사용됩니다.


나도 그랬어 하지만 여전히 그것은 /usr/lib/myplugin/libXYZ.so PKG-설정 및 LS를 같이 존재
YumYumYum

36
사용 +1- checkinstall이 모든 문제가 증발합니다.
Oli

6
@Google : make 제거가 작동하지 않으면 설치가 수행 한 작업을 추적하고 수동으로 실행 취소해야합니다.
Javier Rivera

4
명심해야 할 또 다른 사항 make install은 루트 (예 :)로 실행 sudo make install된 경우 일반적으로 sudo make uninstall소프트웨어를 제거하기 위해 항상 실행해야한다는 것 입니다.
Eliah Kagan

5
이미 실행 한 경우 make install에도 계속 사용할 수 있습니다 checkinstall. 일반적으로 만든 checkinstall모든 내용을 덮어 씁니다 make 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

이것은 버그가 아닙니다. 소스에서 컴파일하는 것은 패키지 관리 시스템 (Software Center에서 사용)을 우회하는 소프트웨어를 설치하는 지원되지 않는 방법입니다.

소스에서 컴파일 된 소프트웨어를 설치하거나 제거하는 표준 방법이 없으므로 Ubuntu가 수행 할 작업을 알 수 없습니다. 소프트웨어는 설치된 프로그램으로 표시되지 않습니다.

이러한 사용자 정의 소프트웨어의 설치 및 제거에 대해서는 배포자의 지침을 따라야합니다. 패키지 관리 시스템을 사용할 수 있도록 개발자에게 데비안 패키지를 만들도록 요청할 수도 있습니다.


3

버그가 아닙니다. 개발자가 네이티브 패키징 방법이 아닌 소스를 통한 배포에 의존 할 때 발생합니다.

checkinstall 또는 dhbuild를 사용하여 소스 파일을 데비안 패키지로 만들 수 있습니다. 솔직히 말해서, 새로운 사용자는 소스에서 설치를 피해야하며 개발자는 소스로만 배포하지 않아야합니다.


나는 알고 있지만 때로는 피할 수 없다 ...이 경우 그것은 실제로 필요하지 않은 작은 게임 일뿐이지만 언젠가는 대학에서 사용되는 계산 도구 인 MATLAB을 설치해야했으며 이후에 소스로 설치해야했습니다. 우분투에 대한 deb 파일이 없습니다 ...하지만 나는 확실히 checkinstall 및 dhbuild ... thank 방법을 통해 갈 것입니다
nik90

1

"make uninstall"을 지원하는 패키지는 많지 않지만 단계별 설치를 위해 install install DESTDIR = xxx "를 지원하는 패키지가 많이 있습니다.

이를 사용하여 소스에서 직접 설치하는 대신 설치하는 패키지를 작성할 수 있습니다. 나는 checkinstall에 운이 없었지만 fpm 은 매우 잘 작동합니다.

또한 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      

가능하다면 yum을 rpm보다 선호하십시오.

데비안 9 :

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

제거 가 항상 작동 하지는 않는다는 사실을 협상해야 하므로 아래는 사전 예방 적 솔루션입니다.

여기에는 우분투 소프트웨어 센터에서 제공되는 paco 프로그램 사용이 포함됩니다. paco를 설치하면 프로그램을 "설치"할 때 로그 모드를 사용할 수 있습니다. Paco는 "make install"의 래퍼 역할을하며 다양한 디렉토리에 복사 된 파일 목록과 함께 / var / log / paco 디렉토리에 로그를 작성합니다. 또한 Paco Front end의 파일을 볼 수 있습니다.

예를 들어 소스에서 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 프로그램의 추적을 따를 수 없습니다. 매뉴얼 페이지를 참조하십시오.


0

나는 컴파일 한 PHP-5.6.30 OpenSSL을 함께 구성하지 않고 소스에서, 그래서 제거 만들 돌아가서 scratch.Using에서 설치했다 하지 않았다 PHP를 지원하지 않습니다에 대한 메이크으로 작동합니다.

그러나이 단계는 나를 위해 일했습니다 .- 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.