zoukankan      html  css  js  c++  java
  • 使用makeself创建安装文件

    Makeself.sh是一个小的Shell脚本。用于从一个文件夹中生成自解压的tar.gz压缩包。

    结果文件以一个shell脚本显示(大多数以.run作为后缀名)。能够自己主动执行。该文档会解压自己到一个暂时文件夹,而且执行一个可选的随意命令(比如:一个安装脚本)。它很类似于Windows中的Winzip自解压生成的文件。Makeself文档也包含校验和用于集成子验证(CRC或MD5校验和)。

    Makeself.sh脚本自身仅仅用于从文件文件夹中创建一个的文档。生成的文档实际上是一个压缩(使用gzip,bzip2或压缩)TAR文件。在文件的開始增加一小段Shell脚本。这是一个小的Stub脚本,用于执行解压文件,执行嵌入命令和删除暂时文件。

    为了安装包括在该文档中的软件。用户仅仅须要执行“文档”,比如:sh nice-software.rum。

    我推荐这些文件使用“run”或“sh”作为后缀。不要迷惑用户,由于他们知道它实际上是一个Shell脚本。它后面带有相当多的二进制数据。

    从2.1開始,makeself已经重写过,在以下的平台上进行測试:

    1. Linux(全部发行版)

    2. Sun Solaris(8以上版本号)

    3. HP-UX(HPPA RISC上的11.0和11i)

    4. SCO OpenUnix和OpenServer

    5. IBM AIX 5.1L

    6 MacOS X(Dario)

    7. SG IRIX 6.5

    8. FreeBSD

    9. UnicOS/Cray

    10.Cygwin(Windows)

    主页(当前最新版本号2.2.0):

    https://github.com/megastep/makeself

     http://megastep.org/makeself/

    源码下载:

    https://github.com/megastep/makeself/archive/release-2.2.0.tar.gz

    官方最新发行版下载:

    http://cdn.megastep.org/makeself/makeself-2.2.0.run

    Makeself安装

    为了在Linux上安装makeself。下载最新版本号的存档格式文件。运行下载的文件,当文件自解压以后会在当前文件夹下创建一个新的文件夹称为makeself-2.2.0,拷贝全部的shell脚本到/usr/bin文件夹下完毕安装。

    $ wgethttp://megastep.org/makeself/makeself-2.2.0.run

    $ chmod 755 makeself-2.2.0.run

    $ ./makeself-2.2.2.run

    $ cd makeself-2.2.0

    $ sudo cp *.sh /usr/bin

    用法

    makeself.sh的基本用法例如以下:

    makeself.sh [args] archive_dir file_namelabel startup_script [script_args]

     “label”參数是SFX解压缩时打印的消息,“start_script”指定在SFX归档文件成功解压缩后运行的脚本和命令。当你想创建一个自解压的安装文件时会实用处。通常启动脚本将拷贝和安装解压的内容到合适的目标文件夹中。

    启动脚本必须位于打包的文件夹中。因此脚本包括在SFX归档文件里。

    1. args是Makeself的可选參数。可用的有:

           --vesion:打印版本号信息到控制台。然后马上退出;

    -         --gzip: 使用GZIP压缩(缺省选项)

    -         --bzip2:使用bzip2压缩

    -         --compress:使用Unix的compress命令压缩数据

    -         --nocomp:不压缩

    -         --notemp:不解压文件到一个暂时文件夹,可是在当前文件夹下创建一个新的子文件夹。

    -         --current:文件将解压到当前文件夹,而不是子文件夹中,隐含--notemp选项

    -         --follow:尾随全部的符号链接,也打包那些符号链接的文件。

    -         --append:近期数据到现有的文档中。而不是创建一个新的数据。

    -         --header:Makeself2.0開始能够使用一个单独文件存储头部stub。称为makeelf-header.sh。如果位于makeself同样的位置。

    -         --copy:….

    2. archive_dir:包括归档文件的文件夹名称

    3. file_name:创建归档文件的名称

    4. label:描写叙述软件包的随意文本字符串,当解压文件时显示

    5. startup_script:在提取文件文件夹中的命令,因此假设你希望运行一个

    在该文件夹中的程序。你必须在你的命令之前加上前缀“./”。比如:./program是正确的。script_args是改命令的附加參数。

    这里有一个演示样例,如果用户有一个包镜像存储在/home/joe/mysoft文件夹中,它希望生成一个自解压的mysoft.sh软件包,它将启动存储在/home/joe/mysoft文件夹下的setup脚本。运行命令例如以下:

    makeself.sh/home/joe/mysoft mysoft.sh "Joe's Nice Software Package" ./setup

    以下是创建包括Makeself发行版的makeself.run文档的命令:

    makeself.sh --notempmakeself makeself.run "Makeself by Stephane Peter" echo"Makeself has extracted itself"

    由makeself生成的文档能够传递以下的參数:

    -         --keep:放置文件解压到一个暂时文件夹中(在嵌入脚本运行之后会被删除掉)。文件将直接解压到当前的工作文件夹中。直到你删除它。

    -         --verbose:在运行嵌入式命令之前提示用户

    -         --target:同意解压文件夹到任何位置

    -         --confirm:执行嵌入式命令之前提示用户确认

    -         --info:打印出关于文档的通用信息(不解压)

    -         --lsm:打印LSM条目

    -         --check:使用嵌入的校验和检查文档,不解压文档

    -         --nochown:缺省,在解压之后在目标文件夹下执行“chown -R”命令,以便全部文件属于当前用户。

    假设你以root用户执行大部分须要这样,tar将尝试又一次创建初始化用户全部者。

    你能够禁用这个行为。

    -         --tar:对文档的内容执行tar命令,使用后面的參数作为命令的參数。

    -         --noexec:解压后不执行嵌入式脚本

    不论什么文档后面的參数将作为附加參数传递给嵌入的命令。

    在不论什么这些选项之前,你应该显示的使用--专用命令行结构,确保Makeself不会尝试解释它们。

    创建自解压文档

    为了创建一个自解压的文档,包括全部文件在backup文件夹下,做以下操作。

    启动函数仅仅是打印“Extraction done”不做很多其它的事情。

    $ makeself.sh --notemp./backup ./backup.run "SFX archive for backup" echo "Extractiondone"

    Header is 403 lines long

    About to compress 1540 KB of data...

    Adding files to archive named"./backup.run"...

    ./

    ./jpeg/

    ./jpeg/1.jpg

    .

    .

    CRC: 2238411397

    MD5: 0b0fd3a2ba08ffcec821b9cbaa11b70d

    Self-extractible archive"./backup.run" successfully created.

    为了解压文档中的文件。简单的运行文档:

    $ ./backup.run

    Creating directory backup

    Verifying archive integrity... All good.

    Uncompressing SFX archive forbackup.............

    Done

    创建自解压安装文件

      假设你希望创建一个自解压安装文件,你须要准备一个单独的启动脚本,它将在解压完毕后运行安装过程。

     1.创建一个暂时文件夹

      #mkdir sftpupload

      2.把sftpupload-20141118.zip文件复制到该文件夹中

     #cp <dir>/sftpupload-20141118.zip sftpupload

     3.然后在sftpupload文件夹下创建一个Shell安装脚本,名为install.sh:

     # vi sftpupload/install.sh

    #!/bin/bash

    echo "Upload start ..."

    CURRENT_DIR=`pwd`

    echo "1. Current directory$CURRENT_DIR"

    INSTALL_DIR=/data/natspace/nat/script/pyscript/sftpupload

    TEMP_DIR=$CURRENT_DIR/sftpupload

    ZIP_FILE=sftpupload-20141118.zip

    echo "2. Unzip file: $ZIP_FILE to$TEMP_DIR"

    rm -rf $TEMP_DIR

    unzip $ZIP_FILE -d $TEMP_DIR

    cd $TEMP_DIR

    echo "3. Check the directory:$INSTALL_DIR"

    if [ ! -d $INSTALL_DIR ]; then

    mkdir -p $INSTALL_DIR

    fi

    echo "4. Remove stop-*.shscript!"

    rm -rf $INSTALL_DIR/stop-*

    echo "5. Move file to$INSTALL_DIR"

    mv -f * $INSTALL_DIR

    chmod 755 $INSTALL_DIR/*.sh

    echo "6. Delete the directory:$CURRENT_DIR"

    cd $INSTALL_DIR

    rm -rf $CURRENT_DIR   # TODO:makeself脚本运行完成后会自行删除该文件夹

    echo "7. Execute stop-all.shscript"

    ./stop-all.sh

    echo "Update done!"

    然后让启动脚本拥有可运行:

    $ chmod 755 sftpupload/install.sh

    继续。创建一个自解压安装文件。打包启动脚本,例如以下:

    $ makeself.sh sftpupload sftpupload.run"Update sftpupload program" ./install.sh

    注意::install.sh(安装脚本)之前必须带有“./”前缀,而且install.sh脚本必须具有可运行权限。

    注意:install.sh(安装脚本)必须放在makeself的打包文件夹中。

  • 相关阅读:
    关于自适应的矩形css布局
    关于在天机项目中遇到的常用git 命令
    关于es6中对象的扩展
    vue的钩子函数
    关于Javascript的forEach 和 map
    关于router-link的传参以及参数的传递
    关于vuex的项目中数据流动方式
    vue中关于prop
    提交Sublime Text 插件到Package Control
    写lua时需要注意的地方
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6992602.html
Copyright © 2011-2022 走看看