4.Makefile
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
- 소프트웨어 빌드와 배포를 위한 환경 설정
- 각 변수의 역할이 중요
export ROOT_DIR ?= $(PWD)
ROOT_DIR
: 프로젝트의 root directory 경로를 설정$(PWD)
: 현재 작업 중인 directory 를 반환하는 환경 변수 (make가 실행되는 위치에 기반한 동적 값)
export AETHER_ROOT_DIR ?= $(ROOT_DIR)
- AETHER 프로젝트의 root directory 경로를 설정
$(ROOT_DIR)
: 최상위 directory를 의미
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
- sdran, 5gc, 4gc, amp, gnbsim, ueransim, k8s의 root directory 설정
- 2번의 AETHER_ROOT_DIR를 시작으로 그 아래 deps dir 하위의 각 요소의 directory를 가리킴
export ANSIBLE_NAME ?= ansible-aether
- ansible 관련 작업을 식별하기 위한 이름을 설정
export ANSIBLE_CONFIG ?= $(AETHER_ROOT_DIR)/ansible.cfg
- ansible config 파일의 경로를 설정
export HOSTS_INI_FILE ?= $(AETHER_ROOT_DIR)/hosts.ini
- ansible inventory의 파일 경로를 설정 (hosts의 목록)
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)
: 인벤토리 파일을 불러오는 directorypingall.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의 위치를 참조해보자