Harbor를 ARM으로 Build 해보자

Sbae·2024년 4월 2일
0
post-thumbnail

현재 kubernetes 자동화 설치 툴을 개발 중입니다.

요구사항

  • Harbor를 ARM 서버에 설치해주세요!!

지원을...안해?

Harbor가 공식 지원을 하거나 할 계획이 당연히 있겠지!!
라고 생각하고 1분만에 험난한 길이 예상되어 버렸다.

왜 안해줘...? 해줘... 해줘...

이미 나랑 똑같은 사람은 많다

해당 글을 찾은 후에 설치 후 테스트까지 돌리고
완벽하게 작동하는 것을 본 후 행복회로가 불타기 시작했다.

내가 안해도 되는거지?... 그냥 있는거 써도 되는거지?... 그렇지????

세상은 차갑다

행복과 절망은 한끝차이라했나?
해당 이미지가 있는 github에 접속해보고 해당 패키지를 본 후
행복회로는 재가되고 절망회로가 돌아가기 시작했다.

내가 지금 써야되는 버전은 v2.7.4인데 없네?... 어라?...

내가 해야지

  • Octohelm github
    • 남이 하는게 쉬워보이면 그건 그 사람이 잘하는 것이다

이 사람의 github action을 보면 따라하기는 쉬워보였다. 내가 직접하기 전 까진

해당 action 파일과 repository history를 보면서 빌드하는 방법을 이해한 후
이거는 파일을 복붙하는 과정이 빠르겠다라고 판단하고 작성하기 시작했다.

끄적끄적 template로 파일들 복붙해놓고 각각 로직에 맞춰서 변환해주고
실행했더니 초록불만 뜨길래 잠깐이라도 난 사실 개쩌는거 아닐까 라고 생각한 범부였다.

하지만 분명히 github packages에 생성 되었어야 할 notary-signer-photon, notary-server-photon이 없다? 왜?

Notary action error

오류가 떠도 초록불이 떠서 날 설레게하는 Github 당신은 대체

해당 오류가 나는 부분을 가서 디렉토리 권한 및 소유자, 변수는 제대로 찍히는 지를 테스트를 해봤는데 action이 작동하는 계정은 runner라는 계정인데 binary라는 디렉토리를 root로 만들어놓고 docker cp로 복사하려니 생기는 오류였다.

sudo chown $(whoami):$(id -gn) binary로 디렉토리 소유자를 변경 후 다시 돌리니까 이미지가 잘 생성된 것을 확인했다.

아직 한 발 남았다

이제 잘 만들어진 이미지를 잘 패키징해야하는 일만 남았다.

harbor의 Makefile에 기본적으로 package_offline이라는걸 보고 이걸 사용하도록 했다.

- name: Docker packaging Offline installer
  env:
    version: ${{ env.tag }}
  run: |
    # Run the 'package_offline' command in ./harbor/Makefile
    cd ./harbor
    sed -i 's/package_offline: update_prepare_version compile build/package_offline: update_prepare_version/' Makefile
    sed -i 's/PKGVERSIONTAG=dev/PKGVERSIONTAG='"${version}"'-arm64/' Makefile
    sed -i 's/VERSIONTAG=dev/VERSIONTAG='"${version}"'/' Makefile
    sed -i 's/TRIVYFLAG=false/TRIVYFLAG=true/' Makefile
    sed -i 's/NOTARYFLAG=false/NOTARYFLAG=true/' Makefile
    sed -i 's/CHARTFLAG=false/CHARTFLAG=true/' Makefile

    make package_offline

이런 식으로 꺼져있는 옵션은 전부 true로 변경하고 묶는 과정에서 compile, build 과정은 필요없으니 제외하도록 했다.

해당 과정을 완료하면 harbor-offline-installer-v2.7.4-arm64.tgz 파일이 안에 생기는데 해당 파일을 NAS에 업로드 하면 끝!

- name: Synology Upload Action
  uses: bungabear/synology_upload_action@v1.0.0
  with:
    host: ${{ secrets.NAS_DOMAIN }}
    username: ${{ secrets.NAS_ID }}
    password: ${{ secrets.NAS_PW }}
    filepath: ./harbor/harbor-offline-installer-${{ env.tag }}-arm64.tgz
    uploadpath: ${{ secrets.NAS_PATH }}
    filename: harbor-offline-installer-${{ env.tag }}-arm64.tgz
    overwrite: true
    createparent: true

끝맺음

새롭게 생기는 일에 대해서 충분히 해보고 안된다고 판단하면 뭐라할 사람이없다.
여러 검색 사이트를 뒤져보고(바이두까지 갔었다) 방안을 생각해 본 뒤 자신의 역량에 벗어나면 도움을 받아보면 어느정도의 일은 해결 되는 것 같다.

근데 기본적으로 복붙할 template 파일들이 없었다면 나혼자는 못하지 않았을까?...

profile
끄적이는 일반인

0개의 댓글