카테고리 없음

아치 리눅스 설치기 - 1) 부팅 디스크 만들기

SciomageLAB 2024. 9. 18. 09:24
반응형

아치리눅스를 선택한 이유

학교에서 리눅스계열 운영체제를 우분투로 처음 접해보고 우분투 환경이 낯설기도 하고 예쁘기도 하고 콘솔에서 주로 이루어지는 모든 작업들이 너무 좋아서 리눅스에 빠지게 되었는데 비주류 OS도 경험해보고 싶어서 현존하는 OS들 중에 뭐가 제일 비주일까 고민하다 후보가 뽑혔다.

OS 고를 때 기준은 주로 아래와 같은 기준들을 고민했다

  • 운영체제가 DE까지 로드됬을 때 기준으로도 충분히 소비하는 메모리가 작은지
  • CPU 아키텍처 호환성이 넓은지 (공식이 아니라도 충분히 충실한 또는 많은 커뮤니티를 가지고 있어서)
  • 사용자가 수동으로 만져야할 부분이 많아 공부하기 좋고 손맛을 타는지

1. 유닉스계열

FreeBSD

리눅스와 달리 유저랜드가 명확히 분리되어 있고 무엇보다 내가 좋아하는 BSD 라이센스를 따르며 저자가 내가 동경하는 인물이어서 후보로 넣게 됬다. 하위호환성 좋고 대부분의 머신에서 잘 동작하며 포트 시스템이 매우 맘에 들었다. 아무래도 크롬북에 강제로 깔려다 보니 Arm을 지원해주는 것도 좋았다. 그리고 MacOS의 모체가 되는 유닉스를 써볼 수 있다는 점, 무엇보다 커뮤니티가 입문자에게 친절하고 가이드라인 문서가 매우 잘 정리되어 있다는 점이 매력적이어 보였다.

2. 리눅스 계열

극강의 설치 난이도와 소스를 일일이 컴파일해서 빌드하여 시간 잡아먹는 젠투

젠투는 사용자가 직접 컴파일에서 Arm이나 AMD칩을 쓸 경우 해당 칩의 가속 기능을 컴파일 옵션에 원하는 대로 설정하여 아주 빠른 OS를 구동시킬 수 있다는 점이 너무 궁금했다. 게다가 리눅스인데 포트 시스템을 차용하면서 emerge라는 패키지 관리자가 잘 되어 있다고 해서 더 매력적으로 느껴졌다.

젠투보다 쉽지만 바이너리로 받아 수동으로 콘솔창에서 설치해야 하는 아치

나의 선택은 아치였다. 손맛을 타면서도 메모리를 적게 먹고(아치의 개발 모토는 Keep it simple 이다) 커뮤니티와 문서가 잘 되어 있으면서도 CLI 기반으로 빠르게 설치 가능, 그리고 롤링릴리즈가 너무 빨라 오히려 불안정함이 안정성이 되어버리는 아이러니 함이 좋았다.

BSD를 새로 깔고 나서 내가 주로 개발하는 환경들이 대부분 리눅스와 그 패키지들을 요구를 하다보니 공부하기에는 산만한다는 생각이 들어서 파티션 한켠에 묻어뒀다(응?). (사실 예쁜거 좋아하는 나는 악마 로고가 귀엽고 멋은 안나서 패스..(응?2)

그 다음은 젠투를 깔아보았다. DSP 연구실에서 주로 맞닥뜨리는 환경은 임베디드기반 리눅스 인데 당장 일해야 되는 사용 특성상 잦은 재설치를 할 일이 빈번하게 있는 리눅스가 커널 컴파일 시간도 너무 오래 걸리고 거기에 내가 이리저리 세팅할 시간까지 합치니 중요한 일이 있을 때 리스크가 있을 것 같았다. 차라리 그러한 노력이 들어간다면, 오랜 내 숙원인 운영체제를 만들고 말지.

본격적인 설치

아치리눅스 부팅 디스크 만들기 전 알아두면 좋을 것들

BIOS(Basic Input Ouput System)

컴퓨터에 올라가는 펌웨어다. 말그대로 아주 기본적인 입출력을 가능하게 해준다. 바이오스는 운영체제가 하드웨어 자체를 몰라도 자원을 관리할 수 있도록 로우레 벨의 디바이스 드라이버를 제공하며(즉 인터럽트를 통해서 쓰는게 바이오스 기능이다) 메인보드에 부착된 드웨어적 장치들을 초기화하고 점검하는 등의 역할을(이러한 역할을 POST, ?Power of Self Test 라고 한다) 한다.

당연히 CPU는 제작 시 ROM의 특정주소(보통 첫번째 주소라고 배웠습니다만...) 읽게 만들어지고 컴퓨터 부팅하여 전원 들어오면 ROM의 특정 주소에 있는 BIOS가 실행된다.BIOS는 하드웨어 장치 검사 및 초기화 하는 루틴과 각종 설정을 할 수 있는 프로그램을 포함하는데 바로 DEL이나 F2 누르면 나오는 파란화면이 CMOS 셋업 프로그램이다.

CMOS는 메모리인데 이 CMOS 셋업 프로그램과 CMOS가 필요한 이유는컴퓨터 전원 들어오면 항상 실행 되어야 하면서도, 제일 Low 레벨의 펌웨어 인 만큼 변경이 일어나면 안되니 ROM에 BIOS프로그램이 올라간다. 그렇게 되면 POST 작업 시에 장치를 제어하는 BIOS가 알아낸 하드웨어 정보들을 ROM에 쓸 수 없기 때문에 CMOS에 기록을 하기 때문이다.(그런데 기술의 발달로 flashROM 같은 지우기 가능한 ROM이 생겨서 바이오스도 업데이트가 가능하다.)굳이 CMOS 셋업 들어가지 않는한 '부팅' 을 하는데, BIOS의 POST 작업의 마지막 루틴은 첫번째 디스크의 (CMOS에서 boot 탭에서 막 부팅 순서도 바꿔주고 하자녀) 첫번째 섹터(MBR)를 읽는 것이기 때문에 부팅이 된다.

UEFI(Unified Extensible Firmware Interface)

BIOS 대체 펌웨어이다. 아래 설명할 GPT 방식의 디스크에서 부팅을 지원해준다.

MBR(Master Boot Record)

BIOS에서 부팅을 하면 디스크의 첫번째 섹터를 읽는다고 했는데 바로 첫번째 섹터가 MBR이다. MBR에는 부트 코드라는 부팅할 때 부를 코드들이 들어가 있다. 이 코드들은 부트로더라고도 한다. 부트로더는 커널을 메모리에 적재시키는 역할을 한다. 그런데 환경이 임베디드 환경인 경우, 멀티 OS를 쓰거나 메모리가 넉넉하거나 한 환경이 아님으로 부트로더는 ROM에 저장되기도 한다.440byte가 부트 코드이고 64byte가 파티션 정보를 담고 있다파티션 엔트리는 16byte 이므로 MBR 디스크는 최대 4개(64 /16)의 파티션만이 생성 가능하다.MBR 타입의 디스크의 이러한 구조적 한계를 보완한 것이 GPT이다.

GPT(GUID Partition Table)

UEFI라는 새로운 펌웨어 방식에서 사용하는 디스크 타입이다. 파티션 엔트리와 테이블 확장으로 128개 까지 파티션을 만들 수 있다. 두 MBR과 GPT 방식은 서로 변환이 가능한데, GPT에서 MBR로 변환 시에는 모든 디스크의 파티션을 다 제거해야 변환이 가능하다고 한다.

부팅 디스크 만들기

우선 부팅 디스크를 만들어야 되는데 나는 rufus라는 툴을 이용했다.
https://rufus.akeo.ie/

나의 경우 이미 기존에 기본 SSD에 우분투와 윈도우를 사용 중이었고, 확장 SSD에 아치를 깔고자 하는 상황이었다. 또한 확장 SSD, 기존 SSD 모두 GPT 타입이었길래 CMOS 셋업에 UEFI 부팅이 enabled 되어 있느 상태였다. 따라서 선택을 GPT 파티션 UEFI 호환으로 선택하고 FAT32로 포맷하여 이미지를 사용하였다.

이슈들-
앞에 장황하게 시스템적인 것들을 설명한 이유는, 내가 저러한 것들을 너무 모르고 덤벼들었다가 똑같은 2017/03/01 출시된 아치 리눅스 설치하는데 나만 부트 플래그 옵션이 없어서 찾아봤더니, GPT 방식은 따로 부트 영역 만들어서 부트 플래그를 입히지 않아도 된다고... 나는 이런 것도 모르고 통째로 리눅스 파일 시스템으로 파티션 하나로 설치해서 나중에 grub이 설치가 안되었다.

그래서 이미지도 다시 굽고 다시 파티션 아치위키에서 본대로 나누고 재설치... ㅠㅠ 엉엉

부팅 디스크 만들기

Ubuntu Terminal (2018/11/18 추가)
**1년만에 아치리눅스를 다시 설치하게 되었다. 물론 취미로. 아치리눅스 설치에 앞서 설치할 컴퓨터에는 윈도우, 우분투 두개가 깔려있는 상황이었고 이중 우분투를 포맷하고 아치리눅스를 대체하려고 하였다.

  1. USB 포맷하기 df -h 또는 lsblk로 USB 장치 찾고 언마운트
    sudo umount /dev/sdc

여러 파티션 포맷형식이 있는데 linux 깔거니까 mkfs.fat이나 mkfs.ext4로 진행한다. 나는 보통 mkfs.ext4를 일하는 용으로 쓰고 정말 취미용으로는 삼성에서 만든 f2fs를 써서 잘 모르지만 조금이나마 SSD에 특화된 파일 시스템을 썼다. 노트북 성능이 너무 좋질 않은데 과제로 안드로이드 스튜디오로 안드로이드 개발을 하려니 정말 모든 것을 쥐어 짜게 되는 것 같다.

  1. Image Burning
    sudo dd if=~/Downloads/archlinux-2018.11.01-x86_64.iso of=/dev/sdc bs=4M && sync

if : 이미지 파일 경로 of : 장치 경로 bs : block size

반응형