On Mon, Jan 20, 2025 at 1:55 AM Enrico Jörns <[email protected]> wrote:

> The git commit hashes for the kernel checkout are not reproducible under
> certain conditions:
>
> - If the git repository is initialized on an archive (rather than a
>   git), the initial git commit not only has the current user name set,
>   it also uses the current system time as committer and author date.
>   This will affect the initial git hash and thus all subsequent ones.
>
> - The patches applied by the kern-tools have a valid author and date.
>   However, their committer again depends on the user building the BSP.
>
> This is an issue, for example, if one compiles a kernel with
> CONFIG_LOCALVERSION_AUTO enabled where the commit hash lands into the
> kernel and thus the package version. This not only makes the package
> version non-reproducible, but also leads to version mismatches between
> kernel modules built against a fresh kernel checkout and the kernel
> retrieved from the sstate cache.
>
> The class uses 'check_git_config' from utils.bbclass, but this only sets
> the git user and only if none existed before. Thus it doesn't really
> help here.
>
> Since in Git the committer information can be set only from the
> environment variables GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, and
> GIT_COMMITTER_DATE, we introduce a helper function to set those and
> apply the author settings in the same way.
> As values simply use PATCH_GIT_USER_NAME, PATCH_GIT_USER_EMAIL (from
> patch.bbclass) and SOURCE_DATE_EPOCH.
> For convenience, put the new helper 'reproducible_git_committer_author'
> into utils.bbclass next to 'check_git_config' so others can use it, too.
>
> Using this helper in kernel-yocto.bbclass makes the committer and author
> date/name/email for the initial commit reproducible, as well as the
> committer name/email for the patches applied with kern-tools.
>
> For debugging purpose, allow disabling the reproducibility features by
> setting KERNEL_DEBUG_TIMESTAMPS to "1".
>
> v2 looks good to me!

Bruce



> Suggested-by: Felix Klöckner <[email protected]>
> Signed-off-by: Enrico Jörns <[email protected]>
> ---
>  meta/classes-global/utils.bbclass        | 10 ++++++++++
>  meta/classes-recipe/kernel-yocto.bbclass |  6 ++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/meta/classes-global/utils.bbclass
> b/meta/classes-global/utils.bbclass
> index c9cae8930f..530a490ea8 100644
> --- a/meta/classes-global/utils.bbclass
> +++ b/meta/classes-global/utils.bbclass
> @@ -367,3 +367,13 @@ check_git_config() {
>                 git config --local user.name "${PATCH_GIT_USER_NAME}"
>         fi
>  }
> +
> +# Sets fixed git committer and author for reproducible commits
> +reproducible_git_committer_author() {
> +       export GIT_COMMITTER_NAME="${PATCH_GIT_USER_NAME}"
> +       export GIT_COMMITTER_EMAIL="${PATCH_GIT_USER_EMAIL}"
> +       export GIT_COMMITTER_DATE="$(date -d @${SOURCE_DATE_EPOCH})"
> +       export GIT_AUTHOR_NAME="${PATCH_GIT_USER_NAME}"
> +       export GIT_AUTHOR_EMAIL="${PATCH_GIT_USER_EMAIL}"
> +       export GIT_AUTHOR_DATE="$(date -d @${SOURCE_DATE_EPOCH})"
> +}
> diff --git a/meta/classes-recipe/kernel-yocto.bbclass
> b/meta/classes-recipe/kernel-yocto.bbclass
> index 7d80e9aa52..697132c073 100644
> --- a/meta/classes-recipe/kernel-yocto.bbclass
> +++ b/meta/classes-recipe/kernel-yocto.bbclass
> @@ -352,6 +352,9 @@ do_patch() {
>         cd ${S}
>
>         check_git_config
> +       if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
> +               reproducible_git_committer_author
> +       fi
>         meta_dir=$(kgit --meta)
>         (cd ${meta_dir}; ln -sf patch.queue series)
>         if [ -f "${meta_dir}/series" ]; then
> @@ -434,6 +437,9 @@ do_kernel_checkout() {
>                 rm -f .gitignore
>                 git init
>                 check_git_config
> +               if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
> +                       reproducible_git_committer_author
> +               fi
>                 git add .
>                 git commit -q -n -m "baseline commit: creating repo for
> ${PN}-${PV}"
>                 git clean -d -f
> --
> 2.39.5
>
>

-- 
- Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end
- "Use the force Harry" - Gandalf, Star Trek II
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#210030): 
https://lists.openembedded.org/g/openembedded-core/message/210030
Mute This Topic: https://lists.openembedded.org/mt/110711274/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to