How to Solve Docker Build Environment Issues for "ziti-tunnel-sdk-c" Compilation?

I want to create a Docker build environment for compiling "ziti-tunnel-sdk-c" following the instructions at GitHub - openziti/ziti-tunnel-sdk-c. When creating the Docker, I encountered an issue with the command:

docker build \
    --tag=ziti-edge-tunnel-builder \
    --file=./docker/Dockerfile.linux-build \
    --build-arg uid=$UID \
    --build-arg gid=$GID .

This command shows that the file ./docker/Dockerfile.linux-build cannot be found. Then, with the command:

sudo docker run \
    --rm \
    --name=ziti-edge-tunnel-builder \
    --volume=$PWD:/mnt \
    ziti-edge-tunnel-builder \
        --use-openssl amd64

This command displays the following exception:

Unable to find image 'ziti-edge-tunnel-builder:latest' locally
docker: Error response from daemon: pull access denied for ziti-edge-tunnel-builder, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.

How can I resolve this issue?

Sorry for that confusion, @KerwinKoo. You found the old instructions. I'll remove them.

Here are the new instructions for building the tunneler project: ziti-tunnel-sdk-c/BUILD.md at main · openziti/ziti-tunnel-sdk-c · GitHub

For example, to target amd64:

./scripts/ziti-builder.sh -p ci-linux-x64

@qrkourier Thank you. It's work!
The compilation for ci-linux-x64 succeeded, but when I tried to compile ci-macOS-x64, I modified the CMakeUserPresets.json file to include "inherits": ["dev-mode", "vcpkg", "ci-linux-x64"]. I ran the command sudo ./scripts/ziti-builder.sh -p ci-macOS-x64, but the resulting binary was still for the Linux-x64 architecture, not the macOS-x64 I intended. Where might this issue be occurring?

Here is the CMakeUserPresets.json file:

*[main][~/go/src/ziti_all/ziti-tunnel-sdk-c]$ cat CMakeUserPresets.json
{
  "version": 2,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 14,
    "patch": 0
  },
  "configurePresets": [
    {
      "name": "dev",
      "binaryDir": "${sourceDir}/build/dev",
      "inherits": ["dev-mode", "vcpkg", "ci-macOS-x64"],
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "dev",
      "configurePreset": "dev",
      "configuration": "Debug"
    }
  ],
  "testPresets": [
    {
      "name": "dev",
      "configurePreset": "dev",
      "configuration": "Debug",
      "output": {
        "outputOnFailure": true
      }
    }
  ]
}

Command: sudo ./scripts/ziti-builder.sh -p ci-macOS-x64

Result:

[170/170] : && /usr/bin/cc -O3 -DNDEBUG -pthread programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/ziti-edge-tunnel.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/netif_driver/linux/tun.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/netif_driver/linux/resolvers.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/netif_driver/linux/utils.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/instance.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/model.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/config-utils.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/instance-config.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/process_cmd.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/ipc_cmd.c.o programs/ziti-edge-tunnel/CMakeFiles/ziti-edge-tunnel.dir/Release/ipc_event.c.o -o programs/ziti-edge-tunnel/Release/ziti-edge-tunnel -L/workspace/build/lib -Wl,-rpath,/workspace/build/lib:  _deps/ziti-sdk-c-build/library/Release/libziti.a  lib/ziti-tunnel/Release/libziti-tunnel-sdk-c.a  lib/ziti-tunnel-cbs/Release/libziti-tunnel-cbs-c.a  lib/ziti-tunnel/Release/libziti-tunnel-sdk-c.a  _deps/ziti-sdk-c-build/library/Release/libziti.a  _deps/tlsuv-build/Release/libtlsuv.a  vcpkg_installed/x64-linux/lib/libuv.a  -lpthread  -lrt  vcpkg_installed/x64-linux/lib/libz.a  vcpkg_installed/x64-linux/lib/libllhttp.a  vcpkg_installed/x64-linux/lib/libssl.a  vcpkg_installed/x64-linux/lib/libcrypto.a  -ldl  -lpthread  vcpkg_installed/x64-linux/lib/libsodium.a  /usr/lib/x86_64-linux-gnu/libpthread.so  vcpkg_installed/x64-linux/lib/libjson-c.a  vcpkg_installed/x64-linux/lib/libprotobuf-c.a  -latomic  -lm  lib/ziti-tunnel/Release/liblwipcore.a  -lresolv && :
-rwxr-xr-x 1 root root 12M Jan  6 09:01 ./build/programs/ziti-edge-tunnel/Release/ziti-edge-tunnel
*[main][~/go/src/ziti_all/ziti-tunnel-sdk-c]$ file ./build/programs/ziti-edge-tunnel/Release/ziti-edge-tunnel
./build/programs/ziti-edge-tunnel/Release/ziti-edge-tunnel: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=63327a239d4aff15d5c612c276c2e19750d6c68a, for GNU/Linux 3.2.0, with debug_info, not stripped
*[main][~/go/src/ziti_all/ziti-tunnel-sdk-c]$ ././build/programs/ziti-edge-tunnel/Release/ziti-edge-tunnel
*[main][~/go/src/ziti_all/ziti-tunnel-sdk-c]$ ./build/programs/ziti-edge-tunnel/Release/ziti-edge-tunnel
zsh: exec format error: ./build/programs/ziti-edge-tunnel/Release/ziti-edge-tunnel

For a Darwin *nix executable for macOS, you'll need to follow the non-Docker instructions to natively compile on macOS from the same document, BUILD.md, that I linked.

Are you specifically looking for a way to cross-compile between CPU architectures on Darwin/macOS?

@qrkourier Thank you very much. I am trying to compile on my macOS (Intel x86) to create binaries for both my MacBook and Ubuntu. Currently, compiling the Ubuntu binary is not an issue; I have resolved it using Docker. However, when it comes to compiling the macOS binary, I encounter the following issues during the build phase:

-- Build files have been written to: /Users/gukq/go/src/ziti_all/ziti-tunnel-sdk-c/build
[1/180] Building C object _deps/tlsuv-build/CMakeFiles/tlsuv.dir/Debug/src/apple/keychain.c.o
FAILED: _deps/tlsuv-build/CMakeFiles/tlsuv.dir/Debug/src/apple/keychain.c.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -DPATH_SEP="'/'" -DTLSUV_VERSION=v0.33.0 -DUSE_OPENSSL -DCMAKE_INTDIR="Debug" -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers -I/Users/gukq/go/src/ziti_all/ziti-tunnel-sdk-c/build/_deps/tlsuv-src/include -I/Users/gukq/go/src/ziti_all/ziti-tunnel-sdk-c/build/_deps/tlsuv-src/src -I/Users/gukq/go/src/ziti_all/ziti-tunnel-sdk-c/build/_deps/tlsuv-src/deps/uv_link_t/include -isystem /Users/gukq/go/src/ziti_all/ziti-tunnel-sdk-c/build/vcpkg_installed/x64-osx/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers -g -std=gnu99 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fPIC -g -MD -MT _deps/tlsuv-build/CMakeFiles/tlsuv.dir/Debug/src/apple/keychain.c.o -MF _deps/tlsuv-build/CMakeFiles/tlsuv.dir/Debug/src/apple/keychain.c.o.d -o _deps/tlsuv-build/CMakeFiles/tlsuv.dir/Debug/src/apple/keychain.c.o -c /Users/gukq/go/src/ziti_all/ziti-tunnel-sdk-c/build/_deps/tlsuv-src/src/apple/keychain.c
/Users/gukq/go/src/ziti_all/ziti-tunnel-sdk-c/build/_deps/tlsuv-src/src/apple/keychain.c:2:10: fatal error: 'security/SecKey.h' file not found

I have checked and found that the SecKey.h file exists at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h, not at security/SecKey.h. I am not proficient in macOS app development, and I suspect that my development environment is outdated (Xcode 11.3). I plan to upgrade to the latest Xcode 14 and try again.

1 Like