mrrl

Minimal Reliable Reproducible Linux
git clone https://ccx.te2000.cz/git/mrrl
Log | Files | Refs | Submodules | README

commit 3aa29c44d369449056db76ec5d4f9f9340449c99
parent 0d0e66b409df6cb64a94f35514332fa292ad771b
Author: Jan Pobrislo <ccx@te2000.cz>
Date:   Sat,  3 May 2025 20:40:31 +0000

Add strace to userspace.environment

Diffstat:
Mdownloadlist.sha256 | 1+
Mfilelist.sha256 | 1+
Afiles/strace-6.5-static.patch | 178+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atemplates/pkg/strace | 19+++++++++++++++++++
Mtemplates/pkg/userspace.environment | 1+
Mvariants/ccx-x86_64/default.environment | 1+
Avariants/ccx-x86_64/strace | 122+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mvariants/ccx-x86_64/userspace.environment | 5+++--
Mvariants/root-x86_64/default.environment | 1+
Avariants/root-x86_64/strace | 122+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mvariants/root-x86_64/userspace.environment | 5+++--
11 files changed, 452 insertions(+), 4 deletions(-)

diff --git a/downloadlist.sha256 b/downloadlist.sha256 @@ -54,3 +54,4 @@ f311f8f3dad84699d0566d1d6f7ec943a9298b28f714cae3c931dfd57492d7eb 189200 https:// 588546b945bba4b70b6a3a616e80b4ab466e3f33024a352fc2198112cdbb3ae2 1215925 https://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz 0e751989cea94e25d5166a6a1ed9bde218786e39dff82e1f01dff12fc78639d9 2329 https://hacktivis.me/releases/error-standalone/error-standalone-2.0.tar.gz c29eae929dfebd575c38174f2c8c315766092cec99a8f987569d0cad3c6d64f6 65889 https://github.com/argp-standalone/argp-standalone/archive/refs/tags/1.5.0.tar.gz +e209daf0ee038ca5adcc4c277e9273b4d51f46a2ff86da575d36742ac3508a17 2642452 https://github.com/strace/strace/releases/download/v6.13/strace-6.13.tar.xz diff --git a/filelist.sha256 b/filelist.sha256 @@ -48,6 +48,7 @@ ff3ddd131d73fee6838b11a6c4773bdb85c5f60fdd4b9ac4120ced021c341417 files/noobjtoo 2a782825cd870e1fdf77a579c80701c0530bc6d8fa94100cab24bf31f0f457d3 files/s6_clone_newpid.patch c7d3e7ef077d7673567d2f0c34ba2ebd689dab1250286ab482a3064c73ff7d7c files/s6_clone_newpid.patch.old 64488d8562a4e98a3b299f095bb2550cff6a3d743dc2b9c5aaeea03e5b83ec33 files/s6_ftrigr_max.patch +37d93db7135d47852dbe763f1b18b3aeab142431a6f5268a17fc700387a326e4 files/strace-6.5-static.patch 07c3c30dab68c905d5608124e729592a30b2c087f24e7b76940f5321786128b1 files/update-links 664430d033e0b491a5ed90cb39cb17cddb57ac0be9f3f2bf014264f3c17d55df files/user-env 68140a82582ede938159630bca0fb13a93b4bf1cb2e85b08943c26242cf8f3a6 files/zpipe.c diff --git a/files/strace-6.5-static.patch b/files/strace-6.5-static.patch @@ -0,0 +1,178 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -54,6 +54,15 @@ AC_SUBST([STRACE_MANPAGE_DATE], [strace_manpage_date]) + AC_DEFINE([SLM_MANPAGE_DATE], "[slm_manpage_date]", [Date]) + AC_SUBST([SLM_MANPAGE_DATE], [slm_manpage_date]) + ++AC_ARG_ENABLE([static], ++ [AS_HELP_STRING([--enable-static], ++ [link strace statically])], ++ [], [enable_static=no]) ++if test "$enable_static" = "yes"; then ++ # Add -pthread since strace wants -lrt for timer_create, and -lrt uses -lpthread. ++ LDFLAGS="$LDFLAGS -pthread -static" ++fi ++ + AC_C_BIGENDIAN + + dnl arch-specific default for --enable-gcc-Werror +--- a/m4/st_libdw.m4 ++++ b/m4/st_libdw.m4 +@@ -8,7 +8,6 @@ + AC_DEFUN([st_ARG_LIBDW], [dnl + + : ${libdw_CPPFLAGS=} +-: ${libdw_CFLAGS=} + : ${libdw_LDFLAGS=} + : ${libdw_LIBS=} + +@@ -34,48 +33,14 @@ AC_DEFUN([st_LIBDW], [dnl + have_libdw= + + AS_IF([test "x$with_libdw" != xno && test "x$use_unwinder" = x], +- [saved_CPPFLAGS="$CPPFLAGS" +- saved_CFLAGS="$CFLAGS" +- CPPFLAGS="$CPPFLAGS $libdw_CPPFLAGS" +- CFLAGS="$CFLAGS $libdw_CFLAGS" +- +- AC_CHECK_HEADERS([elfutils/libdwfl.h], +- [AC_CHECK_LIB([dw], [dwfl_linux_proc_attach], +- [libdw_LIBS="-ldw $libdw_LIBS" +- AC_CACHE_CHECK([for elfutils version], +- [st_cv_ELFUTILS_VERSION], +- [[st_cv_ELFUTILS_VERSION="$(echo _ELFUTILS_VERSION | +- $CPP $CPPFLAGS -P -imacros elfutils/version.h - | +- grep '^[0-9]')" +- test -n "$st_cv_ELFUTILS_VERSION" || +- st_cv_ELFUTILS_VERSION=0 +- ]] +- ) +- AS_IF([test "$st_cv_ELFUTILS_VERSION" -ge 164], +- [have_libdw=yes], +- [AS_IF([test "x$with_libdw" = xyes], +- [AC_MSG_ERROR([elfutils version >= 164 is required for stack tracing support])], +- [AC_MSG_WARN([elfutils version >= 164 is required for stack tracing support])] +- ) +- ] +- ) +- ], +- [AS_IF([test "x$with_libdw" = xyes], +- [AC_MSG_FAILURE([failed to find dwfl_linux_proc_attach in libdw])], +- ) +- ], +- [$libdw_LDFLAGS $libdw_LIBS] +- ) +- ], +- [AS_IF([test "x$with_libdw" = xyes], +- [AC_MSG_FAILURE([failed to find elfutils/libdwfl.h])] +- ) +- ] +- ) +- +- CFLAGS="$saved_CFLAGS" +- CPPFLAGS="$saved_CPPFLAGS" +- ] ++ [if test "$enable_static" = "yes"; then ++ PKG_CHECK_MODULES_STATIC([LIBDW], [libdw >= 0.164]) ++ else ++ PKG_CHECK_MODULES([LIBDW], [libdw >= 0.164]) ++ fi ++ have_libdw=yes ++ libdw_CPPFLAGS="$LIBDW_CFLAGS" ++ libdw_LIBS="$LIBDW_LIBS"] + ) + + AS_IF([test "x$have_libdw" = xyes], +@@ -84,7 +49,6 @@ AS_IF([test "x$have_libdw" = xyes], + [Whether to use libdw for stack tracing] + ) + AC_SUBST(libdw_CPPFLAGS) +- AC_SUBST(libdw_CFLAGS) + AC_SUBST(libdw_LDFLAGS) + AC_SUBST(libdw_LIBS) + ] +--- a/m4/st_libunwind.m4 ++++ b/m4/st_libunwind.m4 +@@ -28,64 +28,14 @@ AC_ARG_WITH([libunwind], + AC_DEFUN([st_LIBUNWIND], [dnl + + AS_IF([test "x$with_libunwind" != xno && test "x$use_unwinder" = x], +- [saved_CPPFLAGS="$CPPFLAGS" +- CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS" +- +- AC_CHECK_HEADERS([libunwind-ptrace.h], +- [saved_LDFLAGS="$LDFLAGS" +- LDFLAGS="$LDFLAGS $libunwind_LDFLAGS" +- +- AC_CHECK_LIB([unwind], [backtrace], +- [libunwind_LIBS="-lunwind $libunwind_LIBS" +- +- AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic]) +- saved_LIBS="$LIBS" +- LIBS="-lunwind-generic $libunwind_LIBS $LIBS" +- +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]], +- [[return !unw_create_addr_space(0, 0)]]) +- ], +- [AC_MSG_RESULT([yes]) +- libunwind_LIBS="-lunwind-generic $libunwind_LIBS" +- +- AC_CHECK_LIB([unwind-ptrace], [_UPT_create], +- [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS" +- use_unwinder=libunwind +- ], +- [if test "x$with_libunwind" != xcheck; then +- AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace]) +- fi +- ], +- [$libunwind_LIBS] +- ) +- ], +- [AC_MSG_RESULT([no]) +- if test "x$with_libunwind" != xcheck; then +- AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic]) +- fi +- ] +- ) +- +- LIBS="$saved_LIBS" +- ], +- [if test "x$with_libunwind" != xcheck; then +- AC_MSG_FAILURE([failed to find libunwind]) +- fi +- ], +- [$libunwind_LIBS] +- ) +- +- LDFLAGS="$saved_LDFLAGS" +- ], +- [if test "x$with_libunwind" != xcheck; then +- AC_MSG_FAILURE([failed to find libunwind-ptrace.h]) +- fi +- ] +- ) +- +- CPPFLAGS="$saved_CPPFLAGS" +- ] ++ [if test "$enable_static" = "yes"; then ++ PKG_CHECK_MODULES_STATIC([LIBUNWIND], [libunwind libunwind-generic libunwind-ptrace]) ++ else ++ PKG_CHECK_MODULES([LIBUNWIND], [libunwind libunwind-generic libunwind-ptrace]) ++ fi ++ use_unwinder="libunwind" ++ libunwind_CPPFLAGS="$LIBUNWIND_CFLAGS" ++ libunwind_LIBS="$LIBUNWIND_LIBS"] + ) + + if test "x$use_unwinder" = xlibunwind; then +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -417,7 +417,6 @@ libstrace_a_SOURCES += unwind.c unwind.h + if USE_LIBDW + libstrace_a_SOURCES += unwind-libdw.c + strace_CPPFLAGS += $(libdw_CPPFLAGS) +-strace_CFLAGS += $(libdw_CFLAGS) + strace_LDFLAGS += $(libdw_LDFLAGS) + strace_LDADD += $(libdw_LIBS) + endif diff --git a/templates/pkg/strace b/templates/pkg/strace @@ -0,0 +1,19 @@ +{% extends "autotools" %} +{%- block extra_deps %} +#@untar:-J:sha256:e209daf0ee038ca5adcc4c277e9273b4d51f46a2ff86da575d36742ac3508a17:. +#@sha256:{{files["strace-6.5-static.patch"]}}:strace-6.5-static.patch +{%- endblock %} +{% block at_script %} + +cd strace-6.13 +patch -p1 <../strace-6.5-static.patch +autotools_static . +check_static command/strace + +{% endblock %} +{% block genlinks_begin %} + x["./command/strace"]=1 + x["./command/strace-log-merge"]=1 + x["./man/man1/strace.1"]=1 + x["./man/man1/strace-log-merge.1"]=1 +{% endblock %} diff --git a/templates/pkg/userspace.environment b/templates/pkg/userspace.environment @@ -36,3 +36,4 @@ #+{{pkg_install_name("applyuidgid-caps")}} #+{{pkg_install_name("ccx-utils")}} #+{{pkg_install_name("user-env")}} +#+{{pkg_install_name("strace")}} diff --git a/variants/ccx-x86_64/default.environment b/variants/ccx-x86_64/default.environment @@ -36,6 +36,7 @@ #+applyuidgid-caps.9856a13db04a0f0192c4208744de2c649db2ae721dc0d0dd37eb90346236a514 #+ccx-utils.ab28a8d701f60db69818ef22c546d02eca1ba3900bcdeaf5676bcc13d4b7f114 #+user-env.4e95a5387aa403e1d16a22254f21fb4cec046c69341a5eae764dd8126fb638a8 +#+strace.cc81fbf2fc935a0095fb897bdede54ade87180e04fd0ea0ef34c1daf0f78d33e #+system-config.8b8a2b03a8f9bad97cf0a3db217832b54a3342816a7fb0c6bfb086547549de2c #+system-config-rc.f1100a179601fb9629ec20a51431541d7092cfabd33ef8d9708e7767d315729f #+system-config-scripts.bdedb957b96fc1efd8259d16dac786d1d9c220dcde66996a16688989f104925d diff --git a/variants/ccx-x86_64/strace b/variants/ccx-x86_64/strace @@ -0,0 +1,122 @@ +#!/usr/bin/env pthbs-build +#+musl-cross-make.98979eb41109d371f19d0637d51116db18c7aeef61fbf804a68094c22a302a78 +#+gnu-make.ba8d7c64a23885182fc1c9dc0331d52adcdbc45df6000fb81e8e1dd3ee05694b +#+busybox.ee3440974794767b833fd3299226771f170d3f8601cf225cb884f0a513db8ab3 +#+busybox-diffutils.c2ebcfcad050ad71b8e30322a463b5c009f254c7a42e95c627d32665e17134dc +#+m4.46e121f61e0af52abf876bf2688ecfe70eeb04185028d6adde0085e865fdfe75 +#@untar:-J:sha256:e209daf0ee038ca5adcc4c277e9273b4d51f46a2ff86da575d36742ac3508a17:. +#@sha256:37d93db7135d47852dbe763f1b18b3aeab142431a6f5268a17fc700387a326e4:strace-6.5-static.patch + +build_env_static() { + export LD_LIBRARY_PATH="$pthbs_build_environment/library" + export CPATH="$pthbs_build_environment/include" + export LDFLAGS="-static -L$pthbs_build_environment/library $LDFLAGS" +} +autotools_config() { + prefix=/home/ccx/versions/$pthbs_package + ./configure -C \ + --prefix="$prefix" \ + --build="$(${CC:-gcc} -dumpmachine)" \ + --bindir="$prefix/command" \ + --sbindir="$prefix/command" \ + --infodir="$prefix/info" \ + --localedir="$prefix/locale" \ + --mandir="$prefix/man" \ + --libdir="$prefix/library" \ + --docdir="$prefix/doc/strace" \ + --datadir="$prefix/data" \ + --datarootdir="$prefix/data" \ + --localstatedir='/var/pthbs' \ + "$@" + +} + +autotools() { + cd "$1" + shift + autotools_config "$@" + make -j${JOBS:-1} -l$((1+${JOBS:-1})) + make DESTDIR="$pthbs_destdir" install +} + +autotools_static() { + build_env_static + autotools "$@" --enable-static --disable-shared +} +check_static() { + local exe || true + exe=$pthbs_destdir/'/home/ccx/versions'/$pthbs_package/$1 + if ! test -f $exe; then + printf '%s\n' "Error: file '$1' doesn't exist!" + exit 1 + fi + interp_info=$(readelf --string-dump=.interp "$exe") || exit $? + if test x '!=' "x$interp_info"; then + printf '%s\n' "Error: '$1' is a dynamic binary!" + exit 1 + fi +} + + +cd strace-6.13 +patch -p1 <../strace-6.5-static.patch +autotools_static . +check_static command/strace + + + +cd "$pthbs_destdir/home/ccx/versions/$pthbs_package" +find -type d -o -print | awk -F/ ' +BEGIN { + x["./command/strace"]=1 + x["./command/strace-log-merge"]=1 + x["./man/man1/strace.1"]=1 + x["./man/man1/strace-log-merge.1"]=1 +} + +function r1(s) { + sub("^[.]/[^/]*", ".", s) + return s +} +function s1(repl, s) { + sub("^[.]/[^/]*", "./"repl, s) + return s +} +function link(src) { + x[$0]=0 + printf "%s\t%s\n", $0, src + printf "genlinks >>%s\t%s<<\n", $0, src >>"/dev/stderr" +} +$1!="."{exit 1} + + +$2 == "command" { link($0); next } +$2 == "bin" { link(s1("command", $0)); next } + +$2 == "library.so" { link($0); next } +$2 == "library" { link($0); next } +$2 == "lib" && $NF ~ /\.l?a$/ { link(s1("library", $0)); next } +$2 == "lib" && $NF ~ /\.so(|\..*)$/ { link(s1("library.so", $0)); next } + +$2 == "share" && $3 ~ /^(info|man|doc|icons|terminfo)$/ { link(r1($0)); next } + +$2 == "man" { link($0); next } +$2 == "info" { link($0); next } +$2 == "doc" { link($0); next } +$2 == "icons" { link($0); next } +$2 == "terminfo" { link($0); next } +$2 == "data" { link($0); next } +$2 == "include" { link($0); next } + +{ printf "genlinks ##%s## skipped\n", $0 >>"/dev/stderr" } + +END { + for(fname in x) { printf "DEBUG: x[\"%s\"]=\"%s\"\n", fname, x[fname] >"/dev/stderr" } + for(fname in x) { + if(x[fname]) { + printf "ERROR: missing expected file \"%s\"\n", fname >"/dev/stderr" + exit 3 + } + } +}' >.install-links.new +mv .install-links.new .install-links diff --git a/variants/ccx-x86_64/userspace.environment b/variants/ccx-x86_64/userspace.environment @@ -35,4 +35,5 @@ #+libcap.4b28b26ba2d2086e58476a4629bc9bc939bd7326eae233dd9066fbec00a93aca #+applyuidgid-caps.9856a13db04a0f0192c4208744de2c649db2ae721dc0d0dd37eb90346236a514 #+ccx-utils.ab28a8d701f60db69818ef22c546d02eca1ba3900bcdeaf5676bcc13d4b7f114 -#+user-env.4e95a5387aa403e1d16a22254f21fb4cec046c69341a5eae764dd8126fb638a8- \ No newline at end of file +#+user-env.4e95a5387aa403e1d16a22254f21fb4cec046c69341a5eae764dd8126fb638a8 +#+strace.cc81fbf2fc935a0095fb897bdede54ade87180e04fd0ea0ef34c1daf0f78d33e+ \ No newline at end of file diff --git a/variants/root-x86_64/default.environment b/variants/root-x86_64/default.environment @@ -36,6 +36,7 @@ #+applyuidgid-caps.2d571b717bda734b4464e7d3b36bb2c9eaa265fffd595bc090cbb137258121b8 #+ccx-utils.ccaa449ada3142ef075f3c80a6e475520219814490557f308ded4685231a70ac #+user-env.8ad55eebe32b11f005f7b5c6dc204fdccc0a53cd7294f87c1e959ea47793dbca +#+strace.1659a9b65df7c6e6a611ff62e3a5e59d3197f51f1d3fe7e1108ecfbfc23efb55 #+system-config.db2dff20fd0bda4dc1fedd9697304907d9eb143f1c6df0e733e1724a595250e3 #+system-config-rc.8f334e9cbdafc74e6fc7257996dc0fa8200054ec285bdb3901450467d9e52b58 #+system-config-scripts.4c00e32b8c4f6feef53b562356abd54830cc7e889149e4f8bcb928d6e6e93378 diff --git a/variants/root-x86_64/strace b/variants/root-x86_64/strace @@ -0,0 +1,122 @@ +#!/usr/bin/env pthbs-build +#+musl-cross-make.d0431fc0def788be03da43136972361827de52c8e6f0a6f3890dc57fe32e8ecc +#+gnu-make.444e811a68f4f16724e21354b710fad3592e53a2dbf7c0c78658f3d4e7c8e465 +#+busybox.f4ef3d511c029095beda8d21dd48f7730bec63fb09792ca951402d6620338089 +#+busybox-diffutils.4a0933977737282afcd82b39d435b50946a700fe13472d24e4580a41fa852123 +#+m4.3cffaef6909a65493ddc9aba4c53f77dc594ff5ab8b58c57acaa34c654b09ff3 +#@untar:-J:sha256:e209daf0ee038ca5adcc4c277e9273b4d51f46a2ff86da575d36742ac3508a17:. +#@sha256:37d93db7135d47852dbe763f1b18b3aeab142431a6f5268a17fc700387a326e4:strace-6.5-static.patch + +build_env_static() { + export LD_LIBRARY_PATH="$pthbs_build_environment/library" + export CPATH="$pthbs_build_environment/include" + export LDFLAGS="-static -L$pthbs_build_environment/library $LDFLAGS" +} +autotools_config() { + prefix=/versions/$pthbs_package + ./configure -C \ + --prefix="$prefix" \ + --build="$(${CC:-gcc} -dumpmachine)" \ + --bindir="$prefix/command" \ + --sbindir="$prefix/command" \ + --infodir="$prefix/info" \ + --localedir="$prefix/locale" \ + --mandir="$prefix/man" \ + --libdir="$prefix/library" \ + --docdir="$prefix/doc/strace" \ + --datadir="$prefix/data" \ + --datarootdir="$prefix/data" \ + --localstatedir='/var/pthbs' \ + "$@" + +} + +autotools() { + cd "$1" + shift + autotools_config "$@" + make -j${JOBS:-1} -l$((1+${JOBS:-1})) + make DESTDIR="$pthbs_destdir" install +} + +autotools_static() { + build_env_static + autotools "$@" --enable-static --disable-shared +} +check_static() { + local exe || true + exe=$pthbs_destdir/'/versions'/$pthbs_package/$1 + if ! test -f $exe; then + printf '%s\n' "Error: file '$1' doesn't exist!" + exit 1 + fi + interp_info=$(readelf --string-dump=.interp "$exe") || exit $? + if test x '!=' "x$interp_info"; then + printf '%s\n' "Error: '$1' is a dynamic binary!" + exit 1 + fi +} + + +cd strace-6.13 +patch -p1 <../strace-6.5-static.patch +autotools_static . +check_static command/strace + + + +cd "$pthbs_destdir/versions/$pthbs_package" +find -type d -o -print | awk -F/ ' +BEGIN { + x["./command/strace"]=1 + x["./command/strace-log-merge"]=1 + x["./man/man1/strace.1"]=1 + x["./man/man1/strace-log-merge.1"]=1 +} + +function r1(s) { + sub("^[.]/[^/]*", ".", s) + return s +} +function s1(repl, s) { + sub("^[.]/[^/]*", "./"repl, s) + return s +} +function link(src) { + x[$0]=0 + printf "%s\t%s\n", $0, src + printf "genlinks >>%s\t%s<<\n", $0, src >>"/dev/stderr" +} +$1!="."{exit 1} + + +$2 == "command" { link($0); next } +$2 == "bin" { link(s1("command", $0)); next } + +$2 == "library.so" { link($0); next } +$2 == "library" { link($0); next } +$2 == "lib" && $NF ~ /\.l?a$/ { link(s1("library", $0)); next } +$2 == "lib" && $NF ~ /\.so(|\..*)$/ { link(s1("library.so", $0)); next } + +$2 == "share" && $3 ~ /^(info|man|doc|icons|terminfo)$/ { link(r1($0)); next } + +$2 == "man" { link($0); next } +$2 == "info" { link($0); next } +$2 == "doc" { link($0); next } +$2 == "icons" { link($0); next } +$2 == "terminfo" { link($0); next } +$2 == "data" { link($0); next } +$2 == "include" { link($0); next } + +{ printf "genlinks ##%s## skipped\n", $0 >>"/dev/stderr" } + +END { + for(fname in x) { printf "DEBUG: x[\"%s\"]=\"%s\"\n", fname, x[fname] >"/dev/stderr" } + for(fname in x) { + if(x[fname]) { + printf "ERROR: missing expected file \"%s\"\n", fname >"/dev/stderr" + exit 3 + } + } +}' >.install-links.new +mv .install-links.new .install-links diff --git a/variants/root-x86_64/userspace.environment b/variants/root-x86_64/userspace.environment @@ -35,4 +35,5 @@ #+libcap.66ba1f95782e8619e1ec2189653a79f3105901a0c25a4ad2ed3694f0bbe292ea #+applyuidgid-caps.2d571b717bda734b4464e7d3b36bb2c9eaa265fffd595bc090cbb137258121b8 #+ccx-utils.ccaa449ada3142ef075f3c80a6e475520219814490557f308ded4685231a70ac -#+user-env.8ad55eebe32b11f005f7b5c6dc204fdccc0a53cd7294f87c1e959ea47793dbca- \ No newline at end of file +#+user-env.8ad55eebe32b11f005f7b5c6dc204fdccc0a53cd7294f87c1e959ea47793dbca +#+strace.1659a9b65df7c6e6a611ff62e3a5e59d3197f51f1d3fe7e1108ecfbfc23efb55+ \ No newline at end of file