Search

M시리즈 Mac에서 Pintos 개발 환경 세팅하기 (Feat. Docker)

운영체제 수업 중 교육용 운영체제인 Pintos로 스레드를 관리하는 프로젝트를 진행하게 되었습니다. 이 프로젝트를 위해 Pintos가 빌드할 수 있는 환경을 세팅해야 합니다. 그런데 Pintos는 기본적으로 x86 아키텍처를 기반으로 설계되었기 때문에 ARM 아키텍처를 사용하는 Apple의 M시리즈 칩으로는 직접 실행할 수 없습니다.
이 개발 환경을 세팅하는 작업을 거의 일주일 동안 했는데, Docker로 깔끔히 해결할 수 있는 방법을 알게 되었습니다. Docker로 x86 기반의 Ubuntu를 설치하여 그 격리된 환경 속에서 Pintos를 실행시키면 됩니다.
이 글을 보시는 분들께서는 저처럼 일주일 넘게 시간 쓰시지 마시고 빠르게 개발 환경 구축해서 프로젝트를 잘 진행하셨으면 좋겠습니다.

Docker로 Ubuntu 설치하기

Docker가 어떤 역할을 하는지 잘 모르신다면, 이 영상을 빠르게 보는 것을 추천해 드립니다. Docker는 각자 PC에 설치하시면 됩니다.
docker pull --platform linux/amd64 ubuntu:18.04
Shell
복사
교수님께서 Ubuntu 18.04를 추천하셨기에 Docker로 18.04 버전의 Ubuntu 이미지를 가져옵니다. 이때, linux/arm64가 아닌 linux/amd64로 적어주셔야 합니다. 저희는 Docker로 ARM 아키텍처가 아닌 x86 아키텍처 기반의 Ubuntu가 필요하기 때문이죠.
docker images
Shell
복사
image를 잘 가져왔는지 확인할 수 있습니다.
docker run —-platform linux/amd64 -it -d -—name pintos ubuntu:18.04
Shell
복사
방금 가져온 image를 실행하여 pintos 라는 이름인 container로 만들 것입니다. 이때, ubuntu:18.04가 아닌 ubuntu 로 적는다면 알아서 최신 버전으로 바꾸기 때문에 꼭 ubuntu 뒤에 :18.04를 추가해야 합니다.
docker ps
Shell
복사
pintos라는 container가 실행 중인지 확인해 봅시다.
docker attach pintos
Shell
복사
위의 명령을 통해 x86 기반의 Ubuntu 18.04 환경을 터미널로 사용할 수 있습니다.

VSCode로 container에 접속해서 개발하기

VSC에서 Dev Containers라는 익스텐션이 있습니다. 이 익스텐션은 터미널 환경이 아닌 VSC에서 개발하도록 container를 VSC와 연결해 줍니다.
익스텐션 설치 후, VSC를 실행한 다음 Command Palatte(fn + F1)를 눌러 Dev Containers: Attach to Running Container… 를 선택하면 실행 중인 Docker container 목록이 나타납니다. 그 목록 중 pintos를 선택하여 VSC로 보다 편리하게 작업하시면 됩니다.

개발환경 세팅하기

apt update && apt upgrade -y
Shell
복사
운영체제에서 사용할 수 있는 패키지들과 그 버전에 대한 정보를 업데이트하고 설치한 패키지들을 최신 버전으로 업그레이드하는 명령어입니다.
원래 Ubuntu를 VMWare나 UTM 같은 가상머신으로 설치하게 되면 sudo 명령어가 필요한데, 현재 Docker로 구성한 Ubuntu에서는 sudo를 붙이지 않아도 됩니다.
apt install build-essential gcc binutils perl gdb qemu -y
Shell
복사
Pintos를 빌드하기 위해 필요한 패키지들을 설치합니다.
build-essential : C/C++ 프로그램 컴파일에 필수적인 GCC 컴파일러, make 유틸리티 및 디펜던시를 설치하는 패키지이다.
gcc : GNU Compiler Collection의 약자로, C, C++, Objective-C, Go 등 여러 프로그래밍 언어의 컴파일러 모음이다.
binutils : 애플리케이션을 빌드하는 데 필요한 바이너리 도구이다.
perl : 다양한 시스템 작업에 사용되며 텍스트 처리에 강력한 다목적 스크립팅 언어이다.
gdb : 프로그램 디버깅을 위한 GNU 디버거이다.
qemu : 오픈소스 에뮬레이터 및 가상화 도구이며 Pintos를 가상 환경에서 실행할 수 있도록 돕는다.
apt install wget unzip
Shell
복사
wgetunzip 기능을 사용하기 위해서 해당 패키지를 설치합니다.
wget "https://drive.google.com/uc?export=download&id=12345" -O "pintos-qemu.zip"
Shell
복사
Pinos 관련 소스코드가 있는 파일을 직접 다운로드 받아서 pintos-qemu.zip 이름으로 저장합니다.
mkdir pintos && unzip "pintos-qemu.zip" -d pintos
Shell
복사
pintos 라는 폴더를 만들고 pintos-qemu.zip 의 압축을 풀어 pintos 폴더 안에 넣습니다.
그 이후 과정은 각 Pintos 프로젝트마다 다르기 때문에 생략하도록 하겠습니다. 혹시 궁금하신 점이 있으시다면, 댓글에 편하게 적어주세요!
[에러 발생] rosetta error: Unimplemented syscall number 282
혹시 위와 같은 rosetta error 가 발생하셨나요?
그렇다면, 현재 Docker Settings > General 에서 Use Rosetta for x86_64/amd64 emulation on Apple Silicon 이 체크되어 있을 겁니다. 이 체크를 해제하시면 됩니다.
“50대의 추교현이 20대의 추교현에게 감사할 수 있도록 하루하루 최선을 다해 살고 있습니다.”
The End.