この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 が見つかった。
問題そのものは 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 ほとんど関係なかった