소스에서 설치된 소프트웨어를 관리하는 방법은 무엇입니까?


14

때때로 우리는 여러 가지 이유로 소스에서 무언가를 설치해야 할 수도 있습니다. 적절한 종속성이 주어지면 소프트웨어를 설치하는 방법은 상당히 표준이지만 향후 편의를 위해 이러한 설치를 관리하는 방법은 명확하지 않습니다.

더 구체적으로:

  1. 쉽고 깨끗하게 제거 할 수 있도록하기 위해 무엇을 할 수 있습니까?

  2. 소스에서 다시 설치할 수있는 동일한 소프트웨어를 쉽고 깨끗하게 업그레이드하기 위해 무엇을 할 수 있습니까?

  3. 기본 패키지 (apt-get을 사용하여 설치)와 패키지의 최신 버전 (소스에서 설치)이있는 경우 잠재적 충돌을 최소화하려면 어떻게해야합니까?

답변:


8

를 사용 checkinstall make install하면 임시 패키지가 생성되어 설치됩니다. 이는 패키지 관리자에 기록되어 있으며 제거 할 수 있음을 의미합니다.


7

가장 좋은 방법은 새로운 버전의 데비안 패키지를 직접 만드는 것입니다. dpkg그리고 apt도구를 언급하고 그 목적을 위해 의도 된 것이 세 가지 일을. 바퀴를 재발 명하는 대신 사용하십시오. 포장에 대한 안내서가 많이 있습니다. 소프트웨어가 이미 리포지토리에 존재하는 경우, apt-get src자신의 패키지를 연구하고 시작하는 데 사용할 수있는 소스 패키지 ( )를 얻을 수 있습니다.

/ubuntu//a/485230/158442에 대한이 답변 은 일반적인 지침으로 유용 할 수 있습니다.

하지만 checkinstall신속하고 더러운 솔루션에 좋은 곳입니다, 장기적으로는 적절한 포장을 사용해야합니다.


제안 해 주셔서 감사합니다. '소프트웨어가 이미 리포지토리에 존재합니다'라고 말했을 때 우분투가 관리하는 공식 리포지토리를 의미한다고 가정합니다. 그렇다면 많은 경우에 이러한 리포지토리는 특히 이전 Ubuntu 릴리스에서 최신 버전을 제공하지 않습니다. 그래서 apt-get src아마도 이러한 경우에 도움이되지 수 있습니다.
skyork

@skyork 어쩌면 그들은하지 않습니다. 그러나 이전 버전의 패키지를 사용하여 연구 할 수 있습니다. 패키저가 수행 한 일부 사용자 정의, 일부 사용자 정의 유지 보수 스크립트가있을 수 있습니다. 그 모든 것을 무시하고 처음부터 시작해야 할 이유가 없습니다. 바퀴를 재창조하는 것이 여기서 주제 인 것 같습니다.
muru

4

우선, 소스 코드 관리 방법에 따라 달라집니다. 나는 디렉토리를 좋아 ~/sources하고 모든 프로그램을 서브 디렉토리에 넣는 반면, 다른 사람들은 모든 프로그램에 대해 새로운 디렉토리를 만들 것입니다.

마찬가지로 나와 같은 일부는 모든 새 버전에 대해 새 하위 하위 디렉토리를 만들고 새 버전에 작업을 중단시키는 중대한 버그가없는 경우에만 이전 버전을 제거합니다.

이 작업을 수행하는 단일 방법은 없지만 원하는 방법을 선택 하여 관리하기 가장 쉬운 방법을 선택하십시오 .

  1. 깨끗한 제거

    • rem_dep.sh다음과 같은 스크립트를 작성하는 것이 좋습니다 .

      #! /bin/bash
      sudo apt-get remove dep1 dep2 ... depn
      

      dep1, dep2, depn종속성은 어디에 있습니까 ?

  2. 깨끗하고 쉬운 업그레이드

    • 당신은 같은 자동화 된 버전 관리 시스템의 소스 코드를 얻을 경우 gitbazaar또는 링크가 예측할 수있는 경우는 것입니다 쉘 스크립트를 만들 수 있습니다

      #1 make a backup of earlier version
      #2 get new source
      #3 configure, build/make the source
      #5 if make went correctly, remove earlier version.
      #6 make install new version, update dependencies if required.
      
    • 다른 경우에도 수동 작업으로 이러한 스크립트를 어느 정도 만들 수 있습니다.

  3. 갈등 관리

    • 가장 좋은 방법은 --prefix소프트웨어를 설치하는 동안 이 옵션 을 사용하는 것입니다.
    • 다른 중요한 점은 충돌을 최소화하기 위해 시스템을 업데이트하는 것입니다.

참고 : 자신이 원하는 것보다 많은 소프트웨어를 컴파일하는 경우 ( max_limit5 또는 10 또는 100과 같이 a 를 설정 하십시오) 우분투를 떠나 아치 리눅스로 옮기는 것이 가장 좋습니다.


3

종속성을 빌드하십시오.

  • AFAIK는 수동으로 기록해야합니다. README와 같은 파일을 작성하여 수동으로 설치된 종속성 목록을 유지할 수 있습니다.

  • 해당 소프트웨어에 이미 Ubuntu 또는 PPA 리포지토리에 빌드 된 바이너리가있는 경우 설치하는 동안 종속성 추적이 쉬워야합니다.

    sudo apt-get build-dep target_package
    

완전히 제거 :

구성된 소스 폴더를 유지하십시오 . 종속성 파일이 설치된 특정 폴더의 모든 소스를 수집하는 것이 좋습니다.

클린 업그레이드 및 설치된 파일 격리 :

구체적으로 설치하십시오 --prefix(바람직하게는 --prefix=/opt/software_name-version/).

이렇게하면 많은 문제가 해결됩니다. 리포지토리의 버전과 동시 버전; 깨끗한 업그레이드; 소스가 삭제 된 경우 더티 제거가 더 쉽습니다.

@muru가 대답하는 것처럼 더 정교하거나 가장 좋은 방법은 데비안 패키지를 만듭니다 (Ubuntu / PPA 리포지토리에서 사용 가능한 패키지)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.