Beginning OS X 10.4/運用編

出典: Beginning OS X

Beginning OS X 10.4 > 運用編

目次

[編集] 総則

[編集] パッケージシステムの混用は避けるべき

MacPorts は基本的に自己完結を是としており、他のパッケージとの協調はほとんど考慮されていない。これは Fink などでも同じで、根本的には UNIX 環境自体の制約に由来するところが大きい。たとえば X11 の app-defaults に関する検索パスはユニークなリソースだが、Fink はそれを占有し、他に明け渡さない排他的な設計になっている。

結局のところ、複数のベンダーから提供されている UNIX バイナリパッケージを同時に幾つも導入していくと、必ずある段階で問題が生じることになる。利用するパッケージシステムを一度決めたなら、極力それ以外は使わないようにするのがよい。特に、/usr/local 以下にライブラリを勝手にインストールするようなものは避けること。

[編集] OS の上書きインストールは避けるべき

Mac OS X をインストールする際に既存の OS 環境上に上書きする「Mac OS X をアップグレード」をおこなうと、トラブルに見舞われやすいようだ。「消去してからインストール」もしくは「アーカイブしてからインストール」を選択すべきである。

なお、「アーカイブしてからインストール」には二種類あり、「ユーザとネットワークの設定をそのまま残す」かどうかを選択できる。このとき残すを選ぶと、何故かホームディレクトリ外にインストールしたライブラリや IM の類までがそのまま消されずに残されてしまい、クリーンインストールしたことにならないので注意。

[編集] MacPorts

[編集] アーカイブモードを有効にするには

MacPorts のバージョン 1.3.1 以降では、アーカイブモードがデフォルトで無効となっている。

アーカイブモードとは ports をインストールする際にバイナリアーカイブとしても保存しておく機能のことで、一度インストールしたことのある ports を再度インストールするような場合にソースから毎回リビルドするのではなく、バイナリアーカイブからの展開だけで済ますことができる。また、別のマシンにこのバイナリアーカイブをコピーすることで、ports のインストールを素早くおこなうといった運用が可能となる。バイナリアーカイブは /opt/local/var/macports/packages ディレクトリ内に格納される。

アーカイブモードを有効にしたい場合には、macports.conf 内にある portarchivemode の項目を no から yes に書き換えること。

[/opt/local/etc/macports/macports.conf]
...
# Create and use binary archive packages for installation/reinstallation ease
portarchivemode         yes
...

[編集] パッケージの継続的なアップデート方法

MacPorts 本体および ports のデータベースを最新の状態に更新するには、

$ sudo port -d selfupdate

とする。(-d はデバッグメッセージを出力するためのオプションで、省略可。)

インストール済みの ports のうち、更新のあったものは

$ port outdated

にて一覧表示できるので、必要に応じて

$ sudo port upgrade <port 名>

とすることで、指定した port を最新のものに置き換えることができる。なお、

$ sudo port upgrade outdated

とすれば、古い状態の ports を一括してアップデートすることもできる。

[編集] 特定の状況下で port upgrade が上手く動かない問題

Mar 28, 2007 現在、特定の状況で port upgrade をおこなうと、パッケージシステムが依存関係の情報を勘違いしてしまい、本来必要のない port をインストールしようとすることがあるようだ。(たとえば teTeX の代わりに pTeX を導入している状態で、doxygen への依存関係を持つ ports の upgrade を試みた場合などに、teTeX のインストールが試みられてしまう。doxygen 自体は bin:tex:teTeX への依存関係を持つにもかかわらず、である。MacPorts 1.4.0 にて確認。)

仕方がないので、この問題が修正されるまでは port deactivate <port 名> && port install <port 名> などとして、個別にアップグレードをおこなうようにすることで回避。

参考: Dependency Problem of Upgrading Gnuplot: A Possible Bug

[編集] 良く使うコマンド

大体、以下のようなコマンドを覚えておけば日常的には困らない筈。

MacPorts 本体および ports のデータベースを最新の状態に更新する:

$ sudo port -d selfupdate

アップグレード対象となる ports の一覧を表示:

$ port outdated

古い ports を一括してアップグレード:

$ sudo port upgrade outdated

ソフトウェアのアップグレードをおこなった場合、旧バージョンは (いつでも戻せるように) inactive な状態として残される。

inactive な ports を全てアンインストール:

$ sudo port -uf uninstall

nkf のみをアップグレード:

$ sudo port upgrade nkf

nkf をアンインストール:

$ sudo port uninstall nkf

nkf のビルドに使用したファイルを消去 生成されたアーカイブ (バイナリパッケージ) も消去:

$ sudo port clean nkf
$ sudo port clean --archive nkf

ports の全一覧を表示:

$ port list

インストール済みの ports の一覧を表示:

$ port installed

"font" という文字列の含まれる ports の一覧を表示:

$ port search font

pTeX で指定可能な variants を表示:

$ port variants pTeX

pTeX に含まれるファイル一覧を表示:

$ port contents pTeX

指定したファイルは、一体どの ports に由来するのか:

$ port provides /opt/local/bin/nkf

そのほか、何らかの理由で PortIndex が正常に更新されておらず、存在しているはずの ports が見つからないと言われる場合には、

$ cd /opt/local/var/macports/sources/rsync.macports.org/release/ports
$ sudo portindex

として、ローカル側でインデックスの更新を試みること。

[編集] MacPorts のアンインストール方法

1. ログインシェルをデフォルトに戻す

ログインシェルを OS 標準の /bin/bash から MacPorts で導入したシェルに変更しているなら、コマンドライン上から

$ chpass -s /bin/bash

としてログインシェルをデフォルトに戻す。何らかのトラブルで MacPorts で導入したシェルが起動できず、ターミナルが開けないといった場合には、

  1. 「アプリケーション」→「ユーティリティ」より「NetInfo マネージャ」を開く。
  2. ウインドウ左下に表示される鍵のアイコンをクリックし、編集可能にする。
  3. 「/」「users」の配下から変更したいアカウントを選ぶ。
  4. プロパティ「shell」の値を「/bin/bash」に戻す。
  5. メニューより「ドメイン」→「変更内容を保存 ⌘S」をおこなう。

2. デーモンを取り除く

MacPorts で導入したデーモン (dbus, canna, etc.) があれば、以下のようなコマンドで全て停止させておく。

$ find /Library/LaunchDaemons/org.macports.* -print0 | sudo xargs -0 -L1 launchctl unload -w

インストールされていないデーモンについては unload が失敗した旨のエラーが表示されるが問題はない。

3. ディレクトリを削除する

以下のようにしてインストール済みの ports を全て取り除いたあと、/opt ディレクトリを削除する。

$ sudo port deactivate active

ここで /opt ディレクトリの削除前に deactivate しているのは、/opt ディレクトリの外部にファイルをインストールする ports が若干存在することへの配慮から。

[編集] ことえり

[編集] ことえりのキーボードショートカットが Emacs と衝突する

ことえりの環境設定で「Windows 風のキー操作」にチェックを入れると、Emacs における貼り付けのキーバインド C-y と衝突してしまい、正常に貼り付けができなくなってしまう。

[編集] egbridge Universal 2

[編集] egbridge のキーボードショートカットが Emacs と衝突する

キーバインドを MSIME 風にすると CTRL+C などのキーバインドが設定されてしまい、emacs を扱う上で支障が生じるので注意。また、ATOK17, ATOK2005, ATOK2006 風にすると今度は CTRL+A などのキーバインドが設定されてしまう。

(個人的には、標準キーバインド + ATOK2006 風ローマ字変換 の設定で使うようにしている。)

[編集] バックアップ

[編集] ディスクの丸ごとコピー

あるディスクの内容を別のディスクに丸ごと移設したい場合には、「ディスクユーティリティ」を使っておこなうのが簡単。

  1. まず、OS X のインストールディスクを DVD ドライブに挿入し、キーボードの C を押しながら Mac を立ち上げる。
  2. DVD からインストーラが起動したら、メニューより「ディスクユーティリティ」を立ち上げる。
  3. 画面右にある「復元」のタブをクリックする。
  4. 「ソース:」としてコピー元となるディスクを指定する。
  5. 「復元先:」としてコピー先となるディスクを指定する。
  6. コピー元・コピー先のディスクを取り違えていないか十分に確認ののち、「復元」のボタンを押す。

コピー先のディスクから OS を起動するようにしたい場合には、ディスクユーティリティを終了したのち、メニューより「起動ディスク」を立ち上げて適宜設定すればよい。

なお、PowerPC-based Macs では USB 接続の HDD からはブートできないので、外付け HDD の新規購入を考えているならば、Mac OS X のブートに対応した Firewire (aka. IEEE1394, iLink) 接続のものにするのがよい。

[編集] ntpd

[編集] NTP のポーリング間隔を調整するには

/etc/ntp.conf の内容を見ると、NTP サーバの設定項目の末尾に「minpoll 12 maxpoll 17」とあるのが判る。これは、NTP サーバに対してポーリングをおこなう間隔 (すなわち、クエリを送出する間隔) が、最短で 212 = 4,096 sec (68分16秒)、最長で 217 = 131,072 sec (36時間24分32秒) の間で、自動的に最適な値に変動し定められることを意味する。

この設定は標準よりもかなり長めとなっており、NTP サーバと同期させるためにはマシンを長時間稼働し続けなければならず、結果としてスリープ復帰直後に発生する時刻差違を素早く収束することができない等の問題が生じてしまう。(ntpd におけるデフォルトのポーリング間隔は「minpoll 6 maxpoll 10」であり、64〜1024 sec の間で変動する)

ポーリング間隔を一般的な値に戻すには、以下のようにして ntp.conf の内容を書き換えること。

$ sudo perl -pi -e 's|minpoll [\d]+|minpoll 6|, s|maxpoll [\d]+|maxpoll 10|' /etc/ntp.conf

OS X 10.4 での ntpd 再起動方法:
$ sudo /System/Library/StartupItems/NetworkTime/NetworkTime restart

[編集] sshd

[編集] X11 のフォワーディングをおこなうには

X11 のフォワーディングを常時利用したい場合には、/etc/ ディレクトリ内にある ssh 関連の設定ファイルを以下のように設定する。

[/etc/sshd_config]
...
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
...
[/etc/ssh_config]
...
#   ForwardX11 no
ForwardX11 yes
ForwardX11Trusted yes
#   RhostsRSAAuthentication no
...

ForwardX11Trusted yes とした場合には潜在的なセキュリティリスクの生じる点に注意。

OS X 10.4 以降の場合、sshd は launchd 経由で起動されるため、再起動の必要はない。

[編集] X11.app

[編集] マウスポインタの下にきたウインドウを自動的にアクティブにするには

マウスポインタの下にきたウインドウを自動的にアクティブにしたい場合には、以下のコマンドを入力するとよい。 (設定した内容は ~/Library/Preferences/com.apple.x11.plist に格納される。)

$ defaults write com.apple.x11 wm_ffm true

参考: Technical Q&A QA1232: X11 FAQ

[編集] X11 のメニューから起動したアプリケーションに環境変数が正常に渡らない

X11 のメニューからアプリケーションを呼び出した際、呼び出されたアプリケーションに .bash_profile にて設定される環境変数が正しく渡らないことがある。これは OS X 10.4 においてドックもしくはファインダー上から X11.app を直接起動した場合、ログインシェルを介せずに X11.app が実行されてしまうため。

この問題に関しては、とりあえずメニュー項目をカスタマイズして「/bin/bash -l -c <プログラム>」というようにログインシェルを介在させることで回避可能。

[編集] シェル

[編集] ログインシェルを変更するには

ログインシェルを標準 (/bin/bash) から任意のものに変更するには、まず /etc/shells を編集し、変更したいシェルのエントリを末尾に追加する。

MacPorts の bash を使いたい場合には、/opt/local/bin/bash を追加。

 [/etc/shells]
 ...
 /opt/local/bin/bash

次に、chpass コマンドを使ってユーザのログインシェルを変更する。

$ chpass -s /opt/local/bin/bash

再ログインすれば、指定したシェルがログインシェルとして起動されているはず。

$ echo $SHELL
/opt/local/bin/bash

[編集] ログインシェルが起動できなくなった場合には

何らかのトラブルで別途インストールしたシェルが起動できなくなるなどした場合には、以下の方法で回復を図ること。

  1. 「アプリケーション」→「ユーティリティ」より「NetInfo マネージャ」を開く。
  2. ウインドウ左下に表示される鍵のアイコンをクリックし、編集可能にする。
  3. 「/」「users」の配下から変更したいアカウントを選ぶ。
  4. プロパティ「shell」の値を「/bin/bash」に戻す。
  5. メニューより「ドメイン」→「変更内容を保存 ⌘S」をおこなう。

[編集] fontconfig

[編集] GTK2+ のデフォルトフォントをヒラギノに変更するには

デフォルトのままでも日本語表示は可能だが、フォントの選択が良くないためか文字のベースラインが揃わずに踊ってしまう。これが好ましくない場合には、以下のようにして明示的にヒラギノを利用するように設定するとよい。

[/opt/local/etc/fonts/conf.d/63-hiragino.conf]
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <alias>
        <family>serif</family>
        <prefer>
            <family>Hiragino Mincho Pro</family>
        </prefer>
    </alias>
    <alias>
        <family>sans-serif</family>
        <prefer>
            <family>Hiragino Kaku Gothic Pro</family>
        </prefer>
    </alias>
    <match target="font">
        <test name="family" compare="eq">
            <string>ヒラギノ明朝 Pro</string>
            <string>ヒラギノ丸ゴ Pro</string>
            <string>ヒラギノ角ゴ Pro</string>
            <string>ヒラギノ角ゴ Std</string>
            <string>Hiragino Mincho Pro</string>
            <string>Hiragino Maru Gothic Pro</string>
            <string>Hiragino Kaku Gothic Pro</string>
            <string>Hiragino Kaku Gothic Std</string>
        </test>
        <edit name="hinting" mode="assign">
            <bool>false</bool>
        </edit>
        <edit name="embeddedbitmap" mode="assign">
            <bool>false</bool>
        </edit>
    </match>
</fontconfig>

ヒラギノは 10 ポイント前後のサイズのとき内蔵のビットマップフォントが用いられるが、上記設定例では常にアウトラインからのグリフ生成をおこなうよう指定している。

[編集] フォントのサーチパスを追加するには

MacPorts の fontconfig におけるデフォルトのフォントサーチパスは /usr/share/fonts, /Library/Fonts, /Network/Library/Fonts, /System/Library/Fonts, /usr/X11R6/lib/X11/fonts, /opt/local/share/fonts, ~/.fonts である。これら以外のディレクトリをフォントのサーチパスに含めたい場合には、フォント設定ファイル local.conf を作成し、パスを追加すること。

たとえば /usr/local/share/fonts および ~/Library/Fonts にフォントを置いているような場合には、以下のようにする。

[/opt/local/etc/fonts/local.conf]
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/usr/local/share/fonts</dir>
    <dir>~/Library/Fonts</dir>
</fontconfig>

新しくフォントをインストールした後には、fc-cache を用いてフォントキャッシュを再生成しておくとよい。

$ sudo /opt/local/bin/fc-cache -fv

[編集] ghostscript-fonts-hiragino

[編集] インストール時にヒラギノが見つからないとのエラーが出る場合

ghostscript-fonts-hiragino の ports のインストール時に、

---> Building pTeX with target all
Please place "????????????角???? Pro W3.otf" in /System/Library/Fonts and restart the build. 

というようなエラーが表示される場合には、シェルと環境変数 LANG の設定を確認すること。

Sep 25, 2006 現在、シェルに bash 以外のもの (zsh, tcsh を含む) を使用し、なおかつ、環境変数 LANG を ja_JP.eucJP と設定している場合に上記エラーの発生することが確認されている。

この問題を回避するには、以下のように LANG を一時的に変更するなどすればよい。

zsh, ksh, sh の場合:
$ export LANG=C 
$ sudo port install ghostscript-fonts-hiragino

tcsh, csh の場合:
$ setenv LANG C
$ sudo port install ghostscript-fonts-hiragino

ここで、LANG の内容を C の代わりに ja_JP.UTF-8 とするのでも OK。

ちなみに、この問題は bash では発生しない。bash 以外のシェルには日本語処理に関する問題があるのかもしれない。

[編集] pTeX

[編集] 組版がうまくいかない場合には

  • TeX ソースのエンコードが pTeX 本体の扱えるエンコードと一致しているかどうかを確認。(よくある)
    • emacs 上では C-x RET f euc-jp RET とすることで、文書のエンコードを EUC に変換できる。C-x RET f utf-8 RET で UTF-8 に変換できる。また、platex のオプションに -kanji=euc や -kanji=utf8 を指定することで、pTeX が処理できるソースのエンコードを一時的に変更できる。
  • 設定をいじった後、mktexlsr し忘れていたとか。(これもよくある)
  • TeX ソースの記述間違い。http://homepage.mac.com/xyoshiki/tex.html などが大変参考になる。

[編集] dvips(k) で生成した PostScript の和文フォントが preview.app で文字化けする問題

dvips(k) で生成した PostScript ファイルを preview.app で見ようとすると、エラーが出て開けなかったり、和文部分が文字化けして表示されてしまうことがある。これは preview.app が一般的な和文 PostScript フォント (Ryumin-Light-H など) を正常に扱えないため。

ghostscript では ghostscript-fonts-hiragino をインストールすることで処理が可能となる。

つまるところ、dvips(k) で生成した PostScript ファイルは ps2pdf に渡すなど中間ファイルとしての利用にとどめ、不特定な相手との文書交換用途には dvipdfmx にて出力した (フォント埋め込み済みの) PDF ファイルを使用するのが望ましい。

[編集] MacPorts の pTeX がデフォルト動作としてヒラギノを埋め込む理由 (TeX マニア向け解説)

MacPorts の pTeX では、dvipdfmx で作成した PDF ファイルにはデフォルトでフォントのサブセットを埋め込むようにしている。これはサイズよりも表示の確実性 (どんな環境でも問題なく表示可能とする & wysiwyg を徹底する) を最優先に考えている為である。(他のパッケージシステムを使ってインストールできる pTeX の中には埋め込まないのがデフォルトのものもあるようだ。)

このポリシーに至った理由には複数あるのだが、技術的な判りよい理由を挙げるならば、たとえばヒラギノと小塚 (Acrobat のフォント) では字形の異なる文字が存在するという問題がある。フォントを PDF に埋め込んでおかない限り、和文テキストはモリサワの龍明/中ゴシックのフォント名を経て最終的に小塚へとマッピングされ、Acrobat 上で表示をおこなった時には想定外の字形に化けてしまうことになる。(こうした差異は絵文字の類でも顕著に見受けられる。) つまり、オーサリングをヒラギノベースでおこなう以上は小塚へのマッピングを安易におこなうのではなく、フォントを PDF に埋め込んでおくのが正道であるといえる。

また、未検証ではあるがおそらく Adobe Japan 1-5 で新規追加された 4,873 文字に関しては、フォントを PDF 中に埋め込んでおかない限り、古いバージョン (7.0 以前) の Acrobat 上では正常に表示できないのではないかとも思われる。

MacPorts の pTeX がデフォルト動作としてヒラギノを埋め込んでいるのは、こうした理由からである。

[編集] ImageMagick

[編集] 画像ファイルを EPS Level 2 に変換するには

TeX 文書に貼り付ける EPS ファイルは、EPS Level 2 にしておくのがよい。デフォルトの Level 1 と比較してファイルサイズが小さくなり、またレンダリングも早くなる。

(e.g.)
$ convert foo.jpg eps2:foo.eps

[編集] Spotlight

[編集] Spotlight のキーボードショートカットが Emacs と衝突する

Emacs における領域選択開始のキーバインド Ctrl+Space が Spotlight のキーボードショートカットと重複しているので、「環境設定」より「Spotlight」 を開き、「Spotlight メニューのキーボードショートカット」をクリアしておくこと。

[編集] 和文プレインテキストを Spotlight の検索対象に含めるには

標準の Spotlight では、Shift_JIS および UTF-16 以外のエンコードで書かれた和文プレインテキストファイルは、その検索対象とならない。

この制約に関しては、加藤和良さんの JapaneseText.mdimporter を導入することで、EUC-JP や UTF-8 で書かれたテキストも検索対象に含めることができるようになる。

インストール方法は、/Library/Spotlight/ に JapaneseText.mdimporter をコピーした後、

$ find ~/Documents -name "*.txt" -print0 | xargs -0 -L1 mdimport -V

もしくは

$ sudo mdutil -E /

などとしてインデックスを再生成すること。

find と xargs を使う時は -print0 と -0 を忘れずに。

[編集] 和文 TeX ソースを Spotlight の検索対象に含めるには

拡張子 .tex のファイルはプレインテキストと判断されないので、そのままでは Spotlight の検索対象とならない。

TeX ソースが UTF-8 で記述されている場合には TeXShop 2 を導入すればよい。付属する TeX.mdimporter により全文検索が可能となる。EUC_JP や JIS、あるいは Shift_JIS で書かれている場合には、以下の手順を踏むことで一応は可能となる。

  1. JapaneseText.mdimporter を導入する。
  2. TeXShop 2 を導入する。
  3. TeXShop のアプリケーションバンドルを開き、不要な Contents/Library/Spotlight/TeX.mdimporter を削除する。
  4. JapaneseText.mdimporter の Info.plist を編集し、コンテントタイプ org.tug.tex の文書も処理対象に含める。(ちなみに、このコンテントタイプの関連付けは TeXShop 2 の Info.plist 中にておこなわれている。)
--- Info.plist.orig	2006-08-09 15:24:11.000000000 +0900
+++ Info.plist	2007-01-18 07:42:35.000000000 +0900
@@ -12,6 +12,7 @@
 			<key>LSItemContentTypes</key>
 			<array>
 				<string>public.plain-text</string>
+				<string>org.tug.tex</string>
 			</array>
 		</dict>
 	</array>

その後、mdimport コマンドで既存の TeX ソースをインポートすること。たとえばドキュメントフォルダ内にある全ての TeX ソースをインポートし直すには、以下のようにするとよい。

$ find ~/Documents -name "*.tex" -print0 | xargs -0 -L1 mdimport -V

find と xargs を使う時は -print0 と -0 を忘れずに。

[編集] mds 暴走時の対処

稀に mds のプロセスが暴走し、CPU リソースを食いつぶすことがある。(10.4.10 上で JapaneseText.mdimporter 利用時に確認。)

この現象が発生した場合には、アクティビティモニタから mds のプロセスを強制終了させるとおさまる。mds は自動で再起動される。