美文网首页
【全志系统-3】 - 一键打包 & 一键安装

【全志系统-3】 - 一键打包 & 一键安装

作者: Jimmy_Nie | 来源:发表于2020-12-02 21:01 被阅读0次

    我们使用Windows系统时,下载的安装包都是双击鼠标一键安装,那么Linux下有没有这种懒人操作呢?
    答案是肯定的,不过需要你动手写一点脚本,Linux的Shell脚本还是非常强大的,可以批处理很多任务,你值得拥有!!

    1. 什么是bin文件

    .bin 文件是在 Linux 和类 Unix 操作系统上的自执行文件。类似于windows的exe文件。

    2. bin文件安装实现原理

    在Linux下,万物皆文件!
    运行的程序或打包后的压缩包等,其实都是一些二进制文件,都可以像操作普通字符文件一样进行操作!

    基于以上原理,我们可以把我们的二进制文件与脚本文件打包到一个文件中,只要赋予该文件可执行权限,就可以一键执行脚本内的程序,对Linux进行各种操作,这个合成后的文件,就是bin文件!

    Notice:Linux执行时,是顺序执行的,从第一行一直执行到最后一行,因此你的脚本指令肯定是放在bin文件的第一行,否则合成后的bin根本无法执行!

    比如,我想要把我自己写好的 hello 程序拷贝到/sbin/目录下,并且执行该程序,那么我们可以这么创建这么一个 hello.sh 脚本,内容如下(简单的示例,复杂脚本见下一节:

    #!/bin/bash
    mv ./hello /sbin/
    /sbin/hello
    

    然后,将两个程序合并成一个bin文件:

    cat hello.sh hello > hello.bin
    

    记住,shell脚本用于是第一位哦!!

    3. 脚本示例

    3.1 打包脚本

    #/bin/bash
    ##############################################################
    # Function: 打包tyclient
    # Autor:Jimmy Nie
    # Date:2020-11-06
    ##############################################################
    project_name=ty
    
    #cur_dir=$(dirname $0)
    cur_dir=$(pwd)
    src_dir=$cur_dir/src
    tmp_dir=$src_dir/$project_name
    
    file_daemon=$src_dir/daemon
    file_start=$src_dir/start_tyclient
    file_wifi=$src_dir/wifi_tool
    file_tyclient=$src_dir/tyclient
    file_install=$src_dir/install.sh
    tar_file=$src_dir/tyclient.tar.gz
    bin_file=$src_dir/tyclient.bin
    
    #=====================================================
    #1.判断源文件目录存不存在
    if [[ ! -d $src_dir ]]; then
        echo "The $src_dir was not existed!!"
        sleep 5s
        exit 0
    fi
    
    #2. 判断文件内容是否齐全
    if [[ ! -f $file_daemon ]]; then
        echo "File: $file_daemon not existed!"
        sleep 5s
        exit 0
    fi
        
    if [[ ! -f $file_start ]]; then
        echo "File: $file_start not existed!"
        sleep 5s
        exit 0
    fi
    
    if [[ ! -f $file_wifi ]]; then
        echo "File: $file_wifi not existed!"
        sleep 5s
        exit 0
    fi
    
    if [[ ! -f $file_tyclient ]]; then
        echo "File: $file_tyclient not existed!"
        sleep 5s
        exit 0
    fi
    
    #3. 创建ty的目录,将以上文件拷贝进去
    if [[ -d $tmp_dir ]]; then
        rm -rf $tmp_dir
    fi
    
    mkdir -p $tmp_dir
    cp $file_daemon $file_start $file_wifi $file_tyclient $tmp_dir
    
    #4. 打包ty目录,生成bin文件
    cd $src_dir
    tar -zcvf $(basename $tar_file) $project_name
    cat $file_install $tar_file > $bin_file
    mv $bin_file $cur_dir
    rm -rf $tmp_dir $tar_file
    

    3.2 安装脚本

    #!/bin/sh
    ##############################################################
    # Function: 安装tyclient
    # Autor:Jimmy Nie
    # Date:2020-11-06
    #########################################################
    project_name=TYclient
    root_dir=/mnt/UDISK
    target_dir=/usr/ty
    log_dir=/usr/ty/tylog/
    conf_dir=/etc/ty
    init_dir=/etc/init.d
    rc_dir=/etc/rc.d
    tmp_dir=${root_dir}/ty
    install_tar=${root_dir}/ty_install.tar.gz
    
    # 提取安装文件
    sed -n -e '1,/^exit 0$/!p' $0 > ${install_tar}  2>/dev/null && sync
    dd if=${install_tar} | tar -xzf - -C ${root_dir} && sync
    
    # 检查/usr/ty目录
    if [[ ! -d ${target_dir} ]]; then
       mkdir -p ${target_dir}
    fi
    
    # 检查/usr/ty/tylog/目录
    if [[ ! -d ${log_dir} ]]; then
        echo "Install ${log_dir} done ^_^"
       mkdir -p ${log_dir}
    fi
    
    # 必须更新/usr/ty/daemon
    cp -rf ${tmp_dir}/daemon ${target_dir}
    
    # 必须更新/usr/ty/tyclient
    cp -rf ${tmp_dir}/tyclient ${target_dir}
    
    # 必须更新/usr/ty/wifi_tool
    cp -rf ${tmp_dir}/wifi_tool ${target_dir}
    
    #必须给所有文件执行权限
    chmod +x ${target_dir}/*
    
    
    # 必须更新/etc/init.d/start_tyclient
    cp -rf ${tmp_dir}/start_tyclient ${init_dir}
    chmod +x ${init_dir}/start_tyclient
    
    # 检查/etc/rc.d/S99yg_autorun
    if [[ ! -f ${rc_dir}/S99start_tyclient ]]; then
       ln -fs ${init_dir}/start_tyclient ${rc_dir}/S99start_tyclient
    fi
    
    rm -rf ${install_tar}
    rm -rf ${tmp_dir}
    sync
    
    echo "Install ${project_name} done ^_^"
    exit 0
    

    相关文章

      网友评论

          本文标题:【全志系统-3】 - 一键打包 & 一键安装

          本文链接:https://www.haomeiwen.com/subject/yolswktx.html