gomumu-web-installer

메인 인덱스 | bob-yamong | GitHub

이 문서는 gomumu-web-installer 레포를 실제 코드 기준으로 다시 읽은 메모입니다. 현재 소스만으로 제 직접 구현 범위를 단정하지는 않겠지만, 설치기 자체는 단순 빌드 스크립트가 아니라 브라우저 입력과 SSE 로그 스트리밍을 붙인 설치 오케스트레이터로 읽히는 레포입니다.

한 줄 소개

gomumu-web-installer는 Go 표준 라이브러리로 만든 웹 설치기이며, gomumu 설정 다운로드부터 microk8s 준비, BPF LSM 활성화 확인, Kubernetes 배포 적용까지를 브라우저 기반 흐름으로 묶습니다.

기술 스택

  • Go
  • net/http, html/template
  • Server-Sent Events
  • Bash 기반 설치 단계 실행
  • microk8s, kubectl, Docker registry 시크릿

코드 기준으로 확인한 구조

  • main.go/, /start, /events 세 개의 HTTP 핸들러를 중심으로 동작합니다.
  • 설치 로그는 logChanclients 맵으로 관리하고, /events에서 text/event-stream 형태로 브라우저에 실시간 전송합니다.
  • 입력 폼은 html/template로 렌더링되며, DOCKER_REGISTRY_SERVER, INSTALLER_USERNAME, INSTALLER_PASSWORD, OPERATOR_NAMESPACE를 받습니다.
  • 실제 설치는 Go 코드 안에 직접 배포 로직을 적는 대신, 쉘 명령을 순차 실행하는 방식으로 구성돼 있습니다.
  • 초기 단계에는 gomumu 설정 다운로드, microk8s 설치, 그룹 추가, kube 디렉터리 준비, readiness 대기가 포함됩니다.
  • 커널 검사 단계에서는 CONFIG_BPF_LSM=y 여부와 /sys/kernel/security/lsm 안의 bpf 활성 상태를 확인하고, 필요하면 GRUB의 lsm=...bpf 설정을 다룹니다.
  • 이후 Docker registry 인증 시크릿 regcred를 기본 네임스페이스와 operator-system 네임스페이스에 만들고, kubectl kustomize gomumu/operator/config/default | kubectl apply -f -yamong.yaml 적용으로 실제 Kubernetes 배포를 이어 갑니다.
  • build.sh는 단순히 go build -o web_installer main.go를 수행하므로, 이 레포의 핵심은 빌드가 아니라 설치 순서 orchestration에 있습니다.

주요 파일과 흐름

  • main.go: 웹 입력, 로그 브로드캐스트, 설치 단계 실행을 한 파일에 모은 엔트리포인트입니다.
  • build.sh: 설치기 바이너리를 빌드하는 가장 얇은 스크립트입니다.
  • 설치 흐름 안의 download-release 호출은 release-downloader.md와 연결됩니다.
  • 실제 배포 대상은 gomumu.md의 operator/runtime 구성입니다.

포트폴리오 메모

이 레포는 “Go 웹 서버 하나 더 만들었다”보다 “설치 경험을 웹 입력과 실시간 로그까지 포함한 배포 절차로 감쌌다”는 점에서 설명 가치가 있습니다. 현재 소스만으로 제 직접 구현 범위를 단정하진 않겠지만, 설치기라는 표면 아래에서 커널 조건, 레지스트리 인증, Kubernetes 적용을 한 번에 연결하려는 의도가 분명하게 보입니다.