linux下二进制安装包的创建

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

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

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=51
inst.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下的快捷方式)

产品启动器的制作,请参加本博另一篇博客:Linux下桌面启动器(桌面配置文件)的创建

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

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

时间: 2024-11-19 05:44:45

linux下二进制安装包的创建的相关文章

制作Linux下程序安装包——使用脚本打包bin、run等安装包

制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了.一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可.这就是Linux那些bin啊run啊等安装脚本的简单制作了.下面来看看两个简单的例子: ——————————华丽的分割线—————————— run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示: |—————–||                       ||     安装脚本   

Linux下工具安装包下载路径积累

nginx下载地址 http://nginx.org/en/download.html 安装nginx需要先安装依赖包: yum -y install gcc-c++ pcre-devel zlib zlib-devel openssl-devel 2.yum源相关包及配置 http://docs.linuxtone.org/soft/repo/ 3.php下载地址 http://www.php.net/releases/   下载php版本,5.4以前的版本需要另外下载对应的php-fpm,和

Linux下获取安装包

https://blog.csdn.net/xiaofeng3011/article/details/82797614 # cat /etc/yum.conf [main]cachedir=/var/cache/yum/$basearch/$releasever #下载包的缓存地址,可以设置keepcache=0 #这个说明没有存,一安装完就自动删除了,如果要保留,改为1 centos下执行yum install xxx后. 系统会从yum源下载rpm,将rpm放置到缓存目录下:/var/cac

linux系统下软件安装包类型及安装介绍

linux系统下软件安装包类型及安装介绍 一.解析Linux应用软件安装包,通常Linux应用软件的安装包有四种: 1)tar包,如software-1.2.3-1.tar.gz.他是使用UNIX系统的打包工具tar打包的. 2)rpm包,如software-1.2.3-1.i386.rpm.他是Redhat Linux提供的一种包封装格式.包的管理工具YUM 3)dpkg包,如software-1.2.3-1.deb.他是Debain Linux提供的一种包封装格式.包的管理工具apt-get

中标麒麟学习笔记3:试验制作wireshark二进制安装包

Wireshark是个优秀的网络包嗅探工具,对于学习理解网络知识有很大的帮助.中标麒麟桌面版本没有集成这一软件,所以想自己试着安装并学习一下如何制作RPM包. 学习了<fedora官网RPM包制作指南>后,觉得事情比较简单,主要就是编辑一个SPEC配置文件嘛,加上configure.make.make  install等指令,修改修改描述说明什么的就完活了.于是想先找个wireshark源码包,再找一个现成的SPEC文件,比如fedora21的SRPM包中就有,然后稍作修改就可以用rpmbui

centos7 二进制安装包安装 mysql5.6

一.下载mysql5.6二进制安装包 http://mirrors.sohu.com/mysql/MySQL-5.6/ 如:mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 二.安装mysql5.6(安装在/data/mysql56) (1).创建mysql用户账号 > useradd -s /sbin/nologin -M mysql (2).解压压缩包 > tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz (

windows下 Python 安装包的配置

1.下载安装 Pythonpython-2.7.2.msi  http://www.python.org/download/如下载 Python 2.7.2,安装目录为 C:\Python27 2.添加环境变量path = C:\Python27此步骤可实现在命令行下,不用进入 Python 目录即可执行 python.exe 3.下载 setuptools 注意对应 Python 的版本,完成后运行 exe 即可完成安装 setuptools-0.6c11.win32-py2.7.exehtt

Linux下二进制包和源代码包的区分

主要提供三种格式的mysql包:rpm格式.二进制格式.源码格式:(tar打包,gz压缩) rpm格式: libjpeg-devel-6b-33.x86_64.rpm       #rpm格式很好区分, 二进制包: mysql-3.23.58-pc-linux-i686.tar.gz   #二进制格式的包名字很长,有版本号.适应平台.适应的硬件类型等,格式:mysql-<版本>-<OS>-tar.gz 源码包:    php-5.2.14.tar.gz              

Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat(转载)

Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft Visual C++ 9.0 is required  (Unable to find vcvarsall.bat) 环境:windo