Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker compilation error #127

Open
Th3F0x-code opened this issue Aug 18, 2024 · 0 comments
Open

Docker compilation error #127

Th3F0x-code opened this issue Aug 18, 2024 · 0 comments

Comments

@Th3F0x-code
Copy link

If you attempt to construct a container using this package during compilation, it will generate the following error:

2.336 [96/975] Compiling CryptorRSA CryptorRSA.swift
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:476:61: error: cannot find 'EVP_PKEY_size' in scope
2.338                                 ek = UnsafeMutablePointer<UInt8>.allocate(capacity: Int(EVP_PKEY_size(.make(optional: key.reference))))
2.338                                                                                         ^~~~~~~~~~~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:476:76: error: cannot infer contextual base in reference to member 'make'
2.338                                 ek = UnsafeMutablePointer<UInt8>.allocate(capacity: Int(EVP_PKEY_size(.make(optional: key.reference))))
2.338                                                                                                       ~^~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:481:20: error: cannot find 'EVP_CIPHER_iv_length' in scope
2.338                                 let IVLength = EVP_CIPHER_iv_length(.make(optional: enc))
2.338                                                ^~~~~~~~~~~~~~~~~~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:481:42: error: cannot infer contextual base in reference to member 'make'
2.338                                 let IVLength = EVP_CIPHER_iv_length(.make(optional: enc))
2.338                                                                     ~^~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:688:28: error: cannot find 'EVP_PKEY_size' in scope
2.338                                 let encKeyLength = Int(EVP_PKEY_size(.make(optional: key.reference)))
2.338                                                        ^~~~~~~~~~~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:688:43: error: cannot infer contextual base in reference to member 'make'
2.338                                 let encKeyLength = Int(EVP_PKEY_size(.make(optional: key.reference)))
2.338                                                                      ~^~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:690:27: error: cannot find 'EVP_CIPHER_iv_length' in scope
2.338                                 let encIVLength = Int(EVP_CIPHER_iv_length(.make(optional: encType)))
2.338                                                       ^~~~~~~~~~~~~~~~~~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:690:49: error: cannot infer contextual base in reference to member 'make'
2.338                                 let encIVLength = Int(EVP_CIPHER_iv_length(.make(optional: encType)))
2.338                                                                            ~^~~~
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:697:74: error: cannot convert value of type 'String' to expected argument type 'Data.Index' (aka 'Int')
2.338                                 let encryptedData = self.data.subdata(in: encKeyLength..<encKeyLength+encryptedDataLength)
2.338                                                                                                      ^
2.338 /build/.build/checkouts/BlueRSA/Sources/CryptorRSA/CryptorRSA.swift:698:57: error: cannot convert value of type 'String' to expected argument type 'Data.Index' (aka 'Int')
2.338                                 let encryptedIV = self.data.subdata(in: encKeyLength+encryptedDataLength..<self.data.count)
2.338                                                                                     ^
2.349 error: fatalError
2.360 /build/.build/checkouts/xctest-dynamic-overlay/Sources/IssueReporting/Internal/Warn.swift:2:19: remark: '@preconcurrency' attribute on module 'Foundation' is unused
2.360   @preconcurrency import Foundation
2.360   ~~~~~~~~~~~~~~~~^
2.360   
2.360 [96/975] Compiling CNIOLLHTTP c_nio_llhttp.c

this is the Dockerfile used:

# ================================
# Build image
# ================================
FROM swift:latest as build

# Install OS updates
RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
    && apt-get -q update \
    && apt-get -q dist-upgrade -y \
    && apt-get install -y libjemalloc-dev libssl-dev pkg-config libcurl4-openssl-dev libxml2-dev openssl wget

# Set up a build area
WORKDIR /build

# First just resolve dependencies.
# This creates a cached layer that can be reused
# as long as your Package.swift/Package.resolved
# files do not change.
COPY ./Package.* ./
RUN swift package resolve \
    $([ -f ./Package.resolved ] && echo "--force-resolved-versions" || true)

# Copy entire repo into container
COPY . .

# Build everything, with optimizations, with static linking, and using jemalloc
# N.B.: The static version of jemalloc is incompatible with the static Swift runtime.
RUN swift build -c release \
    --static-swift-stdlib \
    -Xlinker -ljemalloc

# Switch to the staging area
WORKDIR /staging

# Copy main executable to staging area
RUN cp "$(swift build --package-path /build -c release --show-bin-path)/App" ./

# Copy static swift backtracer binary to staging area
RUN cp "/usr/libexec/swift/linux/swift-backtrace-static" ./

# Copy resources bundled by SPM to staging area
RUN find -L "$(swift build --package-path /build -c release --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \;

# Copy any resources from the public directory and views directory if the directories exist
# Ensure that by default, neither the directory nor any of its contents are writable.
RUN [ -d /build/Public ] && { mv /build/Public ./Public && chmod -R a-w ./Public; } || true
RUN [ -d /build/Resources ] && { mv /build/Resources ./Resources && chmod -R a-w ./Resources; } || true

# ================================
# Run image
# ================================
FROM ubuntu:22.04

# Make sure all system packages are up to date, and install only essential packages.
RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
    && apt-get -q update \
    && apt-get -q dist-upgrade -y \
    && apt-get -q install -y \
    libjemalloc2 \
    ca-certificates \
    tzdata \
    libssl-dev \
    pkg-config \
    libcurl4-openssl-dev libxml2-dev openssl\

    # If your app or its dependencies import FoundationNetworking, also install `libcurl4`.
    libcurl4 \
    # If your app or its dependencies import FoundationXML, also install `libxml2`.
    libxml2 \
    && rm -r /var/lib/apt/lists/*


# Create a vapor user and group with /app as its home directory
RUN useradd --user-group --create-home --system --skel /dev/null --home-dir /app vapor

# Switch to the new home directory
WORKDIR /app

# Copy built executable and any staged resources from builder
COPY --from=build --chown=vapor:vapor /staging /app

# Provide configuration needed by the built-in crash reporter and some sensible default behaviors.
ENV SWIFT_BACKTRACE=enable=yes,sanitize=yes,threads=all,images=all,interactive=no,swift-backtrace=./swift-backtrace-static

# Ensure all further commands run as the vapor user
USER vapor:vapor

# Let Docker bind to port 8080
EXPOSE 8080

# Start the Vapor service when the image is run, default to listening on 8080 in production environment
ENTRYPOINT ["./App"]
CMD ["serve", "--env", "production", "--hostname", "0.0.0.0", "--port", "8080"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant