Ubuntu の Swift バージョンを Toolchain みたいに切り替えられるようにする
Server Side Swift
先日に Linux で Swift を使えるようにしてみましたけど、いざ使い始めてみると Swift のバージョンを柔軟に切り替えられた方が何かと都合が良さそうに思えてきたので、それがしやすい環境を整えてみることにしました。
以前に こちら で記したように Ubuntu でオープンソースの Swift を使えるようにしてみましたけど、いざ使い始めてみると Swift のバージョンを柔軟に切り替えられた方が何かと都合が良さそうに思えてきたので、それがしやすい環境を整えてみることにしました。
直接インストールした Swift を削除
以前は /usr/bin
などに直接 Swift をインストールしましたが、今回はバージョンごとに別々のフォルダーに入れて管理しようと思うので、まずは念のため以前に入れた Swift に関連するファイルを削除しておくことにしました。
ただ、以前に自分がインストールした swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04
の構成ファイルを見てみると Swift と合わせて /usr/include/lldb
や /usr/lib/python2.7
、/usr/bin/lldb
といったものも含まれていたので、もしかすると余計なものも削除してしまうかもしれません。
調べてみた感じでは、少なくとも今回の こちら で用意した ConoHa VPS + Ubuntu 14.04 環境をインストールした直後にこれらのファイルは存在しなかったので、Swift Latest Development Snapshot (February, 08, 2016) をダウンロードしたディレクトリ内で次のコマンドを実行して全てを削除しておきました。
tar tzf swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04.tar.gz | sed -n -e 's/^[^\/]*\(.*[^\/]\)$/\1/p' | while read line; do rm -vf $line; done
ちなみに今回の捜査で削除したファイルは files.swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04.txt です。
Swift をインストールする
そうしたら、Swift をインストールする環境を整えます。Linux でのインストール方法が Swift.org - Download Swift に詳しく載っていたので、それを参考にしながら改めて Swift のインストールを行ってみます。
ライブラリのインストール
まず、必要なライブラリをインストールします。公式ドキュメントの説明にある clang
をインストールしようとしたら、次のようなエラーが発生したので、手順を少し変えてインストールしてみます。
The following packages have unmet dependencies:
clang : Depends: clang-3.4 (>= 3.4~rc3-1~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
最初に clang-3.4
をインストールすると上手く行く様子でしたけど、swift/README.md
には Ubuntu 14.04 では clang-3.6 が必要
みたいに書いてあったので、次のようにして必要なライブラリをインストールしました。
sudo apt-get install clang-3.6
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.6 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 100
sudo apt-get install libicu-dev
スナップショットのインストール場所を作成
そして、Swift のスナップショットをインストールするディレクトリを作成します。今回は /toolchains
ディレクトリを作成することにします。
mkdir /toolchains
スナップショットをインストール
スナップショットを入れる場所ができたら、必要なスナップショットを Swift.org - Download Swift からダウンロードします。
今回は次のようにして /usr/local/src
にスナップショット Ubuntu 14.04 Swift Development Snapshot (February 25, 2016) をダウンロードして、それを展開するときに /snapshots
にインストールすることにします。
wget https://swift.org/builds/development/ubuntu1404/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a-ubuntu14.04.tar.gz
tar xvzf swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a-ubuntu14.04.tar.gz -C /toolchains
スナップショットへのパスを登録する
スナップショットを /toolchains
にインストールできたら、それを使って Swift プログラムを実行できるようにします。
後で別のバージョンに切り替えやすいように、まずは使用するスナップショットを指すシンボリックリンクを /toolchains/swift-current
という名前で作っておきます。
cd /toolchains
ln -s swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a-ubuntu14.04 swift-current
そして ~/.bash_profile
を作成して、そこに次の内容を追記します。
export SWIFT_BIN="/toolchains/swift-current/usr/bin"
export SWIFT_LIB="/toolchains/swift-current/usr/lib"
export PATH="${SWIFT_BIN}":"${PATH}"
export LD_LIBRARY_PATH="${SWIFT_LIB}":"${LD_LIBRARY_PATH}"
export LD_RUN_PATH="${SWIFT_LIB}":"${LD_RUN_PATH}"
そうしたら、あとは次のようにして ~/.bash_profile
の内容を反映します。
source ~/.bash_profile
完成
これで /toolchains/swift-current
からリンクを貼った Swift のスナップショットを使えるようになりました。バージョンを切り替えたい時は、シンボリックリンクを作り直すだけで対応できます。
シンボリックリンクを貼り替えるスクリプト
切り替えたいときにシンボリックリンクを消して ln -s
で作るのも面倒なので、それを行うスクリプトを作成してみました。
#!/bin/sh
SWIFT_CURRENT="swift-current"
TOOLCHAIN="$1"
if [ "${TOOLCHAIN}" != "" ]
then
rm -f "${SWIFT_CURRENT}"
ln -s "${TOOLCHAIN}" "${SWIFT_CURRENT}"
else
echo "usage: $0 TOOLCHAIN"
fi
これを /toolchains/select
という名前で保存して、次のようにして実行権限を与えておきます。
chmod +x /toolchains/select
このようにすることで、たとえば /toolchains
ディレクトリ内から次のコマンドを実行して、使用する Swift を切り替えられます。
./select swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a-ubuntu14.04