分类:
2010-11-12 13:56:56
Linux下制作安装程序有很多第三方工具,还有RPM包这种规范形式;然而要做很多适合项目要求的个性安装设置,还是自己动手用sh制作更合适。这种方法借鉴了其它一些产品的安装,增添了一些新的部分。也许有点笨,但用惯了觉得还算可以。
这种作法基本道理是生成一个大的文件,由一段sh脚本加上一个tar包组成。sh脚本负责把tar包解开并完成一些必要操作,实现安装的拷贝和设置。这样一个大的文件加上执行权限就可以当安装程序使用,不得不佩服Linux的文件系统。
制作这样的安装程序,一般需要这样的的发布结构:一个脚本文件负责解开安装文件中tar包,它也将作为安装文件的头部,在下面例子中是inst.sh;产品基本目录结构,包括可执行文件等,它将被tar成tar形式作为安装文件中数据部分,在下面例子中是product及其子目录;一个脚本用于把前两者合成安装文件,在下面例子中是mkinst.sh。
下面举例说明:
install/
install/inst.sh
install/mkinst.sh
install/product/bin/start.tmpl
install/product/bin/a.exe
install/product/lib/libb.so.0.9
install/product/work/product-inst.sh
制作product的安装文件,要安装到用户指定路径,并且安装后start.sh执行a.exe时候调用libb.so.0.9。下面分步骤说明详细过程。
1,inst.sh,内容如下。它将作为安装文件的控制部分,占据安装文件的头部。为了可重用,只让它做解开安装文件中tar包和清除临时文件、目录工作,具体安装控制语句调用'cd product/work'和'sh product-inst.sh'完成。细节处是'tail +49 $0 > da
#!/bin/sh
## 协议
more <<"EOF"
License Agreement
.............
EOF
## 是否同意协议内容
agreed=
while [ x$agreed = x ]
do
echo "Do you agree to the above license terms? [yes or no] "
read reply leftover
case $reply in
y* | Y*)
agreed=1
;;
n* | N*)
echo "you can't install this sofware";
exit 1
;;
esac
done
## 从安装文件尾部取出tar包并在当前路径解开
echo "Unpacking..."
tail +49 $0 > da
tar xf da
if [ $? != 0 ]
then
echo "There is error when unpacking files."
rm -rf da
exit 1
fi
echo "Done."
## 删除临时文件tar
rm -f da
## 执行具体安装操作
cd product/work
sh product-inst.sh
cd ../..
## 删除临时目录
rm -rf product
exit 0
2,product目录。这个目录中需要说明的是'install/product/bin/start.tmpl'和'install/product/work/product-inst.sh'文件。
start.tmpl内容如下。其中@INSTALLPATH@是个变量,要根据用户输入置换。置换操作在product-inst.sh中完成,置换后生成真正的启动脚本start.sh。
#!/bin/sh
export LD_LIBRARY_PATH="@INSTALLPATH@/lib"
"@INSTALLPATH@/bin/a.exe"
product-inst.sh内容如下。它完成具体安装操作。
#!/bin/sh
## 得到安装路径
echo "set installing path:"
read INPUT
INST_PATH=$INPUT
## 置换start.tmpl中变量
cat ../bin/start.tmpl | sed "s/@INSTALLPATH@/${INST_PATH}/" > ../bin/start.sh
chmod +x ../bin/start.sh
## 复制文件到安装路径下
mkdir -p "${INST_PATH}"
mkdir -p "${INST_PATH}/bin"
cp -R ../lib "${INST_PATH}"
cp ../bin/start.sh "${INST_PATH}/bin"
cp ../bin/a.exe "${INST_PATH}/bin"
3,mkinst.sh,内容如下。
#!/bin/sh
tar cvf a.tar product
cat inst.sh a.tar > product-setup.sh
chmod +x product-setup.sh
echo "success!"
exit 0
执行以上三个步骤,生成了product-setup.sh安装文件。这样product可以安装到任何地方。所有个性安装设置都可以在product-inst.sh中考虑用shell脚本实现。