免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6395 | 回复: 2
打印 上一主题 下一主题

shell脚本制作Linux系统上安装程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-04 16:04 |只看该作者 |倒序浏览
我写的一篇技术文档,和大家分享一下。
   
    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 > data.tar',这是这个文件的行数加上1,可以用命令自动统计。
             #!/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 > data.tar

        tar xf data.tar 2>/dev/null
        if [ $? != 0 ]
        then
                    echo "There is error when unpacking files."
                    rm -rf data.tar product
                    exit 1
        fi

        echo "Done."

        ## 删除临时文件tar
        rm -f data.tar

        ## 执行具体安装操作
        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脚本实现。

论坛徽章:
0
2 [报告]
发表于 2004-08-04 17:49 |只看该作者

shell脚本制作Linux系统上安装程序

不错,

论坛徽章:
0
3 [报告]
发表于 2004-08-04 17:58 |只看该作者

shell脚本制作Linux系统上安装程序

能得到bjgirl的认可,估计交差可以了,在这个版很佩服bjgirl。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP