分類: macOS

使用 MacPorts 安裝與管理 Mac OS X 中的開放原始碼(Open Source)軟體

這裡介紹如何使用 MacPorts 安裝與管理 Mac OS X 中的開放原始碼(Open Source)軟體。

MacPorts 是一個用於編譯、安裝與管理 Mac OS X 中各類開放原始碼軟體的工具,其由開放原始碼社群負責主導與開發,透過這個工具可以簡化安裝軟體的編譯工作,並且可以自動處理套件相依性問題,概念上很類似 Linux 的 apt 與 yum,只要下達一些簡單的指令就可以輕鬆安裝各種軟體。

Mac Ports 針對目前最新的三個 Mac OS X 版本(OS X 10.9 Mavericks、OS X 10.8 Mountain Lion 與 Mac OS X 10.7 Lion)維護最新的軟體庫,目前包含了超過一萬七千個軟體,總共分成 87 個類別,這些軟體的列表可以從 MacPorts 的網站中查詢,如果你想要安裝的軟體有在這個列表中,就可以使用 MacPorts 來幫助你快速安裝。

以下示範如何使用 MacPorts 來安裝與管理軟體。

安裝 MacPorts

在使用之前,要先把 MacPorts 安裝好。

首先確認自己的 Mac OS X 中是否有安裝 Xcode 與 Command Line Developer Tools,若沒有請先安裝這兩個工具。

Xcode 可以從系統的 App Store 中直接安裝,如果是安裝 Xcode 4 以後的版本,在安裝完成後要先啓動一次 Xcode 以便簽署 Xcode EULA 同意書,或是執行:

xcodebuild -license

Command Line Developer Tools 可以從 Apple Developer 的網站下載,下載前必須要使用 Apple ID 登入:

依照自己的系統版本,找到對應的 Command Line Tools 並下載安裝。

如果你會使用到一些 XWindow 的軟體的話,還要再安裝 X11 的環境,比較舊版的 Mac OS X 中有內建這樣的環境,但是到了 OS X Mountain Lion 之後,Apple 把 X11 的支援整個拿掉了,所以比較建議的方式是自己安裝 XQuartz

如果 Xcode 與 Command Line Tools 都裝好之後,接著就可以到 MacPorts 網站下載它的 pkg 安裝檔。下載時,請依照自己的 Mac OS X 版本選擇適當的安裝檔,目前官方提供的安裝檔有支援 Mavericks、Mountain Lion、Lion、Snow Leopard、Leopard 與 Tiger。

下載完成後,即可直接執行,進行安裝。安裝的過程很簡單,以下是每個步驟的說明。首先是歡迎畫面。

接著解釋 MacPorts 是什麼。

軟體許可協議。

詢問是否同意軟體許可協議,點選同意。

選擇安裝位置。

進行安裝確認。

輸入密碼。

進行安裝。

安裝完成。

在安裝完成後,建議先更新一下,以確保自己系統上的 MacPorts 是最新的:

sudo port -v selfupdate

完成之後,就可以開始使用 MacPorts 了。

使用 MacPorts

若要列出所有軟體的清單,則可使用 list

port list

輸出為

AppHack                        @1.1            aqua/AppHack
AppKiDo                        @0.988          aqua/AppKiDo
AquaLess                       @1.6            aqua/AquaLess
ArpSpyX                        @1.1            aqua/ArpSpyX
AssignmentTrackerX             @2.0beta3.1     aqua/AssignmentTrackerX

若要搜尋軟體,則使用 search 加上關鍵字搜尋,這樣會從所有的軟體名稱與描述中尋找符合的軟體,例如搜尋 nodejs 則使用:

port search nodejs

輸出為

nodejs @0.10.21 (devel, net)
    Evented I/O for V8 JavaScript
nodejs-devel @0.11.8 (devel, net)
    Evented I/O for V8 JavaScript
Found 2 ports.

若要查看某個軟體的資訊,可使用 info,例如查看 nodejs 的資訊則使用:

port info nodejs

輸出為

nodejs @0.10.21 (devel, net)
Variants:             dtrace, python25, python26, [+]python27, [+]ssl
Description:          Node’s goal is to provide an easy way to build scalable
                      network programs in JavaScript. Node is similar in design
                      to and influenced by systems like Ruby’s Event Machine or
                      Python’s Twisted. Node takes the event model a bit
                      further-it presents the event loop as a language construct
                      instead of as a library.
Homepage:             http://nodejs.org/
Build Dependencies:   pkgconfig
Library Dependencies: python27, openssl
Conflicts with:       nodejs-devel
Platforms:            darwin
License:              MIT BSD
Maintainers:          ciserlohn@macports.org

有些軟體套件會相依於其他套件,若要查看套件的相依性關係,可以使用 deps,例如:

port deps nodejs

輸出為

Full Name: nodejs @0.10.21_0+python27+ssl
Build Dependencies:   pkgconfig
Library Dependencies: python27, openssl

若要安裝指定的軟體套件,可使用 install,例如:

sudo port install nodejs

這樣就會自動下載、編譯與安裝 nodejs 這個套件,在安裝時 MacPorts 也會一併安裝所有相依性套件,所以如果剛好相依性套件很多的話,就需要等一下,不過也因為這些繁雜的過程 MacPorts 都會自動幫你處理,可以讓安裝工作輕鬆很多。

有些套件會提供一些安裝選項,讓使用者在安裝時可以依照自己的需求調整,若要查詢一個軟體套件所提供的選項,可以使用 variants,例如:

port variants nmap

輸出為

nmap has the variants:
   no_pcre: build without pcre support
   no_ssl: build without ssl support
   universal: Build for multiple architectures
   zenmap: build zenmap in addition to nmap

如果要在安裝時指定一些 variant 安裝選項,則可以使用加號再加上 variant 選項名稱,例如:

sudo port install nmap +zenmap

而如果要將預設開啟的 variant 選項拿掉,則使用減號再加上 variant 選項名稱,例如:

sudo port install nmap -zenmap

在 MacPorts 安裝軟體時,會產生一些暫時性的檔案,有時候如果安裝上出了一些問題,這些檔案可能會殘存在硬碟中(例如在下載套件時出問題),如果想要把這些檔案清理乾淨,,可以使用 clean,例如:

sudo port clean --all vile

這裡的 --all 參數是指把所有與 vile 套件相關的檔案都清除乾淨,如果想要清理特定的檔案,可以換成其他的參數,可用的有 --work--dist--archive--logs,詳細的說明請使用 man port 指令查閱線上手冊。

若要移除軟體套件,則使用 uninstall,例如:

sudo port uninstall vile

如果要連同該套件的相依性套件一起移除,則加上 ‑‑follow‑dependencies 參數,例如:

sudo port uninstall --follow-dependencies vile

這項就會把所有只有被 vile 需要的相依性套件都一起移除,如果一個套件是屬於 vile 的相依性套件,但同時是其他套件的相依性套件,那麼這樣的套件就會被保留下來,所以不用擔心會移除掉不該移除的軟體套件。

如果在移除套件時,該套件還會被其他的套件使用到,那麼系統就會出現訊息告訴你不應該這麼做,並且取消移除的動作,如果你想要連同那些所有會影響到的套件一起移除,可以使用 --follow-dependents 參數,例如:

sudo port uninstall --follow-dependents ncurses

這樣就會把所有需要 ncurses 的套件都一次移除掉。如果你不想這樣做,真的只要把 ncurses 這個套件移除就好(不管套件相依性問題),也可以使用 -f 參數,例如:

sudo port -f uninstall ncurses

這樣就會忽略套件相依性,只移除 ncurses 套件。

移除 MacPorts

通常在一般的狀況下是不需要移除 MacPorts 的,而且這也是一件比較麻煩的事情,如果真的要移除 MacPorts,首先要移除所有經由 MacPorts 安裝的軟體:

sudo port -fp uninstall installed

接著再移除 MacPorts 本身,如果要備份設定檔,可以把 ${prefix}/etc 備份下來。

要將 MacPorts 移除掉,就是把所有 MacPorts 所建立的檔案刪除,例如:

sudo 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

而這裡的路徑可能會因為每個系統而不同,請「不要」直接用複製貼上的方式執行!如果你在當初安裝時,有更改 prefix 預設的安裝路徑,就要把 /opt/local 換成當初設定的路徑,而 applications_dir(預設為 /Applications/MacPorts) 與 frameworks_dir 也是類似的狀況。

以上是 MacPorts 的一些入門教學,除了這些之外,其實 MacPorts 還有很多其他有用的指令,若要查詢更詳盡的說明,可以參考 MacPorts Guide 網站

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago