#!/bin/bash
######################################################################
#
# OpenWRT 빌드 스크립트
#
# OS: CentOS 7
# Target Profile: WeVO 11AC NAS Router
#
# Firmware download:
# http://downloads.openwrt.org/releases/19.07.0/targets/ramips/mt7621/openwrt-19.07.0-ramips-mt7621-11acnas-squashfs-sysupgrade.bin
#
######################################################################
CURRENT_DIR=$(pwd)
GIT_URL="https://git.openwrt.org/openwrt/openwrt.git"
OPENWRT_VER="19.07.0"
DEVICE_ARCH="ramips"
DEVICE_SOC="mt7621"
MY_OPENWRT_CONFIG="$(pwd)/myconfig"
CONFIG_DOWNLOAD_URL="http://downloads.openwrt.org/releases/${OPENWRT_VER}/targets/${DEVICE_ARCH}/${DEVICE_SOC}/config.seed"
CPU_CORE=3
######################################################################
#
# 사용법 출력
#
######################################################################
function usage() {
echo
echo "$0 (build step)"
echo
echo "build step:"
echo " yum: update required files via yum"
echo " dnsrc: download openwrt source code via git"
echo " dncfg: kernel & openwrt config file download"
echo " menuconfig: make menuconfig"
echo " make: make"
echo " getbin: copy the finished build image to the current directory"
echo " clean: make distclean"
echo " reset: delete all files, including source code"
}
######################################################################
#
# 빌드에 필요한 CentOS 패키지를 설치한다.
#
######################################################################
function cmd_yum() {
yum -y install binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel zlib-static make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static ncurses-libs sed sdcc intltool sharutils bison wget git-core openssl-devel xz subversion
}
######################################################################
#
# OpenWRT 소스코드를 다운로드 받고, feeds를 업데이트 한다.
#
######################################################################
function cmd_dnsrc() {
mkdir -p ${CURRENT_DIR}
cd ${CURRENT_DIR}
git clone -b "v${OPENWRT_VER}" ${GIT_URL}
cd ${CURRENT_DIR}/openwrt
####################################################################
# feeds 업데이트
####################################################################
./scripts/feeds update -a
./scripts/feeds install -a
####################################################################
# LuCI Web Interface
####################################################################
./scripts/feeds update packages luci
./scripts/feeds install -a -p luci
cd ${CURRENT_DIR}
}
######################################################################
#
# 커널 CONFIG 파일을 다운로드 받는다.
#
######################################################################
function cmd_dncfg() {
rm -f ${CURRENT_DIR}/config.*
wget --no-check-certificate -P ${CURRENT_DIR} ${CONFIG_DOWNLOAD_URL}
echo "CONFIG_TARGET_${DEVICE_ARCH}_${DEVICE_SOC}_DEVICE_11acnas=y" >> ${CURRENT_DIR}/config.seed
cp -fv ${CURRENT_DIR}/config.seed ${CURRENT_DIR}/openwrt/.config
}
######################################################################
#
# menuconfig 실행
#
# 글자가 깨질 경우 vi ~/.bash_profile 해서
# export TERM=xterm
# 을 추가하고 터미널 클라이언트도 맞춘다.
#
######################################################################
function cmd_menuconfig() {
if [ ! -f ${CURRENT_DIR}/config.seed ]
then
if [ ! -f ${MY_OPENWRT_CONFIG} ]
then
echo "Please execute the \"${0} dncfg\" first."
exit 1
fi
fi
cd ${CURRENT_DIR}/openwrt
rm -rf tmp
rm -f .config
make defconfig
####################################################################
# 다운로드 된 config가 있으면 그것으로 make menuconfig 준비
####################################################################
if [ -f ${CURRENT_DIR}/config.seed ]
then
cp -fv ${CURRENT_DIR}/config.seed ${CURRENT_DIR}/openwrt/.config
fi
####################################################################
# 미리 준비된 config가 있으면 그것으로 make menuconfig 준비
####################################################################
if [ -f ${MY_OPENWRT_CONFIG} ]
then
cp -fv ${MY_OPENWRT_CONFIG} ${CURRENT_DIR}/openwrt/.config
fi
make menuconfig
}
######################################################################
#
# make
# ※ V=99는 make에서 빌드시 상세한 정보가 보여지도록 한다.
# ※ "-j 5"는 멀티스레드로 빌드를 진행한다 5는 CPU 코어수 + 1
# ※ IGNORE_ERRORS는 오류를 무시할 것인가 결정한다.
#
######################################################################
function cmd_make() {
cd ${CURRENT_DIR}/openwrt
if [ ! -f .config ]
then
echo "Please execute the \"${0} config\" first."
exit 1
fi
rm -rf ${CURRENT_DIR}/openwrt/bin/targets/${DEVICE_ARCH}/${DEVICE_SOC}/*
export FORCE_UNSAFE_CONFIGURE=1
make -j ${CPU_CORE} IGNORE_ERRORS=1 V=99
}
######################################################################
#
# 컴파일 완료된 이미지 파일을 현재 디렉토리로 복사
#
######################################################################
function cmd_getbin() {
rm -f ${CURRENT_DIR}/*.bin
cp -fv ${CURRENT_DIR}/openwrt/bin/targets/${DEVICE_ARCH}/${DEVICE_SOC}/*-sysupgrade.bin ${CURRENT_DIR}
}
######################################################################
#
# distclean
#
######################################################################
function cmd_clean() {
cd ${CURRENT_DIR}/openwrt
rm -rf tmp
make distclean
}
######################################################################
#
# 모든 소스코드 삭제
#
######################################################################
function cmd_reset() {
rm -rf ${CURRENT_DIR}
}
######################################################################
#
# arguments가 1보다 크면 잘못된 옵션 지정이므로 끝낸다.
#
######################################################################
if [ $# -gt 1 ]
then
usage
exit 1
fi
######################################################################
#
# 옵션에 따라 분기 처리
#
######################################################################
case ${1} in
yum)
cmd_yum
;;
dnsrc)
cmd_dnsrc
;;
dncfg)
cmd_dncfg
;;
menuconfig)
cmd_menuconfig
;;
make)
cmd_make
;;
getbin)
cmd_getbin
;;
clean)
cmd_clean
;;
reset)
cmd_reset
;;
*)
usage
esac
exit 0