Bug #15304
closedPackage build with extensions is not reproducible
Description
The build of a package with extensions, such as msgpack, is not reproducible due to temporary filenames appearing in the generated Makefile [1]:
grep gem lib/ruby/gems/2.5.0/gems/msgpack-1.2.4/ext/msgpack/Makefile
sitearchdir = $(DESTDIR)./.gem.20181114-6835-czlel4
sitelibdir = $(DESTDIR)./.gem.20181114-6835-czlel4
This issue comes from the creation of temporary files: the name is different across builds. More precisely, I've identified the following lines
- https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/ext_conf_builder.rb#L16
- https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/ext_conf_builder.rb#L29
There are several choices to fix this:
- use deterministic temporary filename: is there a lib to do this?
- provide these filenames as arguments and the use actual logic if these filenames are not provided: how to provide such filename?
- remove
Makefileandgem_make.outfiles: I don't know how they are useful - surely some other way to fix this...
I'm not a ruby programmer so I don't really know how it is difficult to implement these solutions.
What do you think about this?
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
- Status changed from Open to Third Party's Issue
Why are such files packaged?
Updated by lewo (lewo lewo) almost 7 years ago
nobu (Nobuyoshi Nakada) wrote:
Why are such files packaged?
These files are written by gem intall in the directory specified by the --install-dir option. Distributions are taking this whole direcory to create the distribution package (.deb for instance).
I think the mkmf.log should not be written in the install-dir. But what about the Makefile? Could it be still used after the ruby gem build? If not, it could also be removed from the install-dir.
What do you think about removing these two files (Makefile and mkmf.log) from the --install-dir ?
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
lewo (lewo lewo) wrote:
I think the
mkmf.logshould not be written in theinstall-dir. But what about theMakefile? Could it be still used after the ruby gem build? If not, it could also be removed from theinstall-dir.
These (and page-Makefile.ri) are all garbages after installation.
What do you think about removing these two files (
Makefileandmkmf.log) from the--install-dir?
I dislike that rubygems installs junk files including *.o files.
Updated by lewo (lewo lewo) almost 7 years ago
nobu (Nobuyoshi Nakada) wrote:
These (and
page-Makefile.ri) are all garbages after installation.
Hmm, I'm not sure to understand, because several distributions have these files remaining in the install-dir provided to rubygem, ie. these files are not garbage collected by rubygem. So, this is not what we are observing.
Or do you mean these files have to be removed by the distribution itself?
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
Regarding files under usr/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0/msgpack-1.2.4/, I think that rubygems is lazy not to select files properly.
And ./usr/lib/ruby/gems/2.5.0/gems/msgpack-1.2.4/ext/msgpack/ is a working directory where is not expected to be packaged, I think.
You may want to distclean there before packaging.
Updated by lewo (lewo lewo) almost 7 years ago
I created the PR https://github.com/rubygems/rubygems/pull/2481 to address these issues.