「Mac OS X Server v10.6:OS X Lion または Lion Server 用のソフトウェア・アップデートをホストする」というAppleのKbase記事があります。この文書はそのKbaseの記事を拡張するものです。このAppleのKbase記事は、クライアントととしてOS X Lionが増えていて、しかしながら何らかの事情でMac OS X Server 10.6でソフトウェアアップデートサービスを提供する場合に大変参考になります。しかしOS X Lion用のソフトウェアを利用したいときに、このAppleのKbase記事のとおりに変更しただけでは上手く行かない場合があります。
Mac OS X Server 10.6をOS X Lion Serverにアップグレードするとき、アップグレードを今まさにしようとしているサーバが、Mac OS X Server 10.6でホストされているソフトウェアアップデートサーバを向いているとき、アップグレードに必要なServer Essentialをソフトウェアアップデートサーバからダウンロードできないため、アップグレード処理がキャンセルされます。先のKbaseに従ってOS X Lion向けのアップデータを提供するようにしているにもかかわらず、です。これは実に単純な理由でおきています。アップグレード前のサーバは当然まだ10.6ですから、ソフトウェアアップデートサーバからMac OS X 10.6または10.5向けのものしかダウンロード出来ないのです。そのためOS X Lion Server用のServer Essentialを見つける事はできません。
記事の中のステップ5でファイル「/etc/swupd/swupd.conf」を編集しています。ここで編集しているのはmod_rewriteのルールの変更です。編集後のmod_rewriteディレクティブ全体を以下に引用します。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Darwin/9
RewriteRule ^/index\.sucatalog$ /index-leopard.merged-1.sucatalog
RewriteCond %{HTTP_USER_AGENT} Darwin/10
RewriteRule ^/index\.sucatalog$ /index-leopard-snowleopard.merged-1.sucatalog
RewriteCond %{HTTP_USER_AGENT} Darwin/11
RewriteRule ^/index\.sucatalog$ /index-lion-snowleopard-leopard.merged-1.sucatalog
</IfModule>
mod_rewriteはルールを上から順番に適用していきますが、まずRewriteCondの行で該当する部分があるところまでスキップします。Darwin/10がMac OS X 10.6、Darwin/11がOS X Lionです。このソフトウェアアップデートサーバにアクセスしてきたとき、HTTP_USER_AGENTの中に、Darwin/10が含まれていたとき、リクエストファイル /index.sucatalog を /index-leopard-snowleopard.merged-1.sucatalog に書き換えてアクセスさせます。このファイルにはファイル名の通り、Mac OS X 10.5とMac OS X 10.6のものしか含まれていません。その次のRewriteCondは該当しませんが、最後の行のRewriteRuleでは、評価対象が、/index.sucatalogではもはやありませんので、無視されます。結果としてHTTP_USER_AGENTがDarwin/10の場合、OS X Lion用のソフトウェアのカタログが記載された index-lion-snowleopard-leopard.merged-1.sucatalog を得る事はありません。これがOS X Lion Serverへのアップグレードに失敗する理由です。
Darwin/10、Mac OS X 10.6でもLion用のソフトウェアカタログを渡すために、index-lion-snowleopard-leopard.merged-1.sucatalog にしておけばいいわけですが、Mac OS X 10.6で運用している端末にLionのアップデータを含むものを渡してもしょうがないですし、やや乱暴な対応ともおもうので、ちゃんとmod_rewriteを利用した形で対応してみます。HTTP_USER_AGENTの中にDarwin/10が含まれていたら、という判定なのでもう一つ判定文をいれてみたらどうか。そもそもMac OS X 10.6でOS X Lion インストーラが動いた時だけの問題ですからね。ルールを追加したディレクティブは以下の通りです。追記したところをハイライトしています。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Darwin/9
RewriteRule ^/index\.sucatalog$ /index-leopard.merged-1.sucatalog
RewriteCond %{HTTP_USER_AGENT} Darwin/10
RewriteRule ^/index\.sucatalog$ /index-leopard-snowleopard.merged-1.sucatalog
RewriteCond %{HTTP_USER_AGENT} Darwin/11
RewriteRule ^/index\.sucatalog$ /index-lion-snowleopard-leopard.merged-1.sucatalog
RewriteCond %{HTTP_USER_AGENT} Install%20Mac%20OS%20X%20Lion
RewriteRule ^/index-leopard-snowleopard.merged-1.sucatalog$ /index-lion-snowleopard-leopard.merged-1.sucatalog
</IfModule>
このようにルールを追加したところ、サイトローカルなアップデートサーバを利用してMac OS X Server 10.6からLionへのアップグレードを速やかに行う事ができるようになりました。
OS X Lion Server でソフトウエアアップデートサービスを提供していても、同じ理由でMac OS X Server 10.6からOS X Lionへのアップグレードは失敗します。OS X Lion Serverでソフトウエアアップデートサービスを提供している場合も、mod_rewriteルールを追加して対処することが可能です。
Comments