From a5b22b821ac29ac2a126adf384c874fe9630e09b Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 4 Jan 2023 11:34:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- env/startup.sh | 1 + sh/deploy_rk3328.sh | 45 ----------- sh/envsetup_pc.sh | 20 ----- sh/envsetup_rk3328.sh | 24 ------ sh/iflytool.sh | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++ sh/packet_rk3328.sh | 0 sh/ssh-clear-id.sh | 12 --- sh/ssh-copy-id.sh | 17 ---- 8 files changed, 212 insertions(+), 118 deletions(-) delete mode 100755 sh/deploy_rk3328.sh delete mode 100755 sh/envsetup_pc.sh delete mode 100755 sh/envsetup_rk3328.sh create mode 100755 sh/iflytool.sh mode change 100755 => 100644 sh/packet_rk3328.sh delete mode 100755 sh/ssh-clear-id.sh delete mode 100755 sh/ssh-copy-id.sh diff --git a/env/startup.sh b/env/startup.sh index 5ec36f0..3b72449 100755 --- a/env/startup.sh +++ b/env/startup.sh @@ -1,2 +1,3 @@ #!/bin/bash +cd /app ./app.out & \ No newline at end of file diff --git a/sh/deploy_rk3328.sh b/sh/deploy_rk3328.sh deleted file mode 100755 index 4dd620f..0000000 --- a/sh/deploy_rk3328.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -PROJECT_NAME=app -ROOTFS_APP_DIR=/ -export PROJECT_PATH=$(pwd) - -set -e -set -x - -# 从命令行读取参数,目标IP,是否重启 $0 --ip --reboot - -while [ "$1" != "" ]; do - case $1 in - --ip) - shift - ip=$1 - ;; - --reboot) - shift - reboot=$1 - ;; - esac - shift -done - -# 如果IP为空,提示使用方法 - -if [ -z "$ip" ]; then - echo "Usage: $0 --ip --reboot " - exit 1 -fi - -scp -r out/${PROJECT_NAME}.tar.gz root@${ip}:${ROOTFS_APP_DIR} - -#如果存在shutdown.sh,则先执行shutdown.sh -ssh root@${ip} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi' - -ssh root@${ip} "cd ${ROOTFS_APP_DIR} && tar -xvf ${PROJECT_NAME}.tar.gz -C ${ROOTFS_APP_DIR}" -ssh root@${ip} "cd ${ROOTFS_APP_DIR} && rm -rf ${PROJECT_NAME}.tar.gz" - -if [ "$reboot" = "true" ]; then - echo "reboot"; - ssh root@${ip} "reboot" -fi -echo "deploy success" diff --git a/sh/envsetup_pc.sh b/sh/envsetup_pc.sh deleted file mode 100755 index 09fce9c..0000000 --- a/sh/envsetup_pc.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -export PROJECT_PATH=`pwd` - -#!/bin/bash - -set -e #如果某条指令执行出错,则会退出脚本 -# set -v #打印正在指令的指令 -set -x - -# 创建编译目录 -# echo "创建编译目录" -echo "mkdir -p ${PROJECT_PATH}/build" -mkdir -p ${PROJECT_PATH}/build - -#构造编译脚本 -echo "cmake ../ \\" > ${PROJECT_PATH}/build/build.sh -echo "-DCMAKE_C_COMPILER=gcc \\" >> ${PROJECT_PATH}/build/build.sh -echo "-DCMAKE_CXX_COMPILER=g++ \\" >> ${PROJECT_PATH}/build/build.sh - -chmod +x ${PROJECT_PATH}/build/build.sh \ No newline at end of file diff --git a/sh/envsetup_rk3328.sh b/sh/envsetup_rk3328.sh deleted file mode 100755 index fe24873..0000000 --- a/sh/envsetup_rk3328.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -export PROJECT_PATH=`pwd` - -#!/bin/bash - -set -e #如果某条指令执行出错,则会退出脚本 -# set -v #打印正在指令的指令 -set -x - -# 创建编译目录 -# echo "创建编译目录" -echo "mkdir -p ${PROJECT_PATH}/build" -mkdir -p ${PROJECT_PATH}/build - -# 下载编译工具 -cd ${PROJECT_PATH}/build -wget -c "ftp://zftpuser:zftpzwsd@192.168.1.2/zwsd/gnu_gcc_release/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" -tar -xvf "gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" - -# 构造编译脚本 -echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh -echo "-DCMAKE_C_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \\" >>${PROJECT_PATH}/build/build.sh -echo "-DCMAKE_CXX_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \\" >>${PROJECT_PATH}/build/build.sh -chmod +x ${PROJECT_PATH}/build/build.sh diff --git a/sh/iflytool.sh b/sh/iflytool.sh new file mode 100755 index 0000000..0bcecb1 --- /dev/null +++ b/sh/iflytool.sh @@ -0,0 +1,211 @@ +#!/bin/bash +export PROJECT_PATH=$(pwd) + +function do_envsetup_pc() { + #构造编译脚本 + echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh + echo "-DCMAKE_C_COMPILER=gcc \\" >>${PROJECT_PATH}/build/build.sh + echo "-DCMAKE_CXX_COMPILER=g++ \\" >>${PROJECT_PATH}/build/build.sh + chmod +x ${PROJECT_PATH}/build/build.sh +} + +function do_envsetup_rk3328() { + # 下载交叉编译工具 + cd ${PROJECT_PATH}/build + wget -c "ftp://zftpuser:zftpzwsd@192.168.1.2/zwsd/gnu_gcc_release/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" + tar -xvf "gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz" + + # 构造编译脚本 + echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh + echo "-DCMAKE_C_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \\" >>${PROJECT_PATH}/build/build.sh + echo "-DCMAKE_CXX_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \\" >>${PROJECT_PATH}/build/build.sh + chmod +x ${PROJECT_PATH}/build/build.sh + +} + +function do_flash_to_rk3328() { + scp -r out/${PROJECT_NAME}.tar.gz ${USER}@${IP}:${ROOTFS_APP_DIR} + #如果存在shutdown.sh,则先执行shutdown.sh + ssh ${USER}@${IP} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi' + ssh ${USER}@${IP} "cd ${ROOTFS_APP_DIR} && tar -xvf ${PROJECT_NAME}.tar.gz -C ${ROOTFS_APP_DIR}" + ssh ${USER}@${IP} "cd ${ROOTFS_APP_DIR} && rm -rf ${PROJECT_NAME}.tar.gz" +} + +############################################################################## +# +# Main: +# +############################################################################## + +# +# iflytool.sh envsetup rk3328 +# +# iflytool.sh --ip 192.168.8.100 build +# iflytool.sh --ip 192.168.8.100 --user root build +# iflytool.sh --ip 192.168.8.100 --user root ssh_copy_id ssh_clear_id +# + +# 解析指令判断指令是否是 envsetup iflytool.sh envsetup rk3328 + +is_build=false +is_flash=false +is_reboot=false +is_envsetup=false + +for i in "$@"; do + case $i in + envsetup) + shift # past argument=value + BUILDFOR=$1 + is_envsetup=true + shift + ;; + build) + is_build=true + shift + ;; + flash) + is_flash=true + shift + ;; + reboot) + is_reboot=true + shift + ;; + packet) + is_packet=true + shift + ;; + --user) + shift + USER=$1 + shift + ;; + --ip) + shift + IP=$1 + shift + ;; + *) + # unknown option + ;; + esac +done + +# 判断是否是envsetup +if [ "$is_envsetup" = true ]; then + echo "envsetup $BUILDFOR" + echo "mkdir -p ${PROJECT_PATH}/build" + mkdir -p ${PROJECT_PATH}/build + + # 构造环境变量 + echo "BUILDFOR=$BUILDFOR" >${PROJECT_PATH}/build/buildenv + + #从CmakeLists.txt中读取项目名称 project(app) + PROJECT_NAME=$(grep "project(" ${PROJECT_PATH}/CMakeLists.txt) + PROJECT_NAME=${STR#*\(} + PROJECT_NAME=${PROJECT_NAME%\)*} + + #从字符串中 project(app)解析出app + STR="project(app)" + PROJECT_NAME=${STR#*\(} + PROJECT_NAME=${PROJECT_NAME%\)*} + + echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/build/buildenv + + ROOTFS_APP_DIR="/" + echo "ROOTFS_APP_DIR=$ROOTFS_APP_DIR" >>${PROJECT_PATH}/build/buildenv + + if [ "$BUILDFOR" = "pc" ]; then + do_envsetup_pc + elif [ "$BUILDFOR" = "rk3328" ]; then + do_envsetup_rk3328 + else + echo "unknow build for $BUILDFOR" + exit 1 + fi + exit 0 +fi + +#如果flash 则默认编译打包 +if [ "$is_flash" = true ]; then + is_build=true + is_packet=true +fi +#如果打包,则默认编译 +if [ "$is_packet" = true ]; then + is_build=true +fi +#如果部署则默认需要IP +if [ "$is_flash" = true ] || [ "$is_reboot" = true ]; then + if [ -z "$IP" ]; then + echo "please input ip" + exit 1 + fi +fi + +# 检查build目录是否存在 +if [ ! -d "${PROJECT_PATH}/build" ]; then + echo "build directory not exist, please run envsetup first" + exit 1 +fi + +# 初始化环境变量 +source ${PROJECT_PATH}/build/buildenv + +# 编译 +if [ "$is_build" = true ]; then + echo "build" + cd ${PROJECT_PATH}/build + # 根据当前电脑线程数,调用make + ./build.sh && make -j$(nproc) +fi + +# 打包 +if [ "$is_packet" = true ]; then + echo "packet for ${BUILDFOR}" + cd ${PROJECT_PATH} + ${PROJECT_PATH}/sh/packet_${BUILDFOR}.sh +fi + +# 部署 +if [ "$is_flash" = true ]; then + if [ "$BUILDFOR" = "pc" ]; then + echo "WARNING:not support flash for pc" + elif [ "$BUILDFOR" = "rk3328" ]; then + do_flash_to_rk3328 + else + echo "unknow build for $BUILDFOR" + exit 1 + fi +fi + +# 重启 +if [ "$is_reboot" = true ]; then + if [ "$BUILDFOR" = "pc" ]; then + echo "WARNING:not support reboot for pc" + elif [ "$BUILDFOR" = "rk3328" ]; then + ssh ${USER}@${IP} "reboot" + else + echo "unknow build for $BUILDFOR" + exit 1 + fi +fi + +#ssh_copy_id +if [ "ssh_copy_id" = true ]; then + if [ "$BUILDFOR" = "pc" ]; then + echo "WARNING:not support ssh_copy_id for pc" + elif [ "$BUILDFOR" = "rk3328" ]; then + ssh-copy-id ${USER}@${IP} + else + echo "unknow build for $BUILDFOR" + exit 1 + fi + +fi + +#ssh_clear_id +if [ "ssh_clear_id" = true ]; then + ssh ${USER}@${ip} "rm -rf ~/.ssh/authorized_keys" +fi diff --git a/sh/packet_rk3328.sh b/sh/packet_rk3328.sh old mode 100755 new mode 100644 diff --git a/sh/ssh-clear-id.sh b/sh/ssh-clear-id.sh deleted file mode 100755 index b06cdc0..0000000 --- a/sh/ssh-clear-id.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -set -e #如果某条指令执行出错,则会退出脚本 - -if [ $# -eq 0 ]; then - echo "Usage: $0 " - exit 1 -fi - -# 清除目标主机的ssh-key -ip=$1 -ssh root@${ip} "rm -rf ~/.ssh/authorized_keys" \ No newline at end of file diff --git a/sh/ssh-copy-id.sh b/sh/ssh-copy-id.sh deleted file mode 100755 index 5d392ee..0000000 --- a/sh/ssh-copy-id.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -set -e #如果某条指令执行出错,则会退出脚本 - -if [ $# -eq 0 ]; then - echo "Usage: $0 " - exit 1 -fi - -# 检查ssh-key是否存在,不存在则退出 -if [ ! -f ~/.ssh/id_rsa.pub ]; then - echo "ssh-key not found, please run ssh-keygen first" - exit 1 -fi - -ip=$1 -ssh-copy-id root@${ip} \ No newline at end of file