TOP / 環境構築 / Mac OSX Pantherの設定

Mac OSX Pantherの設定

はじめに

ここでは、アップル・コンピュータ社のMac OSX Panterのアプリケーションのアプリケーションインストールや設定について書いています。最新のMac OSXはTigerというコードネームでバージョンは、10.4です。Pantherはひとつ前のバージョンで10.3です。

diskutil

OSX には、ディスク管理をコマンドラインで行うツールとして diskutil があります。これでフォーマット作業などを行います。

パーティション情報の表示

# diskutil list /dev/disk1

HFS+ フォーマットで /dev/disk1 を初期化

# diskutil eraseDisk HFS+ oklab_backup /dev/disk1

/dev/disk3 に乱数を書き込む

# diskutil randomDisk 8 /dev/disk3

/dev/disk3 に0を書き込む

# diskutil zeroDisk /dev/disk3

niutil コマンドによるユーザ(アカウント)作成

OSX はデフォルトでは/etc/passwdファイルなどを使わず、NetInfo というディレクトリサービスを使います。そのため 初期インストールした Linux や Solaris などとは異なり、niutil コマンドによりユーザ作成を行います。

niutil によるユーザ情報の確認方法

# niutil -list . /
# niutil -list . /users
# niutil -list . /groups
# niutil -read . /users/[ユーザ名]

niutil によるユーザ登録方法

niutilコマンドにより、データベースにデータを追加または登録していきます。今回はhoge_userというアカウントを作成する例です。また、ホームディレクトリは最後にcreatehomedirコマンドを実行して作成する必要があります。

# niutil -create / /users/hoge_user
# niutil -createprop / /users/hoge_user shell /bin/bash
# niutil -createprop / /users/hoge_user realname "S&C 5/11"
# niutil -createprop / /users/hoge_user uid 511
# niutil -createprop / /users/hoge_user gid 511
# niutil -createprop / /users/hoge_user home /Users/hoge_user
# niutil -createprop / /users/hoge_user _shadow_passwd
# passwd hoge_user
# niutil -appendprop / /gruops wheel users hoge_user
# niutil -appendprop / /groups/admin users hoge_user
# createhomedir -c /Users/hoge_user -u hoge_user

nituilでのユーザ情報の修正

hoge_userのshellを/bin/zshに変更してみる.-uでniutilの認証を通すユーザ名,-pでパスワードを指定します.-renamepropで必要なプロパティ名を指定.今回はshellプロパティを指定しています。あとはどこにそのプロパティがあるのかを"/ /users/hoge_user"で記述しています。

# niutil -u hoge_user -P hoge_password -renameprop / /users/hoge_user shell /bin/zsh

OSXのファイル名が文字化けする問題

OSXはUnicodeでNFD(Normalization Form D)という方式を採用しています。この方式は濁点のある文字を分割して管理します。例えば「が」という文字は「か」と「”」に分けて管理しているので普通のUTF-8を指定しても日本語のファイル名が表示できません。

TeraTermの場合、UTF-8対応版がありますがそのままの指定では文字化けしてしまいます。設定-端末の受信するエンコード情報にUTF-8mを指定すれば日本語のファイル名も正常に表示されます。lsコマンドで-v,-wを指定するして確認すると問題なく表示されるはずです。

IPAフォントのインストール

IPAからとあるソフトウェア用に無償の日本語フォントが提供されています。これを一般的にIPAフォントといいます。これをOSXにインストールするには、フォントのファイルをダウンロードして、ttfファイルを/usr/X11R6/lib/X11/fonts/TTFに配置します。その後mkfontscale, mkfontdirをこのディレクトリ内で実行する事でフォントのインストールが完了です。

$ wget http://www.grass-japan.org/FOSS4G/ipafonts \
/grass5.0.3_i686-pc-linux-i18n-ipafull-gnu_bin.tar.gz
$ tar -zxvf grass5.0.3_i686-pc-linux-i18n-ipafull-gnu_bin.tar.gz
$ sudo cp -p fonts/*.ttf /usr/X11R6/lib/X11/fonts/TTF/.
$ sudo chmod 444 /usr/X11R6/lib/X11/fonts/TTF/ipa*
$ sudo chown root:admin /usr/X11R6/lib/X11/fonts/TTF/ipa*
$ cd /usr/X11R6/lib/X11/fonts/TTF
$ sudo mkfontscale
$ sudo mkfontdir

javacコマンドのエラーメッセージ文字化け対策

Java開発環境をインストールすると、javacコマンドはエラーメッセージがutf-8ではないためTerminalなどOSXのアプリケーションの殆どで文字化けが発生する。

.bash_profileなどにLC_ALL環境変数を設定する。

export LC_ALL=en

Java5のインストール

通常のインストーラからは、PantherにJava5をインストールする事が出来ない。これはインストーラがTigerのバージョンを確認しているからだ。だだしコマンドラインからインストール作業を行う事でJava5がインストールできる。

アップル・コンピュータ社のJava 2 SE 5.0 Release 3からdmg形式のバイナリファイルをダウンロードし以下のようなスクリプトを実行する。

download java5_install_on_panther.sh

実行例1: sudoコマンドを通常ユーザから使って実行
$ sudo sh java5_install_on_panther.sh
実行例2: chownでアクセス権限を変更して実行
$ sudo chmod 755 java5_install_on_panther.sh
$ sudo java5_install_on_panther.sh

2008/05/09追記調査したところ、Java 2 SE 5.0 Release 3のアーカイブは、Java1.3 Java1.3.1のディレクトリに内にあるlibappshell.dylibを書き換えることがわかりました。(強制的に書き換えるのではなく、エラー表示させる。) そのため最新版のスクリプトでは、libappshell.dylibをチェックして、存在する場合は、現在のディレクトリにファイルを移動するようにしました。 Java1.4が入っている場合は、もう使われないファイルだと思いますが、不安な場合はどこかにバックアップしておいてください。

    変更点
  • libappshell.dylibのチェックとバックアップ
  • sudoコマンドで実行することを考え、paxコマンドの前のsudoを削除

もし、"Java 2 SE 5.0 Release 3"イメージのマウント、アンマウントがおかしい場合は、OSXを再起動後、"hdiutil mount ${IMAGE} と # unmount sudo umount /Volumes/J2SE\ 5.0\ Release\ 3\ Tigerのコマンドを削除して、ファインダーから、"Java2 SE 5.0 Release 3"をダブルクリック起動してマウントさせ、その後このスクリプトを実行してみてください。

#!/bin/sh
# Java 5 Release 3 Installer
# usage:
#    sudo ./java5_install_on_panther.sh
# Author : Satoshi Okita
# Update :$Date$

IMAGE="J2SE50Release3.dmg"
DEFAULT_MOUNT="/Volumes/J2SE\ 5.0\ Release\ 3\ Tiger"

# check Java 1.3 and Java 1.3.1 Directory.
# and backup libappshell.dylib
JVM_BASE="/System/Library/Frameworks/JavaVM.framework/Versions/"
LIBAPPSHELL13="1.3/Library/libappshell.dylib"
LIBAPPSHELL131="1.3.1/Library/libappshell.dylib"
if [ -f "${JVM_BASE}${LIBAPPSHELL13}" ];then
  mv "${JVM_BASE}${LIBAPPSHELL13}" .
fi
if [ -f "${JVM_BASE}${LIBAPPSHELL131}" ];then
  mv "${JVM_BASE}${LIBAPPSHELL131}" .
fi
# mount
hdiutil mount ${IMAGE}

# unpacking
sleep 15
cd /
gunzip -c /Volumes/J2SE\ 5.0\ Release\ 3\ Tiger/J2SE50Release3.pkg/Contents/Archive.pax.gz | pax -r;



# unmount
sudo umount   /Volumes/J2SE\ 5.0\ Release\ 3\ Tiger

# Java5 default
cd /System/Library/Frameworks/JavaVM.framework/Versions/
sudo rm CurrentJDK
sudo ln -s 1.5.0 CurrentJDK

# check
java -version;

vimでファイル・エンコーディングを変更する方法

vimでファイルを開いている時にファイル・エンコーディングを変更する場合は、set fenc=utf-8と入力すれば、ファイル・エンコーディングを変更できる。また現在のファイル・エンコーディングを確認する場合は、setを入力すると画面に表示される。

標準のテキストエディタで、テキストファイルを出力する方法

標準のテキストエディタであるテキストエディットは、初期設定では、リッチ・テキスト形式でファイルを保存する。vimなどをコマンド・プロンプトで利用している場合に、プレーン・テキスト形式ではないと読めないため設定を変更すればよい。まずテキストエディットを開いてメニューのフォーマット項目から、標準テキストを選択するを指定すればよい。

ANT_HOME環境変数の設定

Mac OSXでは、標準付属のDeveloper KitをインストールするとJavaのビルドツールであるantもインストールされる。これは一般的なUnixやLinuxと異なり/Developer/Java/Ant/Library/Java/Homeにインストールされる。このディレクトリをANT_HOME環境変数の値として.bash_profileに指定すればよい。

JAVA_HOME環境変数の設定

Mac OSXでは、標準付属のDeveloper KitをインストールするとJavaの開発環境もインストールされる。これは一般的なUnixやLinuxと異なり/Library/Java/Homeにインストールされる。このディレクトリをJAVA_HOME環境変数の値として.bash_profileに設定すればよい。

VLC media player for Mac OSXのインストール

多くのフォーマットの動画を再生できるフリーウェア。VLC media palyer for Mac OSXからダウンロードしてGUIのインストーラに任せれば簡単にインストールできる。

Azereusのインストール

AzereusのダウンロードページからOSX用のバイナリファイルをダウンロードしてGUIにしたがってインストールすれば、BitTrrentのクライアントとして利用できる。もし利用できない場合は、Port6881番が利用できる状態である事を確認する。

Virex7.2のアンインストール

.MACのアプリケーションの1つにVirexというウィルス対策ソフトがある。他のウィルス対策ソフトを利用する場合には、これを削除する必要がある。

ここからRemoveVirex.dmgをダウンロードするとFinderが開くので、RemoveVirex.commandを実行すると削除できる。下記のようになれば正常に終了アンインストールができている。

Please enter your Administrator password to remove Virex 7.
Password:
Virex 7 has now been removed from your system.
You may now close this Terminal window.
logout
[Process completed]

以前紹介したスクリプトのリンク先が存在しなかったためシェルスクリプトを用意しました。このシェルスクリプトを実行する事でVirex7をアンインストールする事が可能です。

オープンソースソフトウェアのウィルス対策ソフトClamAVのインストール

オープンソースソフトウェアのウィルス対策ソフトとしてClamAVがある。これは以下からインストールが可能です。ダウンロードするとdmg形式ファイルなのでGUIインストーラによりインストールできます。

SystemStarterの設定

Mac OSXのrcファイルについて

一般的なUnixやLinuxのOSは、起動時にサービスを提供したい場合は、そのサービス用のrcファイルを用意したり追加記述するが、Mac OSXのバージョン10.3ではSystemStarterというコマンドがサービスを管理しているため、それ専用の書き方をしなければならない。ここでは私の管理しているサーバの設定を参考に書き方を記述します。

SystemStarterはき同時に以下のディレクトリのシェルスクリプトを読み込みにいく。それで/etc/hostconfigのフラグが立っていたら起動する。

  • /System/Library/StartupItems
  • /Library/StartupItems

/System/Library/StartupItemsはOSXが管理しているものでユーザがソースコードからコンパイルしてサービスを提供する場合などは/Library/StartupItemsにスクリプトを書く。私の場合、Apache2とSubversionを組み合わせたサービスを外部に公開しているため、/Library/StartupItemsにスクリプトを書いた。


es:/Library/StartupItems root# pwd
/Library/StartupItems
es:/Library/StartupItems root# ls
OKLabServers
es:/Library/StartupItems root# ls OKLabServers/
OKLabServers            StartupParameters.plist

/Library/StartupItemsディレクトリは、はじめに存在しないのでmkdirなどで作成する。その後以下を作成する。

  • /Library/StartupItems/サービス名/サービス名シェルスクリプト
  • /Library/StartupItems/サービス名/StartupParameters.plist

私の例では以下を作成。

  • /Library/StartupItems/OKLabServers/OKLabServers
  • /Library/StartupItems/OKLabServers/StartupParameters.plist

OKLabServersのスクリプトは以下のような感じ。/System/Library/StartupItemsにCronとか Apache,Bindなどのスクリプトが転がっているのでそれを参考に作ればよい。StartupItemsとかSystemStarterで Google検索すれば情報が現れる。単純に/opt/app以下にソフトウェアを 入れたのでそれを実行しているだけです。SystemStarterは、apachectlのニュアンスに近い。

OKLabServersスクリプト


es:/Library/StartupItems/OKLabServers root# cat OKLabServers
#!/bin/sh

##
# OKLabServers
#
# * Apache2 + BerkleyDB4 + Subversion1.1
# * My Custom Bind 9.2.5
##

. /etc/rc.common

StartService ()
{
#        ConsoleMessage "Starting timed execution services"
#        cron
#    fi
#
     ConsoleMessage "Starting OKLabServers services"
     /usr/local/apache2/bin/apachectl start

     /opt/app/bind/sbin/named -p 53 -u okitasatoshi -c /opt/app/bind/etc/named.conf
}

StopService ()
{
#    if pid=$(GetPID cron); then
#        ConsoleMessage "Stopping timed execution services"
#        kill -TERM "${pid}"
#    else
#        echo "cron is not running."
#    fi

     ConsoleMessage "Stopping OKLabServers services"
     /usr/local/apache2/bin/apachectl stop

     # Bind killing
     PIDS=`ps -awx | grep bind | grep named | awk ' { print $1 } '`
     for item in ${PIDS}
     do
       kill -9 ${item}
     done
}

RestartService ()
{
#    if pid=$(GetPID cron); then
#        ConsoleMessage "Restarting timed execution services"
#        kill -HUP "${pid}"
#    else
#        StartService
#    fi
        ConsoleMessage "(DUMMY) Restarting timed execution services"
        StopService
        StartService
}

RunService "$1"

StartupParameters.plistファイル

このファイルは、書式が決まっている。Providesにサービス名を入れる事。他にもUse/Requireのオプションがあってサービスが何かに依存する場合、依存関係を書ける。OrderPreferenceはサービスの起動順序の設定でFirst|Early|None|Late|Last が可能。認証サービスとかだとFirst,Earlyを使えばいいと思う。


es:/Library/StartupItems/OKLabServers root# cat StartupParameters.plist
{
  Description     = "OKLabServers (Apache2+Subversion),Bind,";
  Provides        = ("OKLabServers");
  OrderPreference = "None";
}

最後に動作確認

stopオプションが呼ばれたら、OKLabServersの StopService関数を読んでいる。start,restartも同様。私のスクリプトはリターンコードか何か必要な事をやってないので、コマンド実行後にHangupとメッセージが出ているが、動いているのでそれでよい。あとは、echoビルトインコマンドでログをはくのではなく、 ConsoleMessage関数用意されているのでそれでログを出力している。


es:/Library/StartupItems/OKLabServers root# SystemStarter stop OKLabServers
Welcome to Macintosh.
Stopping OKLabServers services
Startup complete.
Hangup
es:/Library/StartupItems/OKLabServers root# SystemStarter start OKLabServers
Welcome to Macintosh.
Starting OKLabServers services
Startup complete.
Hangup
es:/Library/StartupItems/OKLabServers root# SystemStarter restart OKLabServers
Welcome to Macintosh.
(DUMMY) Restarting timed execution services
Stopping OKLabServers services
Starting OKLabServers services
Startup complete.
Hangup

Hangupの問題

何故Hangupが出るのか分からないので調べたりしていたがいろいろ修正したりしているうちに解決してしまった。またSystemStarter -nd startとする事で実際には起動しないがログ出力を行ってスクリプトに問題がないか実行確認できるのが分かった。2006年4月現在正常に動作しているスクリプトを記述しておく。

OKLabServersファイル

Apache, Bind, Squidをひとつのスクリプトで起動させている



#!/bin/sh

##
# OKLabServers
# 
# * Apache2 + BerkleyDB4 + Subversion1.1
# * My Custom Bind 9.2.5
# * Squid 2.5.x
##

. /etc/rc.common

StartService ()
{
#        ConsoleMessage "Starting timed execution services"
#        cron
#    fi
#
     ConsoleMessage "Starting OKLabServers services"
     ConsoleMessage "Starting Apache2.0.x+Subversion1.x"
     /usr/local/apache2/bin/apachectl start

     ConsoleMessage "Starting BIND9.2.5"
     /opt/app/bind/sbin/named -p 53 -u okitasatoshi -c /opt/app/bind/etc/named.conf
     ConsoleMessage "Starting Squid2.5.x"
     /opt/app/squid/bin/RunCache &
}

StopService ()
{
#    if pid=$(GetPID cron); then
#        ConsoleMessage "Stopping timed execution services"
#        kill -TERM "${pid}"
#    else
#        echo "cron is not running."
#    fi

     ConsoleMessage "Stopping OKLabServers services"
     /usr/local/apache2/bin/apachectl stop

     # Bind killing
     PIDS=`ps -awx | grep bind | grep named | awk ' { print $1 } '`
     for item in ${PIDS}
     do
       kill -9 ${item}
     done

     PIDS=`ps -awx | grep squid  | awk ' { print $1} '`
     for item in ${PIDS}
     do
       kill -9 ${item}
     done
}

RestartService ()
{
#    if pid=$(GetPID cron); then
#        ConsoleMessage "Restarting timed execution services"
#        kill -HUP "${pid}"
#    else
#        StartService
#    fi
        ConsoleMessage "(DUMMY) Restarting timed execution services"
        StopService
        StartService
}

RunService "$1"

plist

OrderPreferenceをNoneからFirstにしている


{
  Description     = "OKLabServers (Apache2+Subversion),Bind,Squid";
  Provides        = ("OKLabServers");
  OrderPreference = "First";
}

日本語設定サンプル

ホームディレクトリに保存してある。.inputrc, .vimrc, .bash_profileの設定サンプルです。これによりTeraTermなどの端末からUTF-8の日本語入力や表示を行える事が出来ます。



# ~/.inputrc
set convert-meta off
set meta-flag on
set output-meta on
set input-meta on

# ~/.vimrc
set enc=utf-8
set fenc=utf-8
set fencs=utf-8,iso-2022-jp,sjis,euc-jp
syntax on

# ~/.bash_profile
test -r /sw/bin/init.sh && . /sw/bin/init.sh
export LANG=ja_JP.UTF-8
export LESSCHARSET=utf-8

# japanese
alias lsv='ls -v'

SQUID_HOME=/opt/app/squid
POSTGRES_HOME=/usr/local/pgsql
APACHE_HOME=/usr/local/apache2
MAVEN_HOME=/usr/local/maven-2.0
export PATH=${MAVEN_HOME}/bin:${PATH}
export PATH=/usr/local/pgsql/bin:${PATH}
export PATH=${SQUID_HOME}/bin:${PATH}
export PATH=${APACHE_HOME}/bin:/usr/local/bin:${PATH}
export PGDATA=/usr/local/pgsql/data



export LD_LIBRARY_PATH= \
/usr/local/lib/ruby/gems/1.8/gems/postgres-0.7.1 \
:/usr/local/pgsql/lib:/usr/local/apache2/modules:/usr/local/lib:${LD_LIBRARY_PATH}

set -o vi
export TERM=teraterm

更新履歴

  • 2008/05/08 - Java5インストール記事を修正.
  • 2007/10/14 - diskutilにユーザ情報修正を追加
  • 2007/03/20 - diskutilを追加
  • 2007/03/15 - niutilによるユーザ作成を追加
  • 2006/09/22 - OSXのファイル名が文字化けする問題
  • 2006/04/20 - 日本語設定サンプルを追加
  • 2006/04/09 - Hungupの問題を記述した。IPAフォントのインストールを追加


イバラキングへのリンク Get Firefox Valid XHTML 1.1 Apple Darwinへのリンク