文字列置換をする

細かい部分に関しては、こちらを参照してください。

  1. スタックファイルを定義する
    <?xml version="1.0" encoding="Shift_JIS"?>
    <!DOCTYPE stack PUBLIC
      "-//OpenStandia/Installer//DTD Stack Configuration 1.0//EN"
      "http://openstandia.sourceforge.jp/dtd/stack_1_0.dtd">
    
    <stack>
      <application>
        <name>サンプルスタック</name>
        <ver>1.0.0.0</ver>
        <description>スタックのサンプルです。</description>
        <properties>
          <products-dir>products/samples</products-dir>
        </properties>
      </application>
      <install-befores/>
      <products>
        <product no="9" name="文字列置換をする" def="${stack.application.properties.products-dir}/replace-1.0.0/win.xml"/>
        <product no="10" name="文字列置換をする" def="${stack.application.properties.products-dir}/replace-1.0.0/linux.xml"/>
      </products>
      <install-afters/>
    </stack>
    
    これは、「文字列置換をする」というプロダクトが、
    「products/samples/replace-1.0.0/win.xml」 もしくは、 「products/samples/replace-1.0.0/linux.xml」
    に定義されているという意味です。
  2. プロダクトファイル(Windows/Linux)を定義する
    1. Windowsの場合
      <?xml version="1.0" encoding="Shift_JIS"?>
      <!DOCTYPE product PUBLIC
        "-//OpenStandia/Installer//DTD Product Configuration 1.0//EN"
        "http://openstandia.sourceforge.jp/dtd/product_1_0.dtd">
      
      <product os="windows">
        <name>Replace String in File</name>
        <ver>1.0.0</ver>
        <required>false</required>
        <localDir>products\samples\replace-${product.ver}</localDir>
        <description>文字列置換をします。</description>
        <properties>
          <property name="installDir">${define.windows.openStandia.installDir}\samples\replace</property>
          <property name="tmp">${define.windows.openStandia.tmp}</property>
        </properties>
        <files>
          <file url="http://localhost/samples/replace/conf/win/file-${product.ver}.txt">conf\win\file.txt</file>
        </files>
        <execs>
          <install>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>call</arg>
                <arg>start</arg>
                <arg>/b</arg>
                <arg>mkdir</arg>
                <arg>"${product.properties.installDir}"</arg>
                <arg>&amp;</arg>
                <arg>exit</arg>
                <arg>0</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>copy</arg>
                <arg>/b</arg>
                <arg>/y</arg>
                <arg>"${product.properties.tmp}\${product.localDir}\conf\win\file.txt"</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>Replace.bat</arg>
                <arg>"${product.properties.installDir}\file.txt"</arg>
                <arg>@OS.NAME@</arg>
                <arg>"Windows"</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>Replace.bat</arg>
                <arg>"${product.properties.installDir}\file.txt"</arg>
                <arg>@EXECS.MODE@</arg>
                <arg>"インストール"</arg>
              </args>
            </exec>
          </install>
          <uninstall>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>call</arg>
                <arg>start</arg>
                <arg>/b</arg>
                <arg>mkdir</arg>
                <arg>"${product.properties.installDir}"</arg>
                <arg>&amp;</arg>
                <arg>exit</arg>
                <arg>0</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>copy</arg>
                <arg>/b</arg>
                <arg>/y</arg>
                <arg>"${product.properties.tmp}\${product.localDir}\conf\win\file.txt"</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>Replace.bat</arg>
                <arg>"${product.properties.installDir}\file.txt"</arg>
                <arg>@OS.NAME@</arg>
                <arg>"Windows"</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>Replace.bat</arg>
                <arg>"${product.properties.installDir}\file.txt"</arg>
                <arg>@EXECS.MODE@</arg>
                <arg>"アンインストール"</arg>
              </args>
            </exec>
          </uninstall>
          <update>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>call</arg>
                <arg>start</arg>
                <arg>/b</arg>
                <arg>mkdir</arg>
                <arg>"${product.properties.installDir}"</arg>
                <arg>&amp;</arg>
                <arg>exit</arg>
                <arg>0</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>copy</arg>
                <arg>/b</arg>
                <arg>/y</arg>
                <arg>"${product.properties.tmp}\${product.localDir}\conf\win\file.txt"</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>Replace.bat</arg>
                <arg>"${product.properties.installDir}\file.txt"</arg>
                <arg>@OS.NAME@</arg>
                <arg>"Windows"</arg>
              </args>
            </exec>
            <exec cmd="cmd.exe">
              <args>
                <arg>/c</arg>
                <arg>Replace.bat</arg>
                <arg>"${product.properties.installDir}\file.txt"</arg>
                <arg>@EXECS.MODE@</arg>
                <arg>"アップデート"</arg>
              </args>
            </exec>
          </update>
        </execs>
      </product>
      
    2. Linuxの場合
      <?xml version="1.0" encoding="Shift_JIS"?>
      <!DOCTYPE product PUBLIC
        "-//OpenStandia/Installer//DTD Product Configuration 1.0//EN"
        "http://openstandia.sourceforge.jp/dtd/product_1_0.dtd">
      
      <product os="linux">
        <name>Replace String in File</name>
        <ver>1.0.0</ver>
        <required>false</required>
        <localDir>products/samples/replace-${product.ver}</localDir>
        <description>文字列置換をします。</description>
        <properties>
          <property name="installDir">${define.linux.openStandia.installDir}/samples/replace</property>
          <property name="tmp">${define.linux.openStandia.tmp}</property>
        </properties>
        <files>
          <file url="http://localhost/samples/replace/conf/linux/file-${product.ver}.txt">conf/linux/file.txt</file>
        </files>
        <execs>
          <install>
            <exec cmd="mkdir">
              <args>
                <arg>-p</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="cp">
              <args>
                <arg>-pf</arg>
                <arg>"${product.properties.tmp}/${product.localDir}/conf/linux/file.txt"</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="sh">
              <args>
                <arg>Replace.sh</arg>
                <arg>"${product.properties.installDir}/file.txt"</arg>
                <arg>@OS.NAME@</arg>
                <arg>"Linux"</arg>
              </args>
            </exec>
            <exec cmd="sh">
              <args>
                <arg>Replace.sh</arg>
                <arg>"${product.properties.installDir}/file.txt"</arg>
                <arg>@EXECS.MODE@</arg>
                <arg>"インストール"</arg>
              </args>
            </exec>
          </install>
          <uninstall>
            <exec cmd="mkdir">
              <args>
                <arg>-p</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="cp">
              <args>
                <arg>-pf</arg>
                <arg>"${product.properties.tmp}/${product.localDir}/conf/linux/file.txt"</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="sh">
              <args>
                <arg>Replace.sh</arg>
                <arg>"${product.properties.installDir}/file.txt"</arg>
                <arg>@OS.NAME@</arg>
                <arg>"Linux"</arg>
              </args>
            </exec>
            <exec cmd="sh">
              <args>
                <arg>Replace.sh</arg>
                <arg>"${product.properties.installDir}/file.txt"</arg>
                <arg>@EXECS.MODE@</arg>
                <arg>"アンインストール"</arg>
              </args>
            </exec>
          </uninstall>
          <update>
            <exec cmd="mkdir">
              <args>
                <arg>-p</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="cp">
              <args>
                <arg>-pf</arg>
                <arg>"${product.properties.tmp}/${product.localDir}/conf/linux/file.txt"</arg>
                <arg>"${product.properties.installDir}"</arg>
              </args>
            </exec>
            <exec cmd="sh">
              <args>
                <arg>Replace.sh</arg>
                <arg>"${product.properties.installDir}/file.txt"</arg>
                <arg>@OS.NAME@</arg>
                <arg>"Linux"</arg>
              </args>
            </exec>
            <exec cmd="sh">
              <args>
                <arg>Replace.sh</arg>
                <arg>"${product.properties.installDir}/file.txt"</arg>
                <arg>@EXECS.MODE@</arg>
                <arg>"アップデート"</arg>
              </args>
            </exec>
          </update>
        </execs>
      </product>
      
      これは、「文字列置換をする」というプロダクトが、
      1. インストール先のディレクトリを作成
      2. インストール先に、「(一時ディレクトリ)/products/samples/replace-1.0.0/conf/win/file.txt」もしくは、
        「(一時ディレクトリ)/products/samples/replace-1.0.0/conf/linux/file.txt」をコピー
      3. インストール先の「file.txt」の中身に対して、「@OS.NAME@」の部分を実行OSに応じて置換
      4. インストール先の「file.txt」の中身に対して、「@EXECS.MODE@」の部分を処理モードに応じて置換
するという意味です。
    • file.txtの中身は、以下のような感じになっています。
      文字列置換サンプルテキストです。
      
      OSは、@OS.NAME@です。
      処理は、@EXECS.MODE@です。
      

  1. 各ディレクトリ、各ファイルを以下のように配置する
    OpenStandiaIntaller
     |--bin
     |--create
     |--lib
     |--products
     |  |--samples
     |     |--replace-1.0.0
     |        |--conf
     |        |  |--linux
     |        |     |--file.txt
     |        |  |--win
     |        |     |--file.txt
     |        |--linux.xml
     |        |--win.xml
     |--scripts
     |--stack-sample.xml
    GUIの場合は、以上で終了です。
    OpenStandia/GUI Installerより上記で作成したスタックファイルを読み込ませることで実行できるはずです。
    CUIの場合は、引き続き以下を行ってください。

  2. 起動バッチ(setup.bat)、起動シェル(setup.sh)の作成(編集)
    1. Windowsの場合
      1. OpenStandia/Installerに付属の起動バッチ(setup.bat)をメモ帳等で開いてください。
      2. 【初期設定】項目に使用するスタックファイルを定義する(l.4付近)

        REM ##### 初期設定 #####
        set OPENSTANDIA_INSTALLER_VER=sample
        set STACK_XML=stack-%OPENSTANDIA_INSTALLER_VER%.xml

        • ここでは、「stack-sample.xml」となるように定義しています。
      3. 【初期設定】項目にプロダクトの番号を定義する(l.4付近)

        REM ##### 初期設定 #####
        set OPENSTANDIA_INSTALLER_VER=sample
        set STACK_XML=stack-%OPENSTANDIA_INSTALLER_VER%.xml
        set ANT_DIR=apache-ant-1.7.0
        set SCRIPTS_DIR=scripts
        set REPLACE_TEST_NO=9

        • スタックファイルに記述した該当プロダクトの番号(stack.products.product.no)の値である必要があります。
      4. 【問い合わせ】項目を記述する(l.79付近)

        REM ##### 問い合わせ #####
        cls
        REM replace-test
        set REPLACE_TEST=y
        set /p REPLACE_TEST=文字列置換をするサンプルを実行しますか?(y/n) [y]

      5. 【ダウンロード実行】項目を記述する(l.124付近)

        REM ##### ダウンロード実行 #####
        echo.
        echo ダウンロード処理を開始します...
        if "%REPLACE_TEST%" == "y" (
          call ant -Dno=%REPLACE_TEST_NO% -DstackXml=%STACK_XML% -f "%SCRIPTS_DIR%download.xml"
          if errorlevel 1 goto error
        )

        • 「"%REPLACE_TEST%" == "y"」の部分の「%REPLACE_TEST%」は、
          【問い合わせ】項目で記述した変数名と合わせてください。
        • 「-Dno=%REPLACE_TEST_NO%」の部分の「%REPLACE_TEST_NO%」は、
          【初期設定】項目で記述した変数名と合わせてください。
      6. 【インストール実行】項目を記述する(l.124付近)

        REM ##### インストール実行 #####
        set INSTALLED_NO=
        echo.
        echo %MODE_STR%処理を開始します...
        if "%REPLACE_TEST%" == "y" (
          set INSTALLED_NO=%INSTALLED_NO%,%REPLACE_TEST_NO%
          call ant -Dno=%REPLACE_TEST_NO% -Dmode=%MODE% -DinstalledNo="%INSTALLED_NO%" -DstackXml=%STACK_XML% -f "%SCRIPTS_DIR%install.xml"
          if errorlevel 1 goto error
        )

        • 「"%REPLACE_TEST%" == "y"」の部分の「%REPLACE_TEST%」は、
          【問い合わせ】項目で記述した変数名と合わせてください。
        • 「set INSTALLED_NO=%INSTALLED_NO%,%REPLACE_TEST_NO%」及び「-Dno=%REPLACE_TEST_NO%」の部分の「%REPLACE_TEST_NO%」は、
          【初期設定】項目で記述した変数名と合わせてください。
    2. Linuxの場合
      1. OpenStandia/Installerに付属の起動シェル(setup.sh)をUTF-8で編集できるエディター等で開いてください。
      2. 【初期設定】項目に使用するスタックファイルを定義する(l.5付近)

        ##### 初期設定 #####
        OS_LANG=UTF-8
        OPENSTANDIA_INSTALLER_VER=sample
        STACK_XML=stack-${OPENSTANDIA_INSTALLER_VER}.xml

        • ここでは、「stack-sample.xml」となるように定義しています。
      3. 【初期設定】項目にプロダクトの番号を定義する(l.5付近)

        ##### 初期設定 #####
        OS_LANG=UTF-8
        OPENSTANDIA_INSTALLER_VER=sample
        STACK_XML=stack-${OPENSTANDIA_INSTALLER_VER}.xml
        ANT_DIR=apache-ant-1.7.0
        SCRIPTS_DIR=scripts
        REPLACE_TEST_NO=10

        • スタックファイルに記述した該当プロダクトの番号(stack.products.product.no)の値である必要があります。
      4. 【問い合わせ】項目を記述する(l.85付近)

        ##### 問い合わせ #####
        clear
        # replace-test
        read -p "文字列置換を展開するサンプルを実行しますか?(y/n) [y]" REPLACE_TEST
        if [ "${REPLACE_TEST}" = "" ]; then
          REPLACE_TEST=y
        fi
      5. 【ダウンロード実行】項目を記述する(l.146付近)

        ##### ダウンロード実行 #####
        echo
        echo ダウンロード処理を開始します...
        if [ "${REPLACE_TEST}" = "y" ]; then
          ant -Dno=${REPLACE_TEST_NO} -DstackXml=${STACK_XML} -f "${SCRIPTS_DIR}download.xml"
          if [ $? -ne 0 ]; then error_func; fi
        fi

        • 「"${REPLACE_TEST}" = "y"」の部分の「${REPLACE_TEST}」は、
          【問い合わせ】項目で記述した変数名と合わせてください。
        • 「-Dno=${REPLACE_TEST_NO}」の部分の「${REPLACE_TEST_NO}」は、
          【初期設定】項目で記述した変数名と合わせてください。
      6. 【インストール実行】項目を記述する(l.183付近)

        ##### インストール実行 #####
        INSTALLED_NO=
        echo
        echo ${MODE_STR}処理を開始します...
        if [ "${REPLACE_TEST}" = "y" ]; then
          INSTALLED_NO=${INSTALLED_NO},${REPLACE_TEST_NO}
          ant -Dno=${REPLACE_TEST_NO} -Dmode=${MODE} -DinstalledNo="${INSTALLED_NO}" -DstackXml=${STACK_XML} -f "${SCRIPTS_DIR}install.xml"
          if [ $? -ne 0 ]; then error_func; fi
        fi

        • 「"${REPLACE_TEST}" = "y"」の部分の「${REPLACE_TEST}」は、
          【問い合わせ】項目で記述した変数名と合わせてください。
        • 「INSTALLED_NO=${INSTALLED_NO},${REPLACE_TEST_NO}」及び「-Dno=${REPLACE_TEST_NO}」の部分の「${REPLACE_TEST_NO}」は、
          【初期設定】項目で記述した変数名と合わせてください。

以上でCUIの場合も終了です。
各起動バッチ、シェルを実行することで実行できるはずです。