月曜日 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 へインストールする作業に戻ります。

About

Search

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