Linux下SHELL安装包必须注意的

上面那篇是今天打算用一种更好的方法模式来代替目前的RPM机制,但是成熟的RPM有很多种选项参数供你选择,比如是否包含源码包,是否去掉符号表,是否仅仅二进制,而今天做的SHELL脚本做的BIN包目前是携带源代码的,这对于一个需要release出去的软件来说应该是不合格的,

1:install.sh

Linux系统一切皆文件,所以这个脚本实际上是将自身的shell脚本命令和源代码的tar包给拼凑起来了,实际上最后生成的run包结构如下:

——————————————–
       安装脚本install.sh的内容            <==前多少行
——————————————–
       源代码tar.gz,编辑器乱码           <==后部分
——————————————–

所以实际上执行最后的hello.run实际上就是通过执行install.sh来源代码安装,而最后有一句exit 0,从而后面乱码(对编辑器来这么说)就执行不到了

2:源代码

既然这种方法还包含源代码,那根直接做一个tar包,然后将源代码和编译安装脚本塞进去,安装就解压执行脚本没啥差别呀,只不过名字高大上一点,显得有些鸡肋,但是这种包给内部使用比较方便,当然想不携带源代码也很容易,先将源代码编译好,将需要的可执行程序以及配置文件都copy到脚本的hello文件夹,然后在install.sh里写出install的命令,这样,shell包里永远就只有一些二进制和一些公开的内容了,比如去掉gcc编译过程,如下:

#!/bin/bash

now_dir=`pwd`
tmp_dir=/tmp
module=hello

sed -n -e ‘1,/^exit 0$/!p’ $0 > $tmp_dir/$module.tar.gz 2>/dev/null

tar zxvf $tmp_dir/$module.tar.gz
cd $module
cp a.out /usr/local/bin

rm -f $tmp_dir/$module.tar.gz

cd $now_dir
rm -f $module.tar.gz
rm -rf $module

exit 0

3:makeself

据说这是一个不错的工具,也是shell脚本,选项也不少,有空研究一下,看能否有更多选择

发表回复