linux下二进制安装包的创建
来源:互联网 发布:什刹海 知乎 编辑:程序博客网 时间:2024/06/02 10:39
一个合格的产品必须要有一个像样的安装包,每次拷来拷去显得太不上档次,哈哈。。。也不便于用户使用。
闲话不多扯,直奔主题,看过来吧,程序猿(媛)们:本文主要介绍二进制安装包的创建和使用:
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.desktop2.下面将针对上面的文件进行一一介绍
1)mkinst.sh用于生成二进制安装包的文件
源码如下:
#!/bin/shcat inst.sh Product-V1.0.tar.gz > Product.runchmod +x Product.runecho "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=1while [ $agreed -eq 1 ]doread -p " Do you agree to the abolve license terms?[yes or no]:" reply leftovercase $reply iny* | Y*)break;;n* | N*)echo "you can't install this software";exit 1;;esacdone## 从安装文件Product.run尾部取出tar包并在当前路径解开rm -rf /tmp/ProductCachemkdir /tmp/ProductCachelines=51tail -n+$lines $0>/tmp/ProductCache/Product-V1.0.tar.gzcd /tmp/ProductCachetar -xzvf "Product-V1.0.tar.gz" > /dev/nullif [ $? -ne 0 ]thenecho "There is error when unpacking files."rm -rf "Product-V1.0.tar.gz"exit 1fi## 删除临时文件tarrm -rf "Product-V1.0.tar.gz"## 执行具体安装操作cd "Product-V1.0/work"sh product-inst.shcd ../..## 删除临时目录rm -rf Product-V1.0exit 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]:" INPUTINST_PATH=$INPUT## 安装路径不存在,则创建if [ ! -x "$INST_PATH" ]thenmkdir -p "${INST_PATH}"fi##产品已安装其他版本,是否卸载并升级if [ -x "$ProductFile" ]thenread -p "There exists an older version in this system. Whether to upgrade?[yes or not]:" rep leftovercase $rep iny* | Y*)rm -rf "$ProductFile";;n* | N*)echo "fail to install."exit 1;;esacfi##为启动器(类似win下的快捷方式)设定启动本产品,并设定产品图标echo "Exec=$INST_PATH/ProductV1.0/Product" >>../ProductV1.0/Product.desktopecho "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" ]thenread -p "Create a softlink in the folder:$deskPath1?[yes or no]:" reply leftovercase $reply iny* | Y*)cp "Product.desktop" "$deskPath1";;esacelseif [ -x "$deskPath2" ]thenread -p "Create a softlink in the folder:$deskPath2?[yes or no]:" reply leftovercase $reply iny* | Y*)cp "Product.desktop" "$deskPath2";;esacfifi## 注册系统环境变量(目的:以备产品检测升级)sed -i '/ProductFile/d' /home/$USER/.bash_profileecho "export ProductFile=$INST_PATH/ProductV1.0" >>/home/$USER/.bash_profileecho "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产品图标文件
7)./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/Product.desktop产品启动器(类似win下的快捷方式)产品启动器的制作,请参加本博另一篇博客:Linux下桌面启动器(桌面配置文件)的创建
至此,一个二进制.run安装包即生成了。使用方法,启动终端运行命令:./Project.run 后按步骤进行即可;还有很多安装过程的个性化设置,都可以在produc-inst.sh文件中添加。
本文是用shell写的脚本文件,有朋友提醒可用python去写,可能会简单些。感兴趣的童鞋可以去了解下。。。欢迎交流。。。
- linux下二进制安装包的创建
- linux下 mariadb二进制包安装
- linux下mysql二进制包安装
- Linux下Mysql安装(二进制包)
- Linux mysql二进制包的安装
- Mysql5.6安装-linux下安装二进制包
- Linux下用普通用户安装mysql数据库(编译好的二进制包安装)
- Linux 下 二进制源码包安装mysql 详细过程
- Linux下二进制包安装mysql-5.7.14
- Linux下mysql5.7二进制包数据库安装
- linux下离线安装mariadb(mysql)二进制包
- linux下mysql5.7二进制包安装方法
- linux下使用官方编译好的二进制包安装mysql
- Linux Mysql 二进制包安装
- Linux中二进制/ 源码包软件的安装 rpm
- linux mysql 官方编译好的二进制包安装
- Linux中二进制/ 源码包软件的安装 rpm
- Linux中二进制/ 源码包软件的安装 rpm
- 反射学习笔记
- linux学习之shell脚本 ------- 基础
- Qt的安装
- 蹂躏D&F学习之重复NtCreateFile之三
- Spring Aop 实现一个简单的memcached小插件
- linux下二进制安装包的创建
- HDU-2535-Vote
- u-boot,linux内核,文件系统移植解疑和问题(一)
- 未定义基类的问题
- LRUCache和FastLRUCache实现分析
- adb 常用命令大全
- Linux
- python网络编程入门文章推荐
- 多维数组指针值