基本思想:

制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了。一般这个后部分的文件是个压缩包,那样,就能够打包很多文件了,在脚本中解压出来即可。这就是Linux那些bin啊run啊等安装脚本的简单制作了。

制作步骤:

编写shell脚本

shell脚本主要有两个作用:
1.将压缩包从bin安装包中分离出来并解压    
2.实现安装过程中需要进行的相关的文件操作(从压缩包中复制文件到系统指定路径下)
例:以下是安装脚本 CFCA_UKEY.sh,脚本中添加了必要的注释便于理解相关操作。
#!/bin/bash
#安装前先卸载旧版本软件
if [ -f "/usr/bin/Uninstall_CFCA_UKEY.sh" ];thenecho "VVVVVVV 卸载旧版本软件 VVVVVVV"/usr/bin/Uninstall_CFCA_UKEY.shecho "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"echo ""
fi#分离出的压缩包名称
tmpfile_name=/tmp/CFCA_UKEY_Client.tgz
echo -e "\t 准备安装软件..."
#从bin中分离出${tmpfile_name}压缩包,'1,/^exit 0$/!p'代表从一行到以exit开头以0结尾的行即整个shell脚本,!代表取反,所以最后分离的是出了shell脚本的部分也即压缩包 $0代表脚本本身即从bin安装包中实现分离
sed -n -e '1,/^exit 0$/!p' $0 > ${tmpfile_name} 2>/dev/null
#将分离出的脚本解压缩到/tmp文件夹下
tar xzf ${tmpfile_name} -C /tmp
#解压完成后删除压缩包
rm -rf ${tmpfile_name}
#转到解压文件的文件夹/tmp下
cd /tmp####---- main ----####echo -e "\t 安装库文件和工具"
#复制库文件以及管理工具到系统目录下(需要root权限,所以需要sudo执行)
cp -r CFCA_UKEY_Client/CFCA_UKEY_Client.app /Applications
cp -r CFCA_UKEY_Client/CFCA_UKEY_Dlg.bundle /Library/Bundles
sudo cp CFCA_UKEY_Client/Uninstall_CFCA_UKEY.sh /usr/bin
sudo cp CFCA_UKEY_Client/libCFCA_UKEY_*.* /usr/lib
#安装过程完成后,删除解压后的文件目录
rm -rf CFCA_UKEY_Client
echo -e "\t 安装完成"
exit 0

以下是脚本Uninstall_CFCA_UKEY.sh ,实现在每次安装时对旧版本的文件进行删除卸载。(该脚本与bin安装包的制作无关)

#!/bin/bash
name=UKEY
sudo echo ""
echo "=========================================="
echo "|| Client[${name}] Uninstall starting...   ||"
echo "=========================================="
echo "||                                      ||"
sudo ps -ax | grep CFCA_${name}_Client | awk '{print $1}' | xargs kill -9 > /dev/null 2>&1
echo "||  close CFCA_${name}_Client.app          ||"
sudo rm -rf /usr/lib/libCFCA_${name}_lib.dylib
echo "||  delete libCFCA_${name}_lib.dylib       ||"
sudo rm -rf /usr/lib/libCFCA_${name}_P11.dylib
echo "||  delete libCFCA_${name}_P11.dylib       ||"
sudo rm -rf /usr/lib/libCFCA_${name}_P11.sig
echo "||  delete libCFCA_${name}_P11.sig       ||"
sudo rm -rf /Library/Bundles/CFCA_${name}_Dlg.bundle
echo "||  delete CFCA_${name}_Dlg.bundle         ||"
sudo rm -rf /Applications/CFCA_${name}_Client.app
echo "||  delete CFCA_${name}_Client.app         ||"
sudo rm -rf /usr/bin/Uninstall_CFCA_${name}.sh
echo "||  delete Uninstall_CFCA_${name}.sh       ||"
echo "||                                      ||"
echo "=========================================="
echo "||  Client[${name}] Uninstall end.         ||"
echo "=========================================="
echo ""

打包所需文件

将脚本中文件操作相关的文件打包并压缩,之后将压缩包与脚本进行合并生成最终的bin安装包。

本例中所需打包的文件均已放在CFCA_UKEY_Client文件夹下,如下图所示:

在终端窗口运行指令:

tar -czvf CFCA_UKEY_Client.tgz CFCA_UKEY_Client/

对CFCA_UKEY_Client文件夹进行压缩生成压缩包CFCA_UKEY_Client.tgz

生成bin安装包

在终端窗口运行指令:
cat CFCA_UKEY.sh CFCA_UKEY_Client.tgz > CFCA_UKEY.bin 
将脚本与压缩包合并生成bin安装包。
   
    生成的bin安装包可以通过vi编辑器查看,可看到前半部分即为shell脚本,后半部分的乱码即为压缩包。脚本中语句sed -n -e '1,/^exit 0$/!p' $0 > ${tmpfile_name} 2>/dev/null即为实现分离出压缩包的功能。ps:随便拿到一个bin安装包,我们也可通过sed语句实现分离出其中的shell脚本以及压缩包:
从bin安装包中分离出shell脚本的指令:sed -n -e '1,/^exit 0$/p' bin安装包路径> 解压路径 2>/dev/null

从bin安装包中分离出压缩包的指令:sed -n -e '1,/^exit 0$/!p' bin安装包路径> 解压路径 2>/dev/null        (与上条指令的区别在于添加了sed中的取反符!)

运行bin安装包

在终端窗口运行指令:
chmod 755 CFCA_UKEY.bin
给生成的bin安装包添加可执行权限,之后运行指令:
./CFCA_UKEY.bin
运行bin安装包,运行结果如下:
 

PS:shell脚本借鉴

可以编写复杂的shell脚本实现更加复杂的安装,比较复杂的shell脚本借鉴如下:
#!/bin/bashif [ -f "/opt/uninstall.sh" ];thenecho "VVVVVVVV  卸载旧版本软件  VVVVVVVV"/opt/uninstall.shecho "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"echo ""
fitmpfile_name=/tmp/icbc.tar.gzecho -e "\t 准备安装软件..."
sed -n -e '1,/^exit 0$/!p' $0 > ${tmpfile_name} 2>/dev/null
tar xzf ${tmpfile_name} -C /opt
rm -rf ${tmpfile_name}
cd /optMountDisk()
{diskname=`fdisk -l | grep 'GB' | awk '$3 -ge 100' | awk '{print substr($2,1,8)}'`if [ -z "$diskname" ];thenecho "没有可挂载的硬盘"exit 0filocal filename="/etc/rc.d/rc.local"tmpnum=`sed -n -e '/mount/=' ${filename}`if [ -z "$tmpnum" ];thenecho "echo \"Starting Mount '$diskname',Please waiting...\" > /dev/tty1" >>$filenameecho "mount '$diskname' /opt/icbc/logs" >> $filename#       AllowPort 60000fiecho 'y' | mkfs.ext4 $disknamemount $diskname /opt/icbc/logs
}#usage: AllowPort port
AllowPort()
{#防火墙允许通过echo "开启端口号:" $1/sbin/iptables -I INPUT -p tcp --dport $1 -j ACCEPT/etc/init.d/iptables save/etc/init.d/iptables restart
}ConfigNetwork()
{local filename=/etc/sysconfig/network-scripts/ifcfg-eth0tmpnum=`sed -n -e '/NM_CONTROLLED=yes/=' ${filename}`if [ -n "$tmpnum" ];thensed -i "/NM_CONTROLLED=yes/d" ${filename}fitmpnum=`sed -n -e '/PEERDNS=yes/=' ${filename}`if [ -n "$tmpnum" ];thensed -i "/PEERDNS=yes/d" ${filename}fitmpnum=`sed -n -e '/NM_CONTROLLED/=' ${filename}`if [ -z "$tmpnum" ];thenecho "NM_CONTROLLED=no" >> ${filename} fitmpnum=`sed -n -e '/PEERDNS/=' ${filename}`if [ -z "$tmpnum" ];thenecho "PEERDNS=no" >> ${filename} fi
}InstallJRE()
{local filename=/etc/profiletmpnum=`sed -n -e '/JAVA_HOME/=' ${filename}`if [ -z "$tmpnum" ];then#sed -i "/JAVA_HOME/d" ${filename}echo "export JAVA_HOME=/opt/jre" >> ${filename}echo "export CLASS_PATH=\$JAVA_HOME/lib" >> ${filename}echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> ${filename}fisource /etc/profile
}InstallTomcat()
{local filename="/etc/rc.d/rc.local"if [ ! -f "/etc/rc.d/init.d/tomcat" ];then
#       echo "rm -ef /opt/tomcat/logs/*" >> $filename
#       echo "rm -ef /opt/tomcat/work/*" >> $filenamecp /opt/tomcat/bin/tomcat /etc/rc.d/init.dchkconfig --add tomcatAllowPort 60002fitmpnum=`ps -ef | grep tomcat | grep -v grep`if [ -z "$tmpnum" ];then#启动服务service tomcat startfi
}InstallSbox()
{local filename="/etc/rc.d/rc.local"tmpnum=`sed -n -e '/sbxmanager/=' ${filename}`if [ -z "$tmpnum" ];thenecho "echo \"Starting Sbox Service,Please waiting...\" > /dev/tty1" >> $filenameecho "/opt/sbox/bin/sbxmanager.sh start &" >> $filename#      AllowPort 60000fitmpnum=`ps -ef | grep managerd | grep -v grep`if [ -z "$tmpnum" ];then#启动服务/opt/sbox/bin/sbxmanager.sh startfi
}InstallInitd()
{local filename="/etc/rc.d/rc.local"tmpnum=`sed -n -e '/initd.jar/=' ${filename}`if [ -z "$tmpnum" ];thenecho "echo \"Starting Proxy Service,Please waiting...\" > /dev/tty1" >> $filenameecho "/opt/jre/bin/java -Dfile.encoding=utf8 -jar /opt/icbc/initd/initd.jar &" >> $filenamefi
}InstallJkgrd()
{local filename="/etc/rc.d/rc.local"tmpnum=`sed -n -e '/jkmgrd/=' ${filename}`if [ -z "$tmpnum" ];thenecho "echo \"Starting jkmgrd Service,Please waiting...\" > /dev/tty1" >> $filenameecho "jkmgrd p=60001 l=2" >> $filenamejkmgrd p=60001 l=2AllowPort 60001fi
}StopFirewall()
{local filename="/etc/rc.d/rc.local"tmpnum=`sed -n -e '/iptables/=' ${filename}`if [ -z "$tmpnum" ];thenecho "echo \"Stopping firewall service, please waiting...\" > /dev/tty1" >> $filenameecho "service iptables stop" >> $filenamefiservice iptables stop
}InstallJob()
{local filename="/var/spool/cron/root"tmpnum=`sed -n -e '/submitLog/=' ${filename}`if [ -z "$tmpnum" ];thenecho "0 0 * * * submitLog_Day.sh" >> $filenameecho "0 0 * * 1 submitLog_Week.sh" >> $filenameecho "0 0 1 * * submitLog_Month.sh" >> $filenamefitmpnum=`sed -n -e '/minisvs_rotate/=' ${filename}`if [ -z "$tmpnum" ];thenecho "*/1 * * * * minisvs_rotate.sh" >> $filenamefitmpnum=`sed -n -e '/clean_log/=' ${filename}`if [ -z "$tmpnum" ];thenecho "0 0 * * * clean_log.sh" >> $filenamefi
}InstallNtpdate()
{local filename="/etc/rc.d/rc.local"tmpnum=`sed -n -e '/ntpdate/=' ${filename}`if [ -z "$tmpnum" ];thenecho "echo \"time update, please waiting...\" > /dev/tty1" >> $filenameecho "ntpdate cn.ntp.org.cn" >> $filenameecho "hwclock -w" >> $filenamentpdate cn.ntp.org.cnfi
}StopSSH()
{local filename="/etc/rc.d/rc.local"tmpnum=`sed -n -e '/killall sshd/=' ${filename}`if [ -z "$tmpnum" ];thenecho "echo \"Close SSH Service,Please waiting...\" > /dev/tty1" >> $filenameecho "killall sshd" >> $filenamefitmpnum=`ps -ef | grep sshd | grep -v grep`if [ -n "$tmpnum" ];thenecho "SSH serivce will close after 10 second"sleep 10killall sshdfi
}####---- main ----####echo -e "\t 挂载硬盘..."
MountDiskecho -e "\t 配置网络..."
ConfigNetworkecho -e "\t 修改启动列表默认时间"
sed -i  's/timeout=5/timeout=0/' /boot/grub/menu.lstecho -e "\t 安装库文件和工具..."
cp bin/ftp /usr/bin
cp bin/ntpdate /usr/bin
cp bin/jkmgrd /usr/bin
cp bin/submitLog_*.sh /usr/bin
cp bin/minisvs_rotate.sh /usr/bin
rm -rf binecho -e "\t 安装NTP时间同步..."
InstallNtpdateecho -e "\t 安装Mysql..."
cd mysql && ./install.shecho -e "\t 安装JRE..."
InstallJREecho -e "\t 安装Tomcat..."
InstallTomcatecho -e "\t 安装Sbox..."
InstallSboxecho -e "\t 安装Jkmgrd..."
InstallJkgrdecho -e "\t 安装Initd..."
InstallInitd#echo -e "\t 关闭防火墙..."
#StopFirewallecho -e "\t 开启日志上传计划..."
InstallJobecho -e "\t 关闭SSH服务..."
StopSSHexit 0

linux下bin安装包制作教程相关推荐

  1. linux下bin安装包制作

    文章目录 linux安装文件 .bin安装文件 .bin安装包制作 1.准备安装包 2.编写sh安装脚本 3.使用cat命令连接安装脚本和安装包 linux安装文件 Linux常见的安装文件可以简单的 ...

  2. linux一键部署安装包制作

    linux一键部署安装包制作 1.首先准备安装包和安装脚本 2.下载makeself-2.4.0.run制作安装包,并安装 wget https://github.com/megastep/makes ...

  3. linux下python安装包 3.7.1

    linux下python安装包 3.7.1 百度网盘链接:https://pan.baidu.com/s/12mU27c84dQ0Clf-gjenOrg  提取码:jg0r

  4. linux程序安装包怎么用,制作Linux下程序安装包——使用脚本打包bin、run等安装包...

    制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了.一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可. ...

  5. linux .bin安装包制作

    好久不做安装包了,需要做个安装包,好脑袋不如烂笔头,还是再简单记录一下. linux 安装包制作 1.打包或压缩文件tar,zip,gz等,解压后即可,或者解压后运行sh文件:太简单...感觉不正式 ...

  6. linux 下的程序格式,linux 下软件安装包的格式有哪些?

    一.Linux常用安装包及安装方法 1.安装包一般有四类: 1)tar包,如software-1.2.3-1.tar.gz.他是使用UNIX系统的打包工具tar打包的. 2)rpm包,如softwar ...

  7. linux二进制安装包制作,linux下二进制安装包的创建

    一个合格的产品必须要有一个像样的安装包,每次拷来拷去显得太不上档次,哈哈...也不便于用户使用. 闲话不多扯,直奔主题,看过来吧,程序猿(媛)们:本文主要介绍二进制安装包的创建和使用: 1.首先介绍二 ...

  8. linux下使用安装包安装git

    Centos服务器 1.首先下载git安装包 分享一个下载地址:https://mirrors.edge.kernel.org/pub/software/scm/git/ 2.上传到服务器 3.解压 ...

  9. Linux下deb安装包的安装教程

    pkg 是Debian Package的简写,是为Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu.Knoppi ...

最新文章

  1. 【深度】清华黄高等人新作:动态神经网络首篇综述
  2. python现在最新的版本-Python 3.8 已发布,现在是切换至新版本的好时机吗?
  3. 基本线程同步(三)在同步的类里安排独立属性
  4. NLP、炼丹技巧和基础理论文章索引
  5. NET-TreeView控件说明
  6. python自动化办公教程百度云-693629 用Python自动办公,做职场高手(完结)
  7. 如何找到chromedriver与chrome的对应版本
  8. 天津成人高考计算机基础知识题库,天津市成考《计算机基础考试大纲》(高中起点)...
  9. markdownpad2渲染组件出错——Awesomium sdk组件下载
  10. android 恢复出厂设置流程分析,Android恢复出厂设置流程分析
  11. java页面标签span_span标签跳转新页面
  12. 【通俗易懂】机器学习中 L1 和 L2 正则化的直观解释
  13. 从零开始写项目【总结】
  14. HTMLCSS登录界面及讲解
  15. 基于OBD的量产车评估(PVE)测试方法
  16. RSD的面向任务有何不同——任务目录
  17. xampp 安装swoole
  18. python实现三级菜单_Python3.5实现的三级菜单功能示例
  19. O2O、C2C、B2B、B2C
  20. 【python】pip安装模块下载速度太慢解决方法

热门文章

  1. 不限速下载百度网盘大文件
  2. Learning Span-Level Interactions for Aspect Sentiment Triplet Extraction 论文阅读 ACL2021
  3. Java项目之画图板(一)
  4. 如何报考PMP项目管理认证考试?
  5. 信息系统项目管理师就业前景分析
  6. 计算机vb2级知识点,2020年全国计算机二级VB复习知识点:VB编码规则
  7. SQL语句----DML
  8. 动态网站设计——笔记
  9. 基于高德离线地图数据实现GPS经纬度逆解析城市信息
  10. 【Python常用函数】一文让你彻底掌握Python中的pivot_table函数