1. Virtual Box 가상머신 초기세팅 (권장 : 하드디스 크기: 100GB, 최소60GB)

  1. 현재 사용자에 sudo 권한 부여하기

    # 루트모드 진입
    $ su 
    $ nano /etc/sudoers
    <사용자이름> ALL=(ALL) ALL 추가
    
  2. 호스트 와 게스트 간 복사 붙여넣기 허용

    참고: https://programfrall.tistory.com/100

    요약: 클립보드 양방향 공유 + 게스트 확장 이미지 삽입

    1)VirtualBox 관리자에서 가상머신 클릭하고 설정 클릭

    2)일반 탭에서 Features 클릭해서 클립 보드 공유 양방향으로 설정

  3. 터미널 실행 환경 구축

    Setting → Language region → English (Canada) 로 설정 → 터미널 실행 가능

2. ghOSt 커널 컴파일 및 부팅 & 의존성 설치

  1. 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
    
  2. grub 부트로더 사용하여 컴파일한 커널로 부팅하기 (시작할때 esc 눌러서 사진과 같은 부팅모드 진입하기)

3. ghOSt userspace api 컴파일

  1. 가상머신에 ghost-userspace 코드 클론 받기

    $ git clone <https://github.com/selfdesign-OS/ghost-userspace-o1.git>
    
  2. 컴파일 도구인 바젤 설치

    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
    
  3. ghOSt 파일 시스템인 ghostfs 마운트하기

    $ sudo mount --source ghost --target /sys/fs/ghost -t ghost
    # 위 명령어 후 아래와 같이 폴더가 표시되어야 한다.
    $ ls /sys/fs/ghost
    ctl  version
    
  4. 바젤 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 실행
    
    
  5. 컴파일 진행

    $ sudo bazel build o1_agent
    
    
  6. 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

  1. 스케줄러 실행 중 crash 발생시 enclave 삭제 명령어
    (스케줄링 실패했을 때 이걸로 enclave들을 다 지워줘야 clean하게 다시 시도 가능함)
# 루트 계정 진입
$ 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'