2014-04-25

[.tested] Tomcat7の導入について [debian Wheezy][AX3][A7][A6]

Apache Tomcatの導入方法について、若干のTipsも交えてご紹介します。



<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (DPパッケージのみjavaライセンス付きでの出荷をしています)

1.Tomcat 7 のインストール


Apache Tomcat 7は、Debian Wheezyのパッケージとしても用意されていますが、合わせてOpenJDK6を導入してしまいます。
OpenBlocksシリーズは、Oracle Javaを標準搭載していますので(A6はDPモデルのみ)、Tomcatのパッケージのみを公式のサイトよりダウンロードしてインストールすることをおすすめします。

Apache Tomcat

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-7/v7.0.53/bin/apache-tomcat-7.0.53.tar.gz

/usr/localの下に展開します。

# tar zxpvf apache-tomcat-7.0.53.tar.gz -C /usr/local

setenv.shを作成します。

# vi /usr/local/apache-tomcat-7.0.53/bin/setenv.sh

下記の内容を記述してください。

#!/bin/bash
JRE_HOME=/usr/lib/jre
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"

JAVA_OPTSの設定は、linuxの/dev/randumの仕様によるもので、特にOpenBlocks A7の場合において、再起動時の環境ノイズの再収集時間に起因する起動遅延を解消するものです。
randomを使用する場合は、上記の記述を削除してください。(A7の場合30分程度、AX3の場合はばらつきがあり、20秒程度で立ち上がる場合もあれば、6分かかる場合もありました)

2. 動作確認および開発環境の構築について


手動での立ち上げは以下の様に行ってください。


# /usr/local/apache-tomcat-7.0.53/bin/startup.sh

ブラウザで動作確認をする場合は、以下のURLとなります。

http://URLまたはIPアドレス:8080


2014-04-23

[.tested] RXTXによるjavaのシリアル通信について [debian Wheezy][AX3][A7][A6]

RXTXライブラリを使用したjavaのシリアル通信を行う際のパッケージ導入方法について説明します。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (DPパッケージのみjavaライセンス付きでの出荷をしています)

1. RXTXライブラリおよびlibrxtxSerialのインストール


それぞれ、Debainのパッケージによりインストールします。

# aptitude install librxtx-java
# aptitude install libserializer-java

RXTXライブラリを以下の場所にコピーします。

# cp /usr/share/java/RXTXcomm.jar /usr/lib/jre/lib/ext/

librxtxSerialを以下の場所にコピーします。

# cp /usr/lib/jni/librxtxSerial-2.2pre1.so /usr/lib/jre/lib/arm/librxtxSerial.so

2. 動作確認および開発環境の構築について


RXTXによるシリアル通信を行うのであれば、上記のセットアップにより、基本的には、他のプラットフォーム上で開発したclassファイルやjarファイルを実行できるかと思います。

OpenBlocks上で開発も行う場合は、一つの方法としては、Debianのパッケージより、java7-jdkなどを導入する方法があります。( 導入されるのはopenjdkです )

# aptitude install java7-jdk

java7-jdkにも、librxtxSerialが含まれますので、こちらを使用する場合は、libserializer-javaの導入の必要はありません。

作成したプログラムは、以下のようにjavacにてクラスファイルに変換してください。

# javac -cp /usr/lib/jre/lib/ext/RXTXcomm.jar test.java

2014-04-18

OpenBlocks Aシリーズ rootfs変更方法 (SSD(SATA)ブート) [debian Wheezy][AX3][A7][A6]

OpenBlocks Aシリーズのカーネルの起動をSSD(SATA)から行う方法について

本機能は、OpenBlocksの機能の一部として実装されているものですが、当社の提供する標準のパッケージ構成ではないため、動作の保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (もしくは、SSD搭載モデル)

1. SSDの準備


SSDを用意します。もし、標準構成でDEBIANのラベルを設定済みでしたら、ラベルを削除し、本体を再起動してください。

# e2label /dev/sda1 ""

再起動後、ラベルを/に変更します。
を再起動してください。

# e2label /dev/sda1 /

ファイルシステムは、現在のAシリーズはすべてext4を採用していますが、ubootがカーネルの起動を行うドライブは、ext3までしか対応していません。
再フォーマットが必要な場合は、以下の通り、ext3などを使用してください。

# mke2fs -j -L "/" /dev/sda1

2. debootstrapによるrootfsの作成と修正


rootfs は、以下の記事と同様に、debootstrapで作成しました。詳細については、以下の記事を参考にしてください。

OpenBlocks Aシリーズ rootfs変更方法 (FlashROMブート) [debian Wheezy][AX3][A7][A6]

3. SSDブート用のファームウェアの作成


SSDブート用ファームウェアは、LinuxであればPCでもAシリーズでも作成することができます。
  1. FTPサイトよりSSDブート用のラムディスクイメージを取ってきます。

    A6/A7 : ftp://ftp.plathome.co.jp/pub/ssdlinux/1.0.0-LATEST/arm-obsa6/installation/ramdisk.image-extboot.obsa6.gz

    AX3 : ftp://ftp.plathome.co.jp/pub/ssdlinux/1.1.0-LATEST/arm-obsax3/installation/ramdisk.image-extboot.obsax3.gz

  2.  FTPサイトよりカーネルを取ってきます。

    A6 : ftp://ftp.plathome.co.jp/pub/OBSA6/wheezy/3.2.40-3/zImage

    A7 : ftp://ftp.plathome.co.jp/pub/OBSA7/wheezy/3.2.40-4/zImage

    AX3 : ftp://ftp.plathome.co.jp/pub/OBSAX3/wheezy/3.2.40-4/zImage
  3. uboot-mkimageパッケージをインストールします。

    # apt-get install uboot-mkimage

    
    
  4. mkimageコマンドでSSDブート用ファームウェアを作成します。

    AX3の場合(A6/A7ではラムディスク名とファームウェア名を変更します)

    # mkimage -n "コメント(日付やバージョンなど)" -A arm -O linux -T multi -C none -a 0x8000 -e 0x8000 -d zImage:ramdisk.image-extboot.obsax3.gz uImage.initrd-extboot.obsax3

  5. rootfsの/bootにSSDブート用ファームウェアをコピーします。

    AX3でSSDがsda1の場合

    # mount /dev/sda1 /mnt
    # cp uImage.initrd-extboot.obsax3 /mnt/boot
    # umount /mnt

  6. rootfsとするパーティションのラベルを"/"にします。

    rootfsが/dev/sda1の場合

    # e2label /dev/sda1 /
3. ブート方式の切り替え


ユーザーズマニュアルを参考に、本体のDIP SW3をONにして立ち上げます。(SATA起動)
SATA起動に切り替えた場合のconsoleメッセージは以下の通りです。

U-Boot 1.1.4 (Feb  5 2014 - 12:38:30)
Plat'Home version: 1.2.13 A7 (Base: Marvell version: 3.5.9)

U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006CF480

Soc: 88F6282 A1CPU running @ 600Mhz L2 running @ 300Mhz
SysClock = 300Mhz , TClock = 200Mhz

DRAM (DDR3) CAS Latency = 6 tRP = 5 tRAS = 15 tRCD=5
DRAM CS[0] base 0x00000000   size 256MB
DRAM CS[1] base 0x10000000   size 256MB
DRAM CS[2] base 0x20000000   size 256MB
DRAM CS[3] base 0x30000000   size 256MB
DRAM Total size   1GB  16bit width
Addresses 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done
NAND:256 MB
POST:  mac verify Eth0 PASSED Eth1 PASSED

CPU : Marvell Feroceon (Rev 1)

Streaming disabled
Write allocate disabled

Module 0 is RGMII

USB 0: host mode
USB 1: host mode
USB 2: host mode
USB 3: host mode
Net:   egiga0, egiga1
Hit any key to stop autoboot:  0

Run Boot Selection Script

*** SW 1 IS OFF ***

*** SW 2 IS OFF ***

*** SW 3 IS ON, Boot from SATA ***


Reset IDE:
Marvell Serial ATA Adapter
Integrated Sata device found
[0 0 0]: Enable DMA mode (6)
  Device 0 @ 0 0:
Model: ADATA SSD S396 30GB                    Firm: 3.3.2    Ser#: 02501132500100000227
            Type: Hard Disk
            Supports 48-bit addressing
            Capacity: 30533.8 MB = 29.8 GB (62533296 x 512)


Loading ...

2926770 bytes read
Bootargs: ramdisk_size=8192 root=LABEL=/ vmalloc=200M rootdelay=7 mtdparts=nand_mtd:0x1c0000@0x0(uboot)

ro,0x2c0000@0x1c0000(env),0x160000@0x480000(test)ro,0x540000@0x5e0000(conf),0x3d40000@0xb20000(linux),0x9660000@0x4860000

(user),0x2140000@0xdec0000(opt) console=ttyS0,115200
## Booting image at 02000000 ...
   Image Name:   OBS-A7-3.2.40-4
   Created:      2014-04-18   2:37:42 UTC
   Image Type:   ARM Linux Multi-File Image (uncompressed)
   Data Size:    2926706 Bytes =  2.8 MB
   Load Address: 00008000
   Entry Point:  00008000
   Contents:
   Image 0:  2542808 Bytes =  2.4 MB
   Image 1:   383886 Bytes = 374.9 kB
   Verifying Checksum ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 3.2.40 (root@release-firmware) (gcc version 4.7.2 (Debian 4.7.2-4) ) #1 Fri Mar 7 16:24:48 JST 2014
CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977
CPU: VIVT data cache, VIVT instruction cache
Machine: Plat'Home OpenBlocks A7
Memory policy: ECC disabled, Data cache writeback
BUG: mapping for 0xf4000000 at 0xf4000000 overlaps vmalloc space
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096
Kernel command line: ramdisk_size=8192 root=LABEL=/ vmalloc=200M rootdelay=7 mtdparts=nand_mtd:0x1c0000@0x0(uboot)

ro,0x2c0000@0x1c0000(env),0x160000@0x480000(test)ro,0x540000@0x5e0000(conf),0x3d40000@0xb20000(linux),0x9660000@0x4860000

(user),0x2140000@0xdec0000(opt) console=ttyS0,115200
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 1024MB = 1024MB total
Memory: 1033400k/1033400k available, 15176k reserved, 229376K highmem

電源を入れ直すか、bootと入力して起動してください。

4. 補足


SATA起動は、ext3以前のファイルシステムをサポートしており、現状では、ext4でフォーマットされたドライブからの起動が出来ません。
rootfsをext4で使用したい場合は、起動用のパーティションとして、/dev/sda1を、rootfs用のパーティションとして/dev/sda2を別に作成して使用してください。


2014-04-17

OpenBlocks Aシリーズ rootfs変更方法 (FlashROMブート) [debian Wheezy][AX3][A7][A6]

OpenBlocks AシリーズにおいてrootfsをSSDに変更する手順を記述します。

OpenBlocks Aシリーズでは、ディスクレス運用のためのRAMディスクモードと、ストレージ併用モードを標準的にサポートしています。
(それぞれのモードについては、以下の記事を参照してください。)

OpenBlocksの動作モードについて

ストレージ併用モードにおいて、SSDなどのストレージデバイスはaufs(squeezeベースまではunion)によるマウントを行っていますが、aufsによる共有モードではなく、SSDに構築したrootfsを直接マウントして使用することも可能です。

また、カーネル自体も、フラッシュROMからだけでなく、SSDなどのストレージデバイスからの起動も行えます。

今回は、フラッシュROMから起動し、SSD側で用意したrootfsをマウントする方法について解説します。

rootfsはDebian, Fedora, Ubuntuなど好きなものをあらかじめ作成して使用しますが、今回は、debootstarapを用いてDebian wheezyパッケージを作成し、OpenBlocks独自のハードウェア制御を追加した、標準のファームウェアパッケージと同等の機能を持つものを作成しました。

本機能は、OpenBlocksの機能の一部として実装されているものですが、当社の提供する標準のパッケージ構成ではないため、動作の保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (もしくは、SSD搭載モデル)

1. SSDの準備


SSDを用意します。もし、標準構成でDEBIANのラベルを設定済みでしたら、ラベルを削除し、本体を再起動してください。

# e2label /dev/sda1 ""

再起動後、ラベルを/に変更します。
を再起動してください。

# e2label /dev/sda1 /

ファイルシステムは、現在のAシリーズはすべてext4を採用しています。
もし、新たにフォーマットする場合は、以下のコマンドをご使用下さい。

# mkfs.ext4 -L "/" /dev/sda1

2. debootstrapによるrootfsの作成と修正


SSDを/mntにマウントして、rootfsを作成しますが、標準のファームウェアパッケージにはdebootstrapが含まれていたいため、debootstrapをインストールする必要があります。
なお、ファームウェアをRAMディスクモードで起動した後、ネットワークの設定を行う必要があります。

# aptitude update
# aptitude install debootstrap 

インストールしたパッケージを保存する場合は、以下のflashcfgコマンドにて行ってください。

# flashcfg -S 

SSDを/mntにmountします。

# mount /dev/sda1 /mnt

debootstrapにより、rootfsを作成します。

# debootstrap --exclude=ed,nano --arch armel wheezy /mnt http://ftp.jp.debian.org/debian

/mnt/etc/inittabのT0のパラメータを修正します。

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

chrootしてrootパスワードを変更します。

# chroot /mnt
# passwd root
# exit 

ファームウェアから必要なファイルをコピーし、モジュール構成を更新します。

# cp -R /lib/modules /mnt/lib
# cp /usr/sbin/runled /mnt/usr/sbin
# cp /usr/sbin/pshd /mnt/usr/sbin
# depmod -a


fstabを編集します。
ext4の場合は、以下の通り。ext3の場合はdiscardは不要です。

# vi /mnt/etc/fstab

/dev/sda1       /               ext3    defaults        notime, discard
proc            /proc           proc    defaults        0 0
#none           /tmp            tmpfs   size=64m        0 0
#cgroup         /sys/fs/cgroup  cgroup  defaults        0 0

/etcの下のinit関連のファイルをコピーします。
 
# cp /etc/init.d/pshd /mnt/etc/init.d
# cp /etc/init.d/runled /mnt/etc/init.d

# cd /mnt/etc/rc0.d
# ln -s ../init.d/pshd K01pshd
# ln -s ../init.d/runled K01runled

# cd /mnt/etc/rc2.d
# ln -s ../init.d/pshd S99pshd
# ln -s ../init.d/runled S99runled

# cd /mnt/etc/rc6.d
# ln -s ../init.d/pshd K01pshd
# ln -s ../init.d/runled K01runled

# cp /etc/init.d/.depend.start /mnt/etc/init.d
# cp /etc/init.d/.depend.stop /mnt/etc/init.d

/etc/apt/sources.listをコピーします。

# cp /etc/apt/sources.lst /mnt/etc/apt

3. ubootのパラメータ変更と起動


OpenBlocks本体を再起動します。
起動時にコンソール上でキーボードを押すとubootのプロンプトが表示されます。

openblocks> printenv root
root=/dev/ram
openblocks> setenv root /dev/sda1
openblocks> saveenv
Saving Environment to Flash...

電源を入れ直すか、bootと入力して起動してください。

なお、rootfsをUSBストレージなどで構築した場合、 USBストレージの初期化の時間の関係で、マウントエラーが起きます。その場合は、rootdelayパラメータで調整してください。

システムを元に戻す場合は、rootに/dev/ramを設定します。

openblocks> setenv root /dev/ram
openblocks> saveenv
Saving Environment to Flash...


2014-04-08

[.tested] SnortによるIPS構築 その1 [debian Wheezy][AX3][A7]

Snortはオープンソースのネットワーク型IDSであり、IPSとしても利用することが可能です。
また、周辺ツールを利用することにより、Webでのアラート検索を行うことも可能です。
Snortは、debian wheezyのパッケージにも含まれて居ますが、今回は、IPSでの利用も考慮し、最新のバージョンのソースコードよりsnort本体をビルドする方法をご紹介します。


Snort


OBDN技術ブログによる動作検証は、該当するソフトウェアの動作の保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 7.1 kernel: 3.2.40 JモデルまたはDPモデル

1. Snort最新版のビルド


以下の手順は、基本的な開発環境が導入済みであることを前提としています。
(手順に関しては、右のタグにあるソフトウェア動作検証より記事をリンクしています)

debianパッケージから必要なライブラリをインストール

# aptitude install bison flex libpcre3 libpcre3-dev libssl-dev libnetfilter-queue-dev

以下、snortの最新のバージョンのビルドに必要な、一部の新しいバージョンのライブラリを用意します。

linpcap


# wget http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz
# tar zxvf libpcap-1.5.3.tar.gz
# cd libpcap-1.5.3
# ./configure --prefix=/usr --enable-shared
# make
# make install

lindnet


# wget https://libdnet.googlecode.com/files/libdnet-1.12.tgz
# tar zxvf libdnet-1.12.tgz
# cd libdnet-1.12.tgz
# ./configure --prefix=/usr --enable-shared
# make
# make install

snortおよびdaqパッケージのインストール

www.snort.orgからsnortおよびdaqの最新のソースコードを入手して下さい。

daq-2.0.2

# tar -zxvf daq-2.0.2.tar.gz
# cd  daq-2.0.0
# ./configure
# make
# make install
# cd /usr/local/lib
# ldconfig -v /usr/local/lib

snort-2.9.6.0

# tar -zxvf snort-2.9.6.0.tar.gz
# cd snort-2.9.4.5
# ./configure --enable-sourcefire
# make
# make install
# cd /usr/local/lib
# ldconfig -v /usr/local/lib

2. 設定


snort.orgでアカウント作成

https://www.snort.org/account/oinkcode
で、’Generate code’ とするとOinkcodeが発行されるのでコードを控えておきます。

Snortルールの入手と展開

Snortルールを入手します。

# wget http://www.snort.org/reg-rules/snortrules-snapshot-2960.tar.gz/<Oinkcode> -O snortrules-snapshot-2960.tar.gz

/etc/snortに展開します。

# mkdir /etc/snort
# cd /etc/snort/
# tar zxvf /usr/local/src/snortrules-snapshot-2955.tar.gz
# cp ./etc/* .
# cp /usr/local/src/snort-2.9.5.6/etc/* .
# rm /etc/snort/Makefile*

空のホワイトリスト、ブラックリストを作成します。

# touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules

snortユーザの追加、パーミッションの変更

# groupadd -g 40000 snort
# useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS –g snort
# cd /etc/snort
# chown -R snort:snort *

/etc/snort/snort.confを編集し、/etc/snortなど、設定ファイルのパスの変更、対象ネットワークアドレスなどを変更します。

2. 動作テスト


以下のオプションにて動作テストを行います。
# snort -T -i eth0 -u snort -g snort -c /etc/snort/snort.conf

3.さいごに


今回は、snortをOpenBlocks Aシリーズでビルドする手順を説明しました。
次回にて、IPSとしての設定、Webからのアラートの監視方法などについてご紹介する予定です。