
systemd-240에는 jackdbus에 영향을 미치는 버그가 있어 전체 오디오 설정이 중단됩니다. 버그는 systemd-241에서 수정되었습니다. systemd-241로 업그레이드할 수 있는 방법이 있나요?
답변1
또 다른 옵션은 systemd-240에 패치가 완전히 적용된다는 가정 하에 패치를 적용하여 systemd-240을 다시 컴파일하는 것입니다.
가능하다면 정말 간단합니다. 우분투에서 이미 사용하고 있는 패치 목록에 패치를 추가하기만 하면 됩니다.
답변2
부인 성명
나는 이 방법이 문제에 대한 좋은 해결책이라고 주장하는 것이 아닙니다. 자신의 책임 하에 시도해 보십시오.
게다가 Ubuntu 19.10은 systemd 242와 함께 제공되므로 Ubuntu 19.10으로 업그레이드할 계획이라면 이를 시도할 이유가 없습니다.
현재 설치에 대한 "수정"
기본적으로 그것은solsTiCe의 답변: 배포판의 소스를 패치합니다. 그러나 전체 systemd
시스템을 다시 설치하지 마십시오. 실행 파일 만 교체하십시오 . systemd
패치는 . systemd
이렇게 하면 현재 설치를 크게 망치지 않을 것이라고 확신합니다.
솔루션에 대한 나의 경로는 설명할 것처럼 "선형"이 아니었습니다. 처음에는 원래 시스템 v240을 패치하고(v241의 올바른 비트를 사용하여) 이를 빌드하고 사용자 정의 설치하려고 했기 때문입니다. 그런 다음 나는피빌더.
다음 설명이 적혀있습니다마치나는 그것을 직설적으로 얻었다. 단계를 정리하는 과정에서 세부사항을 잊지 않았으면 좋겠습니다.
따르다이 하우투설치하기 위해서피빌더, 빌드 환경을 준비하고( sudo pbuilder create --distribution disco --debootstrapopts --variant=buildd
), 소스를 다운로드합니다( apt-get source systemd
). 세 개의 파일(두 개의 아카이브와 하나의 .dsc
)과 디렉터리를 얻습니다 . 따라서 현재 디렉터리의 파일 오염을 방지하기 위해 새로운 폴더에서 apt-get 명령을 실행하고 싶을 것입니다.
그런 다음 복제시스템화된 github 저장소태그 v241( )을 확인하세요 git checkout tags/v241
.
이제 diff -u
Ubuntu src/core/main.c
와 v241 태그 중 하나 사이에 패치를 얻으려면 my.patch
. memlock 제한보다 더 많은 영향을 미칠 수 있는 항목을 제거하고(열린 파일 설명자 수에 대해서도 유사한 수정이 수행되었으며 이 내용도 그대로 유지했습니다) 헤더를 다음과 같은 형식으로 올바르게 가져오기 위해 편집했습니다. :
--- a/src/core/main.c ....
+++ b/src/core/main.c ....
a
물론 대신에 b
다른 이름을 사용할 수도 있습니다.
systemd-240
( 을 실행하여 얻은 apt-get source systemd
) 폴더 안에는 debian/patches
. 거기에 복사 my.patch
하고 끝에 파일 이름을 추가하십시오 debian/patches/series
.
패키지( sudo pbuilder build systemd_240-6ubuntu5.dsc
)를 빌드해 보십시오. 이것은 또한 종속성을 가져와야 하며 모든 것이 괜찮다면 .deb
in /var/cache/pbuilder/result/
; 하지만 그것은 '원본'이다.
디렉토리를 변경하고 systemd-240
실행하십시오 pdebuild --use-pdebuild-internal
.
시간이 좀 지나면… 안에 /var/cache/pbuilder/result
새로운 .deb
(이전과 같은 이름…) 것이 있는데 이번에는 패치된 것입니다. 그렇게 하면 선이 보일 것입니다
tar -tJf /var/cache/pbuilder/result/systemd_240-6ubuntu5.debian.tar.xz |grep my.patch
패치 이름을 지정 my.patch
하고 패치 tar.xz
이름을 그렇게 지정한 경우에 한합니다.
이제 .deb
in a-folder
( dpkg-deb -R systemd_240-6ubuntu5_amd64.deb a-folder
)의 압축을 풀고 루트 복사본 a-folder/lib/systemd/systemd
으로 /lib/systemd/
. 원본을 백업하는 것을 잊지 마세요 /lib/systemd/systemd
(이름을 로 변경했습니다 __systemd
). 문제가 발생하면 복구 셸에서 새 것을 이전 것으로 교체할 수 있습니다.
재부팅 후 다음 ulimit -l
과 같이 말해야 합니다 unlimited
(구성에 따라 다르지만 오디오 그룹의 사용자에게 기대하는 내용이기 때문에 지금까지 읽었다고 가정합니다).
자원
- 시스템 v240 패치; 나는 이것을 컴파일하고 시도하지 않았습니다.~할 수 있다원래 릴리스에서 업그레이드하고 싶다면
systemd
최신 태그를 선택하여 최신 버전을 사용하는 것이 좋습니다. 예를 들어 오늘은 다음과 같습니다.v243. - 패치는 다음과 같습니다github의 요지, 이것은 Ubuntu
systemd
소스 버전 240-6ubuntu5.7에 적용되었습니다.
이 패치는 이전 섹션에서 설명한 대로 생성되지 않습니다.차이가 났다이미 패치된 우분투 소스는 main.c
다음에서 찾을 수 있습니다.앞선 지점. 최종 결과는 크게 다르지 않아야 합니다.
최종 메모
이 문제를 처음 발견했을 때, 때로는 구성이 괜찮은지 확인한 후 Ubuntu가 문제를 해결할 때까지 기다리기로 결정했습니다(systemd의 버그를 추적할 수 없었습니다).
하지만 오늘은 제가 정말 하고 싶었던 일을 할 수 없게 되었기 때문에 이제 뭔가를 해야겠다고 결심했습니다.
여기~에코멘트 7내가 찾은 곳이야시스템 버그처음으로 언급한 후 이 질문을 발견했습니다.
몇 시간 후에 저는 이틀 전에 발표된 19.10 발표도 보았습니다.
"패키지 제어 시스템"에서 실행 파일을 교체하는 것이 반드시 좋은 생각은 아니라는 점을 지적할 필요는 없습니다. 하지만 이 경우에는 괜찮습니다.