今回は、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 となります。
# 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) |
ここからサポートされる手順ではなく利用者の自己責任となります。
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 へインストールする作業に戻ります。