All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Li <ashimida@linux.alibaba.com>
To: Bagas Sanjaya <bagasdotme@gmail.com>
Cc: masahiroy@kernel.org, michal.lkml@markovi.net,
	ndesaulniers@google.com, corbet@lwn.net,
	linux-kbuild@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, Nicolas Schier <n.schier@avm.de>
Subject: Re: [RFC] Documentation: kbuild: Add description of git for reproducible builds
Date: Thu, 20 Oct 2022 18:48:20 -0700	[thread overview]
Message-ID: <8b2864bd-30b1-254f-ebd6-79967249da9b@linux.alibaba.com> (raw)
In-Reply-To: <Y1FVphEyu23U0jho@debian.me>



On 10/20/22 07:05, Bagas Sanjaya wrote:
> On Thu, Oct 20, 2022 at 03:38:23AM -0700, Dan Li wrote:
>> diff --git a/Documentation/kbuild/reproducible-builds.rst b/Documentation/kbuild/reproducible-builds.rst
>> index 071f0151a7a4..13397f38c358 100644
>> --- a/Documentation/kbuild/reproducible-builds.rst
>> +++ b/Documentation/kbuild/reproducible-builds.rst
>> @@ -119,6 +119,16 @@ To avoid this, you can make the vDSO different for different
>>   kernel versions by including an arbitrary string of "salt" in it.
>>   This is specified by the Kconfig symbol ``CONFIG_BUILD_SALT``.
>>   
>> +Git
>> +-----------------------
>> +
>> +Uncommitted changes or different commit ids in git can also lead
>> +to different compilation results. For example, after executing
>> +``git reset HEAD^``, even if the code is the same, the
>> +``include/config/kernel.release`` generated during compilation
>> +will be different, which will eventually lead to binary differences.
>> +See ``scripts/setlocalversion`` for details.
>> +
> 
> Briefly read the script, I don't see what the correlation between git
> reset with LOCALVERSION thing is. Also, does the exact state of git
> repository required for reproducible builds?
> 

Hi Bagas,

The Makefile has the following code:
filechk_kernel.release = \
         echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"

The output of setlocalversion affects kernel.release, while the output
of setlocalversion is related to the state of git when the git repository
exists (see function scm_version).

So changes in git state will result in changes to kernel.release, and
this information will be included in the final output vmlinux/modules
and in turn affect reproducible builds.

For example:
$ git log
commit 4cd155a93eec......
$ make ...
$ cat include/config/kernel.release
6.0.0-rc4-00025-g4cd155a93eec

$ git reset HEAD^
$ git log
commit 7b4d266b0c41......
$ make ...
$ cat include/config/kernel.release
6.0.0-rc4-00024-g7b4d266b0c41-dirty


AFAICT, in the presence of a git repository, we can compile a reproducible
build kernel in any git state, but we need to ensure that the git state is
always the same between compilations (or the same from the perspective of
the scm_version function).

Thanks, Dan.

> Thanks.
> 

  reply	other threads:[~2022-10-21  1:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-20 10:38 [RFC] Documentation: kbuild: Add description of git for reproducible builds Dan Li
2022-10-20 14:05 ` Bagas Sanjaya
2022-10-21  1:48   ` Dan Li [this message]
2022-10-21  8:00     ` Nicolas Schier
2022-10-23 20:02       ` Masahiro Yamada

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8b2864bd-30b1-254f-ebd6-79967249da9b@linux.alibaba.com \
    --to=ashimida@linux.alibaba.com \
    --cc=bagasdotme@gmail.com \
    --cc=corbet@lwn.net \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=n.schier@avm.de \
    --cc=ndesaulniers@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.