Commit 1c5a5688 authored by Allan McRae's avatar Allan McRae
Browse files

libmakepkg: reproducibilty for python packages



Arch Linux has been setting PYTHONHASHSEED=0 to create deterministic
.pyc files.  After a thorough review by the Arch Security Team, setting
this variable was determined not to generated vulnerable .pyc files, as
when the loader loads the .pyc file and unmarshalls it, the internal
runtime will just populate the unordered data structures and use a new
runtime hash for them.
Signed-off-by: Allan McRae's avatarAllan McRae <allan@archlinux.org>
parent fc798648
......@@ -5,6 +5,7 @@ libmakepkg_modules = [
{ 'name' : 'lint_config', 'has_subdir' : true },
{ 'name' : 'lint_package', 'has_subdir' : true },
{ 'name' : 'lint_pkgbuild', 'has_subdir' : true },
{ 'name' : 'reproducible', 'has_subdir' : true },
{ 'name' : 'source', 'has_subdir' : true },
{ 'name' : 'srcinfo', },
{ 'name' : 'tidy', 'has_subdir' : true },
......
#!/bin/bash
#
# reproducible.sh - utilities for improving package reproducibility
#
# Copyright (c) 2021 Pacman Development Team <pacman-dev@archlinux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
[[ -n "$LIBMAKEPKG_REPRODUCIBLE_SH" ]] && return
LIBMAKEPKG_REPRODUCIBLE_SH=1
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
for lib in "$LIBRARY/reproducible/"*.sh; do
source "$lib"
done
libmakepkg_module = 'reproducible'
sources = [
'python.sh.in',
]
foreach src : sources
output_dir = join_paths(get_option('datadir'), 'makepkg', libmakepkg_module)
custom_target(
libmakepkg_module + '_' + src.underscorify(),
command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@' ],
input : src,
output : '@BASENAME@',
install : true,
install_dir : output_dir)
endforeach
#!/bin/bash
#
# python.sh - creating reproducible python packages
#
# Copyright (c) 2021 Pacman Development Team <pacman-dev@archlinux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
[[ -n "$LIBMAKEPKG_REPRODUCIBLE_PYTHON_SH" ]] && return
LIBMAKEPKG_REPRODUCIBLE_PYTHON_SH=1
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
# disable hash randomization when creating .pyc files
export PYTHONHASHSEED=0
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment