金曜日 10 31, 2014

[ホワイトペーパー] Solaris Zone によるハードパーティションの構成

Solaris Zone を使用してハードパーティションを構成する方法がホワイトペーパーとして公開されました。

Solaris 上で Oracle 社製ソフトウェアを稼働させるシステムの導入・設計・提案をご検討されている方は是非ご一読ください。

ハードパーティションについてはこちらをご参照ください。

Solaris Zone ではなく OVM for SPARC を使用してハードパーティションを構成する場合については以下をご参照ください。

Solaris 11 のホワイトペーパーはこちらからアクセスしていただけます。

Oracle Solaris 11.2 マニュアル検索もご活用ください。

※ 上記は 2014/10/31 時点の情報です。

木曜日 8 14, 2014

ZFS Storage Appliance が OpenStack Cinder の block storage resource として利用可能に

Oracle ZFS Storage Appliance の RESTfull API サポートを紹介しましたが、これには続きがありました。 というわけで、RESTfull API が利用できる Oracle ZFS Storage Appliance は、OpenStack Cinder の block storage resource として利用可能になります。 iSCSI を利用した block volume をインスタンスに提供することが可能となり、Oracle ZFS Storage Appliance が提供する機能(暗号化など)と組み合わせることが可能になります。  

下記に必要な条件をまとめてみました。

  • Oracle ZFS Stoarge Appliance の条件
  • Cinder Host の条件
    • Oracle Solaris 11.2 を利用する
      • Oracle Solaris 11.2 の Cinder パッケージに含まれる Oracle ZFS Storage Appliance iSCSI Cinder Driver version 1.0.0 を利用
    • Solaris 11.2 以外の OpenStack Grizlly, Havana リリースの Cinder が動作しているホスト
    • /etc/cinder/cinder.conf に ZFS Storage Appliance の情報を追加
と、このような流れで block storage resource として利用できるようになります。
下記は、Oracle Solaris 11.2 上にて cinder コマンドを利用し volume を作成した例となります。



利用する際には、README (https://openstack.java.net/ZFSSACinderDriver.README) を参照してくださいね。
先に紹介した ZFS Storage Appliance Simulator でも動作すると思います。 

Horizon からインスタンスを作成すると ZOSS (Zones on Shared Storage) を利用した Solaris Zone (iSCSI を利用した volume 上に non-global zone を配置)が作成されることを確認できました。
色々と確認しなければならないことは多いですが、cinder コマンドから ZFS Storage Appliance を操作および利用できるようになったことで、また一つ可能性が広がりました。        

日曜日 8 10, 2014

Oracle ZFS Storage Simulator で RESTfull API を使って情報を参照してみる

2014/8/1 に Oracle ZFS Storage ZS3 シリーズに関する下記リリースを発表させて頂きました。

「Oracle ZFS Storage ZS3」シリーズの仮想化とクラウド機能の強化を発表

その中で気になったのが下記の一文です。

「Oracle ZFS Storage OS 8.2」のクラウド機能の拡張により、「OpenStack Cinder *3」対応のドライバーが追加され、REST対応APIも提供されました。

なんとか試してみたいなぁというわけで、Oracle ZFS Storage Simulator を確認すると、OS 8.2 版に更新されていました。
これは、VirtualBox が動作する環境であれば Oracle ZFS Storage の機能を評価できる優れもの。
クラスタなどの機能は専用の機構を利用しているため評価できませんが、ハードウェアに依存しないストレージの機能や Analytics などのほぼ全ての機能評価することが可能という素晴らしい Simulator です。

Oracle ZFS Storage Simulator
http://www.oracle.com/technetwork/server-storage/sun-unified-storage/downloads/sun-simulator-1368816.html

これを利用することで、RESTfull API の動作確認はできるはず。
また、ZFS Storage Appliance の RESTfull API については、下記のマニュアルに情報が記載されています。
ストレージのほとんどの操作が API 経由で可能なようです。

Oracle® ZFS Storage Appliance RESTful Application Programming Interface
http://docs.oracle.com/cd/E51475_01/html/E52433/index.html

早速、Simulator をダウンロードし、VBox 上で起動。
デフォルトでは REST サービスが disable になっていますので、これを enable にします。
手っ取り早く確認したいので、VIrtualBox のポートフォワーディング機能を使い、Simulator VM の Port: 215 をホスト OS の Port: 10215 にマッピングし、https://localhost:10215 経由でのアクセスしています。

さっそく、curl を使ってアクセスしてみます。
これは、/api/system/v1/version から ZFS Storage Appliance 環境のバージョン情報を取り出したものです。


$ curl --user root:password -k -i https://localhost:10215/api/system/v1/version

HTTP/1.1 200 OK

Date: Sun, 10 Aug 2014 00:07:36 GMT

Server: TwistedWeb/10.1.0

Content-Length: 814

X-Zfssa-Version: ak/generic@2013.06.05.2.0,1-1.10

X-Zfssa-Api-Version: 1.0

X-Zfssa-System-Api: 1.0

Content-Type: application/json; charset=utf-8

{"version":

{"href": "/api/system/v1/version",

"nodename": "unknown",

"mkt_product": "Oracle ZFS Storage VirtualBox",

"product": "Sun Storage 7000",

"version": "2013.06.05.2.0,1-1.10",

"install_time": "Mon Jun 23 2014 09:33:16 GMT+0000 (UTC)",

"update_time": "Mon Jun 23 2014 09:33:16 GMT+0000 (UTC)",

"boot_time": "Sat Aug 09 2014 23:24:29 GMT+0000 (UTC)",

"asn": "de217be8-104f-6106-db7f-9c9f7789faf6",

"csn": "unknown",

"part": "Oracle 000-0000",

"urn": "urn:uuid:11da4018-a79e-11dd-a2a2-080020a9ed93",

"navname": "aksh 1.0",

"navagent": "aksh",

"http": "Apache/2.2.24 (Unix)",

"ssl": "OpenSSL 1.0.0k 5 Feb 2013",

"ak_version": "ak/SUNW,ankimo@2013.06.05.2.0,1-1.10",

"os_version": "SunOS 5.11 ak/generic@2013.06.05.2.0,1-1.10 64-bit",

"bios_version": "innotek GmbH VirtualBox 12/01/2006",

"sp_version": "-"

}}

もう少し出力を見やすく整形できればと調べたところ、python 2.6 から含まれる json.tool module を利用することで、ぐっと見易くなりました。
curl の -i オプションで出力される protocol header がふくまれると解析に失敗してしまいますので、-i オプションを外し、パイプで python -m json.tool に渡してあげるおとで、先ほどの出力よりもさらに見易くなった結果を手に入れることができます。

$ curl --user root:password -k https://localhost:10215/api/system/v1/version | python -m json.tool

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100   814  100   814    0     0    507      0  0:00:01  0:00:01 --:--:--   507

{

    "version": {

        "ak_version": "ak/SUNW,ankimo@2013.06.05.2.0,1-1.10",

        "asn": "de217be8-104f-6106-db7f-9c9f7789faf6",

        "bios_version": "innotek GmbH VirtualBox 12/01/2006",

        "boot_time": "Sat Aug 09 2014 23:24:29 GMT+0000 (UTC)",

        "csn": "unknown",

        "href": "/api/system/v1/version",

        "http": "Apache/2.2.24 (Unix)",

        "install_time": "Mon Jun 23 2014 09:33:16 GMT+0000 (UTC)",

        "mkt_product": "Oracle ZFS Storage VirtualBox",

        "navagent": "aksh",

        "navname": "aksh 1.0",

        "nodename": "unknown",

        "os_version": "SunOS 5.11 ak/generic@2013.06.05.2.0,1-1.10 64-bit",

        "part": "Oracle 000-0000",

        "product": "Sun Storage 7000",

        "sp_version": "-",

        "ssl": "OpenSSL 1.0.0k 5 Feb 2013",

        "update_time": "Mon Jun 23 2014 09:33:16 GMT+0000 (UTC)",

        "urn": "urn:uuid:11da4018-a79e-11dd-a2a2-080020a9ed93",

        "version": "2013.06.05.2.0,1-1.10"

    }

}

さらにさらに、jq なる json processor が色付けしてくれたり整形してくれたり色々加工できるということで試してみた。

jq
http://stedolan.github.io/jq/

今回は出力を得るのは Mac OS X 環境となりますので、Mac OS X binary を利用してみました。
バージョン情報の他、pool の情報や、プロジェクトの情報も取ってみましたがキレイに出力されますね。
python -m json.tool と jq があることを覚えておくと良いようです。

$ curl --user root:password -k https://localhost:10215/api/system/v1/version | ~/opt/bin/jq '.'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100   814  100   814    0     0    548      0  0:00:01  0:00:01 --:--:--   548

{

"version": {

"href": "/api/system/v1/version",

"nodename": "unknown",

"mkt_product": "Oracle ZFS Storage VirtualBox",

"product": "Sun Storage 7000",

"version": "2013.06.05.2.0,1-1.10",

"install_time": "Mon Jun 23 2014 09:33:16 GMT+0000 (UTC)",

"update_time": "Mon Jun 23 2014 09:33:16 GMT+0000 (UTC)",

"boot_time": "Sat Aug 09 2014 23:24:29 GMT+0000 (UTC)",

"asn": "de217be8-104f-6106-db7f-9c9f7789faf6",

"csn": "unknown",

"part": "Oracle 000-0000",

"urn": "urn:uuid:11da4018-a79e-11dd-a2a2-080020a9ed93",

"navname": "aksh 1.0",

"navagent": "aksh",

"http": "Apache/2.2.24 (Unix)",

"ssl": "OpenSSL 1.0.0k 5 Feb 2013",

"ak_version": "ak/SUNW,ankimo@2013.06.05.2.0,1-1.10",

"os_version": "SunOS 5.11 ak/generic@2013.06.05.2.0,1-1.10 64-bit",

"bios_version": "innotek GmbH VirtualBox 12/01/2006",

"sp_version": "-"

  }

}

$ curl --user root:password -k https://localhost:10215/api/storage/v1/pools/vboxpool | ~/opt/bin/jq '.'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100  2308  100  2308    0     0  22349      0 --:--:-- --:--:-- --:--:-- 22407

{

"pool": {

"status": "online",

"profile": "stripe",

"errors": [],

"scrub": {

"errors": 0,

"repaired": 0,

"complete": true

    },

"name": "vboxpool",

"usage": {

"available": 80026824704,

"total": 80027320320,

"dedupratio": 100,

"used": 495616

    },

"peer": "00000000-0000-0000-0000-000000000000",

"vdev": [

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 1"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 2"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 3"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 4"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 5"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 6"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 7"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 8"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 9"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 10"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 11"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 12"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 13"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 14"

      },

      {

"size": 5368709120,

"state": "healthy",

"chassis": "00a62383-eb97-c48c-f88b-ea9afe7b89a5",

"type": "disk",

"label": "HDD 15"

      }

    ],

"owner": "unknown",

"asn": "de217be8-104f-6106-db7f-9c9f7789faf6"

  }

}

$ curl --user root:password -k https://localhost:10215/api/storage/v1/pools/vboxpool/projects | ~/opt/bin/jq '.'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100  1765    0  1765    0     0  39935      0 --:--:-- --:--:-- --:--:-- 40113

{

"projects": [

    {

"default_volblocksize": 8192,

"logbias": "latency",

"creation": "20140809T23:28:30",

"nodestroy": false,

"dedup": false,

"sharenfs": "on",

"href": "/api/storage/v1/pools/vboxpool/projects/default",

"sharesmb": "off",

"default_permissions": "700",

"mountpoint": "/export",

"snaplabel": "",

"id": "f4c572c1-20d9-400a-0000-000000000000",

"readonly": false,

"space_data": 31744,

"compression": "off",

"sharetftp": "",

"source": {

"logbias": "inherited",

"dedup": "inherited",

"sharenfs": "local",

"sharesmb": "local",

"mountpoint": "local",

"rrsrc_actions": "local",

"compression": "inherited",

"sharetftp": "local",

"snapdir": "inherited",

"sharedav": "local",

"copies": "inherited",

"aclinherit": "inherited",

"shareftp": "local",

"readonly": "inherited",

"secondarycache": "inherited",

"maxblocksize": "inherited",

"exported": "local",

"vscan": "inherited",

"reservation": "local",

"atime": "inherited",

"recordsize": "inherited",

"checksum": "inherited",

"sharesftp": "local",

"nbmand": "inherited",

"aclmode": "inherited",

"rstchown": "inherited"

      },

"default_sparse": false,

"snapdir": "hidden",

"aclmode": "discard",

"copies": 1,

"aclinherit": "restricted",

"compressratio": 100,

"shareftp": "",

"canonical_name": "vboxpool/local/default",

"recordsize": 131072,

"space_available": 78776401920,

"secondarycache": "all",

"space_snapshots": 0,

"space_unused_res": 0,

"quota": 0,

"maxblocksize": 1048576,

"exported": true,

"default_volsize": 0,

"vscan": false,

"reservation": 0,

"atime": true,

"pool": "vboxpool",

"default_user": "nobody",

"space_unused_res_shares": 0,

"name": "default",

"checksum": "fletcher4",

"space_total": 31744,

"default_group": "other",

"sharesftp": "",

"nbmand": false,

"sharedav": "",

"rstchown": true

    }

  ]

}

curl を使った参照のみによる簡単な RESTfull API の動作確認でしたが、Oracle ZFS Storage Appliance も OS 8.2 によりおもしろくなってきました。

Oracle ZFS Storage Appliance は、この RESTfull API を利用することで、OpenStack のブロックストレージリソース (Cinder) として利用することができるようになっています。(Cinder Host に ZFS Storage Appliance 用の driver を別途インストールが必要)
このへんも整理できたらまとめてみたいと思います。

木曜日 8 07, 2014

TCP トラフィックの輻輳制御の実装について (Congestion Control)

Solaris の TCP 輻輳制御の実装 (Congestion Control) が、Solaris 10 から変更になっていました汗

Solaris 10 までは、RFC 2581 に準拠したアルゴリズムを採用し固定でしたが、Solaris 11 からは、このアルゴリズムの実装を Pluggable にし複数の実装を提供できる Pluggable TCP Congestion Control と呼ばれる実装に変更されています。 Solaris 11 以降では、NewReno をデフォルトのアルゴリズムとし、New Reno の改良版である High Speed, Linux 2.6 以降で利用される CUBIC, Round-Trip Time による輻輳管理を行う Vefas の 4 つのアルゴリズムをサポートし、ipadm set-prop コマンドで変更でます。


 バージョン  アルゴリズム
 Solaris 10 まで  RFC 2581 準拠のアルゴリズム (ハードコード)
 Solaris 11 以降  Pluggable TCP Congestion Control 機能によりアルゴリズムを plugin で実装し選定可能に
newreno デフォルトアルゴリズム。制御メカニズムには、送信側の輻輳ウィンドウ、スロースタート、および輻輳回避があります
highspeed 高速ネットワーク用のもっとも有名かつシンプルな NewReno の修正版の 1 つ
cubic Linux 2.6 の現在のデフォルトアルゴリズム。輻輳回避フェーズを線形的なウィンドウ増加から cubic 関数に変更します
vegas 実際のパケットロスを発生させずに輻輳を予測しようとする典型的な遅延ベースのアルゴリズム

 

確認方法は、ipadm show-prop で出力される下記のプロパティを参照してください。 変更は、ipadm set-prop -p cong_default=cube tcp のように実行します。 詳細は、下記のマニュアルで。 Oracle Solaris 11.1 での固定ネットワーク構成を使用したシステムの接続 > トラフィックの輻輳制御の実装 http://docs.oracle.com/cd/E37932_01/html/E36462/ggtvn.html#gkkdv
TCP: 
# ipadm show-prop -p cong_default tcp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
tcp   cong_default          rw   newreno      --           newreno      newreno,cubic,
                                                                        highspeed,vegas
# ipadm show-prop -p cong_enabled tcp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
tcp   cong_enabled          rw   newreno,cubic, newreno,cubic, newreno  newreno,cubic,
                                 highspeed,   highspeed,                highspeed,vegas
                                 vegas        vegas

SCTP (Stream Control Transmission Protocol) :
root@havana-mgt01:~# ipadm show-prop -p cong_default sctp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
sctp  cong_default          rw   newreno      --           newreno      newreno,cubic,
                                                                        highspeed,vegas
root@havana-mgt01:~# ipadm show-prop -p cong_enabled sctp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
sctp  cong_enabled          rw   newreno,cubic, newreno,cubic, newreno  newreno,cubic,
                                 highspeed,   highspeed,                highspeed,vegas
                                 vegas        vegas                     


金曜日 8 01, 2014

Oracle Solaris 11.2 と Oracle Solaris Cluster 4.2 がリリース!

本日、日本時間 8/1 に Oracle Solaris 11.2 と Oracle Solaris 4.2 がリリースとなりました。アナウンスではないですよ。

Solaris 11.1 から .1 繰り上がっただけですが、すでに Open Beta 時からお知らせしているように、OpenStack (Open Beta は Grizzly でしたが、Havana ベースとなりました), Krenel Zones, Elastic Virtual Switch, Unified Archive など様々な新機能が盛り込まれています。
そして、これらの新機能を使うために、アプリケーションの修正は必要ありません。

また、Oracle Solaris に高可用性と DR 機能を提供する Oracle Solaris Cluster 4.2 も合わせてリリースされました。
Solaris Cluster 4.2 の HA Zone では新しい Kernel Zone をサポート。Solaris がサポートする仮想化機能に高可用性を付加します。
更に、ブラウザベースの管理インターフェースを新たに提供。また、Solaris 11.2 の統合アーカイブ機能と連携することで、物理クラスタ環境や仮想クラスタ環境を迅速にデプロイ可能です。

 ちなみに、さとかず & いとかづが作成している OpenStack on Solaris 環境を絵にしてみるとこうなります。奥が深い。
初物なので色々と試行錯誤していますが、新機能との連携を理解できると中々楽しいです。


金曜日 2 14, 2014

「Oracle Solaris の将来リリースで計画されている End of Feature (EOF)」の日本語翻訳版を公開

US OTN で提供している Oracle Solaris に関連する End of Feature Notices コンテンツの翻訳版を提供開始いたしました。

本情報は、Oracle Solaris リリースノートにも記載されている内容をカバーするものとなり、加えて新しい情報を追加更新していきます。

Oracle Solaris の将来のリリースで計画されている End of Feature (EOF)


月曜日 1 21, 2013

Solaris Zones で GDM (GNOME Display Manager) を動かす Xvnc 編

Xephyr よりVNC だろ?と言われ、言い返せなかったので Xvnc について書き加えて行きたいと思います。

前回のエントリとなるSolaris Zones で GDM (GNOME Display Manager) を動かす」ですが、この設定を完了後、Xvnc の SMF サービスを有効にするだけです。
Xvnc も SMF サービス管理されていますが、こちらは inetd にてコントロールされるサービスで、標準では disable となっています。
Xvnc を有効にするには、下記のコマンドを実行します。

# svcadm enable xvnc-inetd

# svcs -a | grep xvnc
online 11:16:56 svc:/application/x11/xvnc-inetd:default (online になったことを確認します)

サービスが開始されるので、後は VNC クライアントから接続するだけです。
ちなみに、inetd コントロールされるので、inetadm の出番です。

 root@solaris:~#   inetadm -l xvnc-inetd
SCOPE    NAME=VALUE
         name="vnc-server"
         endpoint_type="stream"
         proto="tcp"
         isrpc=FALSE
         wait=FALSE
         exec="/usr/bin/Xvnc -inetd -query localhost -once securitytypes=none"
         user="noaccess"
default  bind_addr=""
default  bind_fail_max=-1
default  bind_fail_interval=-1
default  max_con_rate=-1
default  max_copies=-1
default  con_rate_offline=-1
default  failrate_cnt=40
default  failrate_interval=60
default  inherit_env=TRUE
default  tcp_trace=FALSE
default  tcp_wrappers=FALSE
default  connection_backlog=10
default  tcp_keepalive=FALSE

いえ、、、特になにかしたかったわけでもなく・・・
接続にパスワードを用いたり、Xvnc のオプションを変更する場合は、exec プロパティを書き換えます。
たとえば、デスクトップのデフォルトの大きさを 1280x800 に指定する(大抵の場合は、クライアントから操作できるが、できないクライアントもあります)には、下記のように実行します。
inetd からキックされるサービスなので、特にリフレッシュも必要ありません。(svccfg でも変更できます)

# inetadm -m xvnc-inetd exec="/usr/bin/Xvnc -inetd -query localhost -once securitytypes=none -geometry 1280x800"

また、default では、VNC クライアントを終了させると同時にセッションも終了し、毎回ログインのしなおしとなります。
クライアントとのコネクションが切れても、セッションを継続動作させるには、下記を追加で実行します。
なんちゃって SunRay 環境っぽくなります。

# inetadm -m xvnc-inetd wait=true
# inetadm -m xvnc-inetd exec="/usr/bin/Xvnc -inetd -query localhost -once securitytypes=none -geometry 1280x800 -DisconnectClients=no"

Mac OS X 10.6.8 の画面共有アプリケーションにはクライアント機能があり、FInder に統合されているのですがうまく接続することができず、TightVNC Java Viewer version 2.6.2
また、Solaris 11.1 の TigerVNC クライアント(/usr/bin/vncviewer) 問題なく接続できました。

のあたりの設定も、カスタマイズしはじめるとキリがありません
というわけで、
Xephyr に続き VNCクライアントでの接続方法の紹介でした。

後日追加:使い方に注意点があるので、気がついたら追加してゆきます。

  • コピー & ペーストができない
    Solaris 側で、/usr/bin/vncconfig を実行してください。このプログラムが起動中は、コピー & ペースト可能です。
    正しく動作することを確認できたら、バックグラウンドで動作させておきます。
  • UltraVNC クライアントから接続すると、"The Server running as Application" と表示されてしまう。
    とりあえず、既存セッションへの接続の場合は、クライアント側で接続速度を低いものにしてみる
  • Mac OS X 10.6.8 の画面共有クライアントから接続できなかったのは、Xvnc 側でパスワードを設定していないためでした。パスワーファイルを設定し認証を行うようにすることで問題なくアクセスできます。

日曜日 1 20, 2013

Solaris Zones で GDM (GNOME Display Manager) を動かす


今回は、Solaris 11.1 の非大域ゾーン(non-global zone)の中で、GDM を動かす。そして、Xephyr (Xnest などの XDMCP クライアント) から非大域ゾーンのデスクトップ環境を利用するというお話です。

なんで、今更こんなことを書くかというと、実は GDM は非大域ゾーンの中で動作させることができません。
Solaris 10 では CDE のコンポーネントである dtlogin を非大域ゾーンで利用する方法が提供されていましたが、Solaris 11 からは dtlogin が提供されなくなりました。GDM も使えないため、非大域ゾーンにデスクトップ環境を構成し利用することが難しい状態となっています。

GDM を動かすことができない理由ですが、まず、GDM は Solaris が誇る予測的自己修復機能を構成する SMF で管理されるサービスとして提供されています。GDM の SMF サービスは svc:/application/graphical-login/gdm:default となりますが、この SMF サービスは、svc:/system/hal と svc:/system/consolekit, svc:/system/dbus に依存関係を持っており、この 3 つのサービスが正常に動作している必要があります。(他のサービスにも依存関係を持っていますが、今回のお話ではこの 3 つが重要)

しかし、非大域ゾーンでは、次の理由により GDM は SMF サービスとして offline となります。

  • svc:/system/hal は、non-global zone でサービスとして提供されない(存在しない)
  • svc:/system/dbus は、non-global zones では disable になるように設定されている
  • svc:/system/consolekit は、dbus に依存している。dbus は動作していないので、consolekit も動作しない
おぅ・・・思った以上にクリティカルです。

# svcs -l gdm
fmri         svc:/application/graphical-login/gdm:default
name         GNOME Display Manager
enabled      true
state        offline
next_state   none
state_time   Sat Jan 19 22:27:28 2013
restarter    svc:/system/svc/restarter:default
manifest     /lib/svc/manifest/application/graphical-login/gdm.xml
manifest     /etc/svc/profile/generic.xml
manifest     /lib/svc/manifest/application/opengl/ogl-select.xml
manifest     /lib/svc/manifest/application/desktop-cache/gconf-cache.xml
manifest     /lib/svc/manifest/application/desktop-cache/pixbuf-loaders-installer.xml
manifest     /lib/svc/manifest/application/desktop-cache/icon-cache.xml
manifest     /lib/svc/manifest/application/desktop-cache/desktop-mime-cache.xml
manifest     /lib/svc/manifest/application/desktop-cache/input-method-cache.xml
manifest     /lib/svc/manifest/application/desktop-cache/mime-types-cache.xml
dependency   optional_all/none svc:/application/opengl/ogl-select (online)
dependency   require_all/none svc:/system/filesystem/local (online)
dependency   require_all/error svc:/milestone/multi-user:default (online)
dependency   require_all/none svc:/milestone/self-assembly-complete (online)
dependency   require_all/none svc:/application/font/fc-cache (online)
dependency   require_all/none svc:/system/utmp (online)
dependency   require_all/none svc:/system/hal ()
dependency   require_all/none svc:/system/dbus (disabled)
dependency   require_all/none svc:/system/consolekit (offline)

dependency   optional_all/none svc:/application/desktop-cache/gconf-cache (online)
dependency   optional_all/none svc:/application/desktop-cache/pixbuf-loaders-installer (online)
dependency   optional_all/none svc:/application/desktop-cache/icon-cache (online)
dependency   optional_all/none svc:/application/desktop-cache/desktop-mime-cache (online)
dependency   optional_all/none svc:/application/desktop-cache/input-method-cache (online)
dependency   optional_all/none svc:/application/desktop-cache/mime-types-cache (online)

というわけで、何らかの意図があり、故意に動作させないようになっているような気がしないでもないです。。。
ちなみに、依存関係については、svcs -l で確認できます。



ここからサポートされる手順ではなく利用者の自己責任となります。
SMF のマニフェストを書き換えたりしますので、動作になんらかの影響を与える可能性がありますのでご注意ください。この点を理解していいただけるという前提で、動作させる手順をご紹介いたします。(サポートされる手順でもなんでもなく、欲望を満たせるなら手段は問わない手順となります)

1. 非大域ゾーンの作成について

非大域ゾーンの作成時点では、何か特別なことをする必要はありません。
ここでは、非大域ゾーンを作成してたからデスクトップ環境をインストールする作業(パッケージのインストール)をゾーン作成時に行ってしまう方法をご紹介します。
/usr/share/auto_install/manifest/zone_default.xml のコピーを作成し、下記のようにゾーンにインストールされるグループパッケージ(default は solaris-small-server)を solaris-desktop に書き換えます。 

*** zone_default.xml2012-09-20 05:10:44.000000000 +0900
--- /export/home/kazus/zone_default.xml2013-01-19 16:55:13.001233748 +0900
***************
*** 67,73 ****
                  </image>
              </destination>
              <software_data action="install">
! <name>pkg:/group/system/solaris-small-server</name>
              </software_data>
          </software>
      </ai_instance>
--- 67,73 ----
                  </image>
              </destination>
              <software_data action="install">
! <name>pkg:/group/system/solaris-desktop</name>
              </software_data>
          </software>
      </ai_instance>

書き換えた  zone_default.xml を下記のように zoneadm コマンドに渡すことで solaris-desktop グループパッケージをインストールした非大域ゾーンを作成することができます。
下記は、修正した zone_default.xml を使い、ゾーンをインストールした実行例です。


# zoneadm -z gdm-test install -m `pwd`/zone_default.xml

The following ZFS file system(s) have been created:
    micropool/zones/gdm-test02
Progress being logged to /var/log/zones/zoneadm.20130119T131318Z.gdm-test02.install
       Image: Preparing at /micropool/zones/gdm-test02/root.

 AI Manifest: /tmp/manifest.xml.48aGch
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: gdm-test02
Installation: Starting ...

              Creating IPS image
Startup linked: 1/1 done
              Installing packages from:
                  solaris
                      origin:  http://localhost:1008/solaris/32e0c0654802140a8e3b152a1a6bbabda1816a3a/
              Please review the licenses for the following packages post-install:
                runtime/java/jre-7                       (automatically accepted)
              Package licenses may be viewed using the command:
                pkg info --license <pkg_fmri>
DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                            839/839 115085/115085    1051/1051  3.6M/s

PHASE                                          ITEMS
Installing new actions                   168817/168817
Updating package state database                 Done
Updating image state                            Done
Creating fast lookup database                   Done
Installation: Succeeded

        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 656.696 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /micropool/zones/gdm-test02/root/var/log/zones/zoneadm.20130119T131318Z.gdm-test02.install

solaris-desktop は、solaris-small-server より多くのパッケージが導入されるため、ディスク容量やインストール時間を必要とします。
ゾーン作成後は、起動と初期設定などを済ませておきます。

2. svc:/system/dbus のメソッドファイルを修正

ここからの作業は、すべて非大域ゾーンでの作業となります。
続いて、svc:/system/dbus をサービスとして動作するようにメソッドファイルとなる /lib/svc/method/svc-dbus を修正します。
非大域ゾーンではサービスを disable にする処理をコメントに変更するのが修正内容となります。

*** /usr/tmp/svc-dbus.orig Sat Jan 19 17:48:22 2013
--- /lib/svc/method/svc-dbus Sat Jan 19 17:49:02 2013
***************
*** 20,31 ****
        /usr/bin/dbus-uuidgen --ensure
  fi

! if smf_is_nonglobalzone; then
! /usr/sbin/svcadm disable -t svc:/system/dbus
! echo "dbus-daemon cannot be run in non-global zones"
! sleep 5 &
! exit $SMF_EXIT_OK
! fi

  case "$1" in
  'start')
--- 20,31 ----
        /usr/bin/dbus-uuidgen --ensure
  fi

! #if smf_is_nonglobalzone; then
! # /usr/sbin/svcadm disable -t svc:/system/dbus
! # echo "dbus-daemon cannot be run in non-global zones"
! # sleep 5 &
! # exit $SMF_EXIT_OK
! #fi

  case "$1" in
  'start')



 3. /lib/svc/manifest/application/graphical-login/gdm.xml の修正

gdm のサービスとなる svc:/application/graphical-login/gdm:default を構成するマニフェストを修正します。
修正箇所としては、svc:/system/hal と svc:/system/consolekit への依存関係を定義している部分となります。この定義をコメントとすることで、依存関係なんてはじめから無かったんだという状態にします。
gdm のマニフェストは、/lib/svc/manifest/application/graphical-login/gdm.xml となり、このファイルのバックアップを取り直接書き換えます。

*** /usr/tmp/gdm.xml.orig       Sat Jan 19 17:40:35 2013
--- /lib/svc/manifest/application/graphical-login/gdm.xml       Sat Jan 19 17:41:06 2013
***************
*** 53,58 ****
--- 53,59 ----
                <service_fmri value='svc:/system/utmp'/>
        </dependency>

+ <!--
        <dependency
            name='hal'
            grouping='require_all'
***************
*** 60,65 ****
--- 61,67 ----
            type='service'>
                <service_fmri value='svc:/system/hal' />
        </dependency>
+ -->

          <dependency
              name='dbus'
***************
*** 69,74 ****
--- 71,77 ----
                  <service_fmri value='svc:/system/dbus' />
          </dependency>

+ <!--
        <dependency
            name='consolekit'
            grouping='require_all'
***************
*** 76,81 ****
--- 79,85 ----
            type='service'>
                <service_fmri value='svc:/system/consolekit'/>
        </dependency>
+ -->

        <exec_method
            type='method'

4. /etc/gdm/custome.conf の [xdmc] セクションに下記を追加

GDM への XDMCP 接続を許可する設定となります。
/etc/gdm/custom.conf の [xdmcp] セクションに、Enable=true を追加します

[xdmcp]
Enable=true

5. 非大域ゾーンのリブートと Xephyr からの接続

非大域ゾーンをリブートすることで、修正したマニフェストやメソッドが反映され GDM に接続可能になります。
Xephyr からの接続は、下記のようにリモートホストから実行することで可能です。

 # /usr/bin/Xephyr :1 -query 192.168.100.24 -screen 1280x800

6. その他

Mac OS X 10.6.8 (Snow Leopard) の Xephyr から接続した際、GDM からのログイン時は特におかしなところはないのですが、ログイン後のキーマップが崩壊している現象に遭遇しました。
利用したのは、XQuartz 2.7.4 です。
同様の現象が発生する場合は、現象が発生するアカウントにてssh などを使い非大域ゾーンにログインし、下記コマンドを実行してから Xephyr から再ログインしてください。

$ /usr/bin/gconftool-2 -s /apps/gnome_settings_daemon/plugins/keyboard/active --type boole false

Solaris 11.1 の Xephyr では、この設定は必要ありませんでした。
お楽しみください。

では、Oracle Database 11g R2 を Solaris Zones へインストールする作業に戻ります。

金曜日 11 16, 2012

Oracle Solaris 11.1 日本語マニュアルが公開!と小ネタ

Solaris 11.1 ファンの皆様!お待たせいたしまた。
Oracle Solaris 11.1 の日本語マニュアルが公開されました。
Solaris 11 11/11 から 11.1 といっても、新しい機能等もたくさん追加されていますので、ぜひ参考にして頂きたく。


また、少しだけうけた Solaris 11.1 の小ネタをご紹介します。

  • ipadm コマンドと dladm コマンドをオプションなしで実行するとヘルプが出力されなくなった!

    dladm コマンドと ipadm コマンド実行時に、デフォルトの動作モードが割り当てられました。
    dladm では、オプションなしで実行すると dladm show-link と同じ結果が。
    ipadm では、show-if と show-addr を組み合わせたわかりやすい出力結果を得ることができます。

  • /usr/bin/ps コマンドが /usr/ucb/ps スタイルのオプションが実装
    /usr/bin/ps コマンドに - (ハイフン) なしでオプションを渡すと、/usr/ucb/ps の動作をエミュレートした出力となります。
    特に将来のリリースにおいて、/usr/ucb/ps 含む UCB 互換パッケージの廃止がアナウンスされていますので、これを機会に /usr/ucb/ps を使っているスクリプトなどを洗い出し、/usr/bin/ps の USB 互換モードで対応可能か精査しておくと良いかと思います。


    お試しアレ。
  • 木曜日 11 01, 2012

    Oracle Solaris 11.1 日本語ページとダウンロードページ公開!

    Oracle Solaris 11.1 リリース時には、OTN Japan Blog に負けてしまいましたが、本日、Oracle Solaris 11.1 の日本語ページとダウンロードページが配備されましたので、お知らせいたします。
    ただ、日本語ページが公開されたわけではありません。
    この流れで、日本語版の Waht's New も公開です!
    まずは、こちらのドキュメントから新機能を拾いつつ、Oracle Solaris 11.1 Information Library Released: 2012-10-25 のマニュアルを。
    ちなみに、google せんせーに聞くときには、site:docs.oracle.com/cd/E26502_01/ を入れてから keyword を入れると捗ります。
    こちらの blog でも情報を小出しにしていきます!

    ちなみに、直近ではこのような記事もありますので、併せて読みあさってみてくださいね。

    ちなみにリンク先の内容は、時間をかけて日本語化して行きますのでお待ちください!

    日曜日 10 28, 2012

    Oracle Solaris 11.1 がリリースされました

    Oracle OpenWorld 2012 にてアナウンスされた Oracle Solaris 11.1 が、無事リリースされました。

    Oracle Solaris 11.1 では、エンタープライズアプリケーションにおける No.1 UNIX 環境はもちろん、クラウド基盤の構築、オラクルが提供する様々なソフトウェアに最適な環境というメッセージはそのままに、更なる機能強化がなされています。
    ダウンロード等については、下記 OTN Blog を参照ください。


    また、ドキュメントも機能毎に細分化されていますが、ついにパッケージリストが纏められたドキュメントも追加されています。こちらのドキュメントは、グループパッケージである group/system/solaris-large-server, group/system/solaris-small-server, group/system/solaris-desktop にどのようなパッケージが含まれるかを纏めたものとなりますのでご活用ください。


    また、ご利用前には必ず下記のリリースノートの一読をお願いいたします。重要な情報が満載です。
    現時点では、英語版のみの提供となります。
    日本語版につきましては、準備中となりますのでもうしばらくおまちください。。。

    では、みなさま、お楽しみください

    月曜日 9 10, 2012

    Oracle Solaris ナイトセミナー #6 開催します!

    8 月はお休みを頂いてしまいましたが。。。お待たせしました、Oracle Solaris ナイトセミナー第 6 回目の告知です!

    今回は、サービスの実行を超えた新しいサービス管理アーキテクチャ「Service Management Facility (SMF)」特集です。 SMF は、Solaris 10 から提供されている特徴的な機能である「予測的セルフヒーリング技術」の一機能となり、Solaris 上で動作している様々なソフトウェアサービスを管理する機能です。

    今回は、この SMF の概要や Solaris 11 で更新された機能などを紹介致します!

    そして、好評の Solaris 3 分クッキングでは、Solaris 11 におけるネットワーク設定に関する特集となります。 Solaris 11 では、ネットワーク設定についても大きく変更されていますが、基本のコマンドとなる ipadm, dladm, netadm コマンドを取り上げてみます。 お待ちしております。

    勉強会としてゆる~くやっていますので、Solaris 初心者の方や単なる情報収集でも、お気軽にご参加ください!
    参加登録はこちらからっ!

    みなさま、お待ちしています!


    来月は・・・ふふふ・・・

    --
    過去のセミナー資料は、slideshare.net/SolarisJPNight にて公開中です。
    日中に行われている Solaris ディープダイブの資料はこちら slideshare.net/SolarisJP

    水曜日 8 22, 2012

    Sun ZFS Appliance Monitor登場

    システム運用管理にも、スマートフォンやタブレットの時代が到来!?

    去る2012年8月1日に、Sun ZFS Storage Appliance(以下、ZFSSA)の管理を目的としたiOS向けのアプリ、『Sun ZFS Appliance Monitor』(以下、ZMA)がリリースされました。
    iTunesに紹介がありますので、こちら参考にしてみてください。
    http://itunes.apple.com/jp/app/sun-zfs-appliance-monitor/id546494906


    ZMAは、どこでも手軽にZFSSAの状況を確認出来ることを目指して開発されました。
    アプリ上に複数台のZFSSAを登録することが可能で、専用のBUIで表示可能な画面を、簡単にiPhone等で確認出来ます。
    但しこのアプリは主に確認での用途を想定していて、このアプリを通してZFSSAの設定を変更することは出来ません。
    揺れる通勤中でタッチパネルに意図せず触れてしまい、本番環境の構成が変わってしまった!なんてことは起こらないので、安心して利用出来ます。

    尚、このアプリは無料です。
    ここではZFSSAシミューレーターを使って、iPhoneへインストールしてアプリの画面を見ていきたいと思います。


    【事前準備】

    ①アプリの入手

    iPhone等でアプリを入手するには、App Storeで『zfs』の3文字で検索すれば一番上に出てくるはずです。
    アプリのインストール方法はiOS共通でタッチするだけです。


    ②ZFSSAシミュレーターを準備

    シミュレーターの準備に関しては、過去に実施しましたオラクル・ダイレクトセミナーのセミナー資料が、現在はOTNセミナー オンデマンド コンテンツとして掲載されております。
    一部内容に古さが見られますが、セットアップの手順については基本同じですので参考にしてください。
    http://www.oracle.com/technetwork/jp/ondemand/hardware/storage/ord-s7000-1-20101109-302076-ja.pdf


    ③シミュレーターセットアップ

    ZMAでは確認がメインになりますので、ZFSSAのBUIを通して以下の項目をあらかじめ設定しておきます。
    ・Poolを作成
    ・Shareを作成
    ・いくつかの項目を選択してAnalyticsのワークシートをセーブ


    【画面イメージ】

    それでは、いくつかの画面を見ていきたいと思います。

    アプリを初めて起動すると、以下の様な画面が表示されて、管理するZFSSAの登録を促されます。




    左上の「Edit」をタッチし、新しく管理対象となるZFSSAの情報を入力します。
    「Hostname」はアプリ上の管理用としての名前を設定します。
    アプリ上の管理用途ですので、ZFSSA本体に設定をしたホスト名とは異なった名前にすることが出来ます。
    その他、接続情報としてIPアドレスやユーザー名、パスワード等を入力し、「Save」をタッチします。




    設定が完了し、ZFSSAへの接続が確立されると、システム全体のサマリーが表示されます。




    無事に登録が完了したら、いよいよ各項目を見ていきます。
    最初に「Status」の項目が表示されます。
    これはBUIでログインした時と同じですね。




    BUIの場合、「Status」ではグラフと共に画面が表示されますが、ZMAでは画面の大きさの都合もあり、グラフは「Dashboard Graphs」をタッチして画面を遷移させます。

    グラフは次の様な画面です。
    さすがに限られたスペースでは1画面に表示出来る項目は少なくなりますが、画面を下にスライドして見ることが出来ます。
    画面スライドは、さすがのiPhone(iOS)と言った感じで、非常にスムーズでストレスは感じられません。




    よく見ると、画面下部に各項目のタブがあります。
    次に「Hardware」を見てみましょう。

    「Hardware」タブをタッチすると、次の様な画面が表示されます。




    Virtual Boxを使ったシミュレーターなので、いくつかの項目が本物のZFSSAとは異なるのですが、モデルやディスクの情報などが見られます。

    ZMAが発表されてすぐに、一時的に社内検証機の7120を登録したことがあり、その際の画面コピーがこちらです。
    こちらでは本体のイメージ画像が表示され、またCPUやメモリ、ディスクの情報などが正しく表示されます。




    画面を進めると各コンポーネント毎の状態を見ることが出来ますので、リモートから簡単に問題が発生している部位を見ることが出来ます。




    さて、ZFSSAを管理する際に非常に強力なツールが「Analytics」です。
    ZMAでも、すでに登録がされている「Analytics」の画面を呼び出して表示することが可能です。
    こちらがその画面です。




    更新の頻度がBUIとは異なりますが、ここでも見え方は同じで、複数の項目を登録している場合には、画面スクロールで見るこ�����が出来ます。


    以上、アプリでの画面イメージは伝わりましたでしょうか。
    すでにご利用のZFSSAがあればそちらで、まずは試してみたいと言う方はシミュレーターで。
    一度お試しください。

    火曜日 7 17, 2012

    Oracle x86 サーバー の名称が変わりました!!



    以前、本ブログのエントリー「満を持して登場!! Intel Xeon E5-2600搭載 Sun x86 M3 サーバー」でもご紹介しました Oracle x86 M3 サーバー群(2012年4月10日アナウンス)ならびに 4ソケット/8ソケット Oracle x86 M2 サーバーの名称が、 Oracle Engineered System に適合する形で 2012年7月10日に名称変更されました。

    各システムの名称は以下の様になります。

    Oracle’s x86 Server TypeFormer Product NameNew Product Name
    2 socket 1U EnterpriseSun Fire X4170 M3Sun Server X3-2
    2 socket 2U EnterpriseSun Fire X4270 M3Sun Server X3-2L
    2 socket 2U Carrier-GradeSun Netra X4270 M3Netra Server X3-2
    2 socket Blade EnterpriseSun Blade X6270 M3Sun Blade X3-2B
    2 socket Blade Carrier-GradeSun Netra X6270 M3Netra Blade X3-2B
    4 socket 3U EnterpriseSun Fire X4470 M2Sun Server X2-4
    8 socket 5U EnterpriseSun Fire X4800 M2Sun Server X2-8



    USページはこちら



    今後とも Oracle x86 サーバー をよろしくお願い致します。



    月曜日 7 02, 2012

    Oracle Solaris ナイトセミナー #5 開催します!

    毎回多くの方にご参加頂いている、Oracle Solaris ナイトセミナー第 5 回目の告知です!

    ちなみに、当 blog での 3 ,4 回目の告知は都合によりお休みしていました!
    #後に、エントリの残骸を発見され緊急ミーティングが開催されたことは秘密です。
    ゴホンゴホン。

    今回は、題して「夏の Solaris Zones 祭り! その 1 」!!!

    最近は、"移行をするなら、まずは Solaris Zones から!" と、Solaris Zones をオススメしているわけですが、不安な部分もあると思います。
       ・移行に使える Solaris Zones って何? どんなもの?
       ・移行できる環境ってどんなもの?移行先の環境ってどんなもの?
       ・どうやって移行すればいいの?
       ・移行できないものってあるの?
       ・移行したあとの運用では何を気をつければいいの?

    など、Solaris Zones で安心して生活するためのポイントを色々とご紹介致します。

    題材としては、Solaris 8, Solaris 9 を Zones として最新のハードウェア環境にて動作させる Solaris Legacy Containers、実機で動作する Solaris 10 環境を最新の Solaris 10 や Solaris 11 へ移行する方法や、Zones から Zones の移行支援ツール zonesp2vchk、移行後の Zones の運用ポイントなどをご紹介!

    そして、好評の Solaris 3 分クッキングでは、Solaris 11 ならではの機能 " AI インストール(自動インストール機能)" を使った Solaris Zones の作成方法を解説!
    Zones って、構成定義して自動インストールじゃないの?と思った、そこの Solaris 11 使いの方!
    自分好みの Solaris Zones が作れると聞くとワクワクしませんか?!
    お待ちしております。

    勉強会としてゆる~くやっていますので、Solaris 初心者の方や単なる情報収集でも、お気軽にご参加ください!


    お待ちしています!

    --
    過去のセミナー資料は、slideshare.net/SolarisJPNight にて公開中です。
    日中に行われている Solaris ディープダイブの資料はこちら slideshare.net/SolarisJP
    About

    Search

    Archives
    « 7月 2015
       
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
           
    今日