archived-old-homelab
(Project) HomeLab Cluster - OS Setting (2)
Index
- Introduction
- Problem
- Ubuntu
- Boot USB with Rufus
- BIOS
- Ubuntu Installation
- After Installation
- Conclusion
Introduction
안녕하세요 Yureutae입니다. 저번 포스팅에서는 HomeLab Cluster 아키텍처 구성 및 물리적 구성요소를 구입(?)했습니다.
이번 포스팅에서는 OS 및 기본 네트워크 환경을 세팅하려합니다.
저번 포스팅이 운좋게도 써핏에 큐레이트되어 많은 지인분들이 dm을 주셨습니다. 앞으로 더 열심히 시리즈를 포스팅하고 어느정도 쌓이면 링크드인 같은 곳에도 PR용으로 업데이트하려합니다. (감사합니다 ㅎㅎ)
이번 포스팅부터 한 3개의 포스팅은, 어떻게 보면 CS 기초에 가까울 수도 있는 내용일 것 같습니다. 저는 학부생 시절 Computer System 과목을 상당히 대충 들었었는데요, 프로젝트를 진행하면서 상당히 반성 중입니다😭. 한동안 클라우드 네이티브 기술에 너무 의존한 편인 것 같기도 합니다….
하지만 프로젝트이고 직접 돈을 쏟아붓기 때문에 고민하거나 느꼈던 점이 있다고 생각해요. 특히 다음에 작성할 포스팅이 그런 편입니다.
앞으로도 제가 HomeLab Cluster을 만들면서 고민했던 점 및 그에 대한 해결방법 등에 초점을 맞춰 포스팅을 봐주시면 감사하겠습니다🙇♂️
(이런 부분을 제외하면 다른 분들의 더 질 좋은 포스팅이 많다고 생각합니다 ㅋㅋ)
여튼 각설하고 본 내용 소개 드리도록 하겠습니다.
(본 포스팅은 EC2가 아닌 직접 홈 네트워크 및 싱글 노드 홈 서버를 구축하시려는 분께 추천합니다. 특히 집에 먼지가 쌓이고 있는 노트북, 데스크탑, 라즈베리파이를 보유하신 분들)
Problem
Mini PC의 장점 중 하나는, 구입 즉시 Windows 11 Pro가 깔려있다는 것 입니다. 어차피 요즘 Windows 설치 난이도 및 비용이 큰 편도 아니지만 free-dos 상태에서 굳이 번거로운 일을 하기가 싫은 와중에 너무 혜자스러운거죠.

하지만 2가지 문제가 있어요.
첫번째는 엔지니어 관점에서 이것 저것 커스텀하고 갖고 놀기에 Windows는 “절대” 좋지 않기 때문입니다. 약 3년간의 경험(프로젝트, 멘토링, 강의 등등)으로 Windows는 저와 연을 끊은 상태입니다. 멘티 및 핸즈온 청자, 클라이언트 분 환경에서의 문제 발생 이유 90%가 Windows이고 CLI Command가 Linux 및 Mac과 너무 상이하며 WSL이나 통일되지 않는 Bash 쉘 등으로 스트레스를 너무 유발시켰기 때문입니다. 전 이제 ctrl보다 command가 편할 지경입니다…암튼 Mac 최고!
두번째는 중국산 Mini PC들의 고질적인 보안문제입니다. 제가 Mini PC 구입 후 한 3일 뒤에 알리 발 Mini PC들에서 스파이웨어 이슈가 터졌습니다. 전 몇년 간 방치하던 문제없는 Microsoft 계정을 사용했으나 다른 분들은 해당 Windows에 본 Microsoft 계정을 사용해서 곤란한 상황을 겪는 것 같았습니다.
저도 이 이슈를 보고 Reddit의 온갖 포스팅을 뒤지고 보안 검사 돌리고 Wireshark로 이상 트래픽이 있나 감시해봤습니다. 보안 관련 지식이 많진 않지만 불량 OS로 인한 이슈가 맞다는 결론을 내렸습니다.
(Reddit에 보안 전문가 분이 제 서버와 동일한 제조사의 것을 가지고 있고 BIOS 감염까지 걱정하여 검사해본 결과, BIOS는 문제가 없었다고 합니다. BIOS까지는 뒤집어 엎을 순 없으므로 집단지성을 좀 신뢰해보렵니다 ㅋㅋㅋ)

Ubuntu
저는 데비안 계열에 익숙치 않아서 자주 쓰는 Ubuntu 22.04 LTS 버전을 설치했습니다.
GUI 환경도 가끔 모니터 연결해서 사용할 것 같아,
- Master Node: Ubuntu 22.04 Desktop Version
- Worker Nodes: Ubuntu 22.04 Server Version
으로 구성했습니다.
OS 이미지는 https://ubuntu.com/download 에서 환경에 맞게 다운로드하면 됩니다.
당연하겠지만 저는 64bit에 맞는 버전을 다운했습니다.

Boot USB with Rufus
OS 설치의 시작은 부팅 디스크를 만드는 거죠. 요즘은 디스크를 쓰기보다는 용량이 넉넉하고 저렴한 USB를 사용합니다.
예전에는 그냥 인터넷 검색해서 시키는대로 생각없이 OS 설치를 진행했었는데, 이제는 모든 작업 하나하나애 제 돈과 시간이 쓰여지기 때문에 이 과정을 공부해보았습니다. 여기서는
영구 파티션, 파티션 구성, 파일시스템, 클러스터 크기등의 옵션이 궁금했습니다.

다운로드 받은 OS 이미지를 USB에 단순히 넣어서는 부팅이 되지 않습니다. USB에도 파일시스템을 구성해줘야 OS 이미지 상 부트 로더와 설치파일이 동작하게 됩니다.
즉, 설치 초기에는 USB가 부팅 역할을 하는 하나의 디스크가 되는 것과 동일(서버 노드에 꽂혀있는 이상 내부 부팅 디스크 역할을 수행하기도 해서 파일시스템 구성할 필요 발생)합니다. 파일 시스템 자체는 일반적으로 BIOS 등과 호환성이 높은 Large FAT32를 사용합니다. Ubuntu OS가 4GB를 오버하진 않아서 FAT32면 충분한 것 같습니다.
클러스터 크기(섹터 모음 단위)는 Rufus에서 자동으로 지정됩니다. 큰 의미는 없는 이유가,
Rufus는 USB에 파일시스템을 포맷팅하는 것이지 OS를 설치할 서버 노드에 대해서 포맷팅하는 것이 아니기 때문입니다.그럼 이제 나머지 영구 파티션과, 파티션 구성, 대상 시스템이 남게 됩니다. 해당 옵션들 대해서 자세히 설명해주는 포스팅이 많지 않아서 나름대로 추론해보고 사례를 찾아봐서 이해했습니다.

결론적으로는, 라즈베리파이와 같이 스토리지 용량 자체가
부족한 스펙이 아니고서는 영구파티션 크기를 0로 하고 BIOS 대상 시스템으로만 동작하게 하면 됩니다.
아까 말씀드렸다시피 Rufus를 통해 포맷팅하고 설치를 진행할 경우, USB가 하나의 내부 디스크 역할을 수행하게 되는데, 이 과정에서 usb를 ‘영구적으로’ 내부 디스크처럼 사용하기 위해서 영구 파티션 크기를 설정하게 됩니다. 라즈베리파이나 구식 디바이스처럼 용량이 부족한 것 아니면 요즘은 굳이? 세팅하지 않아도 되는 것이죠.파티션 구성 또한 마찬가지입니다. 이후 진행할 HDD/SSD 파티션/마운트처럼 파티션 방식을 GPT/MBR 중에 선택하라는 얘기입니다. 요즘 대부분 BIOS가 UEFI 모드로 나오고 GPT/MBR 모두 지원하기 때문에 아무거나 해도 상관 없습니다. 대상시스템은 앞선 단계에서 BIOS가 UEFI 임을 체크해주었으니 그대로 진행하면 됩니다.
시작을 누르고 iso 옵션을 선택하면 포맷팅이 완료됩니다.
BIOS
우리가 사용하는 마더보드(메인보드)에는 OS 없이 Default로 BIOS가 설치되어있습니다. 대개는 재부팅하고 f2 연타로 접근됩니다.
여기서 해야할 단계는, 부트용 USB를 꼽고 사전에 설치된 Windows보다 부팅 우선 순위를 높이는 것입니다.
단순히 Boot Option 순서만 올려주고 save exit하면 끝!

Ubuntu Installation
재부팅하면 Ubuntu Desktop이나 Server나 크게 다를 것 없는 세팅과정을 거치게 됩니다. 여기서는 Server 위주로, 중요한 것만 집겠습니다.
- Wifi Card가 네트워크를 잡아주긴하지만, 그냥 랜선을 직접 꽂아서 바로 인식시키는게 편합니다.

- Storage 설정은 선택에 따라 나뉩니다.
Custom storage layout 옵션이나 Use an entire disk 옵션이나 LVM (logical volume manager)를 사용하면 디폴트 구성 자체는 큰 차이는 없는 것 같습니다. 굳이 Custom storage layout보다는 정확한 세팅을 위해서는 OS 세팅 완료 후 세세한 설정을 직접 진행하는 것이 좋은 것 같습니다. 저는 내장 SSD 전체를 LVM으로 사용해보겠습니다.
(스토리지 관련은 뒷 포스팅들에서 이어질 예정입니다.)LVM은 여러 개의 physical volume을 logical하게 묶어 group으로 만든 뒤 유연하게 할당하는 것을 의미합니다.

- Use an entire disk + LVM을 사용한 결과 boot 용 디스크들을 자동으로 파티션해줍니다. (partition 1, 2)
partition 3는 LVM volume group이 됩니다. 현재 저는 내장 SSD가 하나라 LVM을 쓰나 안쓰나 똑같지만 여러개를 보유한다면 Volume Group에 여러개의 disk나 partition을 집어넣을 수 있습니다.
아래 이미지의 ubuntu-vg가 volume group이 되고, ubuntu-lv와 같이 logical volume들을 생성해서 원하는 만큼 volume group에서 용량을 떼서 가져다 붙이면 됩니다.
<요약>
물리적 저장장치들 → Physical Volumes → Volume Group → Logical Volume → File System Mount


After Installation
위 사항을 제외하곤 편의를 도와주는 것들이 대부분이라 엔터로 넘어가도 무방합니다.
이제 OS 설치가 완료되고 정말 간단히 세팅해야할 점들입니다.
부트 USB 제거
설치가 끝났으니 부팅 디스크 역할을 하는 USB는 제거해줍시다. USB를 제거했으니 당연하게 BIOS 부트 우선 순위에서 USB 부분은 무시되고 Ubuntu가 부팅되게 됩니다.
(위에서 디스크를 포맷팅했기 때문에 마찬가지로 Windows도 없어지고 무시됩니다.)
만약 꽂힌 상태라면 계속 usb 부트 로더가 우선순위에 걸려 다시 설치과정을 진행하거나 Ubuntu OS가 로드되지 않을 겁니다.
Resize Logical Volume
위 LVM 구성과정에서 50%만 신규 LV에 할당 후 루트 파일시스템에 마운트 시켰습니다.
어차피 Worker node에 스토리지를 분할해서 뭔가를 할 계획이 없는 상태라 LV에 추가 용량을 주었습니다.
(확장 캡쳐를 까먹음….루트라 축소하려면 usb 다시 꽂아야해서 이미지는 패스…)
LVM은 확장 시 파일시스템을 umount하지 않아도 유연하게 확장 가능합니다. (축소는 umount 필수)sudo lvscan(logical volume scan)

sudo lvextend -l +{n}%FREE { lv path }(logical volume extend. 축소는 lvreduce)
sudo resize2fs { lv path}(filesystem size도 조정)
SSH Server
설치 과정 중에 User 및 Password를 만들며 이미 SSH Server가 디폴트로 설치되었습니다. (없으면
sudo apt-get install openssh-server)net-tools를 설치해서 포트를 확인해봅시다. (
apt-get install net-tools )
Port-forwarding
노드에서 22번이 열렸으니 포트포워딩을 합시다. 기본 네트워크 환경 구성 관련 상세 내용은 다음 포스팅에서 적도록 하고 이번엔 포트포워딩만 잽싸게 해보겠습니다.
- 공유기에서 먼저 노드에 대해 고정 ip를 부여해줍시다.

- 포트포워딩을 진행해줍니다.

- 해당 노드에서
curl ifconfig.me로 외부에서 접근가능한 공인ip 주소를 확인합니다.
ssh username@공인ip주소 -p 포트포워딩외부포트를 외부환경에서 수행하고 ssh 접근을 확인합니다.

Conclusion
“오늘 포스팅: 그냥 싱글 우분투 홈 서버 구성”
으로도 볼 수도 있지만, 하나하나 고민하고 확인해가며 구축을 했던 것 같습니다 (삐끗하면 쌩돈, 시간 날릴까 무섭😅)
글이 길어져서 OS Setting 내용으로 줄였는데, 뒷 포스팅들은 이런 고민이 더 많으니 기대해주시면 감사하겠습니다 ㅎㅎ
