SCCMによるIE11のデプロイ

さて、SCCMによるIE11のデプロイですが、いきなり問題があります。
必要な更新をインストール後、IE11のインストール後、IE11の更新のインストール後、それぞれの少なくとも3回、PCを再起動する必要があるのです。単純なパッケージを使用したバックグラウンドでのインストールではなく、再起動が行えるタイミングでユーザーにインストールを開始してもらう操作が必要になります。

このため、タスクシーケンスを利用します。
作成方法は下記のとおりです。

  1. 新しくタスクシーケンスを作成します。

  2. まず、IE11が既にインストールされているかどうか確認するステップです。
    こちらのようなWMIクエリを条件に指定し、グループを作成します。この条件がFALSEの場合、IE11のインストールへ進みます。
    SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = "KB2841134"

  3. 32ビットか64ビットを判定し、グループを分けます。

  4. 前提となる更新をインストールします。
    こちらのようなステップを作成していきます。

    このとき、オプションで条件を指定しておくと、既にインストール済みの場合はスキップするため時間を短縮できます。

    SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = "KB2533623"

  5. これは私の試行錯誤の結果ですが、/norestart で全て一気にインストールすると、正常にインストールできない場合があるらしく、再起動の回数が増えますが、KB2729094についてはインストール後一旦再起動しておいたほうがよさそうです。

    このため、KB2729094については、別にグループを作成し、インストールした場合は一旦再起動するようにしました。

    1. まず上記と同様の方法でKB2729094がインストールされているかどうか確認し、結果を変数に設定します。

    2. KB2729094のグループを作成し、変数によって実行するかどうか判定します。

  6. いよいよIE11のインストールですが、このまえに下記のようなスクリプトを実行します。
    On Error Resume Next 
    strComputer = "."
    SET objWMIService = GETOBJECT("winmgmts:\\" & strComputer & "\root\cimv2")
    SET colItems = objWMIService.ExecQuery("Select HotFixID from Win32_QuickFixEngineering where HotFixID='KB2729094'")

    FOR EACH objItem in colItems
    Wscript.Echo objItem.HotFixID
    NEXT

    WSCRIPT.ECHO "DONE!"
    WSCRIPT.QUIT
    これにより、一度WMIクエリを実行しておき、結果をキャッシュさせ、IE11のインストーラ内でのWMIクエリの実行時間を短縮するのが狙いです。

  7. IE11をインストールします。

  8. 引き続き、IE11に必要な更新をインストールします。

    ここで1点注意があります。

    IE11でエンタープライズモードを使用するには KB2929437 が必要ですが、IE11がインストールされる前にこのアップデートを手動でインストールした場合や、IE11を一旦アンインストールしてしまった場合、IE11をインストール後再度インストールする必要があります。ところがこの状態でも、WMIクエリではインストール済みとして結果が返ってきてしまいます。

    このため、当初はWMIクエリによりチェックして、インストールされていない場合だけ実行するようにしていたのですが、この条件をはずしIE11をインストール後無条件に実行するようにしています。

これで、IE11をインストールするひととおりのタスクシーケンスが出来ました。あとは、これを「利用可能」としてデプロイし、ユーザーに実行してもらうだけです。
もちろん、「必須」でデプロイしてバックグラウンドで実行しても構いません。

IE11のインストールに失敗する

IE11のインストールには、必要となる前提条件やインストーラ自体にも問題があり、ネット上でも多数の問合せが見つかり、IT管理者は大変苦労されているようです。

私もSCCMを使用したIE11のデプロイに苦労しましたので、覚え書きしておきます。ただしこの方法でも100%成功するかどうかは微妙です。

  1. インストールに必要な更新

    まず前提として必要となるアップデートをあらかじめインストールする必要があります。必要な更新は、こちらのKBにまとめられています。

    Internet Explorer 11 用必須更新プログラム
    https://support.microsoft.com/ja-jp/kb/2847882

  2. IE11のインストール

    IE11のインストール時、インストーラは必要な更新がインストールされているか確認します。ところが困ったことに、この確認で使用するWMIクエリがタイムアウトし、結果的にインストールが失敗することがあります。

    IE11インストールログ c:\windows\IE11_main.log を確認すると、決まってこちらのようなエラーが出ています。

    WMI query for Hotfixes timed out. Query string: 'Select HotFixID from Win32_QuickFixEngineering WHERE HotFixID="KB2729094"'  Error: 0x00040004 (262148).
    KB2729094 がインストールされているかどうか確認するWMIクエリがタイムアウトしています。

    こちらのブログやフォーラム等の情報によると、IE11インストーラのWMIクエリのタイムアウトは10秒しかなく、KB2729094 を確認するWMIクエリに20秒以上掛かる場合があることから、タイムアウトしてしまうようです。

    (参考) IE11 インストール失敗への対処方法 (2)
    http://blogs.technet.com/b/jpieblog/archive/2015/12/14/3658212.aspx

  3. IE11に必要な更新

    IE11には、互換性を維持するために新たにエンタープライズモードという機能が追加されています。ただし、この機能を利用するには、IE11にさらに KB2929437 の更新をインストールする必要があります。

    Windows 7 および Windows Server 2008 R2Internet Explorer 11 のセキュリティ更新プログラムについて (2014 年 4 月 8 日)
    https://support.microsoft.com/ja-jp/kb/2929437

以上を踏まえての、SCCMによるIE11のデプロイについては、別の記事にまとめます。
http://d.hatena.ne.jp/hmunakata/20160106/1452043955

EMC VNXの情報をCacti用に取得するスクリプト

#!/bin/bash
#
# Created: 2014/12/03 Hiroshi Munakata
# Updated: 2014/12/08
#
# vnx_sysstat.sh [Target IP] [Server Name]
#

TMP=/tmp/vnx_expect_$$.log
TMP2=/tmp/vnx_expect_2_$$.log
TMP3=/tmp/vnx_expect_3_$$.log

expect -c "
set timeout 5
spawn ssh user@$1
expect \"password:\"
send \"pass\r\"
expect \"~\]\\\$\"
send \"server_sysstat $2\r\"
expect \"~\]\\\$\"
send \"server_df server_2 | grep servername | awk \'{print \\\"servername_used:\\\" \\\$3 \\\" servername_available:\\\" \\\$4 \\\" servername_percentage:\\\" \\\$5}\'\r\"
expect \"~\]\\\$\"
send \"exit\r\"
" > $TMP

#cat $TMP | awk '/threads/,/cpu/' | sed "s/=/:/" | sed "s/\s//g" | sed "s/_%//g" | sed "s/I\/J\/Z//g" | sed "s/(kB)//g" > $TMP2
cat $TMP | grep -A 3 'threads runnable' | sed "s/\s//g" > $TMP2
cat $TMP | grep -A 0 'cpu idle_%' | sed "s/\s//g" | awk -F'=' '{print "cpu=" 100-$2}' >> $TMP2
cat $TMP2 | sed "s/=/:/g" | sed "s/_%//g" | sed "s/I\/J\/Z//g" | sed "s/(kB)//g" > $TMP3
cat $TMP | grep '^servername' | sed "s/%//g" >> $TMP3
cat $TMP3 | sed ':loop N; $!b loop; ;s/\n/ /g'

rm $TMP
rm $TMP2
rm $TMP3

出力
[sysuser ~]$ /bin/sh /usr/local/share/cacti/scripts/vnx_sysstat.sh 192.168.0.1 server_2
threadsrunnable:14 threadsblocked:5162 threads:1 memoryfree:3237370 cpu:11 servername_used:7829472280 servername_available:1580392792 servername_percentage:83%

expect で自動ログインしパスワードを変更するスクリプト

expect で自動ログインしパスワードを変更するスクリプトのサンプル

  • 引数1: 接続先
  • 引数2: 現在のrootパスワード
  • 引数3: 新しいrootパスワード
    1. expect -c でexpect開始
    2. while で、タイムアウトを待ちながら、ssh初回接続時の yes/no 確認プロンプトを確認。パスワードを聞かれれば、パスワードを送信
    3. プロンプトが出たら、su - で特権に昇格
    4. root パスワード変更コマンド発行
    5. 新しいrootパスワードを送信後、interact で手入力を待つ
    6. successfully という文字列が出たら、成功と判断し exit

#!/bin/sh

PR='(#|\\$) $' # regular prompt

expect -c "
set timeout 10
spawn ssh sysuser@$1
while (1) {
expect timeout { break } \"(yes/no)?\" { sleep 1;send \"yes\r\" } \"word: \" { sleep 1;send \"sysuser\r\";break }
}
expect -re \"$PR\"; sleep 1; send \"su -\r\"
expect -re \":\"; sleep 1; send \"$2\r\"
expect -re \"#\"; sleep 1; send \"passwd root\r\"
expect -re \"word:\"; sleep 1; send \"$3\r\"
expect -re \"word:\"; interact -o -nobuffer successfully return
expect -re \"#\"; sleep 1; send \"exit\r\"
expect -re \":\"; sleep 1; send \"exit\r\"
"

Sony Tablet P 最新ファームでテザリング

Sony Tablet P 最新ファーム Android 4.0.3 でテザリングができたので覚え書き。試行錯誤の末なので、詳しい条件等は不明。

端末: Sony Tablet P Android 4.0.3 + rooted
SIM: DTI ServerMan 100

使用アプリ: Wifi Tether

  • 3.4-experimental1-07202013

設定:

  • Change Device-Profile: Generic ICS/JB (wlan0)
  • Change Setup-Method: Netd-Ndc (master)
  • Routing fix: uncheck

XenServerで仮想マシンをネットワーク上の他のサーバにエクスポートするスクリプト

こちらを参考にしました - もとはす備考録 - [Xen]Snapshotの自動バックアップスクリプト

注意点: xe vm-export コマンドはエクスポート先に同名のファイルが存在するとエラーになるので、あらかじめ消しておきます

#!/bin/sh

#Mount network server
mount -t cifs //server/directory /mnt -o username=xxxxxxxx,password=xxxxxxxx

#Snapshot
Var1=`xe vm-snapshot vm=VMNAME new-name-label=SNAPSHOTNAME`

#Export snapshot
xe template-param-set is-a-template=false uuid=$Var1
rm -f /mnt/SNAPSHOTNAME.xva
xe vm-export uuid=$Var1 filename=/mnt/SNAPSHOTNAME.xva

#Delete exported snapshot
xe vm-uninstall uuid=$Var1 force=true

#Unmount network server
umount /mnt

XenServerにRedHatの仮想マシンを構築

  1. まずは普通に仮想マシンのセットアップ。ただし、テキストベースのセットアップ画面は日本語が確実に化けるので、Languageはすべて英語を選ぶ。
  2. 起動したらネットワークを確認。今回は、そのままだとNICが立ち上がっていなかったので、下記のファイルを変更
    /etc/sysconfig/networking/devices/ifcfg-eth0
    とりあえずdhcpにしたいので、下記のように修正しリブート
    ONBOOT=yes
    BOOTPROTO=dhcp
  3. そのままではXwindowは起動してくれないので、下記の手順が必要。この手順で、VNCでログイン画面を表示しログインすることが出来ます
    1. 前提: xinetd, vncserver が入っていること
    2. 新たに、/etc/xinetd.d/vncserver 作成します。内容は下記の通り
      service vncserver 
      {
      disable = no
      protocol = tcp
      socket_type = stream
      wait = no
      user = nobody
      server = /usr/bin/Xvnc
      server_args = -inetd -query localhost -once -geometry 1024x768 -depth 16 -securitytypes=none
      }
    3. /etc/services に下記の行を追加
      vncserver 5901/tcp
    4. /etc/gdm/custom.conf 下記の設定を追加
      [daemon] 
      RemoteGreeter=/usr/libexec/gdmgreeter
      KillInitClients=false

      [security]
      DisallowTCP=false
      AllowRemoteRoot=true

      [xdmcp]
      Enable=true

      [greeter]
      TitleBar=true
      IncludeAll=false
      ConfigAvailable=true

    5. サービスの起動設定
      chkconfig vncserver off 
      chkconfig xinetd on
    6. /etc/inittab を修正して起動時のランレベルを5に変更しサーバを再起動
      id:5:initdefault:
    [参考] RHEL5 で VNC 接続を設定する手順

  4. この後、Xrdpをインストールすることで、リモートデスクトップで接続できるようになります ー> Xrdpをインストール

下記の方法で一応はVNCで接続できるようになりますが、単にXwindowの接続先として起動するだけなので、gnome上からログオフするとvncセッションだけが残りなにも出来なくなるなど、あまり使えるものではありません。

  1. まずVNCを立ち上げたいので、下記のファイルを修正
    /etc/sysconfig/vncservers
    コメントを利用して下記の行を作成し
    VNCSERVERS="1:root"
    VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp"
    パスワードを設定
    vncpasswd
    Password: xxxxxxxx
    Verify: xxxxxxxx
    vncserverを起動
    /etc/rc.d/init.d/vncserver start
  2. ここでvncで接続できることを確認
  3. 更に、このままではgnomeは起動しないので、下記のコンフィグを修正
    ./vnc/xstartup
    twmコメントアウトし、gnomeを起動する行を追加
    # twm &
    exec gnome-session &
[参考] システム奮闘記:その88 xenserverの導入とインストール