Xserver X10 上ではとりあえず Swift を動かせませんでした。
Web Server
レンタルサーバー Xserver で Swift が使えたらいいなと思って挑戦してみたのですけど、サポートされていない OS もあって、とりあえず不安要素がたくさんなので断念しました。
レンタルサーバー エックスサーバー の X10 プランでは SSH 接続して、ユーザー権限でならプログラムをインストールできる様子だったので、もしかして Swift コンパイラーをインストールできないか試してみました。
結果としては OS 環境の影響で Swift コンパイラーがエラーとなって、使えませんでしたけど。
Xserver X10 の環境
この環境が常に保証されているのかはわからないのですけど、とりあえず、公式のコントロールパネルから確認できたサーバー環境は次の通りです。
項目 | 内容 |
---|---|
CPU | Xeon E5-2640 v4 2.40GHz (Dual) |
Memory | 192GB |
OS | Linux |
共用サーバーなのでこの環境をすべて享受できるわけではないですけれど、けっこう良い感じの性能ですね。OS は Linux
とだけ記されていて、どのディストリビューションかは記されていませんでした。
Linux の種類
Swift の動作環境は Ubuntu
なので、Xserver で採用しているディストリビューションを知りたいところだったのですけど /etc
ディレクトリーが見られないため、すぐには確認できませんでした。
そのほかの確認方法を知らなかったので、とりあえず dmesg
コマンドでログを眺めてみたところ、次のようなログが見つかったので、どうやら Red Hat 4.8.5 みたいです。
Linux version 3.10.0-514.2.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP
Swift は、実用的には動かせず
Linux のディストリビューションが Ubuntu ではなかったものの、もしかしたら動くかなと思って試してみたのですけど、うまく動かすことはできませんでした。
簡単な Swift コードは実行できたのですけど、ライブラリーとして Glibc
をインポートしたコードだと、次のエラーが発生してしまいます。
error: header '///usr/include/x86_64-linux-gnu/sys/ioctl.h' not found
header "///usr/include/x86_64-linux-gnu/sys/ioctl.h"
^
<unknown>:0: error: could not build Objective-C module ‘SwiftGlibc'
動かせるコードはあるものの、初歩的な Glibc
をインポートするところで躓くのもそうですし、非公式環境では今後のバージョンアップ次第では対応しなくなったりするのも不安だったので、今回は早々に諦めましたけど、せっかくなので Xserver に Swift をインストールするところまでの手順を、記しておこうと思います。
swiftenv のインストール
今回は swiftenv を使って Swift をインストールすることにしました。インストール手順は公式の通りです。
まずは GitHub から swiftenv を ~/.swiftenv
にインストールします。
git clone https://github.com/kylef/swiftenv.git ~/.swiftenv
これで必要なファイルはインストールできたので、あとはこれを使えるようにします。Xserver のシェルは bash だったので、次の内容を ~/.bash_profile
に追記します。
# swiftenv
export SWIFTENV_ROOT="$HOME/.swiftenv"
export PATH="$SWIFTENV_ROOT/bin:$PATH"
eval "$(swiftenv init -)"
そうしたら、次のようにして、現在のシェルに設定を反映させます。
source ~/.bash_profile
Swift のインストール
swiftenv
をインストールできたら、次のようにして Swift をインストールします。
swiftenv install https://swift.org/builds/swift-3.0.2-release/ubuntu1404/swift-3.0.2-RELEASE/swift-3.0.2-RELEASE-ubuntu14.04.tar.gz
ここで指定しているパスは Swift のダウンロードページ
にある Ubuntu 14.04 用の
時点での最新版です。結局は安心して使えませんでしたけど、とりあえず 16.04 用は、インストール後に swift
コマンドを使うとすると次のエラーで動いてくれませんでしたので、入れるとしたら 14.04 用になるようです。
swift: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by swift)
swift: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by swift)
swift: /lib64/libtinfo.so.5: no version information available (required by swift)
ライブラリー周りでエラー
ただ、インストールした Swift を使おうとすると、次のエラーが発生してしまいます。
swift: error while loading shared libraries: libedit.so.2: cannot open shared object file: No such file or directory
これについて解決策をインターネットで調べてみたところ 既存のライブラリーからシンボリックリンクを貼れば良い という情報が出てきました。ライブラリーの後ろの番号ってバージョン番号みたいなので、さすがに力技すぎるんじゃないかと思うのですけど。
mkdir ~/lib
ln -s /lib64/libedit.so.0.0.42 ~/lib/libedit.so.2
ln -s /lib64/libicuuc.so.50.1.2 ~/lib/libicuuc.so.52
ln -s /lib64/libicui18n.so.50.1.2 ~/libicui18n.so.52
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/lib
export LD_LIBRARY_PATH
そう思いながらも試してみると、とりあえず swift
コマンドを使って簡単なコードを実行できるようにまではなりました。
ただ、先ほどにも記したように Glibc
をインポートしたコードはエラーになってしまいます。Linux プラットフォームだと Glibc
は大事になってきそうですし、そもそもライブラリーのバージョン番号を無視してシンボリックリンクを貼っているところが、付き合いにくい誤動作を生む可能性が高すぎるので、今回はこのくらいで断念しておくことにしました。
swiftenv のアンインストール
さて、断念して使わなくなった swiftenv のアンインストールについても記しておきます。
swiftenv 本体のアンインストール
swiftenv に関するファイルは全て ~/.swiftenv にインストールされているので、次のようにしてそれらを削除します。
rm -fr ~/.swiftenv
環境設定の削除
今回は swiftenv を実行するための環境設定を ~/.bash_profile
に記載したので、それらも削除しておきます。
また、設定を反映した影響で SWIFTENV_ROOT
環境変数が登録された状態なので、それらも次のようにして削除しておきます。
unset SWIFTENV_ROOT
ライブラリーのシンボリックリンクを削除
今回は、ライブラリー周りの調整のために ~/lib
ディレクトリーを作ってそこにシンボリックリンクを貼ったので、これらも削除しておくことにします。
今回の自分の環境では、最初は ~/lib
ディレクトリーが存在していなかったので、次のように丸ごと全部削除しました。もしも最初からこのディレクトリーが存在していた場合には、今回登録した 3 つのシンボリックリンクだけを削除するようにします。
rm -rf ~/lib