SCCMによるIE11のデプロイ
さて、SCCMによるIE11のデプロイですが、いきなり問題があります。
必要な更新をインストール後、IE11のインストール後、IE11の更新のインストール後、それぞれの少なくとも3回、PCを再起動する必要があるのです。単純なパッケージを使用したバックグラウンドでのインストールではなく、再起動が行えるタイミングでユーザーにインストールを開始してもらう操作が必要になります。
このため、タスクシーケンスを利用します。
作成方法は下記のとおりです。
- 新しくタスクシーケンスを作成します。
- まず、IE11が既にインストールされているかどうか確認するステップです。
こちらのようなWMIクエリを条件に指定し、グループを作成します。この条件がFALSEの場合、IE11のインストールへ進みます。SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = "KB2841134"
- 32ビットか64ビットを判定し、グループを分けます。
- 前提となる更新をインストールします。
こちらのようなステップを作成していきます。
このとき、オプションで条件を指定しておくと、既にインストール済みの場合はスキップするため時間を短縮できます。
SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = "KB2533623"
- これは私の試行錯誤の結果ですが、/norestart で全て一気にインストールすると、正常にインストールできない場合があるらしく、再起動の回数が増えますが、KB2729094についてはインストール後一旦再起動しておいたほうがよさそうです。
このため、KB2729094については、別にグループを作成し、インストールした場合は一旦再起動するようにしました。
- いよいよIE11のインストールですが、このまえに下記のようなスクリプトを実行します。
On Error Resume Next
これにより、一度WMIクエリを実行しておき、結果をキャッシュさせ、IE11のインストーラ内でのWMIクエリの実行時間を短縮するのが狙いです。
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 - IE11をインストールします。
- 引き続き、IE11に必要な更新をインストールします。
ここで1点注意があります。
IE11でエンタープライズモードを使用するには KB2929437 が必要ですが、IE11がインストールされる前にこのアップデートを手動でインストールした場合や、IE11を一旦アンインストールしてしまった場合、IE11をインストール後再度インストールする必要があります。ところがこの状態でも、WMIクエリではインストール済みとして結果が返ってきてしまいます。
このため、当初はWMIクエリによりチェックして、インストールされていない場合だけ実行するようにしていたのですが、この条件をはずしIE11をインストール後無条件に実行するようにしています。
これで、IE11をインストールするひととおりのタスクシーケンスが出来ました。あとは、これを「利用可能」としてデプロイし、ユーザーに実行してもらうだけです。
もちろん、「必須」でデプロイしてバックグラウンドで実行しても構いません。
IE11のインストールに失敗する
IE11のインストールには、必要となる前提条件やインストーラ自体にも問題があり、ネット上でも多数の問合せが見つかり、IT管理者は大変苦労されているようです。
私もSCCMを使用したIE11のデプロイに苦労しましたので、覚え書きしておきます。ただしこの方法でも100%成功するかどうかは微妙です。
- インストールに必要な更新
まず前提として必要となるアップデートをあらかじめインストールする必要があります。必要な更新は、こちらのKBにまとめられています。
Internet Explorer 11 用必須更新プログラム
https://support.microsoft.com/ja-jp/kb/2847882 - 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 - IE11に必要な更新
IE11には、互換性を維持するために新たにエンタープライズモードという機能が追加されています。ただし、この機能を利用するには、IE11にさらに KB2929437 の更新をインストールする必要があります。
Windows 7 および Windows Server 2008 R2 の Internet 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_$$.logexpect -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パスワード
#!/bin/shPR='(#|\\$) $' # 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\"
"
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の仮想マシンを構築
- まずは普通に仮想マシンのセットアップ。ただし、テキストベースのセットアップ画面は日本語が確実に化けるので、Languageはすべて英語を選ぶ。
- 起動したらネットワークを確認。今回は、そのままだとNICが立ち上がっていなかったので、下記のファイルを変更
/etc/sysconfig/networking/devices/ifcfg-eth0
とりあえずdhcpにしたいので、下記のように修正しリブートONBOOT=yes
BOOTPROTO=dhcp - そのままではXwindowは起動してくれないので、下記の手順が必要。この手順で、VNCでログイン画面を表示しログインすることが出来ます
- 前提: xinetd, vncserver が入っていること
- 新たに、/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
} - /etc/services に下記の行を追加
vncserver 5901/tcp
- /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 - サービスの起動設定
chkconfig vncserver off
chkconfig xinetd on - /etc/inittab を修正して起動時のランレベルを5に変更しサーバを再起動
id:5:initdefault:
- 前提: xinetd, vncserver が入っていること
- この後、Xrdpをインストールすることで、リモートデスクトップで接続できるようになります ー> Xrdpをインストール
下記の方法で一応はVNCで接続できるようになりますが、単にXwindowの接続先として起動するだけなので、gnome上からログオフするとvncセッションだけが残りなにも出来なくなるなど、あまり使えるものではありません。
- まずVNCを立ち上げたいので、下記のファイルを修正
/etc/sysconfig/vncservers
コメントを利用して下記の行を作成しVNCSERVERS="1:root"
パスワードを設定
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp"vncpasswd
vncserverを起動
Password: xxxxxxxx
Verify: xxxxxxxx/etc/rc.d/init.d/vncserver start
- ここでvncで接続できることを確認
- 更に、このままではgnomeは起動しないので、下記のコンフィグを修正
./vnc/xstartup
twmはコメントアウトし、gnomeを起動する行を追加# twm &
exec gnome-session &