2012年12月9日日曜日

Solaris IPv4アドレス割り当てでの試行

別々のNICに同じIPv4アドレスの割り当て自体はできる。但し、同時に活性化はできない。(自分の予想とおりであった)

<事前準備>
bash-3.00# cp /etc/hostname.e1000g0 /etc/hostname.e1000g1
bash-3.00# cp /etc/hostname.e1000g0 /etc/hostname6.e1000g0
bash-3.00# cp /etc/hostname.e1000g0 /etc/hostname6.e1000g1

bash-3.00# more /etc/hosts
#
# Internet host table
#
127.0.0.1 localhost
::1 localhost
172.16.20.5 sol10 loghost

bash-3.00# reboot
bash-3.00# ifconfig e1000g1 inet6 up
bash-3.00# ifconfig e1000g0 inet6 up

<実行手順>
bash-3.00# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 172.16.20.5 netmask ffffff00 broadcast 172.16.20.255
        ether 0:c:29:d2:61:36
e1000g1: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
        inet 172.16.20.5 netmask ffffff00 broadcast 172.16.20.255
        ether 0:c:29:d2:61:40
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
        inet6 ::1/128
e1000g0: flags=2004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu 1500 index 2
        inet6 fe80::20c:29ff:fed2:6136/10
        ether 0:c:29:d2:61:36
e1000g1: flags=2004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu 1500 index 3
        inet6 fe80::20c:29ff:fed2:6140/10
        ether 0:c:29:d2:61:40

bash-3.00# ifconfig e1000g1 inet up
ifconfig: setifflags: SIOCSLIFFLAGS: e1000g1: Cannot assign requested address

なお、以下の場合もダメだった。
(1) /etc/hostsファイルに同じIPアドレス(172.16.20.5)で違うホスト名(sol10以外)を割り当てる。
(2) /etc/hostname.e1000g1も(1)で設定した違うホスト名にしてリブートする。

2012年10月26日金曜日

Solaris10でのDHCPデバッグ

DHCPプロトコルは以下のとおり。矢印の左側がDHCPクライアント、右側がDHCPサーバを指す。

<IPアドレス未取得の場合>
 →Message type = DHCPDISCOVER
 ←Message type = DHCPOFFER
 →Message type = DHCPREQUEST
 ←Message type = DHCPACK

<IPアドレス取得済みマシンがリブートした時>
 →Message type = DHCPREQUEST
 ←Message type = DHCPACK

Solaris10にてDHCPのデバッグとして、2通りのやり方がある。
 1.DHCPサーバ側でパケットをキャプチャする
 2.DHCPサーバをデバッグモードで動かす

●DHCPサーバ側でパケットをキャプチャする

以下、snoop実行時にDHCPクライアントが再起動した時の例。

bash-3.00# snoop -d e1000g0 -o /tmp/snoop.out udp port 67 or udp port 68
DHCPクライアントが再起動後、DHCPサーバ側にて[Ctrl]+[C]で閉じる。

bash-3.00# snoop -i /tmp/snoop.out -x0 -v
ETHER:  ----- Ether Header -----
ETHER:
ETHER:  Packet 1 arrived at 5:04:33.73759
ETHER:  Packet size = 342 bytes
ETHER:  Destination = ff:ff:ff:ff:ff:ff, (broadcast)
ETHER:  Source      = 0:c:29:67:84:89,
ETHER:  Ethertype = 0800 (IP)
ETHER:
IP:   ----- IP Header -----
IP:
IP:   Version = 4
IP:   Header length = 20 bytes
IP:   Type of service = 0x00
IP:         xxx. .... = 0 (precedence)
IP:         ...0 .... = normal delay
IP:         .... 0... = normal throughput
IP:         .... .0.. = normal reliability
IP:         .... ..0. = not ECN capable transport
IP:         .... ...0 = no ECN congestion experienced
IP:   Total length = 328 bytes
IP:   Identification = 0
IP:   Flags = 0x4
IP:         .1.. .... = do not fragment
IP:         ..0. .... = last fragment
IP:   Fragment offset = 0 bytes
IP:   Time to live = 255 seconds/hops
IP:   Protocol = 17 (UDP)
IP:   Header checksum = 7aa5
IP:   Source address = 0.0.0.0, OLD-BROADCAST
IP:   Destination address = 255.255.255.255, BROADCAST
IP:   No options
IP:
UDP:  ----- UDP Header -----
UDP:
UDP:  Source port = 68
UDP:  Destination port = 67 (BOOTPS)
UDP:  Length = 308
UDP:  Checksum = 8943
UDP:
DHCP: ----- Dynamic Host Configuration Protocol -----
DHCP:
DHCP: Hardware address type (htype) =  1 (Ethernet (10Mb))
DHCP: Hardware address length (hlen) = 6 octets
DHCP: Relay agent hops = 0
DHCP: Transaction ID = 0x5b32ba17
DHCP: Time since boot = 0 seconds
DHCP: Flags = 0x0000
DHCP: Client address (ciaddr) = 0.0.0.0
DHCP: Your client address (yiaddr) = 0.0.0.0
DHCP: Next server address (siaddr) = 0.0.0.0
DHCP: Relay agent address (giaddr) = 0.0.0.0
DHCP: Client hardware address (chaddr) = 00:0C:29:67:84:89
DHCP:
DHCP: ----- (Options) field options -----
DHCP:
DHCP: Message type = DHCPREQUEST
DHCP: Requested IP Address = 192.168.10.3
DHCP: IP Address Lease Time = -1 seconds
DHCP: Maximum DHCP Message Size = 1472 bytes
DHCP: Client Class Identifier = "SUNW.i86pc"
DHCP: Requested Options:
DHCP:    1 (Subnet Mask)
DHCP:    3 (Router)
DHCP:    6 (DNS Servers)
DHCP:   12 (Client Hostname)
DHCP:   15 (DNS Domain Name)
DHCP:   28 (Broadcast Address)
DHCP:   43 (Vendor Specific Options)
DHCP: Client Hostname = sol10-dhcp-client

           0: ffff ffff ffff 000c 2967 8489 0800 4500    ........)g....E.
          16: 0148 0000 4000 ff11 7aa5 0000 0000 ffff    .H..@...z.......
          32: ffff 0044 0043 0134 8943 0101 0600 5b32    ...D.C.4.C....[2
          48: ba17 0000 0000 0000 0000 0000 0000 0000    ................
          64: 0000 0000 0000 000c 2967 8489 0000 0000    ........)g......
          80: 0000 0000 0000 0000 0000 0000 0000 0000    ................
          96: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         112: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         128: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         144: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         160: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         176: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         192: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         208: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         224: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         240: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         256: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         272: 0000 0000 0000 6382 5363 3501 0332 04c0    ......c.Sc5..2..
         288: a80a 0333 04ff ffff ff39 0205 c03c 0a53    ...3.....9...<.S
         304: 554e 572e 6938 3670 6337 0701 0306 0c0f    UNW.i86pc7......
         320: 1c2b 0c11 736f 6c31 302d 6468 6370 2d63    .+..sol10-dhcp-c
         336: 6c69 656e 74ff                             lient.
ETHER:  ----- Ether Header -----
ETHER:
ETHER:  Packet 2 arrived at 5:04:33.75531
ETHER:  Packet size = 342 bytes
ETHER:  Destination = 0:c:29:67:84:89,
ETHER:  Source      = 0:c:29:52:33:cc,
ETHER:  Ethertype = 0800 (IP)
ETHER:
IP:   ----- IP Header -----
IP:
IP:   Version = 4
IP:   Header length = 20 bytes
IP:   Type of service = 0x00
IP:         xxx. .... = 0 (precedence)
IP:         ...0 .... = normal delay
IP:         .... 0... = normal throughput
IP:         .... .0.. = normal reliability
IP:         .... ..0. = not ECN capable transport
IP:         .... ...0 = no ECN congestion experienced
IP:   Total length = 328 bytes
IP:   Identification = 21163
IP:   Flags = 0x4
IP:         .1.. .... = do not fragment
IP:         ..0. .... = last fragment
IP:   Fragment offset = 0 bytes
IP:   Time to live = 255 seconds/hops
IP:   Protocol = 17 (UDP)
IP:   Header checksum = 0000
IP:   Source address = 192.168.10.4, sol10-dhcp-server
IP:   Destination address = 192.168.10.3, 192.168.10.3
IP:   No options
IP:
UDP:  ----- UDP Header -----
UDP:
UDP:  Source port = 67
UDP:  Destination port = 68 (BOOTPC)
UDP:  Length = 308
UDP:  Checksum = 969D
UDP:
DHCP: ----- Dynamic Host Configuration Protocol -----
DHCP:
DHCP: Hardware address type (htype) =  1 (Ethernet (10Mb))
DHCP: Hardware address length (hlen) = 6 octets
DHCP: Relay agent hops = 0
DHCP: Transaction ID = 0x5b32ba17
DHCP: Time since boot = 0 seconds
DHCP: Flags = 0x0000
DHCP: Client address (ciaddr) = 0.0.0.0
DHCP: Your client address (yiaddr) = 192.168.10.3
DHCP: Next server address (siaddr) = 0.0.0.0
DHCP: Relay agent address (giaddr) = 0.0.0.0
DHCP: Client hardware address (chaddr) = 00:0C:29:67:84:89
DHCP:
DHCP: ----- (Options) field options -----
DHCP:
DHCP: Message type = DHCPACK
DHCP: DHCP Server Identifier = 192.168.10.4
DHCP: UTC Time Offset = 32400 seconds
DHCP: RFC868 Time Servers at = 192.168.10.4
DHCP: IP Address Lease Time = 86400 seconds
DHCP: Broadcast Address = 192.168.10.255
DHCP: Perform Router Discovery Flag flag = 0x1
DHCP: Subnet Mask = 255.255.255.0

           0: 000c 2967 8489 000c 2952 33cc 0800 4500    ..)g....)R3...E.
          16: 0148 52ab 4000 ff11 0000 c0a8 0a04 c0a8    .HR.@...........
          32: 0a03 0043 0044 0134 969d 0201 0600 5b32    ...C.D.4......[2
          48: ba17 0000 0000 0000 0000 c0a8 0a03 0000    ................
          64: 0000 0000 0000 000c 2967 8489 0000 0000    ........)g......
          80: 0000 0000 0000 0000 0000 0000 0000 0000    ................
          96: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         112: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         128: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         144: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         160: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         176: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         192: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         208: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         224: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         240: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         256: 0000 0000 0000 0000 0000 0000 0000 0000    ................
         272: 0000 0000 0000 6382 5363 3501 0536 04c0    ......c.Sc5..6..
         288: a80a 0402 0400 007e 9004 04c0 a80a 0433    .......~.......3
         304: 0400 0151 801c 04c0 a80a ff1f 0101 0104    ...Q............
         320: ffff ff00 ff00 0000 0000 0000 0000 0000    ................
         336: 0000 0000 0000                             ......

●DHCPサーバをデバッグモードで動かす

以下、デバッグモードで実行時にDHCPクライアントが再起動した時の例。

bash-3.00# svcadm disable -t svc:/network/dhcp-server
bash-3.00# /usr/lib/inet/in.dhcpd -d -v
50899ead:  Daemon Version: 3.5
50899ead:  Maximum relay hops: 4
50899ead:  Run mode is: DHCP Server Mode.
50899ead:  Datastore resource: SUNWfiles
50899ead:  Location: /var/dhcp
50899ead:  DHCP offer TTL: 10
50899ead:  ICMP validation timeout: 1000 milliseconds, Attempts: 1.
50899ead:  Name service update enabled, timeout: 15 seconds
50899ead:  Maximum concurrent clients: 1024
50899ead:  Maximum threads: 256
50899ead:  Read 3 entries from DHCP macro database on Fri Oct 26 05:18:53 2012
50899ead:  Monitor (0003/e1000g0) started...
50899ead:  Thread Id: 0003 - Monitoring Interface: e1000g0 *****
50899ead:  MTU: 1500    Type: SOCKET
50899ead:  Broadcast: 192.168.10.255
50899ead:  Monitor (0004/e1000g1) started...
50899ead:  Thread Id: 0004 - Monitoring Interface: e1000g1 *****
50899ead:  MTU: 1500    Type: SOCKET
50899ead:  Broadcast: 10.20.30.255
50899ead:  Netmask: 255.255.255.0
50899ead:  Netmask: 255.255.255.0
50899ead:  Address: 192.168.10.4
50899ead:  Address: 10.20.30.4
★ここで待ち
50899f86:  Datagram received on network device: e1000g1(limited broadcast)
50899f86:  Datagram received on network device: e1000g0(limited broadcast)
50899f86:  e1000g1(limited broadcast): There is no 10.20.30.0 dhcp-network table for DHCP client's network.
50899f86:  name_avail:  unqualified name
qualified with local domain: sol10-dhcp-client.private.net.
50899f86:  name_avail(T):  gethostbyname_r failed
50899f86:  name service update on behalf of client with ID 000C29678489 failed because requested name was not fully-qualified and no DNS domain name was specified for this client in the dhcptab
50899f86:  do_nsupdate:  dns_puthostent returned -1
50899f86:  Client: 01000C29678489 maps to IP: 192.168.10.3
50899f86:  Unicasting datagram to 192.168.10.3 address.
50899f86:  Adding ARP entry: 192.168.10.3 == 000C29678489
★[Ctrl]+[C]押下
^C5089a050:  Signal: INT received...Exiting
5089a050:  Closing interface: e1000g0
5089a050:  Monitor (0003/e1000g0): exiting.
5089a050:  Interface statistics for: e1000g0 **************
5089a050:  Pending DHCP offers: 0
5089a050:  Total Packets Transmitted: 1
5089a050:  Total Packets Received: 1
5089a050:  Total Packet Duplicates: 0
5089a050:  Total Packets Dropped: 0
5089a050:  Total Packets Processed: 1
5089a050:  Total Protocol Errors: 0
5089a050:  Closing interface: e1000g1
5089a050:  Monitor (0004/e1000g1): exiting.
5089a050:  Interface statistics for: e1000g1 **************
5089a050:  Pending DHCP offers: 0
5089a050:  Total Packets Transmitted: 0
5089a050:  Total Packets Received: 1
5089a050:  Total Packet Duplicates: 0
5089a050:  Total Packets Dropped: 0
5089a050:  Total Packets Processed: 0
5089a050:  Total Protocol Errors: 0
5089a050:  Daemon terminated.

2012年9月17日月曜日

Redmineの構築(その2)

Windows 7上でRedmine2.x系の構築を行う。

・apache
apacheのサイト(http://httpd.apache.org/download.cgi#apache22)から以下をダウンロードして、インストールする。
 httpd-2.2.22-win32-x86-no_ssl.msi

・JRE
http://www.oracle.com/technetwork/java/javase/downloads/jre6u35-downloads-1836473.html)より、以下をダウンロードして、インストールする。
 jre-6u35-windows-i586.exe

・MySQL
MySQLのGUIを使うため、マイクロソフト(http://www.microsoft.com/ja-jp/net/netfx4/download.aspx)より、.NET Framework 4をインストールする。

MySQLのサイト(http://dev.mysql.com/downloads/)から以下をダウンロードして、インストールする。
 mysql-installer-community-5.5.27.2.msi

・Ruby
Rubyのサイト(http://rubyinstaller.org/downloads/)より、以下をダウンロードして、インストールする。
 rubyinstaller-1.8.7-p370.exe
 DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe

・redmine
 
redmineのサイト(http://rubyforge.org/frs/?group_id=1850)より、redmine-2.0.3.zipをダウンロードする。

・ImageMagick
rubyのサイト(http://rubyforge.org/frs/?group_id=12)より、RMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zipをダウンロードする。ファイル解凍後、C:\Tempに置く。ImageMagick-6.5.6-8-Q8-windows-dll.exeを実行し、C/C++ のヘッダーファイルも一緒にインストールする。(インストール時のチェックボックスでチェックをつける。)
<事前準備>
①MySQL
・MySQL Workbenchを起動し、[Open Connection to start querying]より、スキーマredmineを作成する。
・[Manage Security]より、ユーザredmineを作成する。Object Rights、DDL Rights、Other Rightsにて、すべての権限を付与する。

②Devkit
DevkitをC:\Devkitにインストール後、以下を実行する。
C:\Devkit> ruby dk.rb init
C:\Devkit> ruby dk.rb install
ダウンロードしたファイルを解凍して、C:\redmineとする。

③Gemfile
・ImageMagick のインストールディレクトリを環境変数の PATH に追加する。
・ImageMagick のインストールディレクトリ内にある include ディレクトリのパスを環境変数 CPATH に追加する。
・ImageMagick のインストールディレクトリ内にある lib ディレクトリのパスを環境変数 LIBRARY_PATH に追加する。
<Webrickでの構築手順>
・C:\redmine> gem install bundler
・C:\redmine> bundle install
・config/database.example.yml をコピーして config/database.yml を作成する。
また、config/database.yml を編集し、"production"環境用のデータベース設定を行う。
====================================
 production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: redmine
====================================
・以下のサイトからダウンロードしたlibmysql.dllをC:\Ruby\binにコピーする。
http://www.dll-files.com/dllindex/dll-files.shtml?libmysql

・C:\Program Files\ImageMagick-6.5.6-Q8\CORE_RL_magick_.dllをC:\Ruby\binにコピーする。

・C:\redmine> rake generate_secret_token
・C:\redmine> rake db:migrate RAILS_ENV=production
・C:\redmine> rake redmine:load_default_data RAILS_ENV=production
Select language: ar, bg, bs, ca, cs, da, de, el, en, en-GB, es, et, eu, fa, fi,fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ja
====================================
Default configuration data loaded.

・C:\redmine> ruby script/rails server webrick -e production
[Ctrl] + Cで閉じる。

<Mongrelでの構築手順>
・C:\redmine> gem install mongrel --pre
・C:\redmine\gemfileに以下を追記。
gem 'mongrel', '>= 1.2.0.pre2'
・C:\redmine> ruby script/rails server mongrel -e production
[Ctrl] + Cで閉じる。
・自動起動させたいと考え、管理者権限でDOCコマンドを起動して、以下を実行する。
C:\redmine> mongrel_rails service::install -N "Redmine" -c "C:\redmine" -p 3000 -e production

・MySQLとの依存関係を持たせたいので、管理者権限でDOCコマンドを起動して、以下を実行する。
C:\redmine> sc config Redmine start= auto depend= MySql55

・但し、自動起動は不可の模様。C:\redmine\log\mongrel.logより
 C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:
 in `require': no such file to load -- dispatcher (LoadError)

 ★unicorn、passengerも同様、Windowsでは動かない。

<thinでの構築手順>
・C:\redmine\gemfileに以下を追記。
gem 'thin'
・C:\redmine> bundle install
・C:\redmine> ruby script\rails server thin -e production
[Ctrl] + Cで閉じる。
・自動起動させたいと考え、http://www.microsoft.com/en-us/download/details.aspx?id=17657より、rktools.exeをダウンロードして、インストールする。

・管理者権限でDOCコマンドを起動して、以下を実行する。
C:\redmine> "C:\Program Files\ Resource Kits\Tools\INSTSRV.EXE" _service "C:\Program Files\Windows Resource Kits\Tools\SRVANY.EXE"

・regeditを実行して、レジストリを編集する。

1.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\redmine_serviceに、Parametersという名前のキーを追加する
2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\redmine_service\Parametersに、Application、AppParameters、AppDirectoryという名前の文字列値を新規作成する
Applicationは、Ruby.exeのフルパス。例えば、C:\Ruby\bin\ruby.exe
AppParametersは、thinとthinに渡すパラメータ。例えば、C:\Ruby\bin\ start -p 3000 -e production
AppDirectoryは、redmineをインストールした場所。例えば、C:\redmine

・MySQLとの依存関係を持たせたいので、管理者権限でDOCコマンドを起動して、以下を実行する。
C:\redmine> sc config redmine_service start= auto depend= MySql55
・リブートする。

<subdirectory化> ※rails3のみ
・C:\redmine\config.ruの編集
[変更前]
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment',  __FILE__)
run RedmineApp::Application
[変更後]
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment',  __FILE__)
map ENV['RAILS_RELATIVE_URL_ROOT'] || "/" do
  run RedmineApp::Application
end

・C:\redmine\config\environment.rbの編集
最終行に以下を追記
[変更前]
RedmineApp::Application.initialize!
[変更後]
RedmineApp::Application.initialize!
ENV['RAILS_RELATIVE_URL_ROOT'] = "/redmine"

[変更前]
  config.active_support.deprecation = :log
end
・C:\redmine\config\environments\production.rbの編集
最終行より少し前に以下を追記

[変更後]
  config.active_support.deprecation = :log
  config.action_controller.asset_path = "/redmine%s"
end
・C:\redmine> ruby script/rails server thin -e production -p 3000
http://localhost:3000/redmine
でアクセス可能となる。

<Proxy化>
・httpd.confの修正
LoadModule alias_module modules/mod_alias.so
~省略~
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

~省略~
Alias /redmine/ "C:/redmine/public/"
<Directory "C:/redmine/public">
    Options ExecCGI Includes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
ProxyPass /redmine http://localhost:3000/redmine
ProxyPassReverse /redmine http://localhost:3000/redmine

・apache再起動
http://<FQDN>/redmine
でアクセス可能となる。

2012年5月18日金曜日

Solaris10でDHCPサーバ構築

Solaris10(x86)でDHCPサーバを構築する。

①DNSの起動
bash-3.00# /usr/local/sbin/named -c /usr/local/etc/named.conf

②DHCPサーバの構成
<前提>

DHCPサーバの固定IPアドレスは192.168.10.4とする。

bash-3.00# /usr/sadm/admin/bin/dhcpmgr &
[1] 1287
bash-3.00# Java Accessibility Bridge for GNOME loaded.

・DHCPサーバとして構成を選択して[了解]をクリックする。


・テキストファイルを選択して[次へ]をクリックする。


・/etc/dhcpを入力して[次へ]をクリックする。



・/etc/hostsを選択して[次へ]をクリックする。



・リース期間を1日とし、「クライアントにリースの更新を許可する」にチェックを入れて[次へ]をクリックする。


・DNSドメインに自ドメインが入っていることを確認して、[次へ]をクリックする。



・ネットワークアドレスとサブネットマスクを設定して、[次へ]をクリックする。



・「ネットワークタイプ:ローカルエリア」、「ルータ検索プロトコルを使用」にチェックを入れて、[次へ]をクリックする。



・NISは使わないので、そのまま[次へ]をクリックする。



・NIS+も使わないので、そのまま[次へ]をクリックする。


・画面内容を確認して、[完了]をクリックする。


・しばらく(2~3分)経過後、以下が表示される。



・IPアドレスの割り当て数を指定する。(例:10個)



・開始IPアドレスやクライアントのホスト名のルールを指定する。










・リースタイプは動的とする。







③DHCPクライアントの設定(Solarisの場合)
# touch /etc/dhcp.e1000g0
# shutdown -y -i6 -g0
※/etc/hosts、/etc/netmask、/etc/defaultrouterには設定不要。/etc/hostname.<NIC>と/etc/nodenameの設定は必要。



リブート後の設定状況(クライアント)は以下のとおり。自動でホスト名とIPアドレスが設定される。


④IPアドレス配布状況の確認

・表示再表示より、IPアドレス配布状況の確認が可能。(例:192.168.10.160が割り当て済み)

※IPアドレスの有効期限などが分かる。



・/etc/dhcp配下には管理ファイルが格納されていた。(書式は不明)



<参考>
http://docs.oracle.com/cd/E24845_01/index.html
→Solaris のシステム管理 (IP サービス)

2012年5月9日水曜日

OpenAM10.0でのSAMLメタデータ入出力

OpenAM10.0(on CentOS5.8)にてSAMLメタデータ入出力仕様を調査する。
メタデータはOpenAM画面(以降、画面とする)からもOpenAMコマンド(以降、コマンドとする)からも登録可能。


※コマンドを利用する場合は別途ssoadmをインストールする必要あり。

1.準備
まず、画面よりトラストサークルをsamlcotとして、ホストアイデンティティープロバイダ(IDP)とホストサービスプロバイダ(SP)を作成する。

メタデータはexportmetadata.jspを使って出力可能である。amadminでログイン後、ブラウザのURLに
http://goodjob-idp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp
http://goodjob-sp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp
を直打ちしてエキスポートする。

2.画面
OpenAM管理コンソールより、一旦クリーンな状態(IDP、SPが未登録)にする。
ただし、トラストサークルのみ残しておく。
2.1.IDP側での登録
リモートアイデンテティプロバイダ(IDP)を作成する。

2.1.1.アップロード
ローカルPCのメタデータを指定。


[設定] ボタンを押下。化けた。


登録はされている。

2.1.2.URL指定
これはメタデータの交換の時に使う。リモートサービスプロバイダとして、相手(SP側)のURLを指定する。以下のURLを指定。
http://goodjob-sp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp



2.2.SP側での登録
リモートサービスプロバイダ(SP)を作成する。

2.2.1.アップロード
ローカルPCのメタデータを指定。


[設定] ボタンを押下。化けた。



登録はされている。



2.2.2.URL指定
これはメタデータの交換の時に使う。リモートアイデンティティープロバイダとして、相手(IDP側)のURLを指定する。以下のURLを指定。
http://goodjob-idp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp


3.コマンド
まず、http://www.forgerock.org/openam.html より ssoAdminTools_10.0.0.zip をダウンロードする。

3.1.ssoadmセットアップ
[root@goodjob-idp src]# mkdir /usr/local/ssoAdminTools_10.0.0
[root@goodjob-idp src]# cd /usr/local/ssoAdminTools_10.0.0
[root@goodjob-idp ssoAdminTools_10.0.0]# unzip ssoAdminTools_10.0.0.zip
[root@goodjob-idp ssoAdminTools_10.0.0]# JAVA_HOME=/usr/java/jdk1.6.0_32
[root@goodjob-idp ssoAdminTools_10.0.0]# export JAVA_HOME
[root@goodjob-idp ssoAdminTools_10.0.0]# ./setup
OpenAM サーバーの設定ファイルのパス [/root/openam]:/var/lib/openam
デバッグディレクトリ [/usr/local/ssoAdminTools_10.0.0/debug]:/var/lib/openam/openam/debug
ログディレクトリ [/usr/local/ssoAdminTools_10.0.0/log]:/var/lib/openam/openam/log
スクリプトは次のディレクトリに正しく設定されています:  /usr/local/ssoAdminTools_10.0.0/openam
デバッグディレクトリは /var/lib/openam/openam/debug です。
ログディレクトリは /var/lib/openam/openam/log です。
この tools.zip のバージョン:  OpenAM 10.0.0 (2012-April-13 10:24)
サーバーインスタンスのバージョン:  OpenAM 10.0.0 (2012-April-13 10:24)
※SPも同様。

--------------------------------------------------------------
3.2.IDPメタデータ出力
[root@goodjob-idp ssoAdminTools_10.0.0] #cd /usr/local/ssoAdminTools_10.0.0/openam/bin
[root@goodjob-idp bin]# vi /tmp/pwd.txt
※IDP側のamadminのパスワードを記載する。
[root@goodjob-idp bin]# chmod 400 /tmp/pwd.txt
[root@goodjob-idp bin]# ./ssoadm create-metadata-templ -y "http://goodjob-idp.openam.com:8080/openam" -u amadmin -f /tmp/pwd.txt -i /idp -m ../idp-standard.xml -x ../idp-extended.xml
レルム {1} のホストエンティティー設定が、ファイル ../idp-extended.xml に書き込まれました。
レルム {1} のホストエンティティー記述子が、ファイル ../idp-standard.xml に書き込まれました。

--------------------------------------------------------------
3.3.SPメタデータ出力 ★やってみたが、これは使えなかった★
[root@goodjob-sp ssoAdminTools_10.0.0] #cd /usr/local/ssoAdminTools_10.0.0/openam/bin
[root@goodjob-sp bin]# vi /tmp/pwd.txt
※SP側のamadminのパスワードを記載する。
[root@goodjob-sp bin]# chmod 400 /tmp/pwd.txt
[root@goodjob-sp bin]# ./ssoadm create-metadata-templ -y "http://goodjob-sp.openam.com:8080/openam" -u amadmin -f /tmp/pwd.txt -i /sp -m ../sp-standard.xml -x ../sp-extended.xml
レルム {1} のホストエンティティー設定が、ファイル ../sp-extended.xml に書き込まれました。
レルム {1} のホストエンティティー記述子が、ファイル ../sp-standard.xml に書き込まれました。

出力したファイルの中身を見たところ、SPのメタデータを<IDPSSODescriptor>として出力してしまう。
※OpenAM 10.0のバグと思われる。IDPとSPをサーバ単位で分けた環境で確認済み。

よって、今回は「1.準備」で取得した
http://goodjob-sp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp
のメタデータを取得することにする。

3.4.コマンドでの登録
OpenAM管理コンソールより、クリーンな状態(IDP、SPが未登録)にする。

3.4.1.SP側でのトラストサークル作成
[root@goodjob-sp bin]# ./ssoadm create-cot -u amadmin -f /tmp/pwd.txt -t samlcot -e /
トラストサークル samlcot が作成されました。

3.4.2.IDP側でのトラストサークル作成
[root@goodjob-idp bin]# ./ssoadm create-cot -u amadmin -f /tmp/pwd.txt -t samlcot -e /
トラストサークル samlcot が作成されました。

3.4.3.SP側でのSPメタデータ入力
トラストサークルはsamlcotとする。
[root@goodjob-sp bin]# ./ssoadm import-entity -u amadmin -f /tmp/pwd.txt -e / -m ../exportmetadata-sp.xml -t samlcot -c saml2
ファイル ../exportmetadata-sp.xml をインポートしました。

3.4.4.IDP側でのIDPメタデータ入力
トラストサークルはsamlcotとする。
[root@goodjob-idp bin]# ./ssoadm import-entity -u amadmin -f /tmp/pwd.txt -e / -m ../idp-standard.xml -x ../idp-extended.xml  -t samlcot -c saml2
ファイル ../idp-standard.xml をインポートしました。
ファイル ../idp-extended.xml をインポートしました。

3.5.登録確認
3.5.1.IDP側の連携タブ押下時
アクセスできたが、インスタンス(サーブレットコンテナ)再起動は不要?



3.5.2.SP側の連携タブ押下時
アクセスできたが、インスタンス(サーブレットコンテナ)再起動は不要?



4.メタデータ登録のチェック処理

[設定] ボタンのForm文のactionは../task/CreateRemoteIDP(またはCreateRemoteSP)

以下が呼ばれる。
\openam_src_10.0.0\products\federation\openfm\source\com\sun\identity\workflow
\CreateRemoteIDP.java(またはCreateRemoteSP.java)

その中でさらに以下が呼ばれる。
\openam_src_10.0.0\products\federation\openfm\source\com\sun\identity\workflow
\ImportSAML2MetaData.javaのimportData()

この中でメタデータを受け取って、getEntityDescriptorElement()で解析している模様。

<チェック内容>
・メタデータがnullでない。
・メタデータ(ドキュメント)のローカル名がEntityDescriptor、もしくは名前空間URIが"urn:oasis:names:tc:SAML:2.0:metadata"である。
・メタデータの署名検証にて問題なし。
※なお、署名値(<ds:Signature>タグ)がない場合は、エラーとしない。
・名前空間に"urn:oasis:names:tc:SAML:2.0:metadata"を持つ<RoleDescriptor>タグを取得し、
名前空間に"http://www.w3.org/2000/xmlns/"を持つtype属性の属性値が"AttributeQueryDescriptorType"、もしくは
":AttributeQueryDescriptorType"で終わる。


<参考>
http://openam.forgerock.org/doc/admin-guide/index.html#chap-federation
および
ssoadmコマンドのヘルプ、OpenAM10.0のソース





2012年5月2日水曜日

Jenkinsのインストール

CentOS5.8にJenkinsをインストールする。

・JDKのインストール
OpenJDK1.6だとWebブラウザアクセス時に「このサーバーは、AWTが正しく設定されていません」が表示されるので、Oracleが提供するJDK1.6を使う。
http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html より
jdk-6u32-linux-i586-rpm.binをダウンロードする。
[root@goodjob src]# cp /mnt/hgfs/Desktop/openam/jdk-6u32-linux-i586-rpm.bin /usr/local/src
[root@goodjob src]# ./jdk-6u32-linux-i586-rpm.bin
・JenkinsのRPMパッケージの公開鍵のインポート
[root@goodjob redmine]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
--2012-05-02 06:35:07--  http://pkg.jenkins-ci.org/redhat/jenkins.repo
pkg.jenkins-ci.org をDNSに問いあわせています... 63.246.20.93
pkg.jenkins-ci.org|63.246.20.93|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 75 [text/plain]
`/etc/yum.repos.d/jenkins.repo' に保存中
100%[======================================>] 75          --.-K/s 時間 0s     
2012-05-02 06:35:07 (9.47 MB/s) - `/etc/yum.repos.d/jenkins.repo' へ保存完了 [75/75]
[root@goodjob redmine]# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
・Jenkinsのインストール
[root@goodjob redmine]# yum install jenkins
<省略>
Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)
Total download size: 48 M
Is this ok [y/N]: y
Downloading Packages:
jenkins-1.462-1.1.noarch.rpm                             |  48 MB     05:17    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : jenkins                                                  1/1
warning: /etc/yum.repos.d/jenkins.repo created as /etc/yum.repos.d/jenkins.repo.rpmnew
Installed:
  jenkins.noarch 0:1.462-1.1                                                   
Complete!
[root@goodjob redmine]# /sbin/service jenkins start
Starting Jenkins                                           [  OK  ]

http://goodjob.openam.net:8080 アクセス時に以下が出力される。
※Winstoneという軽量のServletコンテナが搭載されているため起動可能。


・Tomcatのインストール
[root@goodjob src]# wget http://ftp.riken.jp/net/apache/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz
[root@goodjob src]# tar -xzf apache-tomcat-6.0.35.tar.gz
[root@goodjob src]# mv apache-tomcat-6.0.35 /opt/tomcat6
[root@goodjob src]# /usr/sbin/useradd -d /opt/tomcat6 -s /sbin/nologin tomcat
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@goodjob src]# chown -R tomcat /opt/tomcat6
[root@goodjob src]# cp /opt/tomcat6/bin/commons-daemon-native.tar.gz /tmp
[root@goodjob src]# cd /tmp
[root@goodjob tmp]# tar -xzf commons-daemon-native.tar.gz
[root@goodjob tmp]# cd commons-daemon-1.0.7-native-src/unix
[root@goodjob unix]# autoconf
[root@goodjob unix]# ./configure --with-java=/usr/java/jdk1.6.0_32
[root@goodjob unix]# make clean
[root@goodjob unix]# make
[root@goodjob unix]# chown tomcat jsvc
[root@goodjob unix]# mv jsvc /opt/tomcat6/bin
[root@goodjob unix]# cd /tmp
[root@goodjob tmp]# rm -rf commons-daemon*
[root@goodjob tmp]# vi /etc/init.d/tomcat6
---------------------------------------------------------------
#!/bin/sh
#
# chkconfig: - 80 20
# description: tomcat
# Source function library.
. /etc/init.d/functions
JAVA_HOME=/usr/java/jdk1.6.0_32
CATALINA_HOME=/opt/tomcat6
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc
start(){
    #
    # Start Tomcat
    #
    echo -n "Starting tomcat: "
    $DAEMON \
    -pidfile $PIDFILE \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Djava.awt.headless=true \
    -Xms1024m -Xmx2048m \
    -Dcatalina.home=$CATALINA_HOME \
    -Djava.io.tmpdir=$TMP_DIR \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of tomcat.
    #-debug \
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        touch $LOCKFILE
    else
        echo_failure
    fi
    echo
}
stop(){
    #
    # Stop Tomcat
    #
    echo -n "Shutting down tomcat: "
    $DAEMON \
    -stop \
    -pidfile $PIDFILE \
    org.apache.catalina.startup.Bootstrap
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        rm -f $PIDFILE $LOCKFILE
    else
        echo_failure
    fi
    echo
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status $DAEMON
        RETVAL=$?
        ;;
    *)
        echo $"Usage: tomcat {start|stop|restart|status}"
        exit 1
        ;;
esac
---------------------------------------------------------------
[root@goodjob tmp]# chmod +x /etc/init.d/tomcat6
[root@goodjob tmp]# /sbin/chkconfig tomcat6 on
[root@goodjob tmp]# /etc/init.d/tomcat6 start
Starting tomcat:                                           [  OK  ]

・TomcatへのJenkins配備
次にhttp://jenkins-ci.org/ よりLatest and greatest (1.462)をクリックして、jenkins.warをダウンロードする。
[root@goodjob tmp]# cd /opt/tomcat6/webapps
[root@goodjob webapps]# wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
[root@goodjob webapps]# chown -R tomcat jenkins.war
[root@goodjob webapps]# vi /opt/tomcat6/conf/server.xml
・変更前
    <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
・変更後
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
[root@goodjob webapps]#  /sbin/chkconfig jenkins off
[root@goodjob webapps]#  /sbin/chkconfig --list jenkins
jenkins         0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@goodjob webapps]# /sbin/service jenkins stop
Shutting down Jenkins                                      [  OK  ]
[root@goodjob webapps]# /etc/init.d/tomcat6 stop
Shutting down tomcat:                                      [  OK  ]
[root@goodjob webapps]# /etc/init.d/tomcat6 start
Starting tomcat:                                           [  OK  ]
http://goodjob.openam.net:8080/ アクセス時に以下が出力される。
※Winstoneという軽量のServletコンテナは使わないため。



また、http://goodjob.openam.net:8080/jenkins/ アクセス時に以下が出力される。





Subversionの設定

CentOS5.8にSubversionをインストールする。

●サーバ
・Subversionのインストール
[root@goodjob src]# yum install subversion
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Setting up Install Process
Package subversion-1.6.11-7.el5_6.4.i386 already installed and latest version
Nothing to do
・Subversionリポジトリの作成
[root@goodjob src]# mkdir /var/lib/svn
[root@goodjob src]# svnadmin create /var/lib/svn/foo
[root@goodjob src]# chown -R apache:apache /var/lib/svn/foo
[root@goodjob src]# ls -l /var/lib/svn/foo
合計 24
-rw-r--r-- 1 apache apache  229  5月  2 05:29 README.txt
drwxr-xr-x 2 apache apache 4096  5月  2 05:29 conf
drwxr-sr-x 6 apache apache 4096  5月  2 05:29 db
-r--r--r-- 1 apache apache    2  5月  2 05:29 format
drwxr-xr-x 2 apache apache 4096  5月  2 05:29 hooks
drwxr-xr-x 2 apache apache 4096  5月  2 05:29 locks
・WebDAVでのアクセス設定
[root@goodjob src]# yum install mod_dav_svn
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mod_dav_svn.i386 0:1.6.11-7.el5_6.4 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package             Arch         Version                    Repository    Size
================================================================================
Installing:
 mod_dav_svn         i386         1.6.11-7.el5_6.4           base          78 k
Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)
Total download size: 78 k
Is this ok [y/N]: y
Downloading Packages:
mod_dav_svn-1.6.11-7.el5_6.4.i386.rpm                    |  78 kB     00:00    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : mod_dav_svn                                              1/1
Installed:
  mod_dav_svn.i386 0:1.6.11-7.el5_6.4                                          
Complete!
[root@goodjob src]# vi /etc/httpd/conf/httpd.conf
<Location /svn>
    DAV svn
    SVNParentPath /var/lib/svn
</Location>
[root@goodjob src]# /etc/init.d/httpd stop
httpd を停止中:                                            [  OK  ]
[root@goodjob src]# /etc/init.d/httpd start
httpd を起動中:                                            [  OK  ]
・Basic認証の設定
[root@goodjob src]# touch /etc/httpd/conf/foo_auth_file
[root@goodjob src]# htpasswd /etc/httpd/conf/foo_auth_file goodjob
New password:
Re-type new password:
Adding password for user goodjob
[root@goodjob src]# vi /etc/httpd/conf/httpd.conf
<Location /svn>
    DAV svn
    SVNParentPath /var/lib/svn
    AuthType Basic
    AuthName "svn repository"
    AuthUserFile /etc/httpd/conf/foo_auth_file
    Require valid-user
</Location>
[root@goodjob src]# /etc/init.d/httpd stop
httpd を停止中:                                            [  OK  ]
[root@goodjob src]# /etc/init.d/httpd start
httpd を起動中:                                            [  OK  ]

http://goodjob.openam.net/svn/foo にアクセス時にベーシック認証のダイアログが表示されることを確認する。


ベーシック認証後、WebDAVでリポジトリの情報を閲覧できることを確認する。


新しいプロジェクト(ここではtest)を作成して、リポジトリの設定を行う。








●クライアント
・TortoiseSVNのインストール
http://tortoisesvn.net/downloads.htmlより以下をダウンロードしてインストールする。
TortoiseSVN-1.7.6.22632-win32-svn-1.7.4.msi
LanguagePack_1.7.6.22632-win32-ja.msi
TortoiseSVNでhttp://goodjob.openam.net/svn/foo にアクセス時に認証を聞かれる。



tags、branch、trunkフォルダを作成する。

                                    

redmineのリポジトリとして閲覧可能なことを確認する。