Portfile の作り方

提供: MacPorts-JP
移動: 案内, 検索
(その他の情報 (description, long_description, maintainers, platforms, homepage))
(再構成。)
1行: 1行:
Portfile をゼロから作るというチュートリアルです。筆者の手法が多分に含まれているので、もっと良いやり方もあると思います。
+
===Ports をインストールする仕組み===
  
対象の MacPorts のバージョンは 1.600 です。
+
MacPorts は ports をインストールする際、
 
+
==はじめに==
+
 
+
MacPortsでは、
+
 
+
  ./configure && make && sudo make install
+
 
+
でインストールできるソフトウェアはとても簡単に Portfile をつくることができます。
+
ここでは例として、[http://www.red-bean.com/cvsutils/ cvsutils] の Portfile を作成します。
+
 
+
===Ports のインストールの仕組み===
+
 
+
MacPorts は以下の順でインストールを進めます
+
  
 
# fetch - ソースコードなど必要なファイルをダウンロード
 
# fetch - ソースコードなど必要なファイルをダウンロード
27行: 14行:
 
# activate - ${prefix} 以下にインストールされたプログラムを配置
 
# activate - ${prefix} 以下にインストールされたプログラムを配置
  
これらの各手順の指示やパラメータを Portfile に記述することで、ソフトウェアのインストールと管理を行うのが MacPorts の仕組みです。
+
といった順にインストール処理が進められます。Portfile 中には、これらの各フェーズでの指示やパラメータが記述されています。
 
+
===よく使うコマンド (port, portindex)===
+
 
+
開発のときには port コマンドおよび portindex コマンドをよく使います。
+
  
; [[port(1)|port]] : ports インストールの各処理のほかにも、Portfile の場所を確認したり、Portfile の検証を行うこともできます。
+
==Ports tree の準備==
; portindex : ports tree の PortIndex ファイルを作成・更新します。このファイルがなければ MacPorts は Portfile を認識しません。パラメータなしで実行するとその場所に PortIndex ファイルを作成します。
+
  
==ports tree の準備==
+
'''ディレクトリの作成'''
  
'''local ports repository の作成'''
+
自前の Portfile を作成しメンテナンスしていくには、 MacPorts 本来の ports tree の他に、別の tree (local ports repository) を用意する必要があります。
  
自前の Portfile を作成し、メンテナンスしていくにはまず、 MacPorts 本来の ports tree の他に、別の tree (local ports repository) を作成します。
+
以下の例では、ホームディレクトリのすぐ下に macports というディレクトリを作成します。
このチュートリアルでは、ホームディレクトリのすぐ下に macports というディレクトリを作成します。
+
  
 
   % mkdir ~/macports
 
   % mkdir ~/macports
69行: 50行:
 
'''Portfile の配置'''
 
'''Portfile の配置'''
  
カテゴリ名に対応したディレクトリの配下に自前の Portfile を作成・配置してください。
+
作成した Portfile を、そのカテゴリ名に対応した ports tree 内のディレクトリに配置します。Portfile の書き方については後で解説します。
  
Portfile の書き方は、以下の節で説明します。
+
'''インデックスの生成'''
  
'''Portindex コマンドの実行'''
+
Portfile の配置が終われば、Ports tree のトップディレクトリで <tt>portindex</tt> コマンドを実行する必要があります。
 
+
Portfile の配置が終われば、次のコマンドを実行する必要があります。
+
  
 
  $ cd ~/macports
 
  $ cd ~/macports
 
  $ portindex
 
  $ portindex
  
==Portfile を書く==
+
==Portfile 作成チュートリアル==
  
===Portfile の作成 (PortSystem, name, categories, version)===
+
MacPortsでは、
 +
 
 +
  ./configure && make && sudo make install
 +
 
 +
でインストールできるソフトウェアはとても簡単に Portfile をつくることができます。
 +
 
 +
このチュートリアルでは、例として [http://www.red-bean.com/cvsutils/ cvsutils] の Portfile をゼロから作成します。筆者の手法が多分に含まれているので、もっと良いやり方もあると思います。対象の MacPorts のバージョンは 1.600 です。
 +
 
 +
===よく使うコマンド (port, portindex)===
 +
 
 +
開発のときには <tt>port</tt> コマンドおよび <tt>portindex</tt> コマンドをよく使います。
 +
 
 +
; [[port(1)|<tt>port</tt>]] : Ports インストールの各処理のほかにも、Portfile の場所を確認したり、Portfile の検証を行うこともできます。
 +
; <tt>portindex</tt> : Ports tree の PortIndex ファイルを作成・更新します。このファイルがなければ MacPorts は Portfile を認識しません。パラメータなしで実行するとその場所に PortIndex ファイルを作成します。
 +
 
 +
===最小限の情報 (PortSystem, name, categories, version)===
  
 
まずは最小限の情報を書きます。カテゴリ名/ソフトウェア名/Portfile という階層で Portfile を作成します。
 
まずは最小限の情報を書きます。カテゴリ名/ソフトウェア名/Portfile という階層で Portfile を作成します。
90行: 84行:
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
   PortSystem      1.0
+
   <span style="color:gray">PortSystem      1.0
 
   name            cvsutils
 
   name            cvsutils
 
   categories      devel
 
   categories      devel
   version        0.2.5
+
   version        0.2.5</span>
 
   ~/macports%  
 
   ~/macports%  
  
 
この Portfile が MacPorts システムに認識されているかを確認します。
 
この Portfile が MacPorts システムに認識されているかを確認します。
portindex コマンドにより PortIndex ファイルを作成・更新します。
+
<tt>portindex</tt> コマンドにより PortIndex ファイルを作成・更新します。
  
 
   ~/macports% portindex
 
   ~/macports% portindex
   Creating software index in /Users/steve/macports
+
   <span style="color:gray">Creating software index in /Users/steve/macports
 
   Adding port devel/cvsutils
 
   Adding port devel/cvsutils
 
    
 
    
106行: 100行:
 
   Ports successfully parsed:      1
 
   Ports successfully parsed:      1
 
   Ports failed:                  0
 
   Ports failed:                  0
    
+
   </span>
 
   ~/macports%
 
   ~/macports%
  
112行: 106行:
  
 
   ~/macports% find .
 
   ~/macports% find .
   .
+
   <span style="color:gray">.
 
   ./devel
 
   ./devel
 
   ./devel/cvsutils
 
   ./devel/cvsutils
 
   ./devel/cvsutils/Portfile
 
   ./devel/cvsutils/Portfile
   ./PortIndex
+
   ./PortIndex</span>
 
   ~/macports%  
 
   ~/macports%  
  
123行: 117行:
  
 
   ~/macports% port info cvsutils
 
   ~/macports% port info cvsutils
   cvsutils 0.2.5, devel/cvsutils (Variants: universal)
+
   <span style="color:gray">cvsutils 0.2.5, devel/cvsutils (Variants: universal)</span>
 
   ~/macports%
 
   ~/macports%
  
ここで port info が失敗するようなときは、
+
ここで <tt>port info</tt> が失敗するようなときは、
  
- sources.conf に、この ports tree が登録されていない
+
* sources.conf に、この ports tree が登録されていない
- PortIndex ファイルが正しくない場所に作成されている(./devel/PortIndex など)
+
* PortIndex ファイルが正しくない場所に作成されている(./devel/PortIndex など)
- portindex が失敗している
+
* <tt>portindex</tt> が失敗している
  
 
などの理由が考えられますので確認してください。
 
などの理由が考えられますので確認してください。
  
また、Portfile の場所を確認できる port file というコマンドもあります。
+
また、Portfile の場所を確認できる <tt>port file</tt> というコマンドもあります。
  
 
   ~/macports% port file cvsutils
 
   ~/macports% port file cvsutils
   /Users/steve/macports/devel/cvsutils/Portfile
+
   <span style="color:gray">/Users/steve/macports/devel/cvsutils/Portfile</span>
 
   ~/macports%
 
   ~/macports%
  
143行: 137行:
  
 
さて、もちろんこの Portfile は未完成ですから、まだプログラムをインストールすることはまだできません。
 
さて、もちろんこの Portfile は未完成ですから、まだプログラムをインストールすることはまだできません。
慣れないうちは、少し書いて portindex でエラーがでないか確認しながら進めていくとよいでしょう。
+
慣れないうちは、少し書いて <tt>portindex</tt> でエラーがでないか確認しながら進めていくとよいでしょう。
  
 
===ソースコードのダウンロード (master_sites, checksums)===
 
===ソースコードのダウンロード (master_sites, checksums)===
151行: 145行:
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
   PortSystem      1.0
+
   <span style="color:gray">PortSystem      1.0
 
   name            cvsutils
 
   name            cvsutils
 
   categories      devel
 
   categories      devel
 
   version        0.2.5
 
   version        0.2.5
   master_sites    <nowiki>http://www.red-bean.com/cvsutils/releases/</nowiki>
+
   master_sites    <nowiki>http://www.red-bean.com/cvsutils/releases/</nowiki></span>
 
   ~/macports% portindex
 
   ~/macports% portindex
 
   ~/macports%  
 
   ~/macports%  
162行: 156行:
  
 
   ~/macports% sudo port fetch cvsutils
 
   ~/macports% sudo port fetch cvsutils
   --->  Fetching cvsutils
+
   <span style="color:gray">--->  Fetching cvsutils
   --->  Attempting to fetch cvsutils-0.2.5.tar.gz from <nowiki>http://www.red-bean.com/cvs</nowiki>
+
   --->  Attempting to fetch cvsutils-0.2.5.tar.gz from <nowiki>http://www.red-bean.com/cvsutils/releases/</nowiki></span>
  utils/releases/
+
 
   ~/macports%  
 
   ~/macports%  
  
187行: 180行:
  
 
   ~/macports% md5 -q /opt/local/var/macports/distfiles/cvsutils/cvsutils-0.2.5.tar.gz
 
   ~/macports% md5 -q /opt/local/var/macports/distfiles/cvsutils/cvsutils-0.2.5.tar.gz
   7e104c4bbace3d7230ade5403a06007f
+
   <span style="color:gray">7e104c4bbace3d7230ade5403a06007f</span>
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
   PortSystem      1.0
+
   <span style="color:gray">PortSystem      1.0
 
   name            cvsutils
 
   name            cvsutils
 
   categories      devel
 
   categories      devel
 
   version        0.2.5
 
   version        0.2.5
 
   master_sites    <nowiki>http://www.red-bean.com/cvsutils/releases/</nowiki>
 
   master_sites    <nowiki>http://www.red-bean.com/cvsutils/releases/</nowiki>
   checksums      md5 7e104c4bbace3d7230ade5403a06007f
+
   checksums      md5 7e104c4bbace3d7230ade5403a06007f</span>
 
   ~/macports% portindex
 
   ~/macports% portindex
 
   ~/macports% sudo port checksum cvsutils
 
   ~/macports% sudo port checksum cvsutils
   --->  Fetching cvsutils
+
   <span style="color:gray">--->  Fetching cvsutils
   --->  Verifying checksum(s) for cvsutils
+
   --->  Verifying checksum(s) for cvsutils</span>
 
   ~/macports%  
 
   ~/macports%  
 
   
 
   
210行: 203行:
  
 
   ~/macports% sudo port destroot cvsutils
 
   ~/macports% sudo port destroot cvsutils
   --->  Extracting cvsutils
+
   <span style="color:gray">--->  Extracting cvsutils
 
   --->  Configuring cvsutils
 
   --->  Configuring cvsutils
 
   --->  Building cvsutils with target all
 
   --->  Building cvsutils with target all
   --->  Staging cvsutils into destroot
+
   --->  Staging cvsutils into destroot</span>
 
   ~/macports%  
 
   ~/macports%  
  
219行: 212行:
  
 
   ~/macports% find ./devel/cvsutils/work/destroot
 
   ~/macports% find ./devel/cvsutils/work/destroot
   ./devel/cvsutils/work/destroot
+
   <span style="color:gray">./devel/cvsutils/work/destroot
 
   ./devel/cvsutils/work/destroot/opt
 
   ./devel/cvsutils/work/destroot/opt
 
   ./devel/cvsutils/work/destroot/opt/local
 
   ./devel/cvsutils/work/destroot/opt/local
233行: 226行:
 
   ./devel/cvsutils/work/destroot/opt/local/share/man
 
   ./devel/cvsutils/work/destroot/opt/local/share/man
 
   ./devel/cvsutils/work/destroot/opt/local/share/man/man1
 
   ./devel/cvsutils/work/destroot/opt/local/share/man/man1
   ./devel/cvsutils/work/destroot/opt/local/share/man/man1/cvsutils.1.gz
+
   ./devel/cvsutils/work/destroot/opt/local/share/man/man1/cvsutils.1.gz</span>
 
   ~/macports%  
 
   ~/macports%  
  
239行: 232行:
 
なぜ一度 destroot で止めて確認するかというと、うまく構築されずに destroot 時に ${prefix}/bin などにインストールされてしまうことがあるからです。
 
なぜ一度 destroot で止めて確認するかというと、うまく構築されずに destroot 時に ${prefix}/bin などにインストールされてしまうことがあるからです。
  
ここで問題が起きたときは、-v や -d オプションを付けて再度 port -v destroot などを実行しその出力から問題点を推測します。
+
ここで問題が起きたときは、<tt>-v</tt> <tt>-d</tt> オプションを付けて再度 <tt>port -v destroot</tt> などを実行しその出力から問題点を推測します。
  
 
再実行の前には
 
再実行の前には
  
 
   ~/macports% sudo port clean cvsutils
 
   ~/macports% sudo port clean cvsutils
   --->  Cleaning cvsutils
+
   <span style="color:gray">--->  Cleaning cvsutils</span>
 
   ~/macports%  
 
   ~/macports%  
  
 
を実行し、work ディレクトリを空にしておきます。
 
を実行し、work ディレクトリを空にしておきます。
(Portfile を編集すると、port コマンドの実行時に clean が自動的に実行されるので、編集〜再実行を繰り返すときは自分で clean を実行しなくても大丈夫です)
+
(Portfile を編集すると、<tt>port</tt> コマンドの実行時に <tt>clean</tt> が自動的に実行されるので、編集〜再実行を繰り返すときは自分で <tt>clean</tt> を実行しなくても大丈夫です)
  
 
===その他の情報 (description, long_description, maintainers, platforms, homepage)===
 
===その他の情報 (description, long_description, maintainers, platforms, homepage)===
255行: 248行:
  
 
   ~/macports% port info cvsutils
 
   ~/macports% port info cvsutils
   cvsutils 0.2.5, devel/cvsutils (Variants: universal)
+
   <span style="color:gray">cvsutils 0.2.5, devel/cvsutils (Variants: universal)</span>
 
   ~/macports%  
 
   ~/macports%  
  
これでは port info の出力が明らかに少なすぎます。
+
これでは <tt>port info</tt> の出力が明らかに少なすぎます。
 
なにをするソフトウェアかもわかりません。
 
なにをするソフトウェアかもわかりません。
  
port lint は、ガイドラインに沿った Portfile となっているかを検証し、不備を指摘してくれるコマンドです。これを実行してみましょう。
+
<tt>port lint</tt> は、ガイドラインに沿った Portfile となっているかを検証し、不備を指摘してくれるコマンドです。これを実行してみましょう。
  
 
   ~/macports% sudo port lint cvsutils
 
   ~/macports% sudo port lint cvsutils
   --->  Verifying Portfile for cvsutils
+
   <span style="color:gray">--->  Verifying Portfile for cvsutils
 
   Warning: Line 1 is missing RCS tag ($Id$)
 
   Warning: Line 1 is missing RCS tag ($Id$)
 
   Warning: Line 2 should be a newline (after PortSystem)
 
   Warning: Line 2 should be a newline (after PortSystem)
272行: 265行:
 
   Error: Missing required variable: platforms
 
   Error: Missing required variable: platforms
 
   Error: Missing required variable: homepage
 
   Error: Missing required variable: homepage
   Error: Target org.macports.lint returned: can't read "maintainers": no such  
+
   Error: Target org.macports.lint returned: can't read "maintainers": no such variable
  variable
+
   Error: Status 1 encountered during processing.</span>
   Error: Status 1 encountered during processing.
+
  
 
たくさんのエラーと警告が出力されました。
 
たくさんのエラーと警告が出力されました。
281行: 273行:
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
   # $Id: $
+
   <span style="color:gray"># $Id: $
 
   PortSystem      1.0
 
   PortSystem      1.0
 
    
 
    
293行: 285行:
 
   maintainers    steve
 
   maintainers    steve
 
   platforms      darwin
 
   platforms      darwin
   homepage        <nowiki>http://www.red-bean.com/cvsutils/</nowiki>
+
   homepage        <nowiki>http://www.red-bean.com/cvsutils/</nowiki></span>
 
   ~/macports% sudo port lint cvsutils
 
   ~/macports% sudo port lint cvsutils
   --->  Verifying Portfile for cvsutils
+
   <span style="color:gray">--->  Verifying Portfile for cvsutils
 
   Warning: Line 2 should be a newline (after RCS tag)
 
   Warning: Line 2 should be a newline (after RCS tag)
   --->  0 errors and 1 warnings found.
+
   --->  0 errors and 1 warnings found.</span>
 
   ~/macports%  
 
   ~/macports%  
  
304行: 296行:
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% vi devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
 
   ~/macports% cat devel/cvsutils/Portfile
   # $Id: $
+
   <span style="color:gray"># $Id: $
 
    
 
    
 
   PortSystem      1.0
 
   PortSystem      1.0
317行: 309行:
 
   maintainers    steve
 
   maintainers    steve
 
   platforms      darwin
 
   platforms      darwin
   homepage        <nowiki>http://www.red-bean.com/cvsutils/</nowiki>
+
   homepage        <nowiki>http://www.red-bean.com/cvsutils/</nowiki></span>
 
   ~/macports% sudo port lint cvsutils
 
   ~/macports% sudo port lint cvsutils
   rtfile changed since last build; discarding previous state.
+
   <span style="color:gray">Portfile changed since last build; discarding previous state.
 
   --->  Verifying Portfile for cvsutils
 
   --->  Verifying Portfile for cvsutils
 
   Warning: Line 2 should be a newline (after RCS tag)
 
   Warning: Line 2 should be a newline (after RCS tag)
   --->  0 errors and 1 warnings found.
+
   --->  0 errors and 1 warnings found.</span>
 
   ~/macports% sudo port lint cvsutils
 
   ~/macports% sudo port lint cvsutils
   --->  Verifying Portfile for cvsutils
+
   <span style="color:gray">--->  Verifying Portfile for cvsutils
   --->  0 errors and 0 warnings found.
+
   --->  0 errors and 0 warnings found.</span>
 
   ~/macports%  
 
   ~/macports%  
  
334行: 326行:
 
; description, long_description : READMEやウェブサイトからコピペ。description と long_description は同じでもかまいません。
 
; description, long_description : READMEやウェブサイトからコピペ。description と long_description は同じでもかまいません。
  
port info の出力もいい感じになりました。
+
<tt>port info</tt> の出力もいい感じになりました。
  
 
   ~/macports% port info cvsutils
 
   ~/macports% port info cvsutils
   cvsutils 0.2.5, devel/cvsutils (Variants: universal)
+
   <span style="color:gray">cvsutils 0.2.5, devel/cvsutils (Variants: universal)
 
   <nowiki>http://www.red-bean.com/cvsutils/</nowiki>
 
   <nowiki>http://www.red-bean.com/cvsutils/</nowiki>
 
    
 
    
343行: 335行:
 
    
 
    
 
   Platforms: darwin
 
   Platforms: darwin
   Maintainers: steve...
+
   Maintainers: steve...</span>
   ~/macports%  
+
   ~/macports%
  
 
===インストールファイルの確認===
 
===インストールファイルの確認===
351行: 343行:
  
 
   ~/macports% sudo port install cvsutils
 
   ~/macports% sudo port install cvsutils
   --->  Fetching cvsutils
+
   <span style="color:gray">--->  Fetching cvsutils
 
   --->  Verifying checksum(s) for cvsutils
 
   --->  Verifying checksum(s) for cvsutils
 
   --->  Extracting cvsutils
 
   --->  Extracting cvsutils
359行: 351行:
 
   --->  Installing cvsutils 0.2.5_0
 
   --->  Installing cvsutils 0.2.5_0
 
   --->  Activating cvsutils 0.2.5_0
 
   --->  Activating cvsutils 0.2.5_0
   --->  Cleaning cvsutils
+
   --->  Cleaning cvsutils</span>
 
   ~/macports%  
 
   ~/macports%  
  
365行: 357行:
  
 
   ~/macports% port contents cvsutils
 
   ~/macports% port contents cvsutils
   Port cvsutils contains:
+
   <span style="color:gray">Port cvsutils contains:
 
     /opt/local/bin/cvschroot
 
     /opt/local/bin/cvschroot
 
     /opt/local/bin/cvsco
 
     /opt/local/bin/cvsco
373行: 365行:
 
     /opt/local/bin/cvstrim
 
     /opt/local/bin/cvstrim
 
     /opt/local/bin/cvsu
 
     /opt/local/bin/cvsu
     /opt/local/share/man/man1/cvsutils.1.gz
+
     /opt/local/share/man/man1/cvsutils.1.gz</span>
 
   ~/macports%  
 
   ~/macports%  
  
379行: 371行:
 
あとは実際に使ってみるだけです。
 
あとは実際に使ってみるだけです。
  
==Portfile についてもっと詳しく==
+
===Portfile についてもっと詳しく===
 
   
 
   
 
今回の例は単純なパターンでしたが、Portfile にもっと多くの項目を書いてカスタマイズ
 
今回の例は単純なパターンでしたが、Portfile にもっと多くの項目を書いてカスタマイズ
385行: 377行:
 
Portfile の各項目について詳しく知るには、  
 
Portfile の各項目について詳しく知るには、  
 
   
 
   
* [[portfile(7)]]
+
* <tt>[[portfile(7)]]</tt>
 
* [http://guide.macports.org/ MacPorts Guide]
 
* [http://guide.macports.org/ MacPorts Guide]
 
* 他のPortfile(通常は ${prefix}/var/macports/sources/rsync.macports.org/release/ports/ にあります)  
 
* 他のPortfile(通常は ${prefix}/var/macports/sources/rsync.macports.org/release/ports/ にあります)  
 
   
 
   
が参考になります。  
+
が参考になります。
+
 
 
==コメント==
 
==コメント==
  
 
<comments/>
 
<comments/>
 
----
 
----
* 書いてみました。間違ってるところあればガンガンなおしちゃってください。 -- [[利用者:kimuraw]] &new{2008-09-27 (土) 02:06:01};
+
* 書いてみました。間違ってるところあればガンガンなおしちゃってください。 -- [[利用者:kimuraw|kimuraw]] 2008-09-27 (土) 02:06:01
  
 
[[Category:HowTo]]
 
[[Category:HowTo]]

2009年11月1日 (日) 12:01時点における版

個人用ツール
名前空間

変種
操作
案内
文書
ファイル
ツールボックス