GitLab의 테마/컴포넌트를 설치하거나 업데이트할 때 500 오류 발생

Masonry Image Gallery 토론을 이어갑니다:

제목이 모든 것을 말해 주는 것 같습니다.

2.9.0.beta11(208d22cfc2)로 재빌드한 후, GitLab의 모든 테마나 컴포넌트를 설치하거나 업데이트하려고 하면 500 오류가 발생합니다.

이것은 버그인가요, 아니면 어떤 종류의 보안 문제인가요? 제 설정은 특별히 이상한 점이 없고 꽤 기본적인 구성입니다.

아래와 같은 문제가 관련이 있을 수 있습니다. 테마 하나를 설치하려고 테스트했을 때 발생했습니다:

Message (2 copies reported)

Failed to process hijacked response correctly : RemoteTheme::ImportError : Error cloning git repository, access is denied or repository is not found

Backtrace

/var/www/discourse/lib/theme_store/git_importer.rb:81:in `raise_import_error!'
/var/www/discourse/lib/theme_store/git_importer.rb:148:in `rescue in clone_http!'
/var/www/discourse/lib/theme_store/git_importer.rb:145:in `clone_http!'
/var/www/discourse/lib/theme_store/git_importer.rb:93:in `clone!'
/var/www/discourse/lib/theme_store/git_importer.rb:18:in `import!'
/var/www/discourse/app/models/remote_theme.rb:82:in `import_theme'
/var/www/discourse/app/controllers/admin/themes_controller.rb:106:in `block in import'
/var/www/discourse/lib/hijack.rb:56:in `instance_eval'
/var/www/discourse/lib/hijack.rb:56:in `block in hijack'
/var/www/discourse/lib/scheduler/defer.rb:94:in `block in do_work'

Env

HTTP HOSTS: foorumi.katiska.eu
4개의 좋아요

GitLab을 말씀하시는 건가요, 아니면 GitHub을 말씀하시는 건가요? 이전에 정상적으로 작동하던 테마 컴포넌트인가요? 일시적인 네트워크 문제일 수도 있습니다. 접근하려는 테마가 삭제되었거나 보호된 상태일 수도 있나요?

공개된 테마라면 다른 사용자가 접근을 시도해 볼 수 있도록 URL을 공유해 주실 수 있습니다.

GitLab입니다. GitHub 기반의 것들은 아무 문제 없습니다.

네. 그리고 zip 파일로 설치하면 여전히 작동합니다. 현재 문제는 Discourse에서 GitLab에 연결하는 것입니다.

아니요, 아니요.

물론입니다. Masonry Image Gallery를 시도해 보실 수 있습니다. 링크는 첫 번째 게시물에 있습니다.

제가 아는 것은 없지만, URL 정규화(또는 유사한 것)가 gitlab을 github으로 변경하고, 그래서 저장소가 누락되는 것 같다는 직감이 듭니다.

2개의 좋아요

거의 확실하게 SSRF 보호 수정 때문일 것입니다.

Gitlab은 https://gitlab.com/silentboatman/discourse-masonry-image-gallery에 대한 git clone을 https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/ (원문 그대로, .git/로 끝남)로 301 리다이렉트합니다. 하지만 git는 -c http.followRedirects=false 옵션으로 호출되므로 실패합니다.

저장소 URL로 https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/를 직접 입력해도 작동하지 않습니다. git 외부에서 요청할 경우 리다이렉션이 반대 방향으로 이루어지기 때문에 FinalDestination.resolve(@uri.to_s)에 의해 https://gitlab.com/silentboatman/discourse-masonry-image-gallery로 되돌려지기 때문입니다. 믿기 어렵겠지만, Gitlab은 https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/를 https://gitlab.com/silentboatman/discourse-masonry-image-gallery로 302 리다이렉트합니다.

수정: GIT_CURL_VERBOSE=1을 사용하면 클로닝 시 Git이 info/refs?service=git-upload-pack을 추가하는 것을 볼 수 있었습니다. 따라서

GET /silentboatman/discourse-masonry-image-gallery/info/refs?service=git-upload-pack HTTP/2

이

location: https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/info/refs?service=git-upload-pack

으로 이동합니다.

5개의 좋아요

자, 이제 대 질문™을 던져 보겠습니다. 최근에는 무엇이 변했나요? 그리고 우리(여기서 '우리’란 저를 제외한 모든 사람을 의미합니다)는 어떻게 그 문제를 해결할 수 있을까요?

1개의 좋아요

누군가 확인 중입니다. :slight_smile: :+1:

5개의 좋아요

(또한, 저장소를 추가할 때 오류가 발생하는 대부분의 동작에서 실제 오류 메시지 대신 “500 Server Error” 텍스트만 표시되는 팝업이 나타나는 것 같습니다)

1개의 좋아요

아래의 수정이 이 문제를 해결할 것으로 생각했지만, 여전히 동일한 오류가 발생합니다.

현재 2.9.0.beta11 +143 (795687160d) 버전을 사용 중입니다.

@daniel 이 수정은 이 주제에서 언급된 문제와 관련이 있나요?

1개의 좋아요

네, 해당 커밋은 gitlab에서 데이터를 가져오는 문제를 수정하기 위한 것이었습니다. 방금 직접 테스트해 보니 이제 SSH와 HTTP를 통해 모두 gitlab 저장소를 클론할 수 있습니다. 정확히 어떤 작업을 수행할 때 문제가 발생하는지 좀 더 자세히 알려주실 수 있을까요?

@Jagster, 이 문제는 아직 발생하고 있나요?

4개의 좋아요

beta12로 업데이트한 후에도 이 문제가 발생하는 것을 확인했습니다.

URL 형식이 중요한 것 같습니다.

https://gitlab.com/silentboatman/discourse-masonry-image-gallery/ → 오류
https://gitlab.com/silentboatman/discourse-masonry-image-gallery → 오류
https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git → 작동

즉, 첫 두 가지 형식 중 하나를 가진 테마 구성 요소를 삭제한 후 다시 추가하고, 설정을 복사해야 합니다. 하지만 그 두 가지 형식도 기본적으로 지원되면 훨씬 좋겠습니다.

6개의 좋아요

네, URL 끝에 .git를 추가하면 작동하는 것 같습니다. 잘 발견하셨네요!

좀 더 자세한 내용을 공유합니다. discourse-masonry-image-gallery를 설치했는데, Discourse를 업데이트한 후 다음과 같은 오류 메시지가 나타났습니다.

예시 URL이 .git로 끝나지 않기 때문에, 처음에는 URL 끝에 .git 없이 설치했던 것으로 기억합니다.

또한 gitlab에서 다른 테마도 (.git 없이) 설치해 보았지만, 다음과 같은 메시지가 떴습니다.

위의 테스트에서는 discourse-agora-theme도 설치해 보았는데, 이 역시 공개된 gitlab 저장소입니다.

3개의 좋아요

beta12 버전과 .git를 함께 사용하니 정상적으로 작동합니다. .git 없이 테스트해 보지는 않았습니다.

2개의 좋아요

이 커밋으로 해당 문제가 수정되어야 합니다:

7개의 좋아요

네, 그 방법으로 이 문제가 해결되었습니다. 감사합니다!

2개의 좋아요