#!/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