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