2014/03/06

OS X 10.9.2: overwrite-Update OSX 10.9.2 Combo

このようなエラー

xpcd[192]: Info.plist does not contain an XPCService dictionary: /System/Library/Frameworks/Security.framework/XPCServices/SecurityAgent.xpc

が頻出することと、バッテリー残量が少なくなった時のお知らせが現れなかったので
OSXUpdCombo10.9.2.dmg を上書きインストールすることにしました。
そのための前準備から。

#---------------------------------------------------------------------
1) Login 鍵の復元
#---------------------------------------------------------------------
# 管理者権限でログイン
OS X 10.9.2: pam.d
http://midorex.blogspot.com/2014/03/os-x-1092-pamd.html
を実行していなかったことにする。
(ただし、移動させている /etc/pam.d/sshd などはそのままにしておく。System Keychains から削除した Kerberos の公開鍵などは復元できない為ほっておく。)

$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.Kerberos.digest-service.plist
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.Kerberos.kpasswdd.plist
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.Kerberos.kadmind.plist
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.Kerberos.kdc.plist
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.Kerberos.kcm.plist

Kerberos daemon が読み込まれた後に

$ launchctl load -w /System/Library/LaunchAgents/com.apple.identityservicesd.plist

を読み込んで Keychain Access.app を開くと

$ open /Applications/Utilities/Keychain\ Access.app/

再び Keychains "Login" の中に複数の鍵(Message 用とか)が system によって自動生成される。

# 一旦、ログアウト Shift+Command+Q

# 一般ユーザでログイン

先ほどと同様に identityservicesd.plist を読み込んでキーチェイン.app を開くと

% launchctl load -w /System/Library/LaunchAgents/com.apple.identityservicesd.plist
% open /Applications/Utilities/Keychain\ Access.app/

再び鍵が Keychains "Login" の中に生成されている。

# ログアウト Shift+Command+Q

#---------------------------------------------------------------------
2) override.plist の初期化
#---------------------------------------------------------------------
# 管理者権限を持つユーザでログイン。

# root:wheel  所有ファイル をバックアップ。
$ sudo cp /var/db/launchd.db/com.apple.launchd/overrides.plist ~/latest-overrides.plist
# root:wheel  所有ファイルの削除。
$ sudo rm /var/db/launchd.db/com.apple.launchd/overrides.plist
# 今ログインしているユーザの id を確認
$ id
# 今ログインしているユーザの User id 番号を持つ plist
$ rm /var/db/launchd.db/com.apple.launchd.peruser.50X/overrides.plist
# 他ユーザの plist も削除。
$ suod rm /var/db/launchd.db/com.apple.launchd.peruser.50X/overrides.plist


#---------------------------------------------------------------------
3) mv daemon plist, mv agent plist
#---------------------------------------------------------------------
# 管理者権限を持つユーザでログインしたまま。

# http://midorex.blogspot.com/2014/03/os-x-1092-unload-agents.html
# で unload した agents を集めて移動しておく。
OS X 10.9.2: mv-unloaded-agents-plist
http://midorex.blogspot.com/2014/03/os-x-1092-mv-unloaded-agents-plist.html

# http://midorex.blogspot.com/2014/03/os-x-1092-unload-daemon.html
# で unload した daemon を集めて移動しておく。
OS X 10.9.2: mv-unloaded-daemon-plist
http://midorex.blogspot.com/2014/03/os-x-1092-mv-unloaded-daemon-plist.html

# RESTART

#---------------------------------------------------------------------
4) SoftwareUpdate
#---------------------------------------------------------------------
OSXUpdCombo10.9.2.dmg を開いて上書きインストールを開始。リスタートしたら
# 管理者権限ユーザでログイン

OS X 10.9.2 であることや Version を確認。

uname -a


システム環境設定の再設定。

$ open /Applications/System\ Preferences.app/


# Security&Privacy
FileVault 以外、鍵をかけ直す。

# 2014-03-04 追記
# http://midorex.blogspot.com/2014/03/os-x-1092-mavericks-install.html の時は
# Allow apps downloaded from: Mac App Store and identified developers
# にしていたが、今回は
# Allow apps downloaded from: Mac App Store
# にした。

# Displays
mirroring にチェックをいれて、はずす。

# Energy Saver
check を入れて、外す。

# NetWork
新しいインターフェイスが自動的に生成されていたら、古い方を削除。

# Sharing
チェックがはいっていない状態を、維持しているものに対しても、
チェックを入れて、再びチェックを外す。
どのサービスにもチェックが入っていない状態が維持されているものの、
例えば ファイル共有にチェックを入れて、再びチェックを外すと

$ sudo more /var/db/launchd.db/com.apple.launchd/overrides.plist

        <key>com.apple.AppleFileServer</key>
        <dict>
                <key>Disabled</key>
                <true/>
        </dict>

キャッシュされる。
(もしも、true/ がfalse/ になっていたら true/ に書き換えておく)

ただし、Remote Management は、サービス丸ごと移動させてしまった
http://midorex.blogspot.com/2014/03/os-x-1092-04-coreservice.html
から決して Remote Management の項目にふれないように気をつけたつもり。

# App Store
すべてのチェックをいれて、再び外す。

# Date&Time
ntpd 同期のチェックを外すと

$ sudo more /var/db/launchd.db/com.apple.launchd/overrides.plist

        <key>org.ntp.ntpd</key>
        <dict>
                <key>Disabled</key>
                <true/>
        </dict>

が書き込まれる。

# Users&Groups
guest ユーザが許可されていないことを確認。

システム環境設定を終了して

# SHUT DOWN

#---------------------------------------------------------------------
5) kext
#---------------------------------------------------------------------
# Safe Boot (Shift Key)
# 管理者権限ユーザでログイン

#!/bin/bash
# kext-back2.sh
# OS X 10.9.2
home=$HOME
d=$home/backup-extentions2
mkdir $d

# face time camera
sudo mv /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBMergeNub.kext $d/
sudo touch /System/Library/Extensions

# bluetooth
sudo srm -rf /System/Library/Extensions/IOBluetoothFamily.kext
sudo touch /System/Library/Extensions
sudo srm -rf /System/Library/Extensions/IOBluetoothHIDDriver.kext
sudo touch /System/Library/Extensions

# bluetooth keyboard
sudo srm -rf /System/Library/Extensions/AppleBluetoothMultitouch.kext
sudo touch /System/Library/Extensions
sudo srm -rf /System/Library/Extensions/AppleHIDKeyboard.kext/Contents/PlugIns/AppleBluetoothHIDKeyboard.kext
sudo touch /System/Library/Extensions
sudo srm -rf /System/Library/Extensions/AppleHIDMouse.kext/Contents/PlugIns/AppleBluetoothHIDMouse.kext
sudo touch /System/Library/Extensions
sudo srm -rf /System/Library/Extensions/AppleHIDKeyboard.kext/Contents/Resources/BS_UI_Plugin_IOAppleBluetoothHIDDriver-Info.plist
sudo touch /System/Library/Extensions

# irc
sudo srm -rf /System/Library/Extensions/AppleIRController.kext
sudo touch /System/Library/Extensions

# iSight
sudo srm -rf /System/Library/Extensions/Apple_iSight.kext
sudo touch /System/Library/Extensions
sudo srm -rf /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext
sudo touch /System/Library/Extensions

# Audio
sudo mv /System/Library/Extensions/AppleUSBAudio.kext $d/
sudo touch /System/Library/Extensions
sudo mv /System/Library/Extensions/IOAudioFamily.kext $d/
sudo touch /System/Library/Extensions

$ sudo ./kext-back2.sh

を実行。

# REBOOT

再起動したらすぐに syslog -w 300 中に、

... com.apple.kextd[12] <Error>: /System/Library/Extensions/AppleHDA.kext - no dependency found for com.apple.iokit.IOAudioFamily.

が出現することを確認してから、再び

# SAFE BOOT

$ sudo mv /System/Library/Extensions/AppleHDA.kext ~/backup-extentions2
$ sudo touch /System/Library/Extensions
$ sudo mv /System/Library/Extensions/webdav_fs.kext ~/backup-extentions2
$ sudo touch /System/Library/Extensions
$ sudo mv /System/Library/Extensions/smbfs.kext ~/backup-extentions2
$ sudo touch /System/Library/Extensions/

# http://midorex.blogspot.com/2014/03/os-x-1092-02-kext-remove.html

# REBOOT

#---------------------------------------------------------------------
6) chmod & AirDrop
#---------------------------------------------------------------------
# 管理者権限ユーザでログイン
http://midorex.blogspot.com/2014/03/os-x-1092-05-chmod.html
を念押しで実行。(/usr/sbin/httpd などは上書きインストールすることで復活する為。)

http://midorex.blogspot.com/2014/03/os-x-1092-disable-airdrop.html
を実行。今度は間違えないように

$ man sharing
$ ls -l /usr/sbin/sharing

であることを確認して

$ sudo chmod 0 /usr/sbin/sharing


#---------------------------------------------------------------------
7) Keys in "Login" Keychains
#---------------------------------------------------------------------
上書きインストールしたので、Kerberos Daemon の存在確認。

$ sudo launchctl list | grep Kerb
- 0 com.apple.Kerberos.kpasswdd
- 0 com.apple.Kerberos.kdc
- 0 com.apple.Kerberos.kcm
- 0 com.apple.Kerberos.kadmind
- 0 com.apple.Kerberos.digest-service
$ 

$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.Kerberos.kpasswdd.plist
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.Kerberos.kdc.plist
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.Kerberos.kcm.plist
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.Kerberos.kadmind.plist
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.Kerberos.digest-service.plist

を行ってから

$ cd /etc/pam.d
$ grep -r kr .

# Kerberos を利用しているファイルを編集。

$ pwd
$ sudo vi /etc/pam.d/authorization
# auth       optional       pam_krb5.so use_first_pass use_kcminit
$ sudo vi /etc/pam.dlogin
# auth       optional       pam_krb5.so use_kcminit
$ sudo vi /etc/pam.d/screensaver:
# auth       optional       pam_krb5.so use_first_pass use_kcminit


# 2014-03-04
# 補足
# Keychain Access.app の設定を開き、"First Aid" 欄にある Check をすべて外す。
# "Certificates" にある(OCSP) (CRL) をOFF に。

# Keychain Access.app を開いて Login の中にある鍵をすべて削除

# syslog をみながら
$ syslog -w
# 別のウィンドウを開いて
$ launchctl unload -w /System/Library/LaunchAgents/com.apple.identityservicesd.plist

すると、syslog が

... identityservicesd[248] <Notice>: Quit - notifying about shutdown
... identityservicesd[248] <Notice>: Quit - shutting down daemon
... kernel[0] <Debug>: AppleKeyStore:Sending lock change 1

とのメッセージをプリントしてくれた。

unload した com.apple.identityservicesd が override.plist に反映されているかを、確認。

% more /var/db/launchd.db/com.apple.launchd.peruser.504/overrides.plist
        <key>com.apple.identityservicesd</key>
        <dict>
                <key>Disabled</key>
                <true/>
        </dict>


#---------------------------------------------------------------------
# 2014-03-04
# 追記 -- ここから。
#
# 一旦ログアウトして他ユーザにログイン。
#
# 他ユーザも同様の設定にする。
# Keychain Access.app の設定を開き"First Aid" 欄にある Check をすべて外し
# (OCSP) (CRL) をOFF に。
# Keychain Access.app を開いて Login の中にある鍵をすべて削除して unload。

$ launchctl unload -w /System/Library/LaunchAgents/com.apple.identityservicesd.plist

#
#
# 4) SoftwareUpdate のシステム環境設定を再設定する時に
# Security 欄で App Store とデベロッパーからダウンロードするを変更して
# App Store からのみダウンロードするを選択していた、ことを追記した。
#
# 追記 -- ここまで。

#---------------------------------------------------------------------
8) unload agent
#---------------------------------------------------------------------
# 管理者権限を持つユーザでログイン。
http://midorex.blogspot.com/2014/03/os-x-1092-unload-agents.html
を再び実行。

# User id 50X (現在ログインしている管理者権限を持つユーザ)が所有している overrides.plist を
# User di 50Y (管理者権限を持たないユーザ)が所有している overrides.plist へコピー。
$ sudo cp /var/db/launchd.db/com.apple.launchd.peruser.50X/overrides.plist  /var/db/launchd.db/com.apple.launchd.peruser.50Y/overrides.plist


# REBOOT

#---------------------------------------------------------------------
# syslog -w
#---------------------------------------------------------------------
# 管理者権限を持つユーザでログイン。

$ syslog -w 250 | more

など。

... secd[266] <Error>: ...

とのことなので

# 一時的にホームに plist を移動させる。
$ sudo mv /System/Library/LaunchAgents/com.apple.secd.plist ~/


# REBOOT

$ syslog -w 250 | more
alias 'syse'='syslog -k Level Nle error -k Time ge -2000'
alias 'sysw'='syslog -k Level Nle warning -k Time ge -2000

$ syse
# =>
# ... UserEventAgent[155] <Error>: Failed to copy info dictionary for bundle /System/Library/UserEventPlugins/alfUIplugin.plugin
# ... UserEventAgent[155] <Error>: Failed to copy info dictionary for bundle /System/Library/UserEventPlugins/com.apple.bonjour.plugin

このエラーは
http://midorex.blogspot.com/2014/03/os-x-1092-disable-airdrop.html
において

$ sudo mv /System/Library/PrivateFrameworks/ShareKit.framework/Versions/A/PlugIns

した為だと思うので気にしていない。

... secd[266] <Error>: ...

は消えた。

そして重要なこと。そもそもこの↓ようなエラー

xpcd[192]: Info.plist does not contain an XPCService dictionary: /System/Library/Frameworks/Security.framework/XPCServices/SecurityAgent.xpc

が、頻出していた為にわざわざ上書きインストールしたことを思い出した。
syslog -k を使って検索してみたところ、上書きインストール以降、エラーは無事消えていた。よかった。
しかしバッテリー残量が少なくなった時のお知らせは正常に戻らなかった。pmset が原因かもしれない。

# ~/.bashrc などにエイリアスを記入しておくと便利
# alias 'sysk'='syslog -k Message Seq'
# alias 'syse'='syslog -k Level Nle error -k Time ge -3000'
$ sysk XPCService

して使う。

# syslog -k Level Nle error -k Time ge -3000
$ syse
# =>
# 気になった箇所の抜粋(日付削除)
osx.local UserEventAgent[155] <Error>: Failed to copy info dictionary for bundle /System/Library/UserEventPlugins/BonjourEvents.plugin
osx.local UserEventAgent[155] <Error>: Failed to copy info dictionary for bundle /System/Library/UserEventPlugins/alfUIplugin.plugin
osx.local UserEventAgent[155] <Error>: Failed to copy info dictionary for bundle /System/Library/UserEventPlugins/com.apple.bonjour.plugin

$ sudo mv /System/Library/UserEventPlugins/alfUIplugin.plugin  ~/backup-sys-lib-UserEventPlugins/
$ sudo mv /System/Library/UserEventPlugins/BonjourEvents.plugin ~/backup-sys-lib-UserEventPlugins/
$ sudo mv /System/Library/UserEventPlugins/com.apple.bonjour.plugin ~/backup-sys-lib-UserEventPlugins/


# REBOOT

IconServicesAgent[203] <Error>: Error: Failed to add value to tree: Invalid node at index: 6.

のあとに数行にわたって続く IconServiceAgent の派手なエラーは
システム環境設定のすべての設定内容を見直して不要なもの等を off にすることで消えたが、再び出現するかもしれない。

osx.local com.apple.kextcache[247] <Error>: CellPhoneHelper.kext - no dependency found for com.apple.driver.AppleUSBMergeNub.
osx.local com.apple.kextcache[247] <Error>: AppleMobileDevice.kext - no dependency found for com.apple.driver.AppleUSBMergeNub.

等の kext のエラーは Caches リンクが再生成されると消える。2回ほど REBOOT しおなしたら消えた。
CellPhoneHelper.kext は AppleUSBMergeNub に依存しているようだ。
私が AppleUSBMergeNubを mv した為に CellPhoneHelper.kext をロードできなかったようだ。
CellPhoneHelper.kext を AppleUSBMergeNub 同様に mv することがおそらく正しい選択だろうと思う。

# 2014-03-04
88行93行あたり、それぞれ daemon と daemon が逆だったことを訂正。
s/daemon/agents
s/agents/daemon
4) SoftwareUpdate と 7) Keys in "Login" Keychains
の中に書き忘れていたことを追記。

0 件のコメント: