Welcome to Pintos. Pintos is a simple operating system framework for the 80x86 architecture.
Docker Build
FROM ubuntu:12.04
RUN sed -i -e 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
RUN sed -i -e 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
RUN apt-get update && apt-get install -y \\
bash \\
vim \\
build-essential \\
gcc-4.4 \\
gcc-multilib \\
g++-4.4 \\
perl \\
wget \\
patch \\
libncurses5-dev \\
libx11-dev libxrandr-dev xorg-dev \\
make
RUN mv /usr/bin/gcc-4.4 /usr/bin/gcc
RUN mv /usr/bin/g++-4.4 /usr/bin/g++
COPY ./bochs-2.2.6.tar.gz /root/
RUN mkdir /root/pintos
RUN echo 'export PATH="$PATH:/root/pintos/src/utils"' >> ~/.bashrc
CMD ["/bin/bash"]git clone git@github.com:NamJeongseok/PintOS-Docker-UNIST.git
cd PintOS-Docker-UNIST- amd64 (x86_64) (Window)
sudo docker build -t pintos .- ARM64 (Silicon Mac)
docker build --platform=linux/amd64 -t pintos .Error
โ PintOS-Docker-UNIST git:(main) sudo docker build -t pintos .
Password:
[+] Building 1.8s (9/14) docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 696B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:12.04 1.5s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/9] FROM docker.io/library/ubuntu:12.04@sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d 0.0s
=> => resolve docker.io/library/ubuntu:12.04@sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 42B 0.0s
=> CACHED [2/9] RUN sed -i -e 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources 0.0s
=> CACHED [3/9] RUN sed -i -e 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/source 0.0s
=> ERROR [4/9] RUN apt-get update && apt-get install -y bash vim build-essential gcc-4.4 g 0.2s
------
> [4/9] RUN apt-get update && apt-get install -y bash vim build-essential gcc-4.4 gcc-multilib g++-4.4 perl wget patch libncurses5-dev libx11-dev libxrandr-dev xorg-dev make:
0.202 qemu: uncaught target signal 11 (Segmentation fault) - core dumped
0.206 E: Method http has died unexpectedly!
0.207 E: Sub-process http received a segmentation fault.
------
1 warning found (use docker --debug to expand):
- InvalidBaseImagePlatform: Base image ubuntu:12.04 was pulled with platform "linux/amd64", expected "linux/arm64" for current build (line 1)
Dockerfile:6
--------------------
5 |
6 | >>> RUN apt-get update && apt-get install -y \\
7 | >>> bash \\
8 | >>> vim \\
9 | >>> build-essential \\
10 | >>> gcc-4.4 \\
11 | >>> gcc-multilib \\
12 | >>> g++-4.4 \\
13 | >>> perl \\
14 | >>> wget \\
15 | >>> patch \\
16 | >>> libncurses5-dev \\
17 | >>> libx11-dev libxrandr-dev xorg-dev \\
18 | >>> make
19 |
--------------------
ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y \\tbash \\tvim \\tbuild-essential \\tgcc-4.4 \\tgcc-multilib \\tg++-4.4 \\tperl \\twget \\tpatch \\tlibncurses5-dev \\tlibx11-dev libxrandr-dev xorg-dev \\tmake" did not complete successfully: exit code: 100
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/307xpyqphklv4cd5fc8tmb1egRosetta ํค๊ธฐ
๋ด๊ฐ ์ ์ ํํ ์ค ๋ฏธ๋ฆฌ ํด๋ณด๋ ค๊ณ ๋ธ๋ก๊ทธ ์ฐพ์๋ณด๋ค๊ฐ ์ด ์ค์ ์ ๊บผ์ผ x86์ผ๋ก ํ์คํ๊ฒ ๋์๊ฐ๋ค๊ณ ํด์ ๊บผ๋จ์๋๋ฐ, ์ด๊ฑฐ ํค๋๊น ์ ๋๋ค.

์ด์ ์ ํํ ์ค ๋ฏธ๋ฆฌ ํด๋ณด๋ ค๊ณ ํ ๋, ์ด๋ค ๋ธ๋ก๊ทธ ๋ณด๊ณ
์ ๊ฑธ ๊บผ์ผ x86์ผ๋ก ์ ํํ ์๋ํ๋ค๊ณ ํด์ ๊บผ๋จ์๋๋ฐ, ์ด๊ฒ ๋ฌธ์ ์๋ค.
Docker์์๋--platform=linux/amd64์ต์ ์ผ๋ก x86 ์ด๋ฏธ์ง๋ฅผ ์คํํ ๋, ๋ด๋ถ์ ์ผ๋ก QEMU๋ฅผ ์ด์ฉํด ์๋ฎฌ๋ ์ด์ ํจ.์ด๋ Rosetta๋ฅผ ํ์ฑํํ๋ฉด QEMU๊ฐ ๋ ์์ ์ ์ด๊ณ ๋น ๋ฅด๊ฒ ๋์ํจ. ํนํ ์ค๋๋ ๋ฆฌ๋ ์ค ์ด๋ฏธ์ง(Ubuntu 12.04 ๊ฐ์ ๊ฑฐ)์์ apt-get์ด ์ฃฝ๊ฑฐ๋ ์ธ๊ทธํดํธ ๋๋ ๊ฒฝ์ฐ, ๋๋ถ๋ถ Rosetta ๊บผ์ ธ ์์ด์ ์๊ธฐ๋ ๋ฌธ์ ์.
๋น๋ ์ฑ๊ณต
docker build --platform=linux/amd64 -t pintos .
Start
wget [<http://www.stanford.edu/class/cs140/projects/pintos/pintos.tar.gz>](<http://www.stanford.edu/class/cs140/projects/pintos/pintos.tar.gz>)tar xvf pintos.tar.ํ์ผ ๊ถํ ์๋ฌ ํด๊ฒฐ
์ง์ง ์ด๊ฑฐ๋๋ฌธ์ ๊ฐ๊ณ ์ํ์โฆ
Stanford์์ ๋ฐ์ ํ์ผ์ด ๊ถํ์ด ์๋ ์ฑ๋ก ์ฃผ๋๋ฐ,
์๋์ฐ์์๋ ์๋ ์๊ด์ด ์์ด์ ๊ด์ฐฎ์๋ฐ,
๋งฅ์์๋ ์คํ ๋ถ๊ฐ๋ฅํ์ฑ๋ก ์์ถ์ด ํ์ด์ ธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ.
๊ทผ๋ฐ ์ด๊ฒ ๋ ์ด ์ํ๋ก Docker๋ก ์ฎ๊ฒจ์ ๊ทธ๋ฅ Permission Denied ํด๋ฒ๋ฆฌ๋๊น
์ด๊ฒ ๋๋์ฒด ์ ๊ทธ๋ฐ์ง GPT ์จ๋ ์ ๋ชฐ๋์.
Docker ๋์ด๊ฐ๊ธฐ ์ ๋ถํฐ ์๋ณธ ํ์ผ ๊ถํ์ด ๋ถ์กฑํด์ ๊ทธ๋ฐ๊ฑด๋ฐ Docker ํ์ผ ๊ณต์ ๋ฐฉ์๋๋ฌธ์ธ์ค์๊ณ ์ฝ์งํจ
xattr -rc pintos/chmod -R u+rwX,go+rX pintos/find pintos/ -type f -exec ls -l {} \\;์ ๋ช ๋ น์ด ํ๋ฉด ์๋์ฒ๋ผ file permission์ด ๋ธ
-rw-r--r--@ 1 hoon staff 333 9 27 2012 pintos//src/Makefile.kernel
-rwxr-xr-x@ 1 hoon staff 1486 9 27 2012 pintos//src/misc/bochs-2.2.6-build.sh
-rw-r--r--@ 1 hoon staff 511 9 27 2012 pintos//src/misc/bochs-2.2.6-solaris-link.patch์ฌ๊ธฐ ๋ณด๋ฉด ์คํ ๊ฐ๋ฅํ ํ์ผ (.sh) ํ์ผ ๋ฑ์ x ํ์๊ฐ ์๊ธธ๊ฒ์.
๋๋ ์คํ ๊ฐ๋ฅํ ํ์ผ๋ง ๊ถํ ๋ณด๋ ค๋ฉด
find pintos/ -type f -perm -111 -exec ls -l {} \\;์๋์ฒ๋ผ ๋๋ค๋ฉด ์ฑ๊ณต
-rwxr-xr-x@ 1 hoon staff 1486 9 27 2012 pintos//src/misc/bochs-2.2.6-build.sh
-rwxr-xr-x@ 1 hoon staff 4096 9 27 2012 pintos//src/tests/make-grade
-rwxr-xr-x@ 1 hoon staff 2951 9 27 2012 pintos//src/utils/backtrace
-rwxr-xr-x@ 1 hoon staff 4563 9 27 2012 pintos//src/utils/pintos-mkdisk
-rwxr-xr-x@ 1 hoon staff 429 9 27 2012 pintos//src/utils/pintos-gdb
-rwxr-xr-x@ 1 hoon staff 29821 9 27 2012 pintos//src/utils/pintos์ปจํ
์ด๋ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ก์ปฌ์์ ํธํ๊ฒ bochs ํ์ผ ์์
pintos/src/misc/bochs-2.2.6-build.sh

- ๋ค์ ๋ด์ฉ์ผ๋ก ์์
CFGOPTS="--enable-cpu-level=6 --with-x --with-x11 --with-term --with-nogui --prefix=$DSTDIR"docker run
๋๋์ด ์ ๋๋ก ์คํํด๋ณด์.
docker run --platform=linux/amd64 -it -p 80:80 \\
-v /Users/hoon/github/pintos/pintos:/root/pintos \\
--name pintos pintosboch 2.6.6 ์ค์น
- ์์์ VSCode๋ก bochs ์์ ์ํ๋ค๋ฉดbash
cd pintos/src/miscbashvi bochs-2.2.6-build.shi : ์์ ๋ชจ๋
์์ ...
ESC : ์์ ๋ชจ๋ ๋๊ฐ๊ธฐ
:wq : ์ ์ฅ ํ ์ข ๋ฃ- ๋ค์ ๋ด์ฉ์ผ๋ก ์์
bashCFGOPTS="--enable-cpu-level=6 --with-x --with-x11 --with-term --with-nogui --prefix=$DSTDIR"
๐ข ๋ง์ฝ Container๋ฅผ ์ญ์ ํด์ ๋ค์ Runํ๋ค๋ฉด ์ด ๊ณผ์ ์ ๋ค์ ํด์ค์ผํ๋ค.
cd /root/pintos/src/miscenv SRCDIR=/root/ PINTOSDIR=/root/pintos/ DSTDIR=/usr/local ./bochs-2.2.6-build.shwhich bochs
bochs -vTest
cd /root/pintos/src/threadsmakecd buildpintos -q run alarm-multiple
github repo ์์ฑ
root/pintos/src ์์ ์์ํ๊ธฐ
ํ ๋๋ง๋ค root ํด๋์์ ์์ํ๋๋ฐฉ๋ฒ
ํ๋ฒ ์ณ์ฃผ๋ฉด ํญ์ ์ ์ฉ๋จ.
๋์ปคํ์ผ์ ๋ค์ ์ค์ ๋ฃ์ด๋ ๋๊ธด ํจ.
WORKDIR /root/pintos/src๊ทผ๋ฐ ์ด๋ฏธ ๋น๋ํ์ผ๋ ์๋ ๋ช ๋ น์ด๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์น๋ฉด ๋จ
echo 'cd /root/pintos/src' >> ~/.bashrc- ์ดํ bashrc ์ํฉbash
cat ~/.bashrcbash... ๋งจ ์๋์ค์ ๋ค์ ๋์ค์ด ์์ผ๋ฉด ์ฑ๊ณต export PATH="$PATH:/root/pintos/src/utils" cd /root/pintos/src
ํ๋ฒ Run ์ดํ Container ์์

์ปจํ
์ด๋์์ exit ๋ฅผ ํ๋ค๋ฉด,
์์ฒ๋ผ Container๋ ๋จ์์๊ณ , ์ค์ง๋์ด์์ ๊ฒ์ด๋ค.
docker start -ai pintos๋์ค์ ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก exit ํ๊ณ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
Branch
๋ธ๋์น ์์ฑ
git checkout -b [your-branch-name]git checkout -b feat/alarm-clock๐ค ๋ง๋ ๋ธ๋์น๋ฅผ GitHub์ ํธ์
git push -u origin [your-branch-name]git push -u origin feat/alarm-clocku์ต์ ์ ์ดํgit push/pull์ ๋ธ๋์น ์ด๋ฆ ์๋ต ๊ฐ๋ฅํ๊ฒ ์ฐ๊ฒฐํด์ค
- ๋ค์๋ถํฐ ๊ทธ๋ฅ push ํด๋ ๋จ.
- ์
feat/๋ฅผ ์ฐ๋๊ฐ?๋ธ๋์น ์ด๋ฆ ํจํด
Prefix ์๋ฏธ ์์ ๋ธ๋์น๋ช feat/์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ feat/alarm-clockfix/๋ฒ๊ทธ ์์ fix/overflow-bugrefactor/์ฝ๋ ๋ฆฌํฉํ ๋ง (๊ธฐ๋ฅ ๋ณํ X) refactor/thread-inittest/ํ ์คํธ ์ฝ๋ ์ถ๊ฐ/์์ test/userprog-testsdoc/๋ฌธ์, README ์์ doc/setup-instructionschore/๋น๋, ์ค์ ๋ณ๊ฒฝ ๋ฑ ์ก์ผ chore/dockerfile-updatehotfix/๊ธํ ๋ฒ๊ทธ ์์ (๋ฐฐํฌ ํ) hotfix/build-crash์ ์ด๋ ๊ฒ ์ฐ๋?
- ํ์ ์ค์ ๋ธ๋์น๊ฐ ๋ง์์ง ๋ โ ์ด๋ฆ๋ง ๋ณด๊ณ ์ฉ๋ ํ์ ๊ฐ๋ฅ
- GitHub Pull Request์์ ์๋ ์ ๋ ฌ์ด๋ ํํฐ๋ ํธ๋ฆฌํจ
- ํ ๋ด๋ถ์์ ์ผ๊ด๋ ์คํ์ผ ์ ์ง ๊ฐ๋ฅ
- ์ผ๋ถ ์๋ํ ๋๊ตฌ(CI/CD, Release notes)์๋ ์ ํธํ๋จ
- VSCode์์ ํ๋ค๋ฉด ์ด๋ ๊ฒ ์ปค๋ฐ ์ด๋์ ํ๋๊ฑด์ง ํ์ธํด ๋ณผ ์ ์์

Github Pull ์ดํ Error
์ด๊ฑด ๋งฅ์์ ๋ฐ์ํ ๊ฒ์ ์๋๊ณ , ํ์ ์๋์ฐ์์ git pull ํด์จ ํ .sh ํ์ผ์ ์คํํ์ ๋ ๋๋ ๋ฌธ์ ๋ค.
root@04fedab3f530:~/pintos/src/misc# env SRCDIR=/root/ PINTOSDIR=/root/pintos/ DSTDIR=/usr/local bash ./bochs-2.2.6-build.sh
./bochs-2.2.6-build.sh: line 2: $'\\r': command not found
./bochs-2.2.6-build.sh: line 41: syntax error: unexpected end of file$'\\r': command not found์ด ๋ฉ์์ง๋ ํ์ผ์ด Windows ์คํ์ผ ์ค๋ฐ๊ฟ (CRLF) ์ผ๋ก ์ ์ฅ๋์ด ์์ด์ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค. ์ ๋์ค/๋ฆฌ๋ ์ค์์๋ LF (\n) ์ค๋ฐ๊ฟ๋ง ์ฌ์ฉํด์ผ ํ๋ฏ๋ก, ์ด ์คํฌ๋ฆฝํธ๋ ๋ฆฌ๋ ์ค์์ ์ง์ ์คํ๋๊ธฐ ์ ์ ํฌ๋งท์ ๋ณํํด์ผ ํฉ๋๋ค.
syntax error: unexpected end of file์ค๋ฐ๊ฟ ๋ฌธ์ ๋ก ์ธํด ์์ด ์คํฌ๋ฆฝํธ์ ๊ตฌ์กฐ๋ฅผ ์ ๋๋ก ํด์ํ์ง ๋ชปํด ๋๋ถ๋ถ์์ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค.
- ์๋์ฐ์์ git์ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ์ค์ ์ธ๋ฐ, ์ด๊ฒ ๋ฌธ์ ๋ค.
core.autocrlf=true์ด ์ค์ ์:
- clone/pull ํ ๋ โ CRLF๋ก ๋ณํ
- commit/push ํ ๋ โ LF๋ก ๋๋๋ฆผ
์ฆ, ์น๊ตฌ๊ฐ pullํ ๋ .sh ํ์ผ์ด CRLF๋ก ๋ฐ๋์ด๋ฒ๋ฆฐ ๊ฒ์ด๋ค.
Docker ์ฐ๋ถํฌ ์ปจํ ์ด๋๋ ๋ฆฌ๋ ์ค๋๊น CRLF ํด์ ๋ชป ํจ โ ์๋ฌ ๋ฐ์
ํด๊ฒฐ๋ฐฉ๋ฒ
git config --global core.autocrlf # ํ์ฌ ์ค์ ํ์ธ| ๊ฒฐ๊ณผ | ์๋ฏธ |
|---|---|
true | ์๋์ฐ์ฉ: pullํ ๋ CRLF, pushํ ๋ LF |
input | ๋งฅ/๋ฆฌ๋ ์ค์ฉ: pullํ ๋ LF ์ ์ง, pushํ ๋ LF |
| (์๋ฌด๊ฒ๋ ์์) | ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ ์ค (๋ณดํต OS์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์๋) |
git config --global core.autocrlf input์ด๋ฏธ ๋ฐ์ ํ์ผ ๊ณ ์น๊ธฐ
๊ทธ๋ฅ ์ง์ ์ค๋ฐ๊ฟ ์คํ์ผ์ ๋ฐ๊ฟ์ฃผ๋๊ฑฐ๋ค.
๊ทผ๋ฐ .shํ์ผ ๋ค๋ฅธ๊ฒ๋ ๋ง๊ณ ์ด๊ฑด ๊ทธ๋ฅ ์์๋ฐฉํธ์ด๋ ๋ค์ pullํ๋๊ฑธ ์ถ์ฒ.
sed -i 's/\\r$//' bochs-2.2.6-build.shFF?
VSCode๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด FF๊ฐ ๋ค์ด๊ฐ ์ ๊ธฐํ ๋ฌธ์๊ฐ ์๋ค.

์ด FF๋ Form Feed (์ค ๋ฐ๊ฟ ๋ช
๋ น ์ค ํ๋)
ASCII ์ฝ๋๋ก๋ 0x0C (๋๋ ^L) ์ด๊ณ ,
ํฐ๋ฏธ๋์์๋ ํ์ด์ง ๋๊น ์ญํ ์ ํ๋ ์์ ๋ฌธ์
- ์์ ๊ต์ฌ/์๋ํฐ์์ ๋ณต๋ถํ ์ฝ๋
- ๋๊ตฐ๊ฐ
.cํ์ผ์^L๋ฃ์ด์ ๊ตฌ๋ถ์์ฒ๋ผ ์ฐ๋ ์ต๊ด
- ํํ ์ค๋ ์ค๋๋ ์ ๋์ค ๊ธฐ๋ฐ ์ฝ๋์์ ๊ฐ๋ ๋ณด์.
- VS Code๊ฐ ํน๋ณํ ๋ณด์ฌ์ฃผ๋ ๊ฑฐ๊ณ , ์ค๋ฅ๋ ์๋