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

Error after compilation - Unable to find time zone "Europe/Budapest". Try running TimeZones.build() #399

Closed
JakubPorubcansky opened this issue Aug 3, 2022 · 3 comments

Comments

@JakubPorubcansky
Copy link

JakubPorubcansky commented Aug 3, 2022

I am trying to compile this minimal example package to an app

TestPackage.jl
module TestPackage

using TimeZones

function julia_main()::Cint
  try
    @info "Start"
    sleep(3)
    timeZone = TimeZone("Europe/Budapest")
    @info "timeZone=$timeZone"
    sleep(3)
    @info "Finish"
  catch exc
    @error "Something went wrong" exception=(exc, catch_backtrace())
    return 1
  end
  return 0
end

end # module
Project.toml
name = "TestPackage"
uuid = "d2663e91-0ef1-41e5-8c08-2797f1a8a949"
authors = ["Jakub Porubcansky <jakub.porubcansky@gmail.com"]
version = "0.1.0"

[deps]
TimeZones = "f269a46b-ccf7-5d73-abea-4c690281aa53"
Manifest.toml
# This file is machine-generated - editing it directly is not advised

julia_version = "1.7.3"
manifest_format = "2.0"

[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"

[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"

[[deps.Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"

[[deps.Compat]]
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
git-tree-sha1 = "9be8be1d8a6f44b96482c8af52238ea7987da3e3"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "3.45.0"

[[deps.CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"

[[deps.Dates]]
deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"

[[deps.DelimitedFiles]]
deps = ["Mmap"]
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"

[[deps.Distributed]]
deps = ["Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"

[[deps.Downloads]]
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"

[[deps.ExprTools]]
git-tree-sha1 = "56559bbef6ca5ea0c0818fa5c90320398a6fbf8d"
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
version = "0.1.8"

[[deps.FileWatching]]
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"

[[deps.InlineStrings]]
deps = ["Parsers"]
git-tree-sha1 = "d19f9edd8c34760dca2de2b503f969d8700ed288"
uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48"
version = "1.1.4"

[[deps.InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"

[[deps.LazyArtifacts]]
deps = ["Artifacts", "Pkg"]
uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"

[[deps.LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"

[[deps.LibCURL_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"

[[deps.LibGit2]]
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"

[[deps.LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"

[[deps.Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"

[[deps.LinearAlgebra]]
deps = ["Libdl", "libblastrampoline_jll"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

[[deps.Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"

[[deps.Markdown]]
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"

[[deps.MbedTLS_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"

[[deps.Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"

[[deps.Mocking]]
deps = ["Compat", "ExprTools"]
git-tree-sha1 = "29714d0a7a8083bba8427a4fbfb00a540c681ce7"
uuid = "78c3b35d-d492-501b-9361-3d52fe80e533"
version = "0.7.3"

[[deps.MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"

[[deps.NetworkOptions]]
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"

[[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"

[[deps.Parsers]]
deps = ["Dates"]
git-tree-sha1 = "0044b23da09b5608b4ecacb4e5e6c6332f833a7e"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.3.2"

[[deps.Pkg]]
deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"

[[deps.Printf]]
deps = ["Unicode"]
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"

[[deps.REPL]]
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"

[[deps.Random]]
deps = ["SHA", "Serialization"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"

[[deps.RecipesBase]]
git-tree-sha1 = "6bf3f380ff52ce0832ddd3a2a7b9538ed1bcca7d"
uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
version = "1.2.1"

[[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"

[[deps.Scratch]]
deps = ["Dates"]
git-tree-sha1 = "f94f779c94e58bf9ea243e77a37e16d9de9126bd"
uuid = "6c6a2e73-6563-6170-7368-637461726353"
version = "1.1.1"

[[deps.Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"

[[deps.SharedArrays]]
deps = ["Distributed", "Mmap", "Random", "Serialization"]
uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"

[[deps.Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"

[[deps.SparseArrays]]
deps = ["LinearAlgebra", "Random"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[[deps.Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"

[[deps.TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"

[[deps.Tar]]
deps = ["ArgTools", "SHA"]
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"

[[deps.Test]]
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[[deps.TimeZones]]
deps = ["Dates", "Downloads", "InlineStrings", "LazyArtifacts", "Mocking", "Printf", "RecipesBase", "Scratch", "Unicode"]
git-tree-sha1 = "d634a3641062c040fc8a7e2a3ea17661cc159688"
uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53"
version = "1.9.0"

[[deps.UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"

[[deps.Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"

[[deps.Zlib_jll]]
deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"

[[deps.libblastrampoline_jll]]
deps = ["Artifacts", "Libdl", "OpenBLAS_jll"]
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"

[[deps.nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"

[[deps.p7zip_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"

However, when running the app, it gives the following error:

[ Info: Start
┌ Error: Something went wrong
│   exception =
│    ArgumentError: Unable to find time zone "Europe/Budapest". Try running `TimeZones.build()`.
│    Stacktrace:
│     [1] (::TimeZones.var"#3#4"{String})()
│       @ TimeZones ~/.julia/packages/TimeZones/2oXvO/src/types/timezone.jl:80
│     [2] get!
│       @ ./dict.jl:464 [inlined]
│     [3] Dates.TimeZone(str::String, mask::TimeZones.Class) (repeats 2 times)
│       @ TimeZones ~/.julia/packages/TimeZones/2oXvO/src/types/timezone.jl:70
│     [4] julia_main()
│       @ TestPackage /TestPackage/src/TestPackage.jl:9
│     [5] top-level scope
│       @ none:1
└ @ TestPackage /TestPackage/src/TestPackage.jl:14

To compile the app I run Docker build using the following Dockerfile

Dockerfile
FROM julia:1.7.3-bullseye AS builder

RUN dpkg-reconfigure dash && \
    apt-get update && \
    apt-get dist-upgrade -y

RUN apt-get -y install \
    build-essential

COPY . TestPackage

RUN julia --project=TestPackage -e "using Pkg; Pkg.instantiate(); Pkg.precompile();"

RUN julia -e "using Pkg; \
              pkg\"add PackageCompiler\"; \
              using PackageCompiler; \
              create_app(\"TestPackage\", \"app\")"

ENTRYPOINT ["/app/bin/TestPackage"]       

The output of Docker build command:

Docker build output

#1 [internal] load build definition from Dockerfile
#1 sha256:a83776a614dd23bbd63c4d2c4c60723431b8e0d90f31fd346553323385bebbb1
#1 transferring dockerfile: 553B 0.0s done
#1 DONE 0.5s

#2 [internal] load .dockerignore
#2 sha256:0b5b39a11ca4d40b2d4a20a7efdad921f8632984297c077c3f05c57f8b1fa21b
#2 transferring context:
#2 transferring context: 2B 0.3s done
#2 DONE 1.0s

#3 [internal] load metadata for docker.io/library/julia:1.7.3-bullseye
#3 sha256:a709d3decc38ca0fa431dc40cebe2f400b71b387c30624c46c675d14129c2314
#3 DONE 5.5s

#4 [builder 1/7] FROM docker.io/library/julia:1.7.3-bullseye@sha256:02866dcc4be5385c9b67d33926992054db8e70286f5b4b61dec9e7cb28b605f6
#4 sha256:e098eab13fb22e037da857637320111c6c64afba1ac38cca691bc111a3d1adfd
#4 resolve docker.io/library/julia:1.7.3-bullseye@sha256:02866dcc4be5385c9b67d33926992054db8e70286f5b4b61dec9e7cb28b605f6 0.0s done
#4 DONE 0.0s

#5 [builder 2/7] RUN dpkg-reconfigure dash && apt-get update && apt-get dist-upgrade -y
#5 sha256:f7e448225929c19688266c5178a5544814aa288621c92a97afd58fa319e86df6
#5 CACHED

#6 [builder 3/7] RUN apt-get -y install build-essential
#6 sha256:c6952e6b44098cf110ec599ef9aa0f2513827486f00077cfcd96f31a5b3d0222
#6 CACHED

#7 [internal] load build context
#7 sha256:0ad9b42a4a861dde482d1aea8eaebaa9226d85e5fc01d86b694ca04d46fb2166
#7 transferring context:
#7 transferring context: 1.25kB 0.1s done
#7 DONE 0.4s

#8 [4/6] COPY . TestPackage
#8 sha256:51bee2a57409e468510305b50b87b30c82b4ae08b3312ba9b192b334bdbc8cd6
#8 DONE 0.7s

#9 [5/6] RUN julia --project=TestPackage -e "using Pkg; Pkg.instantiate(); Pkg.precompile();"
#9 sha256:ce9eb6914f3ae039e353f5a9cc566a5577cd8a53be003d81245c3773696aa21e
#9 6.817 Installing known registries into ~/.julia
#9 20.25 Installed Scratch ─────── v1.1.1
#9 20.26 Installed Mocking ─────── v0.7.3
#9 20.26 Installed Parsers ─────── v2.3.2
#9 20.26 Installed InlineStrings ─ v1.1.4
#9 20.26 Installed ExprTools ───── v0.1.8
#9 20.28 Installed Compat ──────── v3.45.0
#9 20.28 Installed RecipesBase ─── v1.2.1
#9 20.28 Installed TimeZones ───── v1.9.0
#9 24.83 Building TimeZones → ~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/d634a3641062c040fc8a7e2a3ea17661cc159688/build.log
#9 122.5 Precompiling project...
#9 124.7 ✓ Zlib_jll
#9 124.9 ✓ MbedTLS_jll
#9 125.9 ✓ CompilerSupportLibraries_jll
#9 126.8 ✓ LibSSH2_jll
#9 127.7 ✓ OpenBLAS_jll
#9 129.1 ✓ libblastrampoline_jll
#9 131.9 ✓ TestPackage
#9 132.2 7 dependencies successfully precompiled in 12 seconds (8 already precompiled)
#9 DONE 133.4s

#10 [6/6] RUN julia -e "using Pkg; pkg"add PackageCompiler"; using PackageCompiler; create_app("TestPackage", "app")"
#10 sha256:c7dfd4b50ddf5aee1e67c0c1e7592b81df8ece89106fbf1e5066f293a5349593
#10 3.447 ┌ Warning: The Pkg REPL mode is intended for interactive use only, and should not be used from scripts. It is recommended to use the functional API instead.
#10 3.447 └ @ Pkg.REPLMode /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.7/Pkg/src/REPLMode/REPLMode.jl:377
#10 14.46 Updating registry at ~/.julia/registries/General.toml
#10 15.67 Resolving package versions...
#10 21.31 Installed RelocatableFolders ─ v0.1.3
#10 21.31 Installed PackageCompiler ──── v2.0.7
#10 24.22 Updating ~/.julia/environments/v1.7/Project.toml
#10 24.22 [9b87118b] + PackageCompiler v2.0.7
#10 24.27 Updating ~/.julia/environments/v1.7/Manifest.toml
#10 24.27 [9b87118b] + PackageCompiler v2.0.7
#10 24.27 [05181044] + RelocatableFolders v0.1.3
#10 24.27 [6c6a2e73] + Scratch v1.1.1
#10 24.27 [0dad84c5] + ArgTools
#10 24.27 [56f22d72] + Artifacts
#10 24.28 [2a0f44e3] + Base64
#10 24.28 [ade2ca70] + Dates
#10 24.28 [f43a241f] + Downloads
#10 24.28 [7b1f6079] + FileWatching
#10 24.29 [b77e0a4c] + InteractiveUtils
#10 24.29 [4af54fe1] + LazyArtifacts
#10 24.29 [b27032c2] + LibCURL
#10 24.29 [76f85450] + LibGit2
#10 24.30 [8f399da3] + Libdl
#10 24.30 [56ddb016] + Logging
#10 24.30 [d6f4376e] + Markdown
#10 24.32 [ca575930] + NetworkOptions
#10 24.32 [44cfe95a] + Pkg
#10 24.32 [de0858da] + Printf
#10 24.32 [3fa0cd96] + REPL
#10 24.32 [9a3f8284] + Random
#10 24.32 [ea8e919c] + SHA
#10 24.32 [9e88b42a] + Serialization
#10 24.32 [6462fe0b] + Sockets
#10 24.32 [fa267f1f] + TOML
#10 24.32 [a4e569a6] + Tar
#10 24.32 [cf7118a7] + UUIDs
#10 24.37 [4ec0a83e] + Unicode
#10 24.37 [deac9b47] + LibCURL_jll
#10 24.38 [29816b5a] + LibSSH2_jll
#10 24.40 [c8ffd9c3] + MbedTLS_jll
#10 24.40 [14a3606d] + MozillaCACerts_jll
#10 24.40 [83775a58] + Zlib_jll
#10 24.40 [8e850ede] + nghttp2_jll
#10 27.42 Precompiling project...
#10 28.53 ✓ RelocatableFolders
#10 36.34 ✓ PackageCompiler
#10 36.48 2 dependencies successfully precompiled in 12 seconds (4 already precompiled)
#10 77.48 PackageCompiler: bundled artifacts:
#10 77.48 └── TimeZones
#10 77.50 └── tzdata2022a - 1.196 MiB
#10 77.52 Total artifact file size: 1.196 MiB
#10 84.97 - PackageCompiler: compiling base system image (incremental=false)
#10 1126.3 Precompiling project...
#10 1282.6 ✓ CompilerSupportLibraries_jll
#10 1283.8 ✓ RecipesBase
#10 1293.2 ✓ Compat
#10 1316.6 ✓ Parsers
#10 1395.6 ✓ Zlib_jll
#10 1398.3 ✓ ExprTools
#10 1402.3 ✓ Scratch
#10 1407.6 ✓ LibSSH2_jll
#10 1416.3 ✓ OpenBLAS_jll
#10 1446.0 ✓ InlineStrings
#10 1447.0 ✓ Mocking
#10 1455.1 ✓ libblastrampoline_jll
#10 1483.3 ✓ TimeZones
#10 1511.6 ✓ TestPackage
#10 1514.1 15 dependencies successfully precompiled in 395 seconds
#10 1566.2 - PackageCompiler: compiling nonincremental system image

#11 exporting to image
#11 sha256:e8c613e07b0b7ff33893b694f7759a10d42e180f2b4dc349fb57dc6b71dcab00
#11 exporting layers
#11 exporting layers 4.3s done
#11 writing image sha256:4372470e146819392c68f208c728b023994e680350cffb7df58b64c3533fda0a 0.0s done
#11 naming to docker.io/library/test-pkg5 done
#11 DONE 4.3s

@omus
Copy link
Member

omus commented Aug 8, 2022

Related to #359. Having #390 would address your issue but not in the way you want as I'm sure you want all the application building to take place during the Docker image build and not at runtime.

@omus
Copy link
Member

omus commented Aug 8, 2022

The answer to this is to make TimeZones.jl fully relocatable which requires us to make the artifact package which will finally close #359

@omus
Copy link
Member

omus commented Aug 22, 2023

As of PR #441 this package uses precomputed time zones artifacts. Included in TimeZones release 1.12

@omus omus closed this as completed Aug 22, 2023
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

2 participants