TTSP事始

TTSP(TOPPERS Test Suite Package)がリリースされてから半年が過ぎているが、ググってもあまり使われている形跡がなさそう*1

ASPカーネルがビルドできてsample1アプリケーション動いてるけど、次どうしよう…からTTSPでテストをパスしたよ!までを簡単にまとめてみたい。

環境構築

ということなので、ASPカーネルのビルドができていれば、あとはrubyをインストールする。
今回インストールしたのは次のバージョン

$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]

ファイルの展開

TTSPのファイルを解凍したら、ASPのフォルダへ移動する

$ tar xvzf ttsp_1.0.0.tar.gz
$ mv ttsp (ASPのフォルダ)

マニュアルは?

ttsp/user.txtをよく読みましょう。私は読まなかったので最初はまりました。

TTSPを実行する前に

まずはTTSPのターゲット依存部を作成する必要がある…が今回はそこを最小限の変更ですします*2

configure.shの修正

ttsp/configure.shのTARGET_NAMEを使用しているターゲット名に変更する
apsh4_gccというターゲット依存部とした場合は次のようになる

#
# ターゲット略称の定義
#
TARGET_NAME="apsh4_gcc"
ターゲット依存部フォルダの作成(じゃなくて仮にコピー)

ttsp/library/ASP/targetフォルダの下に自分が使用しているターゲット依存部フォルダをコピーする

$ cd ttsp/library/ASP/target/
$ cp -rp at91skyeye_gcc/ apsh4_gcc

ttsp_target_test.hの中身をターゲットに応じて変更する。

コピーしたターゲット依存部フォルダからconfigure.yamlを削除し、

$ cd apsh4_gcc/
$ rm configure.yaml

ttsp_target.shの以下の部分を"false"に変更する

#
# ターゲット依存APIの有無
# [true: 有り,false: 無し]
#
FUNC_TIME="true"		# システム時刻制御関数
FUNC_INTERRUPT="false"	# 割込み発生関数
FUNC_EXCEPTION="false"	# CPU例外発生関数

TTSPの実行

ttspフォルダに戻ってTTBを走らせる
======================================================================
 TTSP main menu
======================================================================
 1: API Tests
 c: Check the Functions for Target Dependent
 k: Kernel Library
 q: Quit
----------------------------------------------------------------------
 Please input menu no:1
APIテストを選択「1」
======================================================================
 API Tests
======================================================================
 1: Auto-Code Test
 2: Scratch-Code Test
 3: Configuration Error Test
 4: Test for specified TESRY
 r: Return to main menu
 q: Quit
----------------------------------------------------------------------
 Please input menu no:1
オートコードテストを選択「1」

======================================================================
API Tests (Auto-Code Test)
======================================================================
1: Generate a MANIFEST file for All TESRYs
2: Generate a MANIFEST file for each functions
3: Generate a MANIFEST file divided by specified number
4: Build all program files (No.5-8)
5: Make MANIFEST folders
6: Execute TTG
7: "make depend" for each MANIFEST folders
8: "make" for each MANIFEST folders
9: "make clean" for each MANIFEST folders
a: "make realclean" for each MANIFEST folders
e: Run executable module (Target Dependent)
r: Return to main menu
q: Quit

                                                                                                                                          • -

Please input menu no:1

MANIFESTファイルを作成「1」

ttsp/api_test/ASPフォルダに各テストフォルダとテストケースのyamlファイルが生成されます

makからTTGの実行まで
======================================================================
 API Tests (Auto-Code Test)
======================================================================
 1: Generate a MANIFEST file for All TESRYs
 2: Generate a MANIFEST file for each functions
 3: Generate a MANIFEST file divided by specified number
 4: Build all program files (No.5-8)
 5: Make MANIFEST folders
 6: Execute TTG
 7: "make depend" for each MANIFEST folders
 8: "make" for each MANIFEST folders
 9: "make clean" for each MANIFEST folders
 a: "make realclean" for each MANIFEST folders
 e: Run executable module (Target Dependent)
 r: Return to main menu
 q: Quit
----------------------------------------------------------------------
 Please input menu no: 4


======================================================================
Build all program files (No.5-8)
======================================================================
make auto_code_1 folder

----------------------------------------------------------------------
Execute TTG in auto_code_1
----------------------------------------------------------------------
[TTC]########################################################################################################:100.0% [ 1699 test cases passed.                ]
[TTG]########################################################################################################:100.0% [ 1699 test cases passed.                ]
[IMC]########################################################################################################:100.0% [ 1699 test cases passed.                ]

----------------------------------------------------------------------
make depend in auto_code_1
----------------------------------------------------------------------

...以下テストプログラムのビルドステップへ

*1:社内で使っているっていう話は耳にしますが

*2:もちろんあとで作らなきゃいけないけど

Mac OS X(LION) でXercesをビルドする

事前に入れてあるのはXCode4とBoost*1MacPortsはいれてません。
ビルドのインストラクションはこちら

あとはxerces-c-3.1.1を展開して

> ./configure CFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64"  
> make
> sudo make install

でOKでした。
インストール先は/usr/local/の下にbin,include,libが出来るのでそれぞれのフォルダ先にインストールされます。

*1:ビルドには影響ないはず

Preferencesをカスタマイズする

PizzaFactoryEclipseフレームワークを使っているのでPreferencesのカスタマイズが可能です.

以下のサイトを参考にしました.
- Eclipse RCP アプリケーションを独自ブランド化する - IBM developerWorks
- Eclipseのカスタマイズの勧め(後編)- @IT
- イントロ(概要画面)を作る

PizzaFactoryの場合plugin_customization.iniがplugins\jp.pizzafactory.platform_0.1.0にあるので,そこを変更できます.
またビルド時のライブラリの追加はjp.pizzafactory.toppers.kernels.jsp.のplugin.xmlを覗き込むをラッキーなことになるかもしれないです.

新世代カーネル用コンフィギュレータをビルドする(Boost導入編)

コンフィギュレータをビルドする必要がでたので一連の作業をまとめてみます.

実行環境

Boostproを使ってBoostをインストールする

Boostproのダウンロードサイトにある1.44.0をダウンロードします.

boostproのインストーラを実行します

agreementを読んで[Agree]をクリックします


ミラーサイトを選択します

デフォルトの[Nearest SourceForge Mirror]を選択します

コンパイラとVariantsを選択します
  • [Visual C++ 10.0(Visual Studio 2010)]
  • Multithreaded, static runtime
  • Multithreaded debug, static runtime


コンポーネントを選択します

デフォルトのままにします

インストール先の情報を設定します

デフォルトの[C:\Program Files\boost\boost_1_44]を使用します


あとはただひたすら待つのみです.

DITA-OT1.5.3とApache FOPを使って日本語に対応したPDFを作成する

以前の方法ではDITA-OT1.5.3に対応できないので1.5.3用にまとめ直しました.

事前準備

PDFに埋め込む日本語フォントを用意します.
昨日作成したIPAフォントとそのフォントメトリックスを使用します.

FO pluginのbuild.xmlを修正

%DITA-OT%\demo\fo\build_template.xmlを修正します.
実行時にはbuild_template.xmlbuild.xmlにコピーされて実行されているようなのでbuild.xmlを直接書き換えてもダメです.

変更箇所は"default.locale"と"default.language"の値です.

<project name="dita.build" basedir=".">
  
  <import file="${dita.plugin.org.dita.pdf2.dir}/build_fop.xml"/>
  <import file="${dita.plugin.org.dita.pdf2.dir}/build_axf.xml"/>
  <import file="${dita.plugin.org.dita.pdf2.dir}/build_xep.xml"/>

  <target name="transform.topic2pdf.init">
    <property name="customization.dir" value="${dita.plugin.org.dita.pdf2.dir}/Customization"/>
    <property file="${customization.dir}/build.properties"/>
    
    <property name="default.locale" value="ja_JP"/>
    <property name="default.language" value="ja"/>
    
...

フォントマッピングの変更

デフォルトのフォントマッピングを変更してIPAフォントを指定するようにします.

  • %DITA-OT%\demo\fo\cfg\fo\font-mapping.xmlを%DITA-OT%\demo\fo\Customization\fo\font-mapping.xmlへコピーします.
  • char-setがJapaneseの時のfont-faceを以下のようにfont-mapping.xmlを変更します.
                <logical-font name="Sans">
                        <physical-font char-set="default">
                                <font-face>Helvetica</font-face>
                        </physical-font>
                        <physical-font char-set="Simplified Chinese">
                                <font-face>AdobeSongStd-Light</font-face>
                        </physical-font>
                        <physical-font char-set="Japanese">
                                <font-face>IPAGothic</font-face>
                        </physical-font>
                        <physical-font char-set="Korean">
                                <font-face>AdobeMyungjoStd-Medium</font-face>
                        </physical-font>
                        <physical-font char-set="Symbols">
                                <font-face>ZapfDingbats</font-face>
                        </physical-font>
                        <physical-font char-set="SubmenuSymbol">
                                <font-face>ZapfDingbats</font-face>
                        </physical-font>
                        <physical-font char-set="SymbolsSuperscript">
                                <font-face>Helvetica</font-face>
                                <baseline-shift>20%</baseline-shift>
                                <override-size>smaller</override-size>
                        </physical-font>
                </logical-font>

        <logical-font name="Serif">
                        <physical-font char-set="default">
                                <font-face>Times</font-face>
                        </physical-font>
                        <physical-font char-set="Simplified Chinese">
                                <font-face>AdobeSongStd-Light</font-face>
                        </physical-font>
                        <physical-font char-set="Japanese">
                                <font-face>IPAMincho</font-face>
                        </physical-font>
                        <physical-font char-set="Korean">
                                <font-face>AdobeMyungjoStd-Medium</font-face>
                        </physical-font>
                        <physical-font char-set="Symbols">
                                <font-face>ZapfDingbats</font-face>
                        </physical-font>
                        <physical-font char-set="SubmenuSymbol">
                                <font-face>ZapfDingbats</font-face>
                        </physical-font>
                        <physical-font char-set="SymbolsSuperscript">
                                <font-face>Times</font-face>
                                <baseline-shift>20%</baseline-shift>
                                <override-size>smaller</override-size>
                        </physical-font>
                </logical-font>

                <logical-font name="Monospaced">
                        <physical-font char-set="default">
                                <font-face>Courier</font-face>
                        </physical-font>
                        <physical-font char-set="Simplified Chinese">
                                <font-face>AdobeSongStd-Light</font-face>
                        </physical-font>
                        <physical-font char-set="Japanese">
                                <font-face>IPAGothic</font-face>
                        </physical-font>
                        <physical-font char-set="Korean">
                                <font-face>AdobeMyungjoStd-Medium</font-face>
                        </physical-font>
                        <physical-font char-set="Symbols">
                                <font-face>ZapfDingbats</font-face>
                        </physical-font>
                        <physical-font char-set="SymbolsSuperscript">
                                <font-face>Courier</font-face>
                                <baseline-shift>20%</baseline-shift>
                                <override-size>smaller</override-size>
                        </physical-font>
                </logical-font>
  • %DITA-OT%\demo\fo\Customization\fo\catalog.xmlを変更します.

上のフォントマッピングを有効にするようにcatalog.xmlを変更します.

    <!-- FontMapper configuration override entry.-->
    <uri name="cfg:fo/font-mappings.xml" uri="fo/font-mappings.xml"/>

fop.xconfの変更

最後に%DITA-OT%\demo\fo\fop\fop.xconfを変更します.
事前に用意したIPAフォントはC:\fop-1.0\fonts\にあるものとします.
PDFを作成するときにIPAフォントを指定するように追加します.

    <renderer mime="application/pdf">
      <filterList>
        <!-- provides compression using zlib flate (default is on) -->
        <value>flate</value>
  
        <!-- encodes binary data into printable ascii characters (default off)
             This provides about a 4:5 expansion of data size -->
        <!-- <value>ascii-85</value> -->
  
        <!-- encodes binary data with hex representation (default off)
             This filter is not recommended as it doubles the data size -->
        <!-- <value>ascii-hex</value> -->
      </filterList>

      <fonts>
        <!-- embedded fonts -->
        <!--
        This information must exactly match the font specified
        in the fo file. Otherwise it will use a default font.

        For example,
        <fo:inline font-family="Arial" font-weight="bold" font-style="normal">
            Arial-normal-normal font
        </fo:inline>
        for the font triplet specified by:
        <font-triplet name="Arial" style="normal" weight="bold"/>

        If you do not want to embed the font in the pdf document
        then do not include the "embed-url" attribute.
        The font will be needed where the document is viewed
        for it to be displayed properly.

        possible styles: normal | italic | oblique | backslant
        possible weights: normal | bold | 100 | 200 | 300 | 400
                          | 500 | 600 | 700 | 800 | 900
        (normal = 400, bold = 700)
        -->

        <!--
        <font metrics-url="arial.xml" kerning="yes" embed-url="arial.ttf">
          <font-triplet name="Arial" style="normal" weight="normal"/>
          <font-triplet name="ArialMT" style="normal" weight="normal"/>
        </font>
        <font metrics-url="arialb.xml" kerning="yes" embed-url="arialb.ttf">
          <font-triplet name="Arial" style="normal" weight="bold"/>
          <font-triplet name="ArialMT" style="normal" weight="bold"/>
        </font>
        -->
        <font metrics-url="C:\fop-1.0\fonts\ipamincho.xml" embed-url="C:\fop-1.0\fonts\ipam.ttc" kerning="yes">
          <font-triplet name="IPAMincho" style="normal" weight="normal"/>
          <font-triplet name="IPAMincho" style="normal" weight="bold"/>
          <font-triplet name="IPAMincho" style="italic" weight="normal"/>
          <font-triplet name="IPAMincho" style="italic" weight="bold"/>
        </font>
        <font metrics-url="C:\fop-1.0\fonts\ipagothic.xml" embed-url="C:\fop-1.0\fonts\ipag.ttc" kerning="yes">
          <font-triplet name="IPAGothic" style="normal" weight="normal"/>
          <font-triplet name="IPAGothic" style="normal" weight="bold"/>
          <font-triplet name="IPAGothic" style="italic" weight="normal"/>
          <font-triplet name="IPAGothic" style="italic" weight="bold"/>
        </font>
      </fonts>

      <!-- This option lets you specify additional options on an XML handler -->
      <!--xml-handler namespace="http://www.w3.org/2000/svg">
        <stroke-text>false</stroke-text>
      </xml-handler-->

    </renderer>

これで日本語のPDFを作成した時に日本語部分の文字化けが解消されます.
fop.xconfのフルパス指定問題は元に戻ってしまったのでまた考えます.

Apache FOP 1.0でIPAフォントのフォントメトリックスを作成する

DITAの作業環境を一から構築する必要がでてきたので新たにメモをしていきます.
使用するファイルは

です.

Apache FOPのダウンロード

  1. Apache FOPのサイトからバイナリファイル(fop-1.0-bin.zip )をダウンロードします.
  2. ZIPファイルを展開しfop-1.0のフォルダをCドライブの下に移動します*1
  3. フォルダの中にfontsフォルダ(fop-1.0\fonts)を作成します.

IPAフォントのダウンロード

  1. IPAフォントダウンロードサイトからTTCファイル(IPAfont00303.zip,IPAGTTC00303.zip)をダウンロードします.
  2. ZIPファイルを展開し,TTCファイルと関連ファイルをfop-1.0\fontsにコピーします.

フォントメトリックス作成用のバッチファイル

こちらのサイトを参考にIPAフォント用のフォントメトリックスのバッチファイルを作成しました.

次のバッチを実行するとfontsフォルダにxmlのフォントメトリックスファイルが作成されます.

SET LOCAL_FOP_HOME=
if "%OS%"=="Windows_NT" SET LOCAL_FOP_HOME=%~dp0
SET LIBDIR=%LOCAL_FOP_HOME%lib

set LOCALCLASSPATH=%LOCAL_FOP_HOME%build\fop.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LOCAL_FOP_HOME%build\fop-sandbox.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LOCAL_FOP_HOME%build\fop-hyph.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-1.3.04.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-ext-1.3.04.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xercesImpl-2.7.1.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xalan-2.7.0.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\serializer-2.7.0.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\batik-all-1.7.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xmlgraphics-commons-1.4.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\avalon-framework-4.2.0.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\commons-io-1.3.1.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\commons-logging-1.0.4.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jai_imageio.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\fop-hyph.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%FOP_HYPHENATION_PATH%

SET TTF_READER=org.apache.fop.fonts.apps.TTFReader

SET FOP_FONTS_DIR=%LOCAL_FOP_HOME%fonts
MKDIR "%FOP_FONTS_DIR%" 2>nul

java -cp %LOCALCLASSPATH% %TTF_READER% -ttcname "IPAMincho"  "%FOP_FONTS_DIR%\ipam.ttc" "%FOP_FONTS_DIR%\ipamincho.xml"
java -cp %LOCALCLASSPATH% %TTF_READER% -ttcname "IPAPMincho" "%FOP_FONTS_DIR%\ipam.ttc" "%FOP_FONTS_DIR%\ipapmincho.xml"

java -cp %LOCALCLASSPATH% %TTF_READER% -ttcname "IPAGothic"  "%FOP_FONTS_DIR%\ipag.ttc" "%FOP_FONTS_DIR%\ipagothic.xml"
java -cp %LOCALCLASSPATH% %TTF_READER% -ttcname "IPAPGothic" "%FOP_FONTS_DIR%\ipag.ttc" "%FOP_FONTS_DIR%\ipapgothic.xml"

*1:マイドキュメントなどパス名に空白文字が含まれているところだとその後の挙動に問題がありそうです

CentOS5.5でL2TP/IPsecサーバを設定する

以下のサイトを参考にしまして,CentOS5.5でL2TP/IPSecサーバを設定しました.

xl2tpdの設定

L2TPとしてxl2tpdを使用しました.
アーカイブ(xl2tpd-1.2.8.tar.gz)とビルドに必要なパッケージのインストールを行います.

# yum install libpcap-devel ppp

ソースコードを展開して,ビルド後インストールを行います.

# tar zxvf xl2tpd-1.2.8.tar.gz
# cd xl2tpd-1.2.8
# make
# make install

サービスを登録します

# cp packaging/fedora/xl2tpd.init /etc/init.d/xl2tpd
# chmod 755 /etc/init.d/xl2tpd
# chkconfig --add xl2tpd

xl2tpdで提供しているスクリプトではパスが通らないため,シンボリックリンクを作成します.

# ln -s /usr/local/sbin/xl2tpd /usr/sbin/xl2tpd

設定ファイルをコピーします.

# mkdir /etc/xl2tpd
# cp examples/xl2tpd.conf /etc/xl2tpd
# cp examples/ppp-options.xl2tpd /etc/ppp/options.xl2tpd

サービスを登録し,自動起動設定を行います.

# chkconfig xl2tpd on
# service xl2tpd start

設定情報については前のエントリーが参考になります.

IPSec PSKの設定

IPSecの実装としてOpenSwanを使用しました.
こちらもソースコードから設定を行います.openswan-2.6.33.tar.gzを使いました.

ビルドに必要なパッケージをインストールします.

# yum install make gcc gmp-devel bison flex

ソースコードを展開してインストールを行います.

# tar zxvf openswan-2.6.33.tar.gz
# cd openswan-2.6.33
# make programs
# make install

設定のサンプルファイルをコピーします.

# cp /etc/ipsec.d/examples/l2tp-psk.conf /etc/ipsec.d

サービスを登録します.

# chkconfig --add ipsec

OpenSwan自身の設定を行います.

# vi /etc/ipsec.conf
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
oe=off
protostack=netkey
include /etc/ipsec.d/*.conf

L2TP/IPSec-PSKに関する設定を行います.
ここで「forceencaps=yes」を追加しないとAndroidをクライアントにする場合認証で問題がでてきます.

# vi /etc/ipsec.d/l2tp-psk.conf
conn L2TP-PSK-NAT
rightsubnet=0.0.0.0/0
forceencaps=yes
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=%defaultroute
leftnexthop=%defaultroute
leftprotoport=17/%any
right=%any
rightprotoport=17/%any

事前共有鍵を設定します.ここでは「abcdefghij」とします.

# vi /etc/ipsec.secrets
: PSK "abcdefghij"

sysctl.confファイルを変更します.

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 # = 0 を 1 にします

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0

sysstlの設定を有効化します

# sysctl -p

IPSecの設定を確認します.

# ipsec verify