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

2020-12-02  本文已影响0人  Jimmy_Nie

我们使用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
上一篇下一篇

猜你喜欢

热点阅读