diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cefc03..0286516 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,9 +44,9 @@ include(dep/zwebservice/module.cmake) zadd_executable( TARGET - ${PROJECT_NAME}.out + app.out INSTALL - ${PROJECT_NAME} + app LINK_LIBRARIES pthread INCLUDE_DIRECTORIES diff --git a/README.md b/README.md index 9962b2f..1e264ed 100644 --- a/README.md +++ b/README.md @@ -9,16 +9,25 @@ env/ 应用程序运行环境 build/ 应用程序编译目录 ``` -``` -编译说明 +## 编译RK3328 +```bash +# 初始化环境 +./sh/iflytool.sh envsetup rk3328 + +# 编译打包部署(整包) +./sh/iflytool.sh --ip flash + +# 编译打包部署,重启系统(整包) +./sh/iflytool.sh --ip flash reboot + +# 编译并只部署应用 +./sh/iflytool.sh --ip flashapp -# 编译RK3328应用 -./sh/rk3328_envsetup.sh -# 编译PC应用 -./sh/pc_envsetup.sh +# 只部署webapp +./sh/iflytool.sh --ip flashwebapp -cd build -./build.sh && make -j8 +# 配置ssh-key,免密登录 +./sh/iflytool.sh --ip ssh_copy_id ``` diff --git a/sh/iflytool.sh b/sh/iflytool.sh index 0bcecb1..c97a9da 100755 --- a/sh/iflytool.sh +++ b/sh/iflytool.sh @@ -1,5 +1,5 @@ #!/bin/bash -export PROJECT_PATH=$(pwd) + function do_envsetup_pc() { #构造编译脚本 @@ -23,12 +23,24 @@ function do_envsetup_rk3328() { } -function do_flash_to_rk3328() { - scp -r out/${PROJECT_NAME}.tar.gz ${USER}@${IP}:${ROOTFS_APP_DIR} +function do_flash_to_targetboard() { + scp -r out/${PROJECT_NAME}.tar.gz ${TARGET_USER}@${IP}:/ #如果存在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" + ssh ${TARGET_USER}@${IP} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi' + ssh ${TARGET_USER}@${IP} "cd / && tar -xvf app.tar.gz -C /" + ssh ${TARGET_USER}@${IP} "cd / && rm -rf app.tar.gz" +} + +function do_flashapp_to_targetboard() { + # 杀死目标程序 + ssh ${TARGET_USER}@${IP} "killall app.out" + # 拷贝目标程序 + scp -r ${PROJECT_PATH}/build/app/app.out ${TARGET_USER}@${IP}:/app/ +} + +function do_flashwebapp_to_targetboard() { + ssh ${TARGET_USER}@${IP} "rm -rf /webapp" + scp -r ${PROJECT_PATH}/webapp ${TARGET_USER}@${IP}:/app/webapp } ############################################################################## @@ -47,11 +59,15 @@ function do_flash_to_rk3328() { # 解析指令判断指令是否是 envsetup iflytool.sh envsetup rk3328 +set -e + is_build=false is_flash=false is_reboot=false is_envsetup=false +export PROJECT_PATH=$(pwd) + for i in "$@"; do case $i in envsetup) @@ -76,9 +92,25 @@ for i in "$@"; do is_packet=true shift ;; + ssh_copy_id) + is_ssh_copy_id=true + shift + ;; + ssh_clear_id) + is_ssh_clear_id=true + shift + ;; + flashapp) + is_flashapp=true + shift + ;; + flashwebapp) + is_flashwebapp=true + shift + ;; --user) shift - USER=$1 + TARGET_USER=$1 shift ;; --ip) @@ -113,8 +145,6 @@ if [ "$is_envsetup" = true ]; then 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 @@ -127,6 +157,11 @@ if [ "$is_envsetup" = true ]; then exit 0 fi +# 如果没有指定用户名,则默认用户名为 root +if [ -z "$TARGET_USER" ]; then + TARGET_USER=root +fi + #如果flash 则默认编译打包 if [ "$is_flash" = true ]; then is_build=true @@ -158,54 +193,41 @@ if [ "$is_build" = true ]; then echo "build" cd ${PROJECT_PATH}/build # 根据当前电脑线程数,调用make - ./build.sh && make -j$(nproc) + ./build.sh && make -j$(nproc) install fi # 打包 if [ "$is_packet" = true ]; then echo "packet for ${BUILDFOR}" cd ${PROJECT_PATH} - ${PROJECT_PATH}/sh/packet_${BUILDFOR}.sh + ${PROJECT_PATH}/sh/packet.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 + do_flash_to_targetboard +fi + +# flashapp +if [ "$is_flashapp" = true ]; then + do_flashapp_to_targetboard fi +# flashwebapp +if [ "$is_flashwebapp" = true ]; then + do_flashwebapp_to_targetboard +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 + ssh ${TARGET_USER}@${IP} "reboot" 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 - +if [ "$is_ssh_copy_id" = true ]; then + ssh-copy-id ${TARGET_USER}@${IP} fi #ssh_clear_id -if [ "ssh_clear_id" = true ]; then - ssh ${USER}@${ip} "rm -rf ~/.ssh/authorized_keys" +if [ "$is_ssh_clear_id" = true ]; then + ssh ${TARGET_USER}@${ip} "rm -rf ~/.ssh/authorized_keys" fi diff --git a/sh/packet_rk3328.sh b/sh/packet.sh old mode 100644 new mode 100755 similarity index 73% rename from sh/packet_rk3328.sh rename to sh/packet.sh index 2eae69d..bd257f3 --- a/sh/packet_rk3328.sh +++ b/sh/packet.sh @@ -1,13 +1,14 @@ #!/bin/bash -sourece ./build/buildenv set -e set -x export PROJECT_PATH=`pwd` +source ${PROJECT_PATH}/build/buildenv + #打包目录 -PACKET_DIR=$PROJECT_PATH/out/${PROJECT_NAME} +PACKET_DIR=$PROJECT_PATH/out/app # 删除打包目录,重新打包 rm -rf ${PACKET_DIR} @@ -18,10 +19,10 @@ mkdir ${PACKET_DIR} #1. 编译 cd $PROJECT_PATH/build -./build.sh && make -j8 && make install +# ./build.sh && make -j8 && make install #2.打包APP -cp $PROJECT_PATH/build/${PROJECT_NAME}/${PROJECT_NAME}.out $PACKET_DIR/ +cp $PROJECT_PATH/build/app/app.out $PACKET_DIR/ #3.3 打包webapp cp -rf $PROJECT_PATH/webapp $PACKET_DIR/ @@ -33,7 +34,7 @@ cd $PROJECT_PATH/env/ && cp --path -rf ./* $PACKET_DIR/ cur_date="`date +%Y%m%d`" cd $PACKET_DIR/../ -tar -czvf ${PACKET_DIR}_${cur_date}.tar.gz ${PROJECT_NAME} +tar -czvf ${PACKET_DIR}_${cur_date}.tar.gz app cp ${PACKET_DIR}_${cur_date}.tar.gz ${PACKET_DIR}.tar.gz echo "Brief:" echo "generate ${PACKET_DIR}_${cur_date}.tar.gz..................."