2017年10月2日

macport 如何安裝舊版軟體

如果在 macport 直接以 sudo port upgrade outdated 更新軟體,都會直接更新到最新版本,但有時候為了軟體的相容性問題,還是需要安裝舊版的軟體,以下記錄安裝舊版軟體的過程。

以 erlang 為例,目前 macport 最新為 20.0 版,如要安裝 erlang 19.3 版,要用以下程序處理。

由於 macport 的權限問題,必須在 /tmp 執行下列的程序。

cd /tmp
mkdir port
cd port

git clone --single-branch https://github.com/macports/macports-ports.git
cd macports-ports

因為 erlang 19.3 版,在 erlang Portfile history 可找到該 Portfile History,在 19.3 版的地方,點擊 <>,可查看該 commit 的網址https://github.com/macports/macports-ports/blob/e80897a5cc8f3583eac1bff12a62db6dc8ce4f99/lang/erlang/Portfile

因此我們用 git 指令切換到該 commit

git checkout e80897a5cc8f3583eac1bff12a62db6dc8ce4f99

安裝 19.3 版 erlang

cd lang/erlang

sudo port install +hipe+ssl+wxwidgets

以指令查詢目前 active 的 erlang 版本

sudo port installed | grep erlang

結果為

  erlang @19.3_0+hipe+ssl+wxwidgets (active)
  erlang @20.0_0+hipe+ssl+wxwidgets

如果版本錯誤,可用以下指令切換至 19.3

sudo port activate erlang @19.3

更新 macport 軟體可用以下的 script,在 uninstall inactive 時,可排除 erlang,避免舊版 erlang 被移除。

port_upgrade.sh

#!/bin/bash
echo "upgrade port..."
echo "!port selftupdate"
sudo port selfupdate

echo "!port upgrade outdated"
sudo port upgrade outdated

echo "!port installed inactive"
# list inactive installed packages
sudo port installed inactive

echo "!port uninstall inactive"
# uninstall inactive installed packages
#sudo port uninstall inactive
sudo port uninstall inactive and not erlang

References

InstallingOlderPort