공부 기록

[OS/운영체제] Mac M1/M2/M3 M시리즈에서 x86 아키텍처 Docker 환경 구축하기 / XV6 운영체제 설치하기

solfa 2024. 9. 25. 02:15

XV6를 설치하는 운영체제 과제를 하기 위해 인텔의 x86 아키텍쳐를 구성해야 했다.

여기서 잠깐 차이를 짚고 넘어가자면

x86은 하드웨어 아키텍처이고, XV6는 소프트웨어(운영체제)이다.

 

x86 아키텍처에서 XV6 운영체제가 실행된다고 이해하면 된다.

보통의 Mac 유저라면 UTM이나 Parallels를 사용해 가상환경을 구성한 후 ubuntu 환경을 만들곤 하는데

그렇게 구성한 ubuntu도 사실은 ARM 기반 아키텍처이기 때문에 일반적인 윈도우 환경, 즉 AMD64와는 차이가 있다.

사진은 내가 utm에 ubuntu를 설치해 사용하는 모습이다.

얘도 어차피 arm 기반이라 인텔의 x86과는 완전히 똑같지 않다.

웬만하면 이걸로 쓰면 전부 되지만 이번 운영체제 과제 환경 구성은,,,, 안된다 ;;;

 

Package gcc-multilib is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package 'gcc-multilib' has no installation candidate

 

gcc-multilib을 설치하지 못하는 에러가 발생한다. ㅡㅡ

저걸 설치하려면 결국 x86 환경을 만들어야하는데

mac에서 x86 환경을 구성할 수 있는 방법은 크게 3가지가 있다.


mac에서 x86 환경을 구성할 수 있는 방법

1. UTM에 AMD64의 ubuntu를 설치하기

위 사진이랑 다른 우분투를 하나 더 설치하면 된다. 아키텍쳐를 x86으로 바꾸고 우분투 디스크 amd로 다운받으면 된다.

https://mac.getutm.app/

 

UTM

Securely run operating systems on your Mac

mac.getutm.app

 

  • UTM에서 새로운 가상 머신을 추가한다.
  • 아키텍처 옵션에서 x86_64(AMD64)를 선택한다.
  • Ubuntu ISO 파일(AMD64 버전)을 다운로드한다. (Ubuntu 공식 사이트에서)
  • https://www.releases.ubuntu.com/jammy/
  • UTM에 다운로드한 디스크 이미지를 연결하고 가상 머신을 실행한다.
  • 가상 머신 안에서 Ubuntu 설치를 진행한다.

 

가장 쉽지만 써본 사람의 후기를 들어보면,,, 너무너무 느리다고 한다.

 


2. ec2 활용하기

2-1. EC2 인스턴스 생성하기

AWS 콘솔에서 EC2 서비스로 이동하여 인스턴스 생성을 한다.

1) 아키텍처 선택: 기본적으로 x86(AMD64) 아키텍처, ARM 기반 인스턴스도 선택할 수 있다.

 

2) AMI(운영체제 이미지): Ubuntu, Amazon Linux, CentOS 등 원하는 x86 아키텍처 기반의 이미지를 선택할 수 있다. 여기에서 꼭 x86 아키텍처 버전을 선택한다. Ubuntu 22.04 LTS를 선택하면 됨.

 

3) 인스턴스 유형 선택: t2.micro를 선택해 무료로 사용해준다.

 

4) 키 페어 설정: 새로운 키 페어(.pem 파일)를 생성하여 로컬 컴퓨터에 다운로드한다.

 

5) SSH 키 설정: 다운로드한 .pem 파일을 .ssh로 옮기고 파일 권한을 설정해준다.

 

5-1) .ssh 폴더로 이동하는 방법

mkdir ~/.ssh // 처음 인스턴스 생성 or 과제를 위해 ec2 처음 접해보면 파일 만들어주고 이동
mv ~/Downloads/your-key.pem ~/.ssh/

mv 명령어 안쓰고 그냥 폴더 옮겨줘도 된다.


5-2) 파일 권한 설정하는 방법

chmod 400 ~/.ssh/your-key.pem

 

2-2. EC2 인스턴스에 SSH로 접속

EC2 인스턴스 대시보드에서 퍼블릭 IP 주소를 확인한 후 다음 명령어로 SSH에 접속한다.

ssh -i ~/.ssh/your-key.pem ubuntu@<EC2 퍼블릭 IP 주소>

 

이후 필요한 소프트웨어 패키지를 설치하고 환경 설정을 해주면 된다. sudo apt update~ 이제 하면 됨

 

 

aws 계정이 이미 있거나 인스턴스 생성에 익숙한 사람은 이 방법이 편한 것 같다.

 


3. Docker 사용하기

3-1. Docker 설치

Docker Desktop을 설치한다.

https://www.docker.com/products/docker-desktop/

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

이미 있는 사람은 바로 실행하면 된다.

 

3-2. Docker 실행 후 ubuntu 컨테이너 생성하기

1) 일단 다운받은 프로그램을 실행시킨다. 그냥 앱 열면 실행되는 중인거다. 따로 계정 생성하고 연동할 필요는 없다.

 

2) 이후 터미널창을 하나 열어준다. 

Mac에서 Docker 이미지를 실행할 때 --platform linux/amd64 옵션을 사용하면 x86 환경을 설정할 수 있다!

 

3) 터미널에 다음과 같이 명령어를 입력한다.

docker pull --platform linux/amd64 ubuntu

 

 

arm이 아니라 amd이다!! 워닝 떠도 그냥 무시까고 해야됨

 

맨 뒤에 버전을 명시해줘서 원하는 버전의 ubuntu를 다운받을 수 있다. ex)ubuntu:22.04

글을 쓰는 24.9.25 기준 24.04.1 버전까지 나온 상태이지만

해당 과제에서 python2.7을 사용하는데 이게 22버전까지만 지원이 돼서 난 22.04 버전으로 설치했다.

이런 결과가 나오면 성공이다.


4) 이미지를 통해 컨테이너를 실행한다.

docker run -it ubuntu

 

이 명령어를 입력하면 자동으로 컨테이너가 실행된다. root@%#%#% 이게 나오면 성공이다.

 

이후 필요한 소프트웨어 패키지를 설치하고 환경 설정을 해주면 된다. sudo apt update~ 이제 하면 됨

 

처음 생성 이후에는 컨테이너 ID를 활용해 컨테이너를 열고 닫고 다시 쓰고 해주면 된다.

docker start <CONTAINER_ID>
docker exec -it <CONTAINER_ID> /bin/bash

이렇게 해서 특정 컨테이너를 선택해 bash를 바로 열어줄 수 있다.

컨테이너 ID는 도커 앱에 최근 쓴 목록으로 나와있으니 확인하시구

여기에서 이제 클론받고 sudo~~ 뚱땅뚱땅 하면 된다.


도커 명령어 정리

내가 몰라서 정리해둔다.

 

도커 재실행시 start 명령어

docker start <CONTAINER_ID>

 

컨테이너 ID 확인

docker ps -a  # 모든 컨테이너 확인
특정 컨테이너 삭제
docker rm <CONTAINER_ID>

 

도커 종료

exit

qemu와 xv6 설치하기

과제에 사용했던 강의 자료에 있는 코드는 다음과 같다.

# Install packages
sudo apt-get update
sudo apt-get install git python2.7 build-essential gcc-multilib libglib2.0-dev libpixman-1-dev libjpeg9

# Install qemu and 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

# Add the following line in qemu/qga/commands-posix.c
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
(if your system has less than 8 cores, use -j4)

# PATH setting for QEMU
# <path-to-qemu> 여기를 내 pwd 확인해서 바꾼다. ex)/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

# Run XV6 on QEMU
cd xv6
make qemu-nox QEMU=$QEMU

Docker를 쓰면서 주의할 점, 조금 달랐던 점

1. 처음 명령어부터 sudo를 찾을 수 없다고 에러가 뜬다.

bash: sudo: command not found

 

기본적으로 Ubuntu 컨테이너가 최소 설치 버전이기 때문에 sudo자체도 없어서 발생하는 문제, sudo도 깔아주면 된다.

 

sudo 설치 명령어

apt-get update
apt-get install sudo -y

 

이후 sudo apt- ~~~ 해주면 된다.

 

2. make -j 8 이후 warnning이 너무 많이 뜬다.

 

ARM/AMD64 아키텍처 차이 - 다른 아키텍처에 맞지 않는 코드라 그렇다고 한다.

근데 음... 도커 위에 amd 위에 x86을 올린 건데 오류가 생길 수가 있나???

모르겠다

무시하자...

 

 

 

암튼 이렇게 하면 x86 아키텍처를 Docker 환경에서 무사히 구성할 수 있다!

 

다음 과제에 갑자기 안되면 어쩌나 싶지만... ㅜㅜ

 

728x90