实现BIN包的install以及自动化脚本

从checkout源代码开始,到最终做成一个BIN包,通过两个脚本完成,一个是要集成到BIN里的install.sh脚本(前面有说),关键就是中间写清楚build,install的过程,因为能够截取出源代码的,所以尽量不要放源代码然后编译,而是将二进制放里面,然后进行install,也就是中间最好不要build,而仅仅install,最后将压缩包以及解压的安装程序都删除掉;另一个脚本run_release.sh就是完成从checkout源代码,命名,tar,关键还有一点就是必须将命名当作参数传递到install.sh里面,否则BIN包不知道到底需要解压的名字是什么,最终cat制作自定义名称BIN

下面是以nginx为例来进行制作BIN:

[root@81 shell]# cat install.sh
#!/bin/bash
#########################
#bin install script
#HuiLi 2014-12-03
#########################
path=`pwd`
module=hello

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

tar zxvf $module.tar.gz
cd $module
############################################
#build install
cd lnmp
sh install.sh
############################################
cd $path
rm -rf $module
rm -f $module.tar.gz

exit 0

 

下面开始一段可以无视,自动用svn来checkout工作,命名也可以自定义,最重要的就是中间的sed将文件名$run传递给install.sh,但是最终还是换回hello,以便脚本可以不做任何修改继续使用

[root@81 shell]# cat run_release.sh
#!/bin/bash
########################################
#source code=>date-version-arch.run
#HuiLi 2014-12-03
########################################
user=lihui
path=`pwd`
svn=”你需要checkout的路径”
rm -rf x64
rm -rf iprobe-1.0
$svn/common/lnmp/x64 > /dev/null
$svn/iprobe-1.0 > /dev/null
mv x64 iprobe-1.0/lnmp

version=`svn up iprobe-1.0 | sed -n ‘/^At/p’ | awk ‘{print $3}’ | sed ‘s/\.//g’`
day=`date ‘+%F-%H-%M-%S’`
Arch=`lscpu | sed -n ‘/^Architecture/p’ | awk ‘{print $2}’`
run=”iProbe-$day-$version-$Arch”

sed -i “s/^module=hello/module=$run/g” install.sh
mkdir -p $run
cp -r iprobe-1.0/lnmp $run
rm -rf $run/lnmp/.svn
tar zcvf $run.tar.gz $run > /dev/null
cat install.sh $run.tar.gz > $run.run

rm -rf iprobe-1.0
rm -rf $run
rm -f $run.tar.gz

sed -i “s/^module=$run/module=hello/g” install.sh

最终就会生成一个shell脚本包:

[root@81 shell]#
[root@81 shell]# sh run_release.sh
[root@81 shell]# ls
install.sh  iProbe-2014-12-03-16-19-53-6303-x86_64.run  run_release.sh

发表回复