우리는 사용자 정의, 백포트 및 패치 패키지가 포함된 Debian Jessie 저장소의 포크를 호스팅하고 있습니다. 각 제품 릴리스는 이 저장소에서 ISO 설치 프로그램을 생성합니다. 이제 몇 달 전 버전에서 이번 달 버전으로의 업그레이드가 실패하고 있음을 확인했습니다. 이 문제는 /etc/sysctl.d/ 아래의 사용자 정의 패키지 구성 파일이 올바르지 않기 때문에 발생합니다. 이로 인해 업그레이드 중에 systemd(procps로 인해) 구성이 실패합니다. 사용자 정의 패키지가 수정되었지만 업그레이드 중에 이 패키지의 구성은 시스템 구성 후에 발생합니다.
한 가지 가능성은 systemd를 패치하고 사용자 정의 패키지를 종속성으로 추가하는 것입니다.
또 다른 아이디어는 debian/control 파일에서 교체/충돌을 사용하는 것입니다. 하지만 업그레이드 순서에 대한 문서를 찾을 수 없는 것 같습니다. apt-get 업그레이드는 패키지를 교체하여 시작한 다음 다른 패키지를 계속 업그레이드합니까?
systemd 전에 사용자 정의 패키지를 구성하는 방법에 대한 다른 아이디어가 있습니까? (전체 업그레이드를 시작하기 전에 직접 수동으로 설치할 필요가 없습니다)
답변1
전체 업그레이드를 시작하기 전에 수동으로 설치할 필요가 없습니다.
아파트에는 그런 시설이 없기 때문에 어렵습니다.
일반적으로 업그레이드를 수행할 때 dpkg가 호출되어 다운로드한 모든 패키지를 설치하고, 의미 있는 그룹으로 분할하고, 모두 압축을 푼 다음 구성합니다(이것은 매우 간단하며 실제로 그 이상의 작업을 수행합니다). 그리고 패키지 구성이 실패할 때마다 , 아무것도 구성되지 않을 때까지 다른 패키지 구성을 시도합니다. 따라서 이중 업그레이드를 수행할 수 있습니다. 첫 번째는 dpkg가 종료될 것으로 예상하고 두 번째는 프로세스를 완료합니다.
그러나 나는 이것을 믿지 않으며 권장되는 접근 방식은 관련 패키지를 독립적으로 업그레이드하고( 를 사용하여 install package
) 업그레이드를 수행하는 것입니다. upgrade package-
일반적으로 설치하기 전에 제거가 우선하므로 패키지 제거를 먼저 사용할 수도 있습니다 .
한 가지 가능성은 systemd를 패치하고 사용자 정의 패키지를 종속성으로 추가하는 것입니다.
이것은 또 다른 옵션입니다. systemd에 연결하면 Depends: package >= version
dpkg가 이 패키지를 먼저 설치합니다. 그 외에는 추천하지 않는 것 같아요.
답변2
따라서 구성 파일 오류로 인해 systemd가 업그레이드될 때 오류를 발생시키는 오래된 사용자 정의 패키지가 있습니다.
주어진관리자 스크립트의 실행 순서, 패키지의 새 버전이 개입할 수 있는 가장 빠른 시간은 preinst upgrade
새 패키지의 압축이 풀리기 전, 즉 postinst configure
해당 단계 이전에 발생하는 단계입니다. 새 파일로 preinst upgrade
문제가 있는 파일을 수정하거나 다른 위치로 이동한 다음 postinst configure
스크립트를 사용하여 남아 있는 문제를 수정할 수 있습니다.
이는 APT가 동일한 실행에서 패키지와 시스템을 업그레이드하기로 결정한 경우에만 작동합니다. 그 밖에 수행해야 할 작업에 따라 APT가 systemd를 완전히 업그레이드한 다음 패키지를 완전히 업그레이드하기로 결정할 수도 있다고 생각합니다. 패키지의 새 버전에 대해 시스템 종속성을 선언하면 이를 방지할 수 있습니다. Depends:
이렇게 하면 postinst configure
패키지가 먼저 실행됩니다.Breaks:
systemd와 이전 버전의 패키지의 관계 사실 Breaks:
문제의 모든 것이 공식 데비안 패키지라면 그럴 것이라고 생각합니다. 문제는 새로운 systemd 패키지(또는 이전 패키지이지만 너무 늦었습니다)를 수정해야 한다는 것입니다.