一个合格的产品必须要有一个像样的安装包,每次拷来拷去显得太不上档次,哈哈...也不便于用户使用.
闲话不多扯,直奔主题,看过来吧,程序猿(媛)们:本文主要介绍二进制安装包的创建和使用:
1. 首先介绍二进制安装包的结构:
1)最终生成的二进制安装包的名称为:Project.run
2)用于生成安装包的准备文件结构如下:
./mkinst.sh
./inst.sh
./Project-V1.0.tar.gz/Product-V1.0/work/product-inst.sh
./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/Product
./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/plugins/ProductPlugins
./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/ICON.png
./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/Product.desktop
2. 下面将针对上面的文件进行一一介绍
1)mkinst.sh 用于生成二进制安装包的文件
源码如下:
# ! /bin/sh cat inst.sh Product - V1.0.tar.gz > Product.run chmod + x Product.run echo "success!"exit 0
注释:cat inst.sh Product-V1.0.tar.gz > Product.run 将 inst.sh 和 Product-V1.0.tar.gz 文件连接并生成一个新的二进制文件 Product.run 文件
2)inst.sh 产品个性化安装文件的头文件
源码如下:
# ! /bin/bash##协议more << "EOF"License Agreement: This install method can just be used by personal.EOF##是否同意协议内容agreed = 1
while [$agreed - eq 1] do read - p " Do you agree to the abolve license terms?[yes or no]:"reply leftover
case $reply in y * |Y * ) break;;
n * |N * ) echo "you can't install this software";exit 1;;esac done##从安装文件Product.run尾部取出tar包并在当前路径解开rm - rf / tmp / ProductCache mkdir / tmp / ProductCache lines = 51 tail - n + $lines $0 > /tmp/ProductCache / Product - V1.0.tar.gz cd / tmp / ProductCache tar - xzvf "Product-V1.0.tar.gz" > /dev/null
if [$ ? -ne 0] then echo "There is error when unpacking files."rm - rf "Product-V1.0.tar.gz"exit 1 fi##删除临时文件tar rm - rf "Product-V1.0.tar.gz"##执行具体安装操作cd "Product-V1.0/work"sh product - inst.sh cd.. / ..##删除临时目录rm - rf Product - V1.0 exit 0
注释:
lines=51inst.sh 文件本身有 50 行
tail -n+$lines $0>/tmp/ProductCache/Product-V1.0.tar.gz 从第 51 行开始到本文件的末尾的内容保存为新的文件(Product.run 中前 50 行为 inst.sh 文件的内容;从第 51 行开始的所有数据属于 Product-V1.0.tar.gz)
3)product-inst.sh 产品个性化安装文件
源码如下:
# ! /bin/sh##得到安装路径 (由用户进行输入) read - p "set installing path[eg./home/lf/example]:"INPUT INST_PATH = $INPUT##安装路径不存在,则创建
if [!-x "$INST_PATH"] then mkdir - p "${INST_PATH}"fi##产品已安装其他版本,是否卸载并升级
if [ - x "$ProductFile"] then read - p "There exists an older version in this system. Whether to upgrade?[yes or not]:"rep leftover
case $rep in y * |Y * ) rm - rf "$ProductFile";;
n * |N * ) echo "fail to install."exit 1;;esac fi##为启动器(类似win下的快捷方式)设定启动本产品,并设定产品图标echo "Exec=$INST_PATH/ProductV1.0/Product" >> .. / ProductV1.0 / Product.desktop echo "Icon=$INST_PATH/ProductV1.0/ICON.png" >> .. / ProductV1.0 / Product.desktop##产品安装到指定安装目录中,并赋予可执行权限cp - R.. / ProductV1.0 "${INST_PATH}"cd "${INST_PATH}/ProductV1.0"chmod 775 Product##是否要在桌面创建产品启动器deskPath1 = "/home/$USER/桌面"deskPath2 = "/home/$USER/Desktop"
if [ - x "$deskPath1"] then read - p "Create a softlink in the folder:$deskPath1?[yes or no]:"reply leftover
case $reply in y * |Y * ) cp "Product.desktop""$deskPath1";;esac
else if [ - x "$deskPath2"] then read - p "Create a softlink in the folder:$deskPath2?[yes or no]:"reply leftover
case $reply in y * |Y * ) cp "Product.desktop""$deskPath2";;esac fi fi##注册系统环境变量(目的:以备产品检测升级)sed - i '/ProductFile/d' / home / $USER / .bash_profile echo "export ProductFile=$INST_PATH/ProductV1.0" >> /home/$USER / .bash_profile echo "installed success,restart,please."
4)./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/Product 产品
5)./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/plugins/ProductPlugins 产品依赖的插件
6)./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/ICON.png 产品图标文件
来源: http://lib.csdn.net/article/linux/36378