一个合格的产品必须要有一个像样的安装包,每次拷来拷去显得太不上档次,哈哈。。。也不便于用户使用。

闲话不多扯,直奔主题,看过来吧,程序猿(媛)们:本文主要介绍二进制安装包的创建和使用:

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 <

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产品图标文件

7)./Project-V1.0.tar.gz/Product-V1.0/ProductV1.0/Product.desktop

产品启动器(类似win下的快捷方式)

至此,一个二进制.run安装包即生成了。使用方法,启动终端运行命令:./Project.run 后按步骤进行即可;还有很多安装过程的个性化设置,都可以在produc-inst.sh文件中添加。

本文是用shell写的脚本文件,有朋友提醒可用python去写,可能会简单些。感兴趣的童鞋可以去了解下。。。欢迎交流。。。

linux二进制安装包制作,linux下二进制安装包的创建相关推荐

  1. linux制作电脑启动盘,Linux启动盘的制作Linux -电脑资料

    Linux的启动软盘有boot盘和boot/root盘之分,所谓的boot盘只能用来启动已经安装在硬盘上的 Linux系统 ,而boot/root盘本身就是一个 迷你Linux系统, Linux的启动 ...

  2. linux程序打包安装,制作Linux下程序安裝包——使用腳本打包bin、run等安裝包

    制作簡單的安裝包的時候可以簡單的用cat命令連接兩個文件,然后頭部是腳本文件,執行的時候把下面的文件分解出來就行了.一般這個后部分的文件是個壓縮包,那樣,就能夠打包很多文件了,在腳本中解壓出來即可.這 ...

  3. 怎么启动u盘的linux系统文件夹里,怎么制作Linux系统安装盘,U盘启动盘

    1. 前言 本文主要讲解怎么制作linux系统安装盘,一般使用U盘制作启动盘. 通常,当在您的笔记本电脑或PC上安装Linux系统时,您将需要一个包含您想要安装的Linux系统发行版的可引导U盘. 本 ...

  4. linux游戏欢迎界面,制作Linux登录欢迎界面

    1.登录提示语: 将提示语写入/etc/motd 文件 _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ ...

  5. 安装包制作工具排行_安装包制作哪个比较好

    您是否在为新产品没有安装包或者自动升级而发愁? 是否因为目前已有安装不稳定,不支持美化或者频繁被杀毒误报等而苦恼? 一切交给NSetup解决方案来处理,您专心做产品,专业的人做专业的事, 安装升级这种 ...

  6. linux一键安装包 制作,linux一键安装包

    Jquery 循环map的用法 $.each(map,function(key,values){console.log(key);$(values).each(function(){console.l ...

  7. winU盘装Linux win32,用win32diskimager制作ubuntu U盘安装盘

    Ubuntu 16.04 LTS发布了,铺天盖地的各种讯息,让我有种将工作环境迁移到ubuntu上的念头.虽然曾经几次尝试使用Fedora来作为工作系统,但均跟现使用的系统相差甚远而放弃.对新事物的好 ...

  8. linux so文件的制作,Linux下动态链接库*.so的编译与使用(二)

    程序清理 有一个C程序,用于实现算法和数据结构 (比如栈和相关的操作).在同一个程序中,还有用于测试的main()函数,结构体定义,函数原型,typedef等等. 这样的做法非常不"环保&q ...

  9. linux dd 虚拟机,[教程]制作Linux的DD包

    rt Vicer大佬的DD脚本Centos最高只支持到6,而且不支持其他发行版(比如Fedora,OpenSUSE等). 这里记录下如何制作一个linux系统的DD包. 转载请注明作者. 以OpenS ...

最新文章

  1. 精华【分布式、微服务、云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!...
  2. jzoj5231-序列问题【分治】
  3. vb 数组属性_VB中菜单编辑器的使用讲解及实际应用
  4. Remoting入门实例
  5. 出于安全考虑,千万不要绕开 CORS!
  6. Android基础知识点的整理3
  7. Luogu 4492 [HAOI2018]苹果树 组合数
  8. 网络 如何解决输入路由器管理地址192.168.1.1进不去
  9. 从哥尼斯堡“七桥问题”到盖洛普“优势识别器”
  10. Rational Rose 2016
  11. iOS应用内付费(In-App Purchase,IAP,内购)实现要点总结
  12. linux7切换图形界面,CentOS 7 DOS界面与图形界面切换
  13. ADS 修改绘图单位
  14. eclipse 创建maven项目 出现Could not calculate build plan错误解决
  15. eclipse中输入中文为繁体
  16. Dalvik虚拟机垃圾收集(GC)过程分析
  17. [Splay伸展树]splay树入门级教程
  18. 微波射频学习笔记20-------二极管
  19. 大二课设,采用 bootstrap + express + mysql 实现电影售票系统(附带源码)
  20. SQL 替换特定字符

热门文章

  1. CString Format 乱码问题
  2. java集合类中的迭代器
  3. smokeping安装方法及不出图解决办法
  4. dialog窗口编程的入门使用
  5. 如何在oracle中查询所有用户表的表名、主键名称、索引、外键等 - Oracle   基础和管理_files...
  6. Practical Mathematical Handwriting
  7. 开源方案搭建可离线的精美矢量切片地图服务-5.Mapbox离线项目实现
  8. python自动化_day4_迭代器生成器内置函数和匿名函数
  9. sublime3快捷键
  10. 百度地图开发的时候遇到的问题(二)