https://velog.io/@jisung719/18.04-vscode-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85
18.04 & vscode & 환경 세팅
pintos 준비하기 pintos 프로젝트를 진행하기 위해서는 18.04의 우분투 환경 세팅이 필요합니다. 근데 분명 환경을 세팅하다 보면 vscode연결에 문제가 발생할 수 있습니다. 이를 해결하고 연결 방식에
velog.io
지성씨 블로그 내용을 이해한 대로 정리해보았다. 갓갓!

어제 새벽 세시까지 도움을 받아 도커 환경을 세팅했다.
테스트가 통과한 모습!
AWS로 우분투 18.04를 사용하는 경우
한 컴퓨터에서 다른 컴퓨터(원격지 컴퓨터)의 셸(cmd)에 접속하기 위해서는 ssh(secure shell)이라는 네트워크 프로토콜을 사용해야 한다.
즉 내 컴퓨터의 터미널에서 ssh로 원격지 컴퓨터에 접속하면 내 컴퓨터에서 원격지 컴퓨터의 셸을 원격 조종할 수 있는 것이다.
하지만 ssh를 사용하면 vim이나 nano같은 편집기를 사용해서 코딩해야 하는데 이 방법은 불편하다.
그래서 vscode의 익스텐션인 remote-ssh나 remote-containers를 사용할 수 있다.
편집기는 내 컴퓨터의 로컬 VS Code를 쓰는데 실제로는 VS Code Server를 쓰게 되므로 원격지의 파일이 달라지고 컴파일과 디버깅 대상도 원격지의 것이 된다.
일반적인 환경에서는 이렇게 사용하면 되는데 pintos 실습 환경은 우분투 18.04(glibc 2.27)이다.
반면 VS Code Server는 최소 glibc 2.28버전이 필요하다.
그래서 이런 방법을 사용할 수 있다.
1. 컴파일은 내 로컬에서 ssh로 우분투 18.04 cmd로 접속해서 하기
2. 코딩은 내 로컬 vscode 편집기 쓰고 파일질라(ftp 방식)로 우분투 18.04에 보내기
파일질라가 불편하면 vscode 익스텐션인 SFTP를 설치해서 사용해도 된다.
도커를 사용하는 경우
1. 컴파일은 도커 안에서 진행
# 우분투 18.04 컨테이너 안에 접속해서
dockr exec -it dev-ctnr bash
# 내부에서 작업 디렉토리로 이동
cd /workspace
# 컴파일, 빌드, 테스트
./your_binary
터미널에서 도커 접속하려면 이렇게 하고
vscode 도커 익스텐션에서 attach shell을 사용해도 된다.
2. 파일 수정은 vscode로
- AWS썼을 때는 우분투 환경이 원격지에 있기 때문에 ssh로 네트워크 연결을 하여 컴파일했지만, 도커로 컴파일하게 되면 내 컴퓨터 안에서 컴파일하는 것이므로 그냥 내 로컬에 있는 파일을 직접 열어서 수정하기만 하면 된다.
도커 세팅 과정
도커를 사용하는 것이 내 로컬에서 코딩, 컴파일하기 편해보여서 도커를 쓰려고 한다.
도커 데스크탑 설정에서 VM을 QEMU로 바꿔주기
QEMU는 가상 머신(Hypervisor) 종류인데 pintos에서는 이 환경을 쓴다.
맥북 사용자만 필요한 절차라고 함

사용할 폴더 하나를 만들고 안에 도커파일을 생성한다.
# 베이스 이미지
FROM --platform=linux/amd64 ubuntu:18.04
# 로케일과 타임존 설정
ENV TZ=Asia/Seoul \
LANG=ko_KR.UTF-8 \
LANGUAGE=ko_KR.UTF-8
# 필수 패키지 설치
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get install -y \
locales \
tzdata \
build-essential \
gcc \
gdb \
vim \
git \
sudo \
qemu-system-x86 \
python3 && \
# 로케일 생성 및 적용
locale-gen ko_KR.UTF-8 && \
update-locale LANG=ko_KR.UTF-8 && \
# 캐시 정리
rm -rf /var/lib/apt/lists/*
# 비-root 사용자 jungle 생성 및 sudo 권한 부여
RUN useradd -m -s /bin/bash jungle && \
usermod -aG sudo jungle && \
echo "jungle ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/jungle
# 이후 jungle 사용자로 전환
USER jungle
WORKDIR /home/jungle
# Pintos 개발 환경 activate 스크립트 로드 설정
RUN echo "source /home/jungle/pintos-kaist/activate" >> /home/jungle/.bashrc
# 컨테이너 시작 시 bash 실행
CMD ["bash"]
폴더 위치를 cmd로 연다.
## 맥 OS 명령어
1. docker build -t pintos-dev .
2. docker run -it \
-v $(pwd):/home/jungle/pintos-kaist \
-w /home/jungle/pintos-kaist \
pintos-dev
폴더에 pintos-kaist 파일을 넣는다.
문서 (https://casys-kaist.github.io/pintos-kaist/introduction/getting_started.html)에 따르면 다음과 같이 git clone을 하여 pintos-kaist 파일을 받을 수 있다고 한다. 나는 팀원들과 함께 사용하는 깃 레포지토리에 pintos 파일이 있어서 그 파일을 클론받았다.
git clone https://github.com/casys-kaist/pintos-kaist
도커 쉘에 접속한다. (vscode 도커 익스텐션 -> attach shell 누르기)


테스트 해본다.
$ cd pintos-kaist
$ source ./activate
$ cd threads
$ make check
# 뭔가 한참 compile하고 test 프로그램이 돈 후에 다음 message가 나오면 정상
20 of 27 tests failed.
테스트 결과로 생성된 목적파일 gitignore처리
threads 경로 안에서 make check를 하면 자동으로 테스트 코드들이 컴파일/실행되고
그 결과로 build/tests 경로에 각 테스트에 대한 .o파일들이 굉장히 많이 생성된다.

테스트 결과로 생긴 목적 파일들은 깃 원격 저장소에 푸시되면 안 되므로 .gitignore 설정을 해주자.
그렇지 않으면 커밋할 때마다 매번 저 목적파일들을 제외하고 add하거나 make clean으로 목적파일들을 밀어줘야 한다.
성광씨가 올려준 .gitignore 파일 ~
# C 컴파일 산출물
*.o
*.obj
*.so
*.a
*.out
*.exe
*.dll
# 디버그 정보
*.dSYM/
*.stackdump
*.core
*.gcno
*.gcda
*.gcov
# 에디터 및 운영체제에서 생성하는 임시 파일
*~
*.swp
*.swo
.DS_Store
Thumbs.db
# VSCode 설정 파일 (개인 설정이라면 무시해도 무방)
.vscode/
# 빌드 디렉토리 (예: makefile 빌드 시 사용)
build/
bin/'정글 > Pintos' 카테고리의 다른 글
| [pintos] 1주차 - Alarm Clock 구현 과정 (0) | 2025.05.20 |
|---|---|
| [pintos] 1주차 - Alarm Clock 코드 정리 (1) | 2025.05.20 |
| [pintos] 1주차 - 키워드 정리 (2) : Process/Thread, DeadLock, 프로세스 상태/CPU Scheduling (3) | 2025.05.11 |
| [pintos] 1주차 - 키워드 정리 (1) : Semaphore/Mutex, Busy Waiting/Sleep Waiting (0) | 2025.05.10 |
| [pintos] 1주차 - 문서 정리 (0) | 2025.05.10 |