mike-neckのブログ

Java or Groovy or Swift or Golang

Azure 上の Ubuntu で Swift 4.2.1 を動かす

f:id:mike_neck:20180828214340p:plain

この3連休で試したのでメモ。

Azure で立てた Linux VM(Ubuntu16.04) にて、 swift の docker イメージにある通りの手順で Swift4.2.1 をインストールしたところ、エラーが出てしまって Swift アプリケーションを動かせなかった。

具体的には

  • libdispatch-dev
  • libcurl4-openssl-dev
  • libicu-dev
  • libssl-dev
  • pkg-config

をインストールしてサンプルのアプリケーションに対してどの shared ライブラリーが使われるか確認したところ次のようなエラーが出てきた。

$ ldd ExampleApp 
./ExampleResponseApp: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by /usr/lib/swift/linux/libFoundation.so)
    linux-vdso.so.1 (0x00007ffe2db2a000)
    libFoundation.so => /usr/lib/swift/linux/libFoundation.so (0x00007fb764794000)
    libswiftCore.so => /usr/lib/swift/linux/libswiftCore.so (0x00007fb764279000)
    libswiftGlibc.so => /usr/lib/swift/linux/libswiftGlibc.so (0x00007fb76508b000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb76405a000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fb763e57000)
# 以下略

調べてみると、 GitHub にある curl の issue が見つかった。

github.com

問題そのものは Ubuntu だか Debian だか、 Swift の問題っぽい。なので、 curl ではどうにも対処できない問題の様子だが、最後のワークアラウンドを適用すると動かすことができた。


以下、 Swift4.2.1 を Azure の Ubuntu で動かすために必要なスクリプト

#!/usr/bin/env bash

sudo apt-get -q update
sudo apt-get -y install libdispatch-dev libcurl4-openssl-dev libicu-dev libssl-dev pkg-config libgconf-2-4
sudo echo "deb http://security.ubuntu.com/ubuntu xenial-security main" >> /etc/apt/sources.list
sudo apt-get -y install libcurl3

curl -fSsL http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7_amd64.deb -o libicu55.deb
sudo dpkg -i libicu55.deb
rm libicu55.deb

export SWIFT_VERSION=swift-4.2.1-RELEASE
export SWIFT_BRANCH=swift-4.2.1-release
export SWIFT_PLATFORM=ubuntu16.04

export SWIFT_URL=https://swift.org/builds/${SWIFT_BRANCH}/$(echo "$SWIFT_PLATFORM" | tr -d .)/${SWIFT_VERSION}/${SWIFT_VERSION}-${SWIFT_PLATFORM}.tar.gz

curl -fSsL ${SWIFT_URL} -o swift.tgz

sudo tar -xzf swift.tgz --directory / --strip-components=1
rm swift.tgz

sudo chmod -R o+r /usr/lib/swift

今読み返したけど、 Azure ほとんど関係なかった