학과 수업을 진행할때 인텔의 x86 기준으로 거의 모든 수업이 진행되어 arm 아키텍쳐가 걸림돌이 되었던 적이 한두번이 아니었다.
그때마다 개발환경 셋팅에 많은 시간을 들이고는 했다. 이번 xv6 운영체제를 사용할때도 마찬가지였다. 결론적으로 나는 EC2를 통해서 개발환경을 만들었다. 가상머신 통한 방법도 있지만 EC2가 가장 간편한 방법같다. 가상머신을 통한 방식은 간단히 소개하고 어떤 방법으로 EC2를 통해 m1칩에서 xv6를 빌드했는지 알아보자
1. UTM을 통한 방법
많은 가상 머신이 있지만 UTM은 mac os를 위한 가상머신이다. 기존에 사용할 수 있었던 대부분의 가상 머신(virtualbox, vmware)들이 m1에서는 제약 사항이 있어 아직은 사용하기에 불편할 것이다.
이를 해결할 수 있는 방안으로 UTM이 적절하다. 아래에 링크에 들어가 자신의 스펙에 맞는 파일을 다운로드 해주면 된다.
UTM
Securely run operating systems on your Mac
mac.getutm.app
이후 unbuntu를 설치하고 utm에 가상머신을 생성해 파일을 올리면 된다.
이때 주의사항은 arm 버전 ubuntu를 설치하면 완전 말짱 도루묵이 된다. xv6를 빌드할때 필요한 패키지도 설치가 안되고 여러가지 문제가 있으니 x86 버전 ubuntu를 설치함을 명심하자.
utm은 다른 가상머신에 비해 아직 불안정한거 같다... 메모리 덤프나 이런것들이 잘 안찍힌다. utm 문제라고 속단할 수 없지만 비추,,,
2. EC2를 이용한 방법
EC2는 아마존 웹 서비스에서 제공해주는 서비스 중 하나이다. 보통 서버를 구축할때 많이 사용한다.
쉽게 말해 컴퓨터 한대를 빌려주는 것이다. 원하는 스펙의 컴퓨터를 통해 원하는 개발환경을 간편하게 구축할 수 있다.
EC2 생성과 관련된 방법은 아래 주소 글에 정리가 잘 되어 있으니 참고바람.
https://bcp0109.tistory.com/356
AWS 1편: EC2 생성 후 Spring Boot 띄우기
Overview AWS EC2 인스턴스를 생성하고 Spring Boot 서버를 띄워보는 것까지 진행합니다. 주 목표는 서버를 외부에 제공하는 거라서 따로 배포 시스템을 구축하지 않고 단순히 빌드 파일을 복사해서 수
bcp0109.tistory.com
EC2 생성을 완료했다면 절반이상 성공했다. 이후 인스턴스에 접속해 아래와 같은 코드를 그대로 작성해주면 된다.
# system environment install
sudo apt-get update
sudo apt-get install git python2.7 build-essential gcc-multilib libglib2.0-dev libpixman-1-dev libjpeg9
#install qemu & xv6
git clone https://github.com/mit-pdos/6.828-qemu.git qemu
git clone https://github.com/mit-pdos/xv6-public.git xv6
cd qemu && git submodule update --init pixman
vi qga/commands-posix.c
#include <sys/sysmacros.h> 추가
#Configure for QEMU build
./configure --disable-kvm --disable-werror --target-list="i386-softmmu x86_64-softmmu" --python=/usr/bin/python2.7
#Build QEMU
make -j 8
#Environment PATH setting for QEMU
#NEED TO CHANGE <path-to-qemu> to your qemu path (e.g., /home/ubuntu/qemu)
vi ~/.bashrc
export QEMU=/home/<path-to-qemu>/i386-softmmu/qemu-system-i386
export PATH=/home/<path-to-qemu>:$PATH
source ~/.bashrc
path에는 자신의 qemu 경로를 적어주면 되는데 보통 /home/ubuntu/qemu으로 되어있을 것이다. 그래도 혹시 모르니 한번씩 확인하고 하길 권한다.
이제 xv6를 구동시켜보자
- xv6 디렉터리를 이동후(cd xv6)
- make를 통해 빌후(make qemu-nox QEMU=$QEMU)
잘 작동하는 것을 볼 수 있다. xv6를 종료하고 싶다면 ctrl+a를 누른 후 x를 누르면 빠져나올 수 있다.
+도커를 통한 방법도 있다고 합니다!
Update docker
도커를 이용한 방법이 더 용이할거 같아 업데이트 하게 되었다.
https://docs.docker.com/desktop/install/mac-install/
Mac
Install Docker for Mac to get started. This guide covers system requirements, where to download, and instructions on how to install and update.
docs.docker.com
위 링크를 타고 들어가 docker desktop for with apple silicon을 눌러 다운로드를 진행하여 준다.
이미지 파일을 드래그해서 설치하는 과정은 생략하겠다.
도커 설치가 완료되었다면 이미지를 다운받아야 한다.
1. 터미널을 켜준다.
2. 'docker pull --platform linux/arm64 ubuntu' 명령어를 입력해준다. 태그를 안붙히면 자동으로 가장 최신 버젼의 우분투를 다운로드한다. 만약 원하는 버젼이 있다면 태그를 붙힌다. ex)ubuntu:22.04
위와 같이 뜬다면 성공적으로 마친것이다.
3. 이미지를 통해 컨테이너를 실행한다.
docker run -it ubuntu 명령어를 입력하여 컨테이너를 실행한다.
실행하면 바로 ubuntu bash셸이 켜진다. 이제 home디렉터리에 ubuntu로 작업디렉터리를 옮겨 2번에서 진행한 코드 작성을 해주면 된다.
'CS' 카테고리의 다른 글
Memory Management(1) (2) | 2023.12.02 |
---|