Category (Click)
개발보드 덕질하기

TrueNAS Nextcloud 1.6.x→2.x 마이그레이션

 차완기 - @8/8/2024, 11:35:00 PM
TrueNAS를 세팅한 후, 외부 파일 공유나 사진 백업 용도로 Nextcloud를 여전히 사용하고 있습니다.
오픈소스 소프트웨어를 오래 사용하다 보면 어느센가 소리 소문 없이 업데이트가 끊기거나, 아니면 메이저 업데이트로 인해 시스템이 고장 나 버리곤 합니다. Nextcloud도 예외는 아니었죠. (물론, 이건 TrueNAS쪽 과실이긴 합니다. )
Nextcloud - Maintenance and Release Schedule [링크]
다행히도 이번 포스팅을 작성하게 된 계기는 후자의 이유입니다.
Nextcloud는 1년에 무려 2~3개의 메이저 버전을 릴리즈하고, 릴리즈일로부터 1년간 지원(maintenance)을 유지하고 있습니다. TrueNAS의 K8s 기반 확장(=Apps) 기능에서 Nextcloud를 공식적으로 지원하고 있기 때문에 TrueNAS SCALE Chart에 이러한 업데이트가 계속 반영되고 있는데요,
지난 5월, 1.6.61 버전을 마지막으로 2.x으로 바뀌더니, Nextcloud의 이후 업데이트를 2.x 버전에서만 반영해 주고 있었습니다. 1.6.61 버전의 Nextcloud 버전은 29.0.0인 반면, 2.0.12버전은 마이너 패치가 적용된 29.0.4이죠. 물론 무지성으로 업데이트 버튼을 눌렀지만, 업데이트에 문제가 있는지 먹통이 되어버렸습니다.
저만 그런 게 아닌 것 같더라고요. 업그레이드 후 먹통이 된다는 사례가 많은 와중에 별다른 해결 방안을 찾지 못해, 스냅샷을 이용해 되돌린 후 그대로 지금까지 사용하고 있었습니다. 2.x 버전으로 변경되며 디렉토리 구조가 바뀌었는데, 이전 버전에서의 호환성 옵션이 잘 작동하지 않거나 권한 관련 문제가 아닌가 싶었습니다.
당장 사용에는 지장은 없지만, 앞으로 있을 업데이트가 반영되지 않는 점, 무엇보다 클라이언트 프로그램에서 업데이트하라는 알림이 계속 나와 이참에 마이그레이션을 해보기로 했습니다.
본 포스팅은 공식 Docs를 기반으로 유저 파일의 마이그레이션을 위한 약간의 트윅을 줬습니다. (계정은 마이그레이션 하지 않고 수동 생성)

2.x 버전 Nextcloud 설치

최소 3개의 데이터셋을 추가해야 합니다.
appdata: Nextcloud의 동작을 위한 파일을 저장
pgdata: 데이터베이스 저장
pgbackup: pgdata 백업 (옵션)
userdata: 데이터 저장
마이그레이션을 하기 앞서, 컨테이너가 정상적으로 작동하는지 확인하기 위해 모조리 새로운 데이터셋을 만들었습니다. 여기서 pgbackuppgdata 자체를 백업하고 있기 때문에 생략했습니다.
이때 생성되는 데이터셋의 프리셋(Dataset Preset)은 Apps로 설정합니다.
main/nextcloud_dataset은 기존 데이터입니다.
위 사진과 같이 3개의 데이터셋을 생성했습니다. 시스템과 관련된 데이터셋은 SSD 풀(app)에, 고용량이 필요한 데이터셋은 HDD 풀(main)에 생성했습니다. (Permissions 탭에서 apps 유저에 권한이 있는지 꼭 확인합니다. 권한 잘못 설정해서 한참을 삽질했습니다 )
Nextcloud 설치 과정에서 앞서 생성한 데이터셋을 선택합니다.
Nextcloud AppData Storage → appdata
Nextcloud User Data Storage → userdata
Nextcloud Postgres Data Storage → pgdata
Nextcloud Postgres Backup Storage → ixVolume
위와 같이 데이터셋을 연결했습니다.
그 후 부팅하면..
잘 됩니다. 잘 되야죠 물론 ㅋㅋ

데이터 마이그레이션

1.6.x2.x는 데이터를 저장하는 경로가 다르기 때문에 경로를 맞추어줄 필요가 있습니다. 기존에는 data 디렉토리 아래에 각 유저별로 데이터를 담는 디렉토리가 있었는데요, 최신은 data 디렉토리 없이 유저 디렉토리가 모두 최상위 디렉토리로 나와있습니다. 기존의 로그나 권한, 유저 설정이 섞일 가능성 때문에 디렉토리 구조를 수정하기보다는, 잘 작동하는 2.x에 유저 데이터만 복사해 넣기로 했습니다.
터미널에 접속한 후 cp 명령을 날렸다가 시간이 너무 오래 걸리길레 스냅샷을 활용했습니다. 직전 스냅샷을 새 데이터셋으로 복제한 후 ACL 권한을 수정했습니다. (참고로 데이터셋 이름은 nextcloud_new_userdata입니다.)
다시 앞서 생성한 2.x 버전으로 돌아와 기존의 유저를 모조리 생성한 후, 하나씩 로그인하며 마이그레이션 과정에서 옮겨질 기존 데이터에 초기 데모 파일이 더해지는 것을 피했습니다. (새로 생성된 계정에 처음 접속하게 되면 데모 파일이 자동으로 생성됩니다)
그 후 터미널에 접속해 스냅샷으로 복사한 데이터셋에서 data 디렉토리 아래의 유저 디렉토리를 모조리 상위 디렉토리로 옮겨주었습니다. (주황색 표시) 남은 찌꺼기인 data 디렉토리는 삭제했습니다. 다음으로, 빨간색으로 표시한 시스템 파일들을 2.x 버전의 데이터셋에서 복사해 왔습니다.
마지막으로 Nextcloud의 Nextcloud User Data Storage를 복사한 데이터셋으로 변경했습니다.
$ occ files:scan -- (유저 아이디)
Bash
복사
데이터셋의 파일을 복사한 것만으로는 Nextcloud에 반영되지 않습니다. 관리 모드로 들어가 파일을 한번 스캔해 주어야 하는데요, 컨테이너에 접속한 후 위 명령을 입력하면 됩니다.
잘 돌아왔네요!

기존 데이터셋 삭제

(@8/11/2024 추가)
신규 버전이 며칠 간 문제없이 작동하는 것을 확인해, 더 이상 사용하지 않는 컨테이너와 데이터셋을 삭제했습니다.
복제된 데이터셋은 원본을 의존하고 있기 때문에 복사된 데이터셋을 Promote한 후 원본을 삭제할 수 있습니다.

마무리

TrueNAS가 아무래도 취미용으로 자주 사용되다 보니 NAS 하드웨어를 뽑아먹기 위해 여러 컨테이너를 올리는 것이 일반적입니다. 문제는 이런 특정을 가장 잘 이해하고 있을 iX에서 관리하는 컨테이너에서 이런 버전 호환 문제가 생기니 조금 당황스러웠습니다. (나름 하위 버전 호환 기능을 만들어두긴 했지만 무용지물이었죠 )
예전까지만 해도 NAS에 DNS 서버, 역방향 프록시 서버, ACME 등 이것저것 많이 설치해 사용하다가 너무 위험하다는 생각이 들어 최근에는 NAS는 파일과 관련된 기능만 사용 중인데요, 이참에 Nextcloud 역시 다른 하드웨어로 빼버려야 하나 생각 중입니다.
한잔해. 지금은 잘되잖아?
뭐.. 언젠간 하겠죠? ㅋㅋ