createrepo를 실행하는 동안 yum update를 실행하면 경쟁 조건이 발생합니까?

createrepo를 실행하는 동안 yum update를 실행하면 경쟁 조건이 발생합니까?

우리 팀에는 로컬로 호스팅되는 yum 저장소가 있습니다. 빌드 프로세스가 끝나면 Jenkins는 다음을 수행합니다.

  • 새 RPM 생성
  • 새 RPM을 yum 서버의 rpm이 포함된 디렉터리로 이동합니다.
  • yum 저장소에서 createrepo를 실행하세요.

위 단계 중 하나를 수행하는 동안 누군가 yum update달리고 있으면 어떻게 됩니까? 뿐만 아니라:

  • createrepo가 ​​저장소를 업데이트하는 동안 yum update를 실행하면 어떻게 되나요?
  • 이전 버전의 RPM에서 yum update를 실행했지만 createrepo가 ​​새 RPM 버전을 제거하고 추가하면 어떻게 되나요?

도움을 주시면 감사하겠습니다. 감사해요!

답변1

아니요, 경쟁 조건이 아니라 일관성 없는 데이터로 인한 클라이언트 오류입니다.

저장소에는 그 안에 포함된 프로젝트/패키지 목록이 포함된 파일이 있습니다. 이 파일은 저장소 생성/업데이트가 끝나면 생성/업데이트됩니다.

클라이언트가 저장소를 열고 쓰는 동안 콘텐츠 파일을 읽으면 yum오류와 함께 종료됩니다.

파일이 작성되지 않았지만 저장소 내용을 변경하는 경우 데이터가 일관되지 않을 수 있습니다. yum콘텐츠 파일의 파일 참조를 읽을 수 없기 때문에 클라이언트가 종료됩니다.

문제를 최소화하려면 저장소 복사본에서 작업할 수 있습니다(크기에 따라 다름).

# rm -fr newrepo oldrepo
# rsync -ua repo/ newrepo/
# cd newrepo
(then update this copy or the repository)
# cd ..
# mv repo oldrepo; mv newrepo repo
# rm -fr oldrepo

이렇게 하면 변환 시간이 짧아지지만 클라이언트측 오류를 완전히 방지할 수는 없습니다.

관련 정보