Upgrading to Alpine 3.19 causes error when using sqlite3 in ruby
Hi, I've noticed upgrading to alpine 3.19 caused a fatal error in one of my apps. I've tried to narrow it down to the simplest Dockerfile which demonstrates the problem:
FROM ruby:3.2.2-alpine3.19
RUN gem install sqlite3 -v 1.6.9
RUN echo "require \"sqlite3\"" > server.rb
RUN ruby server.rb
returns this error:
RUN ruby server.rb:
0.505 <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
0.505 from /usr/local/bundle/gems/sqlite3-1.6.9-x86_64-linux/lib/sqlite3.rb:6:in `rescue in <top (required)>'
0.505 from /usr/local/bundle/gems/sqlite3-1.6.9-x86_64-linux/lib/sqlite3.rb:2:in `<top (required)>'
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:159:in `require'
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:159:in `rescue in require'
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:39:in `require'
0.505 from server.rb:1:in `<main>'
0.505 <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require': Error relocating /usr/local/bundle/gems/sqlite3-1.6.9-x86_64-linux/lib/sqlite3/3.2/sqlite3_native.so: posix_fallocate64: symbol not found - /usr/local/bundle/gems/sqlite3-1.6.9-x86_64-linux/lib/sqlite3/3.2/sqlite3_native.so (LoadError)
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
0.505 from /usr/local/bundle/gems/sqlite3-1.6.9-x86_64-linux/lib/sqlite3.rb:4:in `<top (required)>'
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:159:in `require'
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:159:in `rescue in require'
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:39:in `require'
0.505 from server.rb:1:in `<main>'
0.505 <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- sqlite3 (LoadError)
0.505 from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
0.505 from server.rb:1:in `<main>'
------
failed to solve: process "/bin/sh -c ruby server.rb" did not complete successfully: exit code: 1
The following Dockerfile doesn't error at all:
FROM ruby:3.2.2-alpine3.18
RUN gem install sqlite3 -v 1.6.9
RUN echo "require \"sqlite3\"" > server.rb
RUN ruby server.rb
As you can see, the only difference is the version of alpine.
I notice in the release notes that Sqlite has been upgraded from 3.41.2-r2 to 3.44.2-r0. I had a quick look in the change log for Sqlite, but couldn't see anything that immediately looked relevant. But at this stage, I'm a bit out of my depth (and have possibly gone off on an irrelevant tangent - I've not ruled out a problem in the sqlite gem, or the ruby docker image).