동일한 시스템에서 "apt-get install ..."과 다른 버전의 소스 코드를 사용하여 패키지를 빌드할 때 어떤 문제가 발생할 수 있습니까?

동일한 시스템에서 "apt-get install ..."과 다른 버전의 소스 코드를 사용하여 패키지를 빌드할 때 어떤 문제가 발생할 수 있습니까?

내가'라고 가정해보자apt-get install somepkg'를 선택한 다음 "somepkg"에 의존하는 다른 패키지("abc" 및 "def")를 추가로 설치합니다. 나중에 패키지의 최근 공개된 소스코드에 바람직한 업데이트가 있다는 내용을 읽게 되지만, 패키지 관리자를 통해 제공되는 사전 빌드 버전은 아주 오래된 버전에 붙어 있는 것을 볼 수 있어 최신 버전부터 시작합니다. 출시된 소스 코드에서 획득, 빌드 및 설치합니다.

그러나 이제 다양한 빌드/설치 패키지의 2가지 버전/컬렉션이 있음을 알 수 있습니다. 예를 들어/bin/somepkg-도구(v 1.0),/usr/bin/sompkg-도구(v1.0) 및 최신 src에서 빌드된 최신 버전/usr/local/bin/somepkg-도구(v4.1), 이는 몇 가지 질문을 제기합니다.

  1. 서로 다른 버전의 여러 바이너리 세트(사전 빌드된 패키지 관리자의 한 세트, 로컬 빌드의 최신 src의 한 세트)를 설치하는 데 문제가 있을 수 있습니까? 이는 피하는 것이 가장 좋은 문제의 잠재적인 원인처럼 느껴집니다.
  2. '를 사용하여 사전 구축된 이전 호스팅 패키지를 제거하려면 'sudo apt-get purge somepkg', 이제 프롬프트에서는 종속성 패키지 "abc" 및 "def"도 제거합니다. 이는 이것이 절대적으로 필요한지 또는 경로에서 최신 빌드 바이너리를 찾아 계속 작업할 수 있는지 확실하지 않기 때문에 불편합니다. 이전에 설치된 패키지를 제거/정리하면 필연적으로 후속 종속 패키지도 제거됩니까? 또한 종속 패키지 제거를 수락하면 패키지 관리자는 "abc" 및 "def"의 후속 (재)설치에서 더 이상 이전 "somepkg"를 가져오고 설치할 필요가 없다는 것을 확인할 수 있습니까? 이미 로컬에서 및 src에서 빌드했기 때문입니다. 필요한 "somepkg" 바이너리가 설치되어 있습니까?
  3. 아니면 패키지 관리자를 통해 "somepkg"의 이전 설치를 정리할 수 있는 방법이 있습니까?아니요종속 패키지 2개를 삭제하시겠습니까?
  4. 이 상황을 처리하는 보편적인 최선의 방법이 있습니까, 아니면 일반적으로 사례별로 처리하는 것이 가장 좋습니까?

비슷한 답변이 없는 질문을 발견했습니다.여기그러나 검토는 많은 것들에 근본적으로 의존하기 때문에 상당히 문제가 있는 특정 사례에 중점을 둡니다.

문제의 일반적인 성격을 산만하게 하지 않고 특정 사례를 기술하는 것이 유용할 수 있습니다.

  • 나는 'apt-get install git'(v2.30.2)
  • 나중에 "apt-get install gitolite3" 및 "... git-lfs"를 실행합니다.
  • 나중에 릴리스 노트에서 많은 수정/업데이트를 보았고 데비안 패키지 관리자가 최신 git 패키지가 이전 버전(apt-get update, apt show git)에 멈춰 있다고 말했기 때문에 "wget ​​​​...git -2.37” .3.tar.gz', 최신 버전 소스에서 만들어 설치했습니다.

이제 다음 바이너리(및 git 패키지와 함께 제공되는 다른 모든 바이너리)가 있음을 알 수 있습니다.

  • /bin/git (v2.30.2오래된)
  • /usr/bin/git (v2.30.2오래된)
  • /usr/local/bin/git (v2.37.3새로운)

그리고 실수로 이전 git 바이너리를 사용하여 gitolite 저장소 서버 및 LFS 서버에 의존하는 데 따른 문제를 피하고 싶습니다. 따라서 이러한 질문이 발생합니다.

답변1

  1. PATH항상 설정 방법을 알면 제어할 수 있지만 이것이 문제의 원인이 될 수 있습니다.

  2. 패키지 관리자는 패키지에 대해서만 알고 있으며 수동으로 설치한 바이너리에 대해서는 알지 못합니다.

  3. equivs종속성을 충족하기 위해 더미 패키지를 생성 할 수 있습니다 . 바라보다설치된 패키지의 구현되지 않은 종속성을 무시하도록 만드는 방법은 무엇입니까?

  4. 바라보다데비안이 제공하는 것보다 새로운 버전의 소프트웨어를 어떻게 설치하나요?더 나은 접근 방식을 위해, 특히 git다음과 같은 최신 버전의 패키지에 대해이미 포장되어 있습니다.— 백포트(현재 Debian 11의 경우 2.34.1)에서 사용할 수 없는 경우 최신 소스 패키지를 사용하여 실제 패키지를 다시 빌드할 수 있습니다.

답변2

두 가지 다른 설치 시스템(패키지 관리자에서, 로컬 관리자가 "수동으로" 컴파일/설치)을 사용하면 다음을 쉽게 얻을 수 있습니다.

  1. 주 명령/데몬은 서로 다른 두 위치에 있습니다. 일부 사용자는 한 곳을 찾고, 다른 사용자는 다른 곳을 찾고, 버전의 차이로 인해 행동의 차이가 발생하여 모든 사용자가 혼란스러워집니다. 이는 사용자가 스스로 중지하고 시작할 수 있는 데몬의 경우 특히 그렇습니다.
  2. 구성 디렉터리/파일은 서로 다른 두 위치에 있으므로 누군가가 사용하지 않는 버전의 구성 파일을 업데이트하면 불만이 발생합니다.
  3. 데몬의 경우 두 가지 버전의 로그 파일이 서로 다른 두 위치에 기록되는 경우가 많기 때문에 혼란을 야기하고 사용자나 서버 관리자의 디버깅이나 문제 해결 노력이 지연됩니다.

가능하면 중복 프로그램을 수동으로 설치하지 마십시오. 이 작업을 수행해야 하는 경우 이 방법으로 설치한 프로그램과 해당 프로그램을 컴파일/설치하는 방법에 대한 광범위한 문서를 작성하십시오. 필요하지 않은 패키지가 설치되지 않도록 패키지 관리자에 구성을 추가하는 것도 중요합니다(이러한 구성에 자세한 설명을 포함하세요). 다음 시스템 관리자가 이러한 프로그램을 쉽게 유지 관리하고 업데이트할 수 있도록 하십시오. (보통 "다음" 관리자는, 이러한 세부 사항에 대한 기억은 9개월 후에 사라졌습니다)

관련 정보