Skip to content

Curl fails to build reproducibly #13242

Description

@charles2910

I did this

We have in debian a CI pipeline running for each commit in our repo (hosted in Debian's gitlab instance). We do have reprotest which builds the package twice changing the build environment and checks if they are bit by bit the same. Though they aren't the same because of the autogenerated manpages:

 charles  …  debian  output  reprotest  2  SIGINT  diffoscope control/source-root/curl_8.7.1-1+salsaci+20240330+129_amd64.deb experiment-1/source-root/curl_8.7.1-1+salsaci+20240330+129_amd64.deb
--- control/source-root/curl_8.7.1-1+salsaci+20240330+129_amd64.deb
+++ experiment-1/source-root/curl_8.7.1-1+salsaci+20240330+129_amd64.deb
├── file list
│ @@ -1,3 +1,3 @@
│  -rw-r--r--   0        0        0        4 2024-03-27 19:02:14.000000 debian-binary
│  -rw-r--r--   0        0        0     1028 2024-03-27 19:02:14.000000 control.tar.xz
│ --rw-r--r--   0        0        0   344140 2024-03-27 19:02:14.000000 data.tar.xz
│ +-rw-r--r--   0        0        0   344172 2024-03-27 19:02:14.000000 data.tar.xz
├── control.tar.xz
│ ├── control.tar
│ │ ├── ./md5sums
│ │ │ ├── ./md5sums
│ │ │ │┄ Files differ
├── data.tar.xz
│ ├── data.tar
│ │ ├── file list
│ │ │ @@ -7,11 +7,11 @@
│ │ │  drwxr-xr-x   0 root         (0) root         (0)        0 2024-03-27 19:02:14.000000 ./usr/share/doc/curl/
│ │ │  -rw-r--r--   0 root         (0) root         (0)      573 2024-03-27 19:02:14.000000 ./usr/share/doc/curl/README.Debian
│ │ │  -rw-r--r--   0 root         (0) root         (0)     8731 2024-03-27 19:02:14.000000 ./usr/share/doc/curl/changelog.Debian.gz
│ │ │  -rw-r--r--   0 root         (0) root         (0)   113339 2024-03-27 08:03:42.000000 ./usr/share/doc/curl/changelog.gz
│ │ │  -rw-r--r--   0 root         (0) root         (0)    21639 2024-03-27 19:02:14.000000 ./usr/share/doc/curl/copyright
│ │ │  drwxr-xr-x   0 root         (0) root         (0)        0 2024-03-27 19:02:14.000000 ./usr/share/man/
│ │ │  drwxr-xr-x   0 root         (0) root         (0)        0 2024-03-27 19:02:14.000000 ./usr/share/man/man1/
│ │ │ --rw-r--r--   0 root         (0) root         (0)    63973 2024-03-27 19:02:14.000000 ./usr/share/man/man1/curl.1.gz
│ │ │ +-rw-r--r--   0 root         (0) root         (0)    63982 2024-03-27 19:02:14.000000 ./usr/share/man/man1/curl.1.gz
│ │ │  drwxr-xr-x   0 root         (0) root         (0)        0 2024-03-27 19:02:14.000000 ./usr/share/zsh/
│ │ │  drwxr-xr-x   0 root         (0) root         (0)        0 2024-03-27 19:02:14.000000 ./usr/share/zsh/vendor-completions/
│ │ │  -rw-r--r--   0 root         (0) root         (0)    15680 2024-03-27 19:02:14.000000 ./usr/share/zsh/vendor-completions/_curl
│ │ ├── ./usr/share/man/man1/curl.1.gz
│ │ │ ├── curl.1
│ │ │ │ @@ -20,15 +20,15 @@
│ │ │ │  .\" *
│ │ │ │  .\" * SPDX-License-Identifier: curl
│ │ │ │  .\" *
│ │ │ │  .\" **************************************************************************
│ │ │ │  .\"
│ │ │ │  .\" DO NOT EDIT. Generated by the curl project managen man page generator.
│ │ │ │  .\"
│ │ │ │ -.TH curl 1 "March 27 2024" "curl 8.7.1" "curl Manual"
│ │ │ │ +.TH curl 1 "märts 28 2024" "curl 8.7.1" "curl Manual"
│ │ │ │  .SH NAME
│ │ │ │  curl \- transfer a URL
│ │ │ │  .SH SYNOPSIS
│ │ │ │  \fBcurl [options / URLs]\fP
│ │ │ │  .SH DESCRIPTION
│ │ │ │  \fBcurl\fP is a tool for transferring data from or to a server using URLs. It
│ │ │ │  supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS,
│ │ │ │ ├── encoding
│ │ │ │ │ @@ -1 +1 @@
│ │ │ │ │ -us-ascii
│ │ │ │ │ +utf-8

The cd2nroff script is correctly using SOURCE_DATE_EPOCH, but it's failing for 2 reasons, timezone variation and language variation:

INFO:reprotest.build:TIMEZONE variation: TZ=GMT+12

Makes the day change from 27 to 28.

INFO:reprotest.build:LOCALE variation: LC_ALL = et_EE.UTF-8 LANGUAGE = et_EE.UTF-8:fr

Is making the month different (english vs estonian).

I expected the following

To pass reprotest test and be reproducible.

curl/libcurl version

curl 8.7.1 (x86_64-pc-linux-gnu) libcurl/8.7.1 OpenSSL/3.1.5 zlib/1.2.13 brotli/1.1.0 zstd/1.5.5 libidn2/2.3.4 libpsl/0.21.2 libssh2/1.11.0 nghttp2/1.60.0 librtmp/2.3 OpenLDAP/2.5.16
Release-Date: 2024-03-27, security patched: 8.7.1-2
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz NTLM PSL SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd

operating system

Debian unstable

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions