관리 메뉴

The Story of Joon

Pintos: 기본 세팅 본문

Computer Science/운영체제

Pintos: 기본 세팅

jo_on 2017. 2. 2. 18:31

※ 이 포스트는 OS X El Capitan v10.11.6을 기준으로 작성되었습니다.


이 포스트를 읽으러 오신 분들은 아마 대부분 대학 운영체제 시간에 시키는 프로젝트 때문일 것이다. 그런 경우 보통은 이미 핀토스가 설치되어 있는 학교 컴퓨터에 ssh 등으로 접속해서 작업을 하게 될텐데, 불편한 점이 한 두가지가 아니다.

이 포스트는 그러한 이유로 본인 노트북 또는 데스크톱에 핀토스를 컴파일, 빌드하였는데 그래도 불편한 점이 많아서 좀더 깔끔한 세팅을 원하시는 분들이 읽으시면 도움이 많이 될 것 같다.

필자의 경우는 맥북에서 코딩을 하는 것이 더 좋아서 코딩은 맥북에서 하고, 컴파일 및 빌드는 가상머신에서 할 수 있는 방법을 찾게 되었다.

단순히 핀토스를 설치하고 싶으신 분도 도움이 되겠지만, 자세한 설치 과정은 잘 설명되어 있는 다른 블로그로 링크를 걸어놓았다. 어쨌든 이 내용을 따라가기만 하면 된다.

핀토스를 설치하는 방법은 크게 두 가지가 있다.

  • 컴퓨터에 가상머신을 설치하고, 그 위에 Pintos를 컴파일, 빌드하는 방법

  • 컴퓨터에 바로 Pintos를 설치하는 방법

필자는 전자의 방법을 더 추천한다. OS X가 리눅스와 유사한 운영체제이긴 하지만 어디까지나 '유사'할 뿐, 리눅스와는 다른 점이 많다. 

대표적으로 executable file의 포맷이 리눅스의 포맷(흔히 ELF 포맷이라고 한다)과는 다르고, 컴파일러도 OS X의 gcc는 사실 gcc가 아니라 clang이다. 그래서 ELF 포맷의 executable을 만드는 크로스 컴파일러라는 이상한 녀석을 써야 한다.

필자는 두 가지 방법을 모두 해보고 정상적으로 빌드가 되는 것을 확인하긴 했으나 아무래도 후자의 방법의 좀 불안한 느낌이 없지 않다. 그래서 전자를 더 권유한다.

첫 번째 방법은 맥북이 아니라 가상머신을 굴릴 수 있는 다른 운영체제도 가능하다.


1. 가상머신 위에 Pintos 설치

핀토스를 설치하기 위한 준비물이 몇 가지 있다. 일단 나열해놓고 설명을 하겠다.

가상머신의 경우 필자는 VirtualBox를 이용했다. 버전 5.1.14는 이 포스트 작성 날짜 기준 최신버전이다. 그런데 가상머신을 구동해 분들은 알겠지만 낮은 해상도와 겹치는 마우스 포인터, 늘어나지 않는 조그마한 화면 등 마음에 들지 않는 점들이 많다.

그런데 확장팩을 설치하면 이 모든 것이 단번에 해결된다. 확장팩 역시 무료이니 설치하는 것을 권장한다.

Pintos는 저 링크에서 pintos.tar.gz를 다운받으면 된다.

잠깐 짚고 넘어갈 것이 있는데, Pintos는 운영체제이기 때문에 원래 컴퓨터 설치해서 실행해야 하지만, 현실적으로 불가능하기 때문에 이 역시 80x86 에뮬레이터 위에서 돌리게 된다. Pintos documentation에서는 Bochs 또는 Qemu를 추천한다. Qemu는 필자가 써본 적이 없다.

Bochs의 경우 Pintos documentation에서는 2.2.6 버전으로 나와있으나 해보니까 튕긴다. 다른 블로그에서도 2.6.2 버전을 권장하고 있으니 따르는 것이 좋을 것 같다.

이 외에 VirtualBox 버전이랑 Ubuntu 버전은 다른 것으로 해도 괜찮을 수도 있다. 그러나 안전하게 하려면 저 버전을 선택하는 것을 권장한다.


1) VirtualBox에 Ubuntu 설치

가상머신에 우분투를 설치해야 하는데, 과정은 간단하다. 우선 초기 화면(아래 사진 참조)에서 새로 만들기를 누른다.

그러면 첫 화면에 이름, 종류, 버전을 선택할 수 있는 화면이 나온다. 이름은 언제든지 바꿀 수 있으니 아무렇게나 짓자. 종류는 Linux, 버전은 Ubuntu (64-bit)를 선택해주면 된다.

이후 설치 과정을 계속 따라가면 된다. 그냥 default로 쭉쭉 넘어가도 괜찮다.

설치가 끝난 후 머신을 구동하면, 그제서야 우분투 디스크 이미지가 있냐고 물어본다. 이 때 위의 2번 항목에서 준비해둔 이미지를 업로드하고 마지막으로 설치하면, 이제 남은 일은 우분투에 핀토스를 설치하는 일이다.

핀토스의 자세한 설치 과정은 이 블로그에 잘 나와있다. 이 포스트의 주 목적은 설치 과정이 아니므로 생략한다.

다만, 한 가지 주의할 점은 우분투를 설치하기 전에 확장팩을 설치해야 한다. 그러지 않으면 우분투에 적용이 잘 되지 않는 버그가 발생할 수 있다.

저 블로그의 과정을 모두 따랐다는 가정 하에 최적화 작업을 진행한다.


2) Ubuntu에 Guest Addition 적용

먼저 우분투에 확장팩을 적용해야 한다. 우분투를 켜고, 상단 바(아래 사진 참조)에서 Devices - Insert Guest Additions CD Image를 누른다.

그러면 우분투에 무언가 설치화면이 나타나는데, 하란대로 하면 설치가 끝난다. 그리고 우분투를 재부팅하면 깔끔한 화면, 전체화면으로 바꿔도 줄어들지 않는 해상도, 완전히 우분투 마우스로 embed한 마우스 포인터를 보며 감탄하면 된다.

확장팩 적용이 되고 나면 우분투에서 코딩을 해도 별 불편함을 느끼지 않게 된다. 그러나 그래도 나는 맥북에서 코딩을 하고 싶다! 하는 분들은 다음 단계로 넘어가시면 된다.


3) 공유폴더 설정

개요를 간단하게 설명하면, 맥북과 우분투의 공유폴더를 만들어서, 맥북에서 수정하고 저장하면 우분투에서도 바로 동기화가 될 수 있게 하는 것이다. 물론 반대도 된다. 그러면 우분투에서는 Terminal만 띄워놓고 맥북에서는 XCode나 Sublime Text를 띄워놓고 마음껏 코딩-컴파일-코딩-컴파일을 할 수 있게 된다.

이 작업을 하기 위해서는 핀토스가 원래 컴퓨터에 설치되어 있어야 한다. (압축만 풀려있으면 된다) 우분투에는 깔려있지 않아도 된다.

공유폴더 설정은 살짝 복잡할 수 있는데, 아래 과정을 차례 차례 따라가면 된다.

  1. 잠시 우분투를 종료하고, VirtualBox 초기화면을 띄운다. (위의 사진 참조)

  2. 설정에서 공유 폴더 탭을 클릭한다.

  3. 폴더 추가 아이콘을 클릭하고 폴더 경로에 본인 컴퓨터에서 핀토스 경로, 폴더 이름에는 그냥 아무거나 넣으면 된다. 필자는 귀찮아서 핀토스를 ~/pintos 경로에 설치하였고 그래서 각각 ~/pintos, pintos를 써 넣었다.

  4. 그 밑의 체크박스들은 체크하지 않는다. 어차피 제대로 작동하지도 않는다.

  5. OK를 누르면 이제 메인 화면에서 할 일은 끝났다. 우분투를 구동한다.

  6. 우분투 Terminal (맥북 키보드로 control+option+T, 윈도우는 Ctrl+Alt+T가 단축키이다)을 열고 다음 명령어를 입력한다.

sudo mount -t vboxsf -o uid=1000,gid=1000 [공유폴더 이름] [우분투 경로]
[공유폴더 이름]에는 위에서 설정한 이름(필자의 경우 pintos)을 입력하고, [우분투 경로]에는 공유폴더를 만들 경로를 입력한다. 필자는 이 역시 귀찮아서 그냥 ~/pintos로 했다.
여기서 uid와 gid는 본인의 사용자의 uid와 gid이다. 이 설정을 해주지 않으면 접근 권한이 root로 설정되어 모든 작업이 sudo를 입력하지 않으면 deny된다. 기본적으로 둘다 1000으로 설정되어 있지만, 혹시 다를 수 있으므로 터미널에 id를 입력하고 엔터해서 확인해보자.
이제 공유폴더 설정이 끝났다. 맥북에서 뭔가 바꾼 뒤에 저장을 하고 우분투에서 확인해보자.
그러나 문제가 한 가지 있는데, 저 긴 명령어는 우분투를 부팅할 때마다 매번 입력해줘야 한다는 것이다. 이 점이 정말 귀찮아서 자동 마운트를 할 수 있는 방법을 찾아보았지만, 뭐 하나 제대로 되는게 없었다.
결국 필자가 택한 방법은 부팅할 때마다 저 명령어를 자동으로 alias해주는 것이었다. 다음 명령어로 bashrc 파일을 열자.
gedit ~/.bashrc
이제 맨 마지막 줄에 다음 명령어를 추가하고 저장-종료한다.
alias share='sudo mount -t vboxsf -o uid=1000,gid=1000 [공유폴더 이름] [우분투 경로]'

이제 부팅할 때마다 터미널을 열고 share만 입력하면 공유폴더가 동기화된다.


여기까지 하면 첫 번째 방법인 '가상머신에 핀토스 설치하기'는 모두 끝난다. 맥에서 공유폴더를 설정한 핀토스 경로에 Github 설정도 해주면 더욱 편해진다. 깃헙 설정은 여기서는 다루지 않겠다.


2. Mac OS X에 직접 Pintos 설치

나는 가상머신도 돌리기 싫다! 하는 분들을 위해 준비한 방법이다. 위에서 말했듯이 추천하는 방법은 아니고, 재미삼아 해볼 수 있는 방법이다.

이 사이트에 들어가면, 어떤 고마우신 분이 맥에 핀토스를 설치하는 방법을 pdf로 잘 정리해 주셨다. 일단 준비물은 다음과 같다.

저 사이트에 있는 pdf 링크에도 설명이 잘 되어있으나, 그대로 따라했다가 핀토스를 통째로 날려먹을 뻔했다. 이 포스트를 쓰는 이유이다.

먼저 핀토스를 컴파일하기 직전까지는 저 블로그에 나와있는 과정과 일치한다. 한 가지 다른 점은 OS X에는 .bashrc 파일이 없다는 것이다. 대신 같은 경로에 .bash_profile이 있으니, 여기서 똑같이 설정해주면 된다.

이제부터 아래의 과정을 따라가면 된다.

  1. 위의 3번 파일을 어딘가에 잘 다운받는다. 필자는 /usr/local/ 경로에 압축을 풀었다.

  2. 이 폴더에는 com2/bin이 있는데, 이 경로를 PATH에 등록해주어야 한다. ~/.bash_profile 파일을 열고, 마지막줄에 다음 문장을 추가한다.

  3. export PATH="$PATH:/usr/local/com2/bin"
    

    이는 필자의 기준이고, 다른 경로를 썼다면 그 경로를 입력해준다.

  4. 마지막으로 핀토스의 Makefile에 패치를 해주어야 한다. 핀토스 경로에 가서 4번 항목의 패치 파일 중 가장 첫 번째 것만 다운받는다.

  5. 패치파일 이름을 patchfile로 설정하고, git am < patchfile.patch 명령어를 입력하고 엔터하면 패치가 끝난다. 저 pdf에 의하면 패치 한 뒤에도 리눅스에서 정상 컴파일이 된다고 한다.

다른 파일을 패치하지 않는 이유는, 필자가 해본 결과 2개 빼고는 패치가 오류가 나고 어떤 파일을 건드렸는지 모르겠는데 프로젝트 2에서 이상한 오류가 발생하여 핀토스를 초기화했었다.
GDB를 쓰고 싶으신 분은 저 pdf에서 6번 과정을 따라가면 된다. 필자는 GDB를 쓰지 않아 하지 않았다.


여기까지 하면 Mac OS에서도 정상적으로 핀토스를 빌드할 수 있(을거라 믿는..)다. 이제 남은 일은 즐겁게 핀토스 프로젝트를 수행하는 것이다 굿 럭!

'Computer Science > 운영체제' 카테고리의 다른 글

Pintos: 프로젝트 시작 전 팁  (1) 2017.02.21
Comments