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

  1. 현재 관리자에 sudo 권한 부여하기

    루트모드로 nano /etc/sudoers로 파일 열어서 “<사용자이름> ALL=(ALL) ALL “ 추가하기

  2. 가상머신에서 복사 붙여넣기 허용하기

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

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

  3. 터미널 실행 안되는 버그

    Language region English(캐나다)로 설정 → 터미널 실행가능

2. ghOSt 세팅

  1. Ghost 공식 installer로 가상머신에 커널 설치하고 컴파일하기

    깃허브에서 커널 리포지터리를 클론받지 말고 아래 명령어로 설치해야함

    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 코드 클론 받기

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

    # 1단계: Bazel 배포 URI를 패키지 소스로 추가
    $ sudo apt install apt-transport-https curl gnupg -y
    $ curl -fsSL <https://bazel.build/bazel-release.pub.gpg> | gpg --dearmor >bazel-archive-keyring.gpg
    $ sudo mv bazel-archive-keyring.gpg /usr/share/keyrings
    $ 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
    # 2단계: Bazel 설치 및 업데이트
    $ sudo apt update && sudo apt install bazel
    
    
  5. ghOSt 파일 시스템인 ghostfs 마운트하기

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