현재 사용자에 sudo 권한 부여하기
# 루트모드 진입
$ su
$ nano /etc/sudoers
<사용자이름> ALL=(ALL) ALL 추가
호스트 와 게스트 간 복사 붙여넣기 허용
참고: https://programfrall.tistory.com/100
요약: 클립보드 양방향 공유 + 게스트 확장 이미지 삽입
1)VirtualBox 관리자에서 가상머신 클릭하고 설정 클릭
2)일반 탭에서 Features 클릭해서 클립 보드 공유 양방향으로 설정
터미널 실행 환경 구축
Setting → Language region → English (Canada) 로 설정 → 터미널 실행 가능
Ghost installer로 가상머신에 커널 설치하고 컴파일하기
깃허브 공식 ghOSt 커널 리포지터리를 클론받지 말고 아래 명령어로 설치하는게 버그 발생 확률이 적다.
→ 이유: 우분투 버전 20.04에 맞는 의존성을 다 설치해주기 때문이다ㅏ.
sudo apt update && sudo apt install git make && git clone $ <https://github.com/Swire42/ghost-installer> && cd ghost-installer && sudo make
grub 부트로더 사용하여 컴파일한 커널로 부팅하기 (시작할때 esc 눌러서 사진과 같은 부팅모드 진입하기)
아래 사진에서 컴파일 한 커널 부팅파일의 이름으로 바꿔줘야함 → 5.15.0을 linux.5.11.0+으로 바꿔야함


첫 실행에선 위와 같이 진행하면되고 추후에 5.11.0으로 부팅하는 GRUB 부팅 옵션을 만들어서 진행하면 됨
GRUB 부팅옵션 만들기
$ sudo nano /etc/grub.d/40_custom
부팅옵션 작성
#!/bin/sh
exec tail -n +3 $0
# 작성 창에서 사용자 상황에 맞게 작성 (아래는 예시)
menuentry "My Custom Linux for Ghost" {
set root='hd0,msdos5'
search --no-floppy --fs-uuid --set=root 629e4827-1292-42d5-8523-03b959e8d18f
linux /boot/vmlinuz-5.11.0+ root=UUID=629e4827-1292-42d5-8523-03b959e8d18f ro quiet splash $vt_handoff
initrd /boot/initrd.img-5.11.0+
}
업데이트, 재부팅
$ sudo update-grub
$ sudo reboot
가상머신에 ghost-userspace 코드 클론 받기
$ git clone <https://github.com/selfdesign-OS/ghost-userspace-o1.git>
컴파일 도구인 바젤 설치
sudo apt install -y apt-transport-https curl gnupg && curl -fsSL <https://bazel.build/bazel-release.pub.gpg> | gpg --dearmor | sudo tee /usr/share/keyrings/bazel-archive-keyring.gpg >/dev/null && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] <https://storage.googleapis.com/bazel-apt> stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list >/dev/null && sudo apt update && sudo apt install -y bazel-5.4.0
ghOSt 파일 시스템인 ghostfs 마운트하기
$ sudo mount --source ghost --target /sys/fs/ghost -t ghost
# 위 명령어 후 아래와 같이 폴더가 표시되어야 한다.
$ ls /sys/fs/ghost
ctl version
바젤 5.4.0으로 수정하기 (7.x 에서 다운그레이드)
$ sudo apt install bazel-5.4.0
$ sudo ln -s /usr/bin/bazel-5.4.0 /usr/bin/bazel
$ sudo rm /usr/bin/bazel
2가 안되면 3 실행하고 다시 2 실행
컴파일 진행
$ sudo bazel build o1_agent
sudo 권한으로 스케줄링 실행하기 (아래는 스케줄러가 o1_agent라고 가정)
# 0~3번 코어에서 스케줄링 실행
$ sudo bazel-bin/o1_agent --ghost_cpus 0-3
# 스케줄러 실행시 디버깅 출력문 log.txt에 기록하는 명령어
$ sudo bazel-bin/o1_agent --ghost_cpus 0-3 --verbose=3 > log.txt 2>&1
# 루트 계정 진입
$ su
# 루트 계정에서 잔존하는 enclave 삭제
$ for i in /sys/fs/ghost/enclave_*/ctl; do echo destroy > $i; done
8-1 삭제 명령어 sudo
sudo sh -c 'for i in /sys/fs/ghost/enclave_*/ctl; do echo destroy > "$i"; done'