Makefile이란

  • 소프트웨어 개발에서 사용되는 파일, 프로그램 빌드와 관련된 지시사항을 다룸
  • make라는 유틸리티와 함께 사용됨
  • 프로그램을 컴파일 하고 빌드하는 과정을 자동화하는데 도움
  • Makefile을 사용하여 ansible playbook을 호출하여 다수의 ansible 작업을 체계적으로 관리하고 단일 명령으로 전체 배포 프로세스를 자동화할 수 있음
Makefile 
#### Variables ####
export ROOT_DIR ?= $(PWD)
export AETHER_ROOT_DIR ?= $(ROOT_DIR)
export SDRAN_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/sdran
export 5GC_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/5gc
export 4GC_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/4gc
export AMP_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/amp
export GNBSIM_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/gnbsim
export UERANSIM_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/ueransim
export K8S_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/k8s
export ANSIBLE_NAME ?= ansible-aether
export ANSIBLE_CONFIG ?= $(AETHER_ROOT_DIR)/ansible.cfg
export HOSTS_INI_FILE ?= $(AETHER_ROOT_DIR)/hosts.ini
export EXTRA_VARS ?= "@$(AETHER_ROOT_DIR)/vars/main.yml"


#### Start Ansible docker (no longer supported) ####
ansible:
        export ANSIBLE_NAME=$(ANSIBLE_NAME); \
        sh $(AETHER_ROOT_DIR)/scripts/ansible ssh-agent bash

#### Validate Ansible Configuration ####
aether-pingall:
        echo $(AETHER_ROOT_DIR)
        ansible-playbook -i $(HOSTS_INI_FILE) $(AETHER_ROOT_DIR)/pingall.yml \
                --extra-vars "ROOT_DIR=$(ROOT_DIR)" --extra-vars $(EXTRA_VARS)

#### Provision AETHER Components for 5G ####
aether-k8s-install: k8s-install
aether-k8s-uninstall: k8s-uninstall
aether-5gc-install: 5gc-install
aether-5gc-uninstall: 5gc-uninstall
aether-gnbsim-install: gnbsim-install
aether-gnbsim-uninstall: gnbsim-uninstall
aether-amp-install: amp-install
aether-amp-uninstall: amp-uninstall
aether-sdran-install: sdran-install
aether-sdran-uninstall: sdran-uninstall
aether-ueransim-install: ueransim-install
aether-ueransim-uninstall: ueransim-uninstall

#### Shortcut for QuickStart Only ####
aether-install: k8s-install 5gc-install gnbsim-install amp-install
aether-uninstall: monitor-uninstall roc-uninstall gnbsim-uninstall 5gc-uninstall k8s-uninstall

#### Provision AETHER for 4G ####
#### 4G/5G share router role ####
aether-4gc-install: 4gc-core-install 5gc-router-install
aether-4gc-uninstall: 4gc-core-uninstall 5gc-router-uninstall

#### Other Useful Targets ####
aether-resetcore: 5gc-core-uninstall 5gc-core-install
aether-reset4gcore: 4gc-core-uninstall 4gc-core-install
aether-gnbsim-run: gnbsim-simulator-run
aether-add-upfs: 5gc-upf-install
aether-remove-upfs: 5gc-upf-uninstall
aether-ueransim-run: ueransim-run


#include at the end so rules are not overwritten
include $(K8S_ROOT_DIR)/Makefile
include $(GNBSIM_ROOT_DIR)/Makefile
include $(5GC_ROOT_DIR)/Makefile
include $(4GC_ROOT_DIR)/Makefile
include $(AMP_ROOT_DIR)/Makefile
include $(SDRAN_ROOT_DIR)/Makefile
include $(UERANSIM_ROOT_DIR)/Makefile                 

Variables

  • 소프트웨어 빌드와 배포를 위한 환경 설정
  • 각 변수의 역할이 중요
    1. export ROOT_DIR ?= $(PWD)
  • ROOT_DIR : 프로젝트의 root directory 경로를 설정
  • $(PWD) : 현재 작업 중인 directory 를 반환하는 환경 변수 (make가 실행되는 위치에 기반한 동적 값)
  1. export AETHER_ROOT_DIR ?= $(ROOT_DIR)
    • AETHER 프로젝트의 root directory 경로를 설정
    • $(ROOT_DIR) : 최상위 directory를 의미
  2. export SDRAN_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/sdran
  3. export 5GC_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/5gc
  4. export 4GC_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/4gc
  5. export AMP_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/amp
  6. export GNBSIM_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/gnbsim
  7. export UERANSIM_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/ueransim

  8. export K8S_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/k8s
    • sdran, 5gc, 4gc, amp, gnbsim, ueransim, k8s의 root directory 설정
    • 2번의 AETHER_ROOT_DIR를 시작으로 그 아래 deps dir 하위의 각 요소의 directory를 가리킴
  9. export ANSIBLE_NAME ?= ansible-aether
    • ansible 관련 작업을 식별하기 위한 이름을 설정
  10. export ANSIBLE_CONFIG ?= $(AETHER_ROOT_DIR)/ansible.cfg
    • ansible config 파일의 경로를 설정
  11. export HOSTS_INI_FILE ?= $(AETHER_ROOT_DIR)/hosts.ini
    • ansible inventory의 파일 경로를 설정 (hosts의 목록)
  12. export EXTRA_VARS ?= "@$(AETHER_ROOT_DIR)/vars/main.yml"
    • ansible script 실행시 추가적으로 적용할 변수들을 포함한 파일의 경로
    • @ : 해당 파일의 내용을 변수로 직접 삽입함

Start Ansible docker (no longer supported)

ansible:
        export ANSIBLE_NAME=$(ANSIBLE_NAME); \
        sh $(AETHER_ROOT_DIR)/scripts/ansible ssh-agent bash
  • 10번에 정의된 ansible name을 가져와 식별함
  • sh라는 shell을 사용하여 해당 directory에서 ‘ansible’ script를 실행
  • ssh-agent : SSH 키를 자동화
  • bash : bash shell을 통해 추가적인 명령 실행 환경을 제공

Validate Ansible Configuration

#### Validate Ansible Configuration ####
aether-pingall:
        echo $(AETHER_ROOT_DIR)
        ansible-playbook -i $(HOSTS_INI_FILE) $(AETHER_ROOT_DIR)/pingall.yml \
                --extra-vars "ROOT_DIR=$(ROOT_DIR)" --extra-vars $(EXTRA_VARS)
  • 네트워크 상의 모든 host에 대해서 연결성을 테스트하는 ansible playbook을 사용
  • echo : 현재 script가 실행되는 directory가 뭔지 확인하는 과정
  • -i $(HOSTS_INI_FILE) : 인벤토리 파일을 불러오는 directory
  • pingall.yml : 실행할 ansible playbook 파일의 위치, ping test로 예상
  • ` –extra-vars` : ansible playbook에 필요한 추가 변수를 제공

Provision AETHER Components for 5G

  • k8s-install / k8s-uninstall
  • 5gc-install / 5gc-uninstall
  • gnbsim-install / gnbsim-uninstall
  • amp-install / amp-uninstall
    • amp(Aplication Management Platform) : 소프트웨어 application의 관리 및 배포를 용이하게 하는 platfrom, cloud환경에서 중요
  • sdran-install / sdran-uninstall
  • ueransim-install / ueransim-uninstall

Shortcut for QuickStart Only

  • aether-install: k8s-install 5gc-install gnbsim-install amp-install
  • aether-uninstall: monitor-uninstall roc-uninstall gnbsim-uninstall 5gc-uninstall k8s-uninstall

Provision AETHER for 4G

aether-4gc-install: 4gc-core-install 5gc-router-install aether-4gc-uninstall: 4gc-core-uninstall 5gc-router-uninstall

Other Useful Targets

aether-resetcore: 5gc-core-uninstall 5gc-core-install aether-reset4gcore: 4gc-core-uninstall 4gc-core-install aether-gnbsim-run: gnbsim-simulator-run aether-add-upfs: 5gc-upf-install aether-remove-upfs: 5gc-upf-uninstall aether-ueransim-run: ueransim-run

include at the end so ules are not overwritten

  • 여러 하위 Makefile을 포함시킴
  • 서브 프로젝트에 대한 빌드 규칙과 변수를 별도의 Makefile에 정의하여 코드를 모듈화하고 재사용 가능하게 함
  • 주 Makefile의 규칙을 먼저 적용하기 위해 파일의 마지막에 include가 정의되는 것이 좋음
  • 각 component의 Makefile의 위치를 참조해보자