#author("2022-02-20T07:47:04+00:00","default:src128","src128")
#author("2022-02-20T07:47:24+00:00","default:src128","src128")
&tag(Mac, MacPorts);
*目次 [#y271b7ce]
#contents

*参考情報 [#s1144ec4]
-[[Lion]]
-[[MacPortsの使い方まとめ | karakaram-blog:http://www.karakaram.com/mac/macports-howto/?utm_source=rss&utm_medium=rss&utm_campaign=macports-howto]]
-[[Mac OS 10.6 でMacportsを使って環境構築( Apache + MySQL + PHP +phpMyadmin) - c_mutoh’s Diary:http://d.hatena.ne.jp/c_mutoh/20110110/1294678976]]
*関連ページ [#f36e138b]
-[[./解析]]
-[[./セットアップ_2011-11-05]]
-[[launchctl]]

**インストールするもの [#k9f8dd8e]
-小物ツール
 sudo port install  peco rmtrash source-highlight the_silver_searcher tmux
-[[./emacs]]
-[[./mysql8]]
-[[./mysql5.5]]
-[[./apache2]]
-[[./nginx]]
-[[./php7]]
-[[./php5]]
-[[./yarn]]
-[[./redis]]
**過去の遺産 [#t6053abb]
-[[./mysql5]]
-[[./php54]]
-[[./subversion]]
-[[./python26]]
-[[./python27]]
-[[./ruby19]]
-[[./rbenv]]
-[[./rails3]]
-[[./git-core]]
-[[./zsh]]
-[[./tomcat6]]
-[[./Mecab]]
-[[./postgresql]]
-[[./ImageMagick]]
*インストール [#m6792b16]
-[[The MacPorts Project -- Download & Installation:http://www.macports.org/install.php]]からSnowLeopard用のdmgファイルをダウンロード。)。
-MacPorts-1.9.2-10.6-SnowLeopard.dmgをダブルクリックしてインストール。
-selfupdate実行
 sudo port selfupdate
-xcode 4以降以下のコマンドの実行が必要。
 xcodebuild -license
*再インストール [#p4737967]
-OSがバージョンアップした時は再インストールしたほうが良い。[[【Tips】「MacPorts」の調子が悪い時は再インストールしたほうが良い!?:http://www.softantenna.com/wp/mac/macports-reinstall/]]
-削除する前にインストールされているパッケージ一覧をlist.txtに保存しておく。
-/opt/localにはカスタマイズした設定ファイルが残っている可能性があるのでリネームしたほうが安全。
#pre{{
$ port installed > list.xt
$ sudo port deactivate active
$ sudo port -f uninstall installed
$ sudo port clean all
$ sudo rm -rf /Library/Tcl/macports1.0
$ sudo mv /opt/local /opt/local.old
}}

*macOSアップグレード時のアップグレード手順 [#eec34ed8]
-[[Migration – MacPorts:https://trac.macports.org/wiki/Migration]]に従う。

**手順 [#wf2410cd]
-インストール済みのportのリストを取得するところまではOSアップグレード前に実行すること(アップグレード後に既存のportが動かなくなるかもしれないので)。
-最新版のバイナリパッケージのインストール。
-macports.conf.defaultをmacports.confにコピー。
-インストール済みのパッケージ一覧を保存
 port -qv installed > myports.txt
-requrestedパッケージの一覧を保存(自分で明示的に指定したもの)
 port echo requested | cut -d ' ' -f 1 > requested.txt
-パッケージをアンインストール
 sudo port -f uninstall installed
-その他ファイルを削除
 sudo rm -rf /opt/local/var/macports/build/*
-tclスクリプトを利用してインストール
#pre{{
curl --location --remote-name \
    https://github.com/macports/macports-contrib/raw/master/restore_ports/restore_ports.tcl
chmod +x restore_ports.tcl
sudo ./restore_ports.tcl myports.txt
}}
-requested状態を復帰
 sudo port unsetrequested installed
 xargs sudo port setrequested < requested.txt

※最後の2つの手順はやめて自力でインストールしなおしてもよいかも。 

*MacPorts自体をアンインストールする [#m29b21f6]
-[[2.5.&#160;Uninstall:http://guide.macports.org/chunked/installing.macports.uninstalling.html]]に従ってUninstallする。
-portsの削除
#pre{{
sudo port -fp uninstall installed
}}
-macportsユーザーとグループの削除。先に削除しないとSIPによって/opt/localが削除できない。[[mojave - SIP preventing deletion of /opt/local - Ask Different:https://apple.stackexchange.com/questions/342090/sip-preventing-deletion-of-opt-local]]
#pre{{
$ sudo dscl . -delete /Users/macports
$ sudo dscl . -delete /Groups/macports
}}
-不要なディレクトリの削除
#pre{{
sudo /bin/rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports
}}
- 以下のファイルは存在しないようだった。エラーがでた場合はその行を削除して再実行する。
#pre{{
zsh: no matches found: /Library/LaunchDaemons/org.macports.*
zsh: no matches found: /Library/Receipts/DarwinPorts*.pkg
zsh: no matches found: /Library/Receipts/MacPorts*.pkg
}}
-結局以下のコマンドで削除できる。
#pre{{
sudo /bin/rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports
}}
*操作 [#da576c82]

**MacPortsを最新の状態に保つ [#k50b08e0]
***portとパッケージの更新情報を最新にする [#yd9df47a]
 sudo port selfupdate
portコマンド自体の更新とローカルにキャッシュしていあるパッケージ情報が更新される。定期的に実行しないと古いパッケージがインストールされるかもしれないという問題がある?([[Mint's log: MacPortsのselfupdateを忘れた→はまる:http://googlewhacks.blogspot.com/2009/03/macportsselfupdate.html]])。

***更新されたパッケージを表示する [#v7226e1a]
 sudo port outdated

***インストール済みソフトを全てアップデート [#jeb14667]
 sudo port upgrade installed
-古いバージョンを削除したい場合 "-u" をつける。
 sudo port upgrade  -u installed
-inactiveになったバージョンを後からアンインストールする場合以下を実行。
 sudo port uninstall inactive

***個別ソフトをアップデート [#o6e8d801]
-通常の方法
 sudo port upgrade emacs
-古いバージョンを削除したい場合 "-u"をつける
 sudo port upgrade -u emacs
**パッケージを検索する [#p1e23c05]
-searchコマンドでさがせる
 sudo port search <パッケージ名>

**ファイルが含まれているパッケージを検索 [#b9203a67]
-providesコマンドを使用する
 sudo provides <ファイル名>

**一覧表示 [#o8033735]
-listコマンドで全パッケージ一覧
 sudo port list
-インストル済みパッケージ一覧
 sudo port list installed

**インストールする [#m5e43cb2]
 sudo port install <パッケージ名>

***過去のバージョンをインストールする [#i4ebe587]
-[[gdb - Specify which version to install with macports - Stack Overflow:http://stackoverflow.com/questions/5235215/specify-which-version-to-install-with-macports]]によると「port install ポート名 @バージョン番号」で過去のバージョンをインストール可能。ただし過去のバージョン一覧を取得するのにはtrackのlogを確認するしかない?
 sudo port install zmq @3.2.2

***過去のバージョンに切り替える [#y8147bad]
-過去のバージョンの一覧表示
 sudo port installed imagemagick
-過去のバージョンへの切り替え
 sudo port activate ImageMagick @6.9.4-4_0+x11

***Portfileをカスタムしていんすとーるする [#efd9ec1d]
-「port edit」を使用する
 sudo port edit nginx
**アンインストールする [#m89ab78e]
***パッケージを指定してアンインストール [#j3125007]
 sudo port uninstall <パッケージ名>
***inactiveなパッケージを削除 [#b15a7510]
 sudo port uninstall inactive
***依存関係ごと削除 [#ic96c588]
-[[Chapter 3. Using MacPorts:https://guide.macports.org/chunked/using.html]]を参照。

-"--follow-dependents"
--portを削除するまえにそのportに依存する全てのportを再帰的にアンインストールする。
 sudo port unintall --follow-dependents <パッケージ名>
--libcomerrをインストールする場合に、このライブラリに依存するkerberos5をsubversionもアンインストールしたい場合。
 sudo port uninstall --follow-dependents libcomerr
-"--follow-dependencies" 
--portを削除して不要になったportも再インストールする。
 sudo port unintall --follow-dependencies <パッケージ名>
--あるプログラムをアンインストールする場合、プログラムが依存するライブラリもまとめてアンインストールしたい場合。

以下参考情報

-二つのオプションの違い
--[[How to remove unused MacPorts packages? - Ask Different:https://apple.stackexchange.com/questions/10149/how-to-remove-unused-macports-packages]]
--[[Macports uninstall only one Python version - Stack Overflow:https://stackoverflow.com/questions/45721014/macports-uninstall-only-one-python-version?rq=1]]
-"-y"オプションを指定すると実際に削除せず確認できる。
-特定のバージョンを根こそぎアンインストールしたい場合 
 sudo port uninstall --follow-dependents python34
-例えばPHPをアップグレードする場合[[upgrading php7 with MacPorts:https://gist.github.com/roberto-butti/9fd8943851921f1e6f9c]]、単にアスタリスクでもいけるか。
 sudo port uninstall php71*


実例
-php56関連をインストール
 sudo port install php56-apache2handler php56-mysql php56-mbstring
 sudo port installed | grep php
  php56 @5.6.40_2+libedit (active)
  php56-apache2handler @5.6.40_0 (active)
  php56-mbstring @5.6.40_0 (active)
  php56-mysql @5.6.40_0+mysqlnd (active)
  php_select @1.0_0 (active)
-php56をアンインストールする(警告は表示されるけどphp56に依存したパッケージはそのままのこる)。
 $ sudo port uninstall php56
 sudo port installed | grep php
  php56-apache2handler @5.6.40_0 (active)
  php56-mbstring @5.6.40_0 (active)
  php56-mysql @5.6.40_0+mysqlnd (active)
  php_select @1.0_0 (active)
-"--follow-dependencies"の場合、php56が依存しているphp-selectが削除される。
 sudo port uninstall --follow-dependencies php56
 sudo port installed | grep php
  php56-apache2handler @5.6.40_0 (active)
  php56-mbstring @5.6.40_0 (active)
  php56-mysql @5.6.40_0+mysqlnd (active)
-"--follow-dependents"の場合、php56に依存しているphp56-apache2handlerなどが削除される
 sudo port uninstall --follow-dependents php56
 sudo port installed | grep php
  php_select @1.0_0 (active)

***容量が足らなくなってきた場合全体的にクリーンする [#y9822839]
-[[Macでディスク容量が足りなくなってきたら1【portをcleanしよう】 - En blanc et noir:https://t-mimori.hatenadiary.org/entry/20101020/1287568644]]
-port cleanを実行
 sudo port clean --all all
-不要なパッケージを削除
 sudo port uninstall inactive

**その他 [#me7babfb]
***パッケージの内容を表示 [#z4038ad6]
-パッケージに含まれるすべてのファイルをリストする。
 sudo port contents パッケージ名

***ファイルが含まれるを表示 [#f7a9fcf8]
 sudo port provides  ./libaprutil-1.0.dylib

***ソースコードを展開する [#f5c5edeb]
 sudo port extract nginx
**インストールしたportのリストを保存 [#i17d58fc]
-依存関係を含めて保存
 sudo port installed > list.txt
-自分が明示的にインストールしたportのみを保存
 sudo port installed requested > requested_list.txt
**Variants [#c241e3ab]
***インストール済みパッケージのVariantsを表示する。 [#caf15f31]
-port installed <パッケージ名>で表示できる。
 port installed php5
***インストール済みパッケージのVariantsを変更する。 [#v168979a]
-port upgrade --enforce-variantsを使う。
 sudo port upgrade --enforce-variants php5 +pear
*その他 [#gf5439eb]
**Homebrewとどっちがよいか [#x242da66]
MacPortsの良い点
-オールインワン。システムのライブラリなどに極力依存しないよう作られているのでOSがバージョンアップしてもMacPortsは壊れないことも(絶対ではない)。
-/opt/localにまとめられている。/usr/localがフリーなので/usr/localに自分でコンパイルしたソフトを入れることができる。
-apache2やphpなどもパッケージがある。
-パッケージの数が多い。

MacPortsの悪い点
-依存関係が芋づる式でコンパイルに時間がかかるしHDDもくう(オールインワンであることの裏返し)。
-パッケージに手をいれるとかめんどくさすぎる。
-パスが特殊。

Homebrewの良い点
-最小限しかいれないのでコンパイルが早い。
-パッケージが新しめ(?)
-パッケージに手を入れるのが楽。Rubyだし。

Homebrewの悪い点
-/usr/localを使っちゃうので自分でコンパイルしたソフトを入れるときに困りそう。

結論。完全性を求める向きはMacPortsでいいのではないか。コンパイルに時間かかるけどHomebrewだってそれなりに時間かかる(Linuxのようにバイナリを入れるわけではないので)。

逆にもっとラフな感じで使いたい場合はHomebrewか。Rubyでいじれるのは魅力的。

*トラブルシューティング [#pfdae4d7]
**Xcode4.3でいろいろダメ(2012/02/21(火)) [#qbac1c01]
-[[Beginning OS X Lion/インフラ整備編 - Beginning OS X:http://osx.miko.org/index.php/Beginning_OS_X_Lion/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%95%B4%E5%82%99%E7%B7%A8]]…Xcode4.3でいろいろかわったためMacPortsが完全対応するまでは手作業でいろいろやらないといけない。
-portconfigure.tclへパッチを当てる方法は、該当部分をport.patchなどと保存し、patchコマンドに-p0オプション(ディレクトリ部分を無視しない)であてるとよい。
 sudo patch -p0 < port.patch

** no dest root found at XXXといわれる。 [#s73c8b8a]
-例えば次のようなエラー。
 Error: org.macports.install for port apr returned: no destroot found at: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_devel_apr/apr/work/destroot
-atのあとのフォルダが存在しないのが原因らしいので手動で作ったらとりあえずインストールできた。

**port selfupdateが失敗する [#b54976bb]
-以下のコマンドで確認できる
 sudo port -d selfupdate
-すると「rsync.macports.org」の名前が解決できないのが原因だった。[[macportsでパッケージがインストールができない時の対処法 - Qiita:https://qiita.com/H1r0ak1Y0sh10ka/items/70779c190f75943e5e6a]]は関係ない。
-プロバイダのDNSに追加して、8.8.8.8を追加するとselfupdateできるようになった。

**The Command Line Tools are installed, but MacPorts cannot determine the versionの警告 [#b31d01b5]
-「sudo port upgrade -u installed」で以下のエラーが表示される。
 Warning: cltversion: The Command Line Tools are installed, but MacPorts cannot determine the version
-[[ProblemHotlist – MacPorts:https://trac.macports.org/wiki/ProblemHotlist#reinstall-clt]]によってコマンドラインツールを再インストールしなおせばよいらしい。
-MacPortsは以下のコマンドでコマンドラインツールのバージョンを確認している。これが空白だった。
 pkgutil --pkg-info=com.apple.pkg.{CLTools_Executables,CLTools_Base,DeveloperToolsCLI,DeveloperToolsCLILeo} 2>/dev/null | sed -n 's/^version: //p'
-touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
-softwareupdate -l
-設定でソフトウェアアップデートを実行。表示されたコマンドラインツールをインストールする。
-rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress

もしくはApple Developerサイトからコマンドラインツールをダウンロードしてインストールする。

*参考: [[4 MacPorts で Command Line Tools のバージョンが分からない、と言われたら:http://nalab.mind.meiji.ac.jp/~mk/knowhow-2021/node4.html]] [#mc4552a4]
** The macOS 11.3 SDK does not appear to be installed. Ports may not build correctly [#xbca478d]
-[[BigSurProblems – MacPorts:https://trac.macports.org/wiki/BigSurProblems]]によるとBigSurの問題?
-Appleの公式サイトからCommandLineToolをダウンロードしてインストールすれば良いとの情報があるが、/Library/Developer/CommandLineToolsを削除してXcodeをインストールしても良いかも?

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS