Skip to content

Commit 3538780

Browse files
committed
Build a debugging version of Perl
Create a debugging version of Perl with gdb installed so one can take an exact copy of the image with all the symbol tables etc etc.
1 parent 1d9b750 commit 3538780

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
builds:
33
- main
44
- slim
5+
- debug
56

67
options:
78
common: "-Duseshrplib -Dvendorprefix=/usr/local"

generate.pl

+39-6
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,20 @@ sub die_with_sample {
6969
EOF
7070
chomp $docker_slim_run_purge;
7171

72+
my $docker_rm_sources = <<'OEF';
73+
rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/{{cpanm_dist_name}}* /tmp/*
74+
OEF
75+
chomp $docker_rm_sources;
76+
77+
my $docker_rm_sources_install = <<'OEF';
78+
rm -fr ./cpanm /root/.cpanm /tmp/* /usr/src/{{cpanm_dist_name}}* \
79+
&& apt-get update \
80+
&& apt-get install --no-install-recommends -y gdb \
81+
&& rm -fr /var/cache/apt/* /var/lib/apt/lists/*
82+
OEF
83+
chomp $docker_rm_sources_install;
84+
85+
chomp $docker_rm_sources;
7286
my $config = do {
7387
open my $fh, '<', 'config.yml' or die "Couldn't open config";
7488
local $/;
@@ -144,20 +158,24 @@ sub die_with_sample {
144158

145159
$release->{extra_flags} ||= '';
146160
$release->{debian_release} ||= 'stretch';
161+
my $debug_flags = '';
147162

148-
if ($build =~ /main/) {
163+
if ($build =~ /(main|debug)/) {
149164
$release->{image} = 'buildpack-deps';
150165
$release->{tag} = $release->{debian_release};
166+
if ($build =~ /debug/) {
167+
# The beginning space here is important, it is here to reduce the
168+
# size of the diff size for the non-debug Dockerfiles.
169+
# Older versions may require -Doptimise=-g
170+
$debug_flags = " -Doptimise=-g -DEBUGGING=both";
171+
}
151172
}
152173
else {
153174
$release->{image} = 'debian';
154175
$release->{tag} = "@{[ $release->{debian_release} ]}-slim";
155176
}
156177

157178
my $output = $template;
158-
$output =~ s/\{\{$_\}\}/$release->{$_}/mg
159-
for (qw(version pause extra_flags sha256 type url image tag cpanm_dist_name cpanm_dist_url cpanm_dist_sha256));
160-
$output =~ s/\{\{args\}\}/$builds{$build}/mg;
161179

162180
if ($build =~ /slim/) {
163181
$output =~ s/\{\{docker_slim_run_install\}\}/$docker_slim_run_install/mg;
@@ -168,6 +186,21 @@ sub die_with_sample {
168186
$output =~ s/\{\{docker_slim_run_purge\}\}/true/mg;
169187
}
170188

189+
if ($build eq 'debug') {
190+
$output =~ s/\{\{docker_rm_sources\}\}/$docker_rm_sources_install/mg;
191+
}
192+
else {
193+
$output =~ s/\{\{docker_rm_sources\}\}/$docker_rm_sources/mg;
194+
}
195+
196+
$output =~ s/\{\{$_\}\}/$release->{$_}/mg
197+
for (qw(version pause extra_flags sha256 type url image tag cpanm_dist_name cpanm_dist_url cpanm_dist_sha256));
198+
$output =~ s/\{\{args\}\}/$builds{$build}/mg;
199+
200+
# The beginning space here is important, it is here to reduce the
201+
# size of the diff size for the non-debug Dockerfiles.
202+
$output =~ s/ \{\{debug_flags\}\}/$debug_flags/mg;
203+
171204
my $dir = sprintf "%i.%03i.%03i-%s", ($release->{version} =~ /(\d+)\.(\d+)\.(\d+)/), $build;
172205

173206
mkdir $dir unless -d $dir;
@@ -277,7 +310,7 @@ =head1 DESCRIPTION
277310
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
278311
&& archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \
279312
&& archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \
280-
&& ./Configure -Darchname="$gnuArch" "$archFlag" {{args}} {{extra_flags}} -des \
313+
&& ./Configure -Darchname="$gnuArch" "$archFlag" {{args}} {{extra_flags}} {{debug_flags}} -des \
281314
&& make -j$(nproc) \
282315
&& {{test}} \
283316
&& make install \
@@ -286,7 +319,7 @@ =head1 DESCRIPTION
286319
&& echo '{{cpanm_dist_sha256}} *{{cpanm_dist_name}}.tar.gz' | sha256sum -c - \
287320
&& tar -xzf {{cpanm_dist_name}}.tar.gz && cd {{cpanm_dist_name}} && perl bin/cpanm . && cd /root \
288321
&& {{docker_slim_run_purge}} \
289-
&& rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/{{cpanm_dist_name}}* /tmp/*
322+
&& {{docker_rm_sources}}
290323
291324
WORKDIR /root
292325

0 commit comments

Comments
 (0)