具体的なMacPortsの説明
MacPortsは、Mac OS X用のパッケージ管理システムです。
アプリケーションを一元管理でき、ダウンロードやインストールも自動で行ってくれます。ちなみにportとは、コンピュータサイエンスにおいて「移植」という意味を持ちます。(Wikipediaリンク)
起源はBSDにあるらしく、そこから移植されたものという意味合いらしいです。
用語の確認
portコマンドの主要なアクション
- #006600;">version:MacPortsのバージョンを確認する
- #006600;">selfupdate:MacPorts自身を更新する
- #006600;">search:インストール可能なアプリケーションを検索する
- #006600;">info:パッケージの詳細情報を表示する
- #006600;">deps:パッケージの依存関係を表示する
- #006600;">install:パッケージをインストールする
- #006600;">installed:インストール済みパッケージを一覧表示する
- #006600;">contents:指定パッケージからインストールされたファイルを一覧表示する
- #006600;">clean:ビルド用の中間ファイルを削除する
- #006600;">uninstall:パッケージをアンインストールする
- #006600;">outdated:インストール済みパッケージの更新を確認する
- #006600;">upgrade:指定パッケージを更新する
MacPortsのインストールディレクトリ
/opt/local
portコマンドを使うためには、まずここにパスを通す必要があります。また、MacPortsにはアンインストーラがありません。MacPorts自体をアンインストールするには、このディレクトリを手動で削除します。
インストールと設定
インストールとパスの通し方はMacPortsWiki-JPを参照。
http://lapangan.net/darwinports/index.php?TheMacPortsWiki%2FInstallingMacPorts
MacPortsのインストーラは下記URLからダウンロードします。2010/09/07現在では、MacPorts-1.9.1が最新です。
The MacPorts Project -- Download & Installation
上記準備が整ったら、さっそくコマンドをたたいて確認してみます。
$port version Version: 1.9.1
※versionアクションはオプションではありません。ハイフンは不要です。
MacPorts自身を最新にする
さっそく使い方を説明していきます。MacPortsはportコマンドで操作します。
まずはselfupdateします。使うたびに毎回かならずしてください。なぜかというと、MacPortsは、インストールするパッケージの情報を一元管理しています。selfupdateしておかないと、古いものが表示されてしまいます。
最新バージョンがみつかった場合、自動インストールされます。大体30秒程度でおわります。
$sudo port selfupdate
selfupdateアクションは -d(debugフラグの意)を合わせることで、詳細表示可能です。自動インストール中は暇なので、付けておいた方がさみしくないかもしれません。
AIR: ~$sudo port -d selfupdate Password:
-
-
- > Updating the ports tree
-
-
-
- > MacPorts base is already the latest version
-
インストール可能なパッケージを検索する
searchアクションで、インストールしたいパッケージを探します。本エントリーでは、プログラミング言語Scalaを探してみます。
AIR: ~$port search scala cassandra @0.6.2 (databases) A highly scalable, eventually consistent, distributed, structured key-value store. dspam @3.9.0 (mail, net) Scalable, open-source statistical anti-spam filter (略) py26-tornado @1.0 (python, www) Scalable, non-blocking web server and related tools sbt @0.7.4 (devel, java) Simple build tool (sbt) is designed to simplify building Scala projects. scala @2.7.7 (lang, java) The Scala Programming Language scala-devel @2.8.0.Beta1-prerelease (lang, java) The Scala Programming Language scala-migrations @0.9.2 (java) Database migrations written in Scala scala27 @2.7.7 (lang, java) The Scala Programming Language scala28 @2.8.0 (lang, java) The Scala Programming Language (略) Found 20 ports. AIR: ~$
20個もみつかってしまいました。いろいろなパッケージで「scala」という単語が使われているようですね。プログラミング言語のScalaは、scala27 @2.7.7 とか scala28 @2.8.0 とかです。
infoアクションで詳しい情報をみてみます。
AIR: ~$port info scala28 scala28 @2.8.0 (lang, java) Description: Scala is a modern multi-paradigm programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages. It runs inside a Java Virtual Machine and is fully interoperable with Java. Homepage: http://www.scala-lang.org/ Platforms: darwin License: unknown Maintainers: openmaintainer@macports.org, brett@macports.org, blair@macports.org AIR: ~$
つたない英語力で読んでみましたが、これで間違いないようです。2.7.7の方が安定しているかもしれませんが、調べるのも面倒なので気にせず2.8系をインストールすることに決めました。
パッケージの依存関係を調べる
さて、早速インストール……する前に依存関係を確認すべきです。
MacPortsに限らず、Linuxの各種ディストリビューションでもそうですが、パッケージ管理システムの大きなメリットのひとつが、依存関係を考慮してインストールしてくれるところにあります。
依存関係とは、「Aというパッケージを使うには、Bというパッケージをあらかじめインストールしていなければならない」という感じのことです。MacPortsは、依存関係を解決するために、自動でBというパッケージをインストールしてくれるんですね。便利です。
depsアクションで確認してみましょう。
AIR: ~$port deps scala28 scala28 @2.8.0_0 has no dependencies.
no dependencies. とのことなので何者にも依存してないようです。ScalaといえばJVM上で動く言語ですが、Macには最初からJavaが入っているので必要ないらしい。(参考記事リンク)
依存関係のあるパッケージも見てみましょう。ブログソフトウェアとして不動の地位を占めるWordpressさんです。
AIR: ~$port search wordpress wordpress @2.8.4 (www) A state-of-the-art semantic personal publishing platform AIR: ~$ AIR: ~$ AIR: ~$port deps wordpress Library Dependencies: php5-web, php5-mysql AIR: ~$
php5 と mysql に依存しているようです。その依存関係もさらにみてみます。
AIR: ~$port deps php5-web Library Dependencies: php5
AIR: ~$port deps php5 Build Dependencies: pkgconfig, autoconf213 Library Dependencies: gsed, libtool, libxml2, bzip2, mhash, pcre, readline, zlib, apache2
AIR: ~$port deps apache2 Library Dependencies: apr, apr-util, expat, openssl, pcre AIR: ~$
php5-web は php5 に依存し、php5 は gsed とか libtool とか bzip2 とか apache2(!?)に依存……。
apache2 は apr とか apr-util とか expat とかに依存……!! こういうのがあるから、インストール前にdepsアクションすべきなんです。
もし安易にインストールしてしまっていたら、インストール完了まで一晩寝かせなければならないところでした。というか、Wordpressを固めたファイルだけもらえるのかと思ったら、php もmysql も apache も含めた完全インストールだったでござるの巻。
こんなに一片にインストールしちゃうとわからん殺しに陥り、MacPorts をアンインストールしてスッキリしたくなっちゃうところでした。ご利用は計画的に。
インストール
Scalaのインストールに戻ります。installアクションを使います。
AIR: ~$sudo port install scala28 Password:
-
-
- > Computing dependencies for scala28
- > Fetching scala28
- > Attempting to fetch scala-2.8.0.final.tgz from http://distfiles.macports.org/scala28
- > Verifying checksum(s) for scala28
- > Extracting scala28
- > Configuring scala28
- > Building scala28
- > Staging scala28 into destroot
- > Installing scala28 @2.8.0_0
- > Activating scala28 @2.8.0_0
- > Cleaning scala28
-
エラーがでてないので、正常にインストールできたようです。
インストール済のパッケージを確認
installedアクションで、インストール済のパッケージが一覧表示されます。
AIR: ~$port installed The following ports are currently installed: scala28 @2.8.0_0 (active) AIR: ~$
インストールされたパッケージの全ファイルを表示
contentsアクションを使います。
今回はプログラミング言語のインストールなので、別途binにパスを通す必要があると予想されます。インストールされたファイル一覧をみることで、どこにパスを通せば良いか目処がつきます。
AIR: ~$port contents scala28 Port scala28 contains: /opt/local/bin/fsc-2.8 /opt/local/bin/sbaz-2.8 /opt/local/bin/sbaz-setup-2.8 /opt/local/bin/scala-2.8 /opt/local/bin/scalac-2.8 (略) /opt/local/share/scala-2.8/src/scala-compiler-src.jar /opt/local/share/scala-2.8/src/scala-dbc-src.jar /opt/local/share/scala-2.8/src/scala-library-src.jar /opt/local/share/scala-2.8/src/scala-swing-src.jar AIR: ~$
インストールに失敗したらクリーン
cleanアクションは、ビルドに使われた中間ファイルを削除します。
installアクションの際に、sudo 付け忘れて失敗するというのをよくやります。そんなときはcleanアクションでキレイにしましょう。
sudo port clean --all scala28
アンインストール
uninstallアクションは、その名のとおりパッケージをアンインストールします。
もしアンインストールしたいパッケージに、別のパッケージと依存関係を持つパッケージが含まれていた場合、なにも削除されません。
依存関係のあるパッケージを、あらかじめアンインストールしておく必要があります。
sudo port uninstall scala28
-f(forceスイッチ)を使えば依存関係を無視してアンインストール可能です。恐いので使ったことないですが。
sudo port -f uninstall scala28
インストール済パッケージに最新版がでてないか確認する
※事前にselfupdate!!
AIR: ~$port outdated No installed ports are outdated. AIR: ~$
さきほどインストールしたばかりなので、何もないですね。
最新に更新する
outdatedアクションは確認するだけなので、更新がみつかったらupgradeアクションで最新にします。
port upgrade scala28
個別にではなく、インストール済の全パッケージを一辺に更新したい場合は、upgradeアクションとoutdatedを組み合わせて使うことができます。
$port upgrade outdated
なお、upgradeアクションのデフォルト設定では、古くなった現在のバージョンをアンインストールしません(どこかに隔離されます)。
アンインストールさせたい場合は、-uオプションを付けてください。
$port -u upgrade scala
後で古いバージョンのみを消したい場合は、uninstallアクションでバージョンを指定してあげます。
$port installed The following ports are currently installed: sbt @0.7.4_1 (active) scala28 @2.8.0_0 scala28 @2.8.0_3 (active) scala_select @0.1_1 (active)
$sudo port uninstall scala28@2.8.0_0
-
-
- > Uninstalling scala28 @2.8.0_0
- > Cleaning scala28
-
$port installed The following ports are currently installed: sbt @0.7.4_1 (active) scala28 @2.8.0_3 (active) scala_select @0.1_1 (active)