내 자신의 표준 패키지 버전을 사용하는 방법


10

노틸러스에서 소스 코드를 다운로드하고 일부 변경 사항을 작성하고 스스로 컴파일하는 것 외에 다른 해결책을 찾지 못한 문제가 발생했습니다. 이제 저장소의 공식 버전과 몇 가지 변경 사항이있는 두 가지 버전의 노틸러스가 있습니다. 둘 다 지키고 싶습니다.

응용 프로그램 내에서 Nautilus를 시작할 때 응용 프로그램이 컴파일 된 Nautilus 버전을 사용하도록 지시하는 좋은 방법은 무엇입니까? (예 : firefox로 Downloads 폴더 열기)

파이어 폭스 호출을 알아서 /usr/bin/nautilus내 프로그램에 대한 심볼릭 링크로 바꿀 수있었습니다. 그러나 노틸러스 용 업데이트를 설치하자마자이 심볼릭 링크를 덮어 쓰게됩니다. 내가 할 수있는 다른 일이 있습니까?

debian  apt 

1
버전을 입력 /usr/local/bin해도 작동하지 않습니까? 즉, Firefox가 귀하를 검색하여 $PATH에서 버전을 찾 습니까 /usr/bin, 아니면 (또는 xdg-open 물건) 하드 코드 /usr/bin/nautilus입니까? / usr / local에 자신 만의 버전을 설치하면 정상적으로 작동합니다.
Peter Cordes

나는 지금 이것을 시도했지만 작동하지 않았다. 파이어 폭스가 내부적으로 무엇을하는지 모르지만 /usr/bin/nautilus어떻게 든 하드 코딩 된 것 같습니다. 그것이 제거되면 Firefox는 다운로드 폴더를 열려고 할 때 더 이상 아무것도하지 않습니다.하지만 내 자신의 노틸러스 버전에 대한 심볼릭 링크가 /usr/local/bin있습니다. 내 $PATH변수는/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

궁금한 점이 있다면 strace -f -efile,execve -o firefox_syscalls.txt firefoxff가 무엇을하는지 알 수 있습니다 . 에서 로그를 검색 nautilus하면 무언가가 표시 될 수 있습니다. (이것은 -e시스템 호출 execve및 파일 열기 / 닫기 / 경로 이름 항목 을 필터링합니다 . 그렇지 않으면 futexX11에 대한 초과 및 소켓 읽기 / 쓰기 가 될 것입니다 ).
Peter Cordes

답변:


14

패키지 업 그레 이드에서 살아남지 못하기 때문에 약간의 훈련이 필요하지만 처음에는 어려워 보일 수 있지만 충분히 쉬운 패키지 패키지 버전의 노틸러스를 고칠 것입니다. (자세한 내용은 Wouter의 답변 을 참조하십시오.)

상황에서 가장 간단한 방법은 기분 전환을 추가하는 것입니다.

sudo dpkg-divert --divert /usr/bin/nautilus.original --rename /usr/bin/nautilus

패키지를 설치하려고 할 때마다 dpkg이름을 바꾸 /usr/bin/nautilus도록 지시 /usr/bin/nautilus.original합니다. 그런 다음 고유 한 심볼릭 링크를 추가 할 수 있으며 노틸러스 패키지를 업그레이드 한 경우에도 그대로 유지됩니다. 제거하려면 다음을 실행하십시오.

sudo dpkg-divert --rename --remove /usr/bin/nautilus

전환 할 때 올바르게 처리되지 않는 일부 구성 파일을 제외하고 유사한 방식으로 교체해야하는 다른 파일에 대해 동일한 기술을 적용 할 수 있습니다.


7

가장 장기적인 해결책은 노틸러스 개발자에게 연락하여 공식 노틸러스 코드 패치로 작업하는 것이므로 업데이트 된 버전의 노틸러스가 시스템에 충돌하면 더 이상이 문제를 처리 할 필요가 없습니다.

변경 사항을 시스템에 적용 할 때까지 자체 패치 된 노틸러스 버전을 사용하려는 문제를 해결해야합니다.

가장 쉬운 방법은 패치가 이미 적용된 상태에서 노틸러스 패키지를 생성하고 자동으로 업그레이드되지 않는 방식으로 설치하는 것입니다.

데비안에서 (이 질문의 태그에 따르면) 가장 쉬운 방법은 다음과 같습니다.

apt-get install devscripts
apt-get build-dep nautilus # note, this also pulls in build-essential
apt-get source nautilus
cd nautilus-*
# apply your patch
dch -i
# Set the version number of the new changelog entry to something like x.y.z-a.local,
# where "x.y.z-a" is the version of the package as it existed prior to your patch,
# add a description of the change after the '*', then save and exit the editor
debuild -uc -us -i && sudo debi --upgrade
echo "nautilus hold" | sudo dpkg --set-selections

패치로 새 패키지를 빌드하고 설치 한 다음 더 이상 자동 업데이트되지 않도록 dpkg로 표시합니다.

다음에 업데이트 된 버전의 패키지가 릴리스 될 때 apt는 업데이트 된 버전이 존재하지만 보류 중임을 알려줍니다. 그런 다음 위의 작업을 다시 수행해야합니다.


apt-mark hold packagename패키지를 보관하는 현대적인 방법입니다. (난 내 자신의 만든 dpkg-hold/의 dpkg-unhold에 스크립트를 dlocate사용 apt-mark하는 대신의 dpkg --set-selections스크립트 때문에 적절한 마크의 사용되지 않는하지만 난 여전히 전화를 다른 스크립트가 있습니다. 그들이 년 동안 사용했던 방법과 그들이 다른 사용자들에 의해 작성된 스크립트를 깰 수 제거 dlocate 패키지)
cas

보류 섹션은 man apt-mark말한다 The command is only a wrapper around dpkg --set-selections and the state is therefore maintained by dpkg(1) and not affected by the --file option, 그래서 그것은 사소한 일이라고 생각한다 ;-)
Wouter Verhelst
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.