forked from josch/mmdebstrap
reformat code that would exceed 79 character width even after perltidy
This commit is contained in:
parent
6abbb3ebd9
commit
bba8922243
1 changed files with 108 additions and 47 deletions
155
mmdebstrap
155
mmdebstrap
|
@ -780,7 +780,10 @@ sub run_chroot(&$) {
|
||||||
# there is no /proc in fakechroot mode
|
# there is no /proc in fakechroot mode
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if (any { $_ eq $options->{mode} } ('root', 'unshare')) {
|
if (
|
||||||
|
any { $_ eq $options->{mode} }
|
||||||
|
('root', 'unshare')
|
||||||
|
) {
|
||||||
push @cleanup_tasks, sub {
|
push @cleanup_tasks, sub {
|
||||||
unlink "$options->{root}/$fname" or warn "cannot unlink $fname: $!";
|
unlink "$options->{root}/$fname" or warn "cannot unlink $fname: $!";
|
||||||
}
|
}
|
||||||
|
@ -809,14 +812,18 @@ sub run_chroot(&$) {
|
||||||
}
|
}
|
||||||
} elsif ($type == 5) { # directory
|
} elsif ($type == 5) { # directory
|
||||||
if (!$options->{havemknod}) {
|
if (!$options->{havemknod}) {
|
||||||
if (any { $_ eq $options->{mode} } ('root', 'unshare')) {
|
if (
|
||||||
|
any { $_ eq $options->{mode} }
|
||||||
|
('root', 'unshare')
|
||||||
|
) {
|
||||||
push @cleanup_tasks, sub {
|
push @cleanup_tasks, sub {
|
||||||
rmdir "$options->{root}/$fname" or warn "cannot rmdir $fname: $!";
|
rmdir "$options->{root}/$fname" or warn "cannot rmdir $fname: $!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (-e "$options->{root}/$fname") {
|
if (-e "$options->{root}/$fname") {
|
||||||
if (! -d "$options->{root}/$fname") {
|
if (! -d "$options->{root}/$fname") {
|
||||||
error "$fname already exists but is not a directory";
|
error "$fname already exists but is not a"
|
||||||
|
. " directory";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
my $num_created = make_path "$options->{root}/$fname", {error => \my $err};
|
my $num_created = make_path "$options->{root}/$fname", {error => \my $err};
|
||||||
|
@ -925,12 +932,14 @@ sub run_chroot(&$) {
|
||||||
# the file might not exist if it was removed in a hook
|
# the file might not exist if it was removed in a hook
|
||||||
if (-e "$options->{root}/sbin/start-stop-daemon") {
|
if (-e "$options->{root}/sbin/start-stop-daemon") {
|
||||||
if (-e "$options->{root}/sbin/start-stop-daemon.REAL") {
|
if (-e "$options->{root}/sbin/start-stop-daemon.REAL") {
|
||||||
error "$options->{root}/sbin/start-stop-daemon.REAL already exists";
|
error "$options->{root}/sbin/start-stop-daemon.REAL already"
|
||||||
|
. " exists";
|
||||||
}
|
}
|
||||||
move("$options->{root}/sbin/start-stop-daemon", "$options->{root}/sbin/start-stop-daemon.REAL") or error "cannot move start-stop-daemon: $!";
|
move("$options->{root}/sbin/start-stop-daemon", "$options->{root}/sbin/start-stop-daemon.REAL") or error "cannot move start-stop-daemon: $!";
|
||||||
open my $fh, '>', "$options->{root}/sbin/start-stop-daemon" or error "cannot open start-stop-daemon: $!";
|
open my $fh, '>', "$options->{root}/sbin/start-stop-daemon" or error "cannot open start-stop-daemon: $!";
|
||||||
print $fh "#!/bin/sh\n";
|
print $fh "#!/bin/sh\n";
|
||||||
print $fh "echo \"Warning: Fake start-stop-daemon called, doing nothing\">&2\n";
|
print $fh "echo \"Warning: Fake start-stop-daemon called, doing"
|
||||||
|
. " nothing\">&2\n";
|
||||||
close $fh;
|
close $fh;
|
||||||
chmod 0755, "$options->{root}/sbin/start-stop-daemon" or error "cannot chmod start-stop-daemon: $!";
|
chmod 0755, "$options->{root}/sbin/start-stop-daemon" or error "cannot chmod start-stop-daemon: $!";
|
||||||
}
|
}
|
||||||
|
@ -972,7 +981,10 @@ sub run_hooks($$) {
|
||||||
if (any { $_ eq $options->{variant} } ('extract', 'custom')
|
if (any { $_ eq $options->{variant} } ('extract', 'custom')
|
||||||
and any { $_ eq $options->{mode} } ('fakechroot', 'proot')
|
and any { $_ eq $options->{mode} } ('fakechroot', 'proot')
|
||||||
and $name ne 'setup') {
|
and $name ne 'setup') {
|
||||||
info "the copy-in, copy-out, tar-in and tar-out commands in fakechroot mode or proot mode might fail in extract and custom variants because there might be no tar inside the chroot";
|
info "the copy-in, copy-out, tar-in and tar-out commands"
|
||||||
|
. " in fakechroot mode or proot mode might fail in"
|
||||||
|
. " extract and custom variants because there might be"
|
||||||
|
. " no tar inside the chroot";
|
||||||
}
|
}
|
||||||
|
|
||||||
my $pid = fork() // error "fork() failed: $!";
|
my $pid = fork() // error "fork() failed: $!";
|
||||||
|
@ -990,7 +1002,9 @@ sub run_hooks($$) {
|
||||||
if($is_covering) {
|
if($is_covering) {
|
||||||
$prefix = "$EXECUTABLE_NAME -MDevel::Cover=-silent,-nogcov ";
|
$prefix = "$EXECUTABLE_NAME -MDevel::Cover=-silent,-nogcov ";
|
||||||
}
|
}
|
||||||
exec 'sh', '-c', "$prefix$PROGRAM_NAME --hook-helper \"\$1\" \"\$2\" \"\$3\" \"\$4\" \"\$5\" $script",
|
exec 'sh', '-c',
|
||||||
|
"$prefix$PROGRAM_NAME --hook-helper"
|
||||||
|
. " \"\$1\" \"\$2\" \"\$3\" \"\$4\" \"\$5\" $script",
|
||||||
'exec', $options->{root}, $options->{mode}, $name, (defined $options->{qemu} ? "qemu-$options->{qemu}" : 'env', $verbosity_level);
|
'exec', $options->{root}, $options->{mode}, $name, (defined $options->{qemu} ? "qemu-$options->{qemu}" : 'env', $verbosity_level);
|
||||||
}
|
}
|
||||||
waitpid($pid, 0);
|
waitpid($pid, 0);
|
||||||
|
@ -1002,7 +1016,8 @@ sub run_hooks($$) {
|
||||||
# (the /a regex modifier makes \w match only ASCII)
|
# (the /a regex modifier makes \w match only ASCII)
|
||||||
0 == system($script, $options->{root}) or error "command failed: $script";
|
0 == system($script, $options->{root}) or error "command failed: $script";
|
||||||
} else {
|
} else {
|
||||||
info "running --$name-hook in shell: sh -c '$script' exec $options->{root}";
|
info "running --$name-hook in shell: sh -c '$script' exec"
|
||||||
|
. " $options->{root}";
|
||||||
# otherwise, wrap everything in sh -c
|
# otherwise, wrap everything in sh -c
|
||||||
0 == system('sh', '-c', $script, 'exec', $options->{root}) or error "command failed: $script";
|
0 == system('sh', '-c', $script, 'exec', $options->{root}) or error "command failed: $script";
|
||||||
}
|
}
|
||||||
|
@ -1216,12 +1231,14 @@ sub setup {
|
||||||
if (-e "/etc/resolv.conf") {
|
if (-e "/etc/resolv.conf") {
|
||||||
copy("/etc/resolv.conf", "$options->{root}/etc/resolv.conf") or error "cannot copy /etc/resolv.conf: $!";
|
copy("/etc/resolv.conf", "$options->{root}/etc/resolv.conf") or error "cannot copy /etc/resolv.conf: $!";
|
||||||
} else {
|
} else {
|
||||||
warning("Host system does not have a /etc/resolv.conf to copy into the rootfs.")
|
warning("Host system does not have a /etc/resolv.conf to copy into the"
|
||||||
|
. " rootfs.")
|
||||||
}
|
}
|
||||||
if (-e "/etc/hostname") {
|
if (-e "/etc/hostname") {
|
||||||
copy("/etc/hostname", "$options->{root}/etc/hostname") or error "cannot copy /etc/hostname: $!";
|
copy("/etc/hostname", "$options->{root}/etc/hostname") or error "cannot copy /etc/hostname: $!";
|
||||||
} else {
|
} else {
|
||||||
warning("Host system does not have a /etc/hostname to copy into the rootfs.")
|
warning("Host system does not have a /etc/hostname to copy into the"
|
||||||
|
. " rootfs.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($options->{havemknod}) {
|
if ($options->{havemknod}) {
|
||||||
|
@ -1276,7 +1293,8 @@ sub setup {
|
||||||
if ($options->{mode} eq 'root') {
|
if ($options->{mode} eq 'root') {
|
||||||
my $partial = '/var/lib/apt/lists/partial';
|
my $partial = '/var/lib/apt/lists/partial';
|
||||||
if (system('/usr/lib/apt/apt-helper', 'drop-privs', '--', 'test', '-r', "$options->{root}$partial") != 0) {
|
if (system('/usr/lib/apt/apt-helper', 'drop-privs', '--', 'test', '-r', "$options->{root}$partial") != 0) {
|
||||||
warning "Download is performed unsandboxed as root as file $options->{root}$partial couldn't be accessed by user _apt";
|
warning "Download is performed unsandboxed as root as file"
|
||||||
|
. " $options->{root}$partial couldn't be accessed by user _apt";
|
||||||
open my $fh, '>>', $tmpfile or error "cannot open $tmpfile for appending: $!";
|
open my $fh, '>>', $tmpfile or error "cannot open $tmpfile for appending: $!";
|
||||||
print $fh "APT::Sandbox::User \"root\";\n";
|
print $fh "APT::Sandbox::User \"root\";\n";
|
||||||
close $fh;
|
close $fh;
|
||||||
|
@ -1510,7 +1528,8 @@ sub setup {
|
||||||
my $pid2 = fork() // error "fork() failed: $!";
|
my $pid2 = fork() // error "fork() failed: $!";
|
||||||
if ($pid2 == 0) {
|
if ($pid2 == 0) {
|
||||||
open(STDIN, '<&', $rfh) or error "cannot open STDIN: $!";
|
open(STDIN, '<&', $rfh) or error "cannot open STDIN: $!";
|
||||||
debug("running tar -C $options->{root} --keep-directory-symlink --extract --file -");
|
debug( "running tar -C $options->{root}"
|
||||||
|
. " --keep-directory-symlink --extract --file -");
|
||||||
eval 'Devel::Cover::set_coverage("none")' if $is_covering;
|
eval 'Devel::Cover::set_coverage("none")' if $is_covering;
|
||||||
exec 'tar', '-C', $options->{root}, '--keep-directory-symlink', '--extract', '--file', '-';
|
exec 'tar', '-C', $options->{root}, '--keep-directory-symlink', '--extract', '--file', '-';
|
||||||
}
|
}
|
||||||
|
@ -1677,11 +1696,15 @@ sub setup {
|
||||||
}
|
}
|
||||||
my $fakechrootdir = "/usr/lib/$deb_host_multiarch/fakechroot";
|
my $fakechrootdir = "/usr/lib/$deb_host_multiarch/fakechroot";
|
||||||
if (! -e "$fakechrootdir/libfakechroot.so") {
|
if (! -e "$fakechrootdir/libfakechroot.so") {
|
||||||
error "$fakechrootdir/libfakechroot.so doesn't exist. Install libfakechroot:$options->{nativearch} outside the chroot";
|
error "$fakechrootdir/libfakechroot.so doesn't exist."
|
||||||
|
. " Install libfakechroot:$options->{nativearch}"
|
||||||
|
. " outside the chroot";
|
||||||
}
|
}
|
||||||
my $fakerootdir = "/usr/lib/$deb_host_multiarch/libfakeroot";
|
my $fakerootdir = "/usr/lib/$deb_host_multiarch/libfakeroot";
|
||||||
if (! -e "$fakerootdir/libfakeroot-sysv.so") {
|
if (! -e "$fakerootdir/libfakeroot-sysv.so") {
|
||||||
error "$fakerootdir/libfakeroot-sysv.so doesn't exist. Install libfakeroot:$options->{nativearch} outside the chroot";
|
error "$fakerootdir/libfakeroot-sysv.so doesn't exist."
|
||||||
|
. " Install libfakeroot:$options->{nativearch}"
|
||||||
|
. " outside the chroot";
|
||||||
}
|
}
|
||||||
# fakechroot only fills LD_LIBRARY_PATH with the
|
# fakechroot only fills LD_LIBRARY_PATH with the
|
||||||
# directories of the host's architecture. We append the
|
# directories of the host's architecture. We append the
|
||||||
|
@ -1712,12 +1735,17 @@ sub setup {
|
||||||
my $ret = system @chrootcmd, '/bin/mv', '/000-move-me', '/001-delete-me';
|
my $ret = system @chrootcmd, '/bin/mv', '/000-move-me', '/001-delete-me';
|
||||||
if ($ret != 0) {
|
if ($ret != 0) {
|
||||||
if ($options->{mode} eq 'proot') {
|
if ($options->{mode} eq 'proot') {
|
||||||
info "the /bin/mv binary inside the chroot doesn't work under proot";
|
info "the /bin/mv binary inside the chroot doesn't"
|
||||||
info "this is likely due to missing support for renameat2 in proot";
|
. " work under proot";
|
||||||
|
info "this is likely due to missing support for"
|
||||||
|
. " renameat2 in proot";
|
||||||
info "see https://github.com/proot-me/PRoot/issues/147";
|
info "see https://github.com/proot-me/PRoot/issues/147";
|
||||||
} else {
|
} else {
|
||||||
info "the /bin/mv binary inside the chroot doesn't work under fakechroot";
|
info "the /bin/mv binary inside the chroot doesn't"
|
||||||
info "with certain versions of coreutils and glibc, this is due to missing support for renameat2 in fakechroot";
|
. " work under fakechroot";
|
||||||
|
info "with certain versions of coreutils and glibc,"
|
||||||
|
. " this is due to missing support for renameat2 in"
|
||||||
|
. " fakechroot";
|
||||||
info "see https://github.com/dex4er/fakechroot/issues/60";
|
info "see https://github.com/dex4er/fakechroot/issues/60";
|
||||||
}
|
}
|
||||||
info "expect package post installation scripts not to work";
|
info "expect package post installation scripts not to work";
|
||||||
|
@ -1830,7 +1858,8 @@ sub setup {
|
||||||
}
|
}
|
||||||
close $dh;
|
close $dh;
|
||||||
if (scalar @debs_to_install == 0) {
|
if (scalar @debs_to_install == 0) {
|
||||||
warning "nothing got downloaded -- maybe the packages were already installed?";
|
warning "nothing got downloaded -- maybe the packages"
|
||||||
|
. " were already installed?";
|
||||||
} else {
|
} else {
|
||||||
# we need --force-depends because dpkg does not take
|
# we need --force-depends because dpkg does not take
|
||||||
# Pre-Depends into account and thus doesn't install
|
# Pre-Depends into account and thus doesn't install
|
||||||
|
@ -1990,7 +2019,8 @@ sub main() {
|
||||||
|
|
||||||
if (any { $_ eq $command} ('copy-in', 'tar-in', 'upload')) {
|
if (any { $_ eq $command} ('copy-in', 'tar-in', 'upload')) {
|
||||||
if (scalar @ARGV < 9) {
|
if (scalar @ARGV < 9) {
|
||||||
error "copy-in and tar-in need at least one path on the outside and the output path inside the chroot"
|
error "copy-in and tar-in need at least one path on the"
|
||||||
|
. " outside and the output path inside the chroot";
|
||||||
}
|
}
|
||||||
my $outpath = $ARGV[-1];
|
my $outpath = $ARGV[-1];
|
||||||
for (my $i = 7; $i < $#ARGV; $i++) {
|
for (my $i = 7; $i < $#ARGV; $i++) {
|
||||||
|
@ -2085,7 +2115,8 @@ sub main() {
|
||||||
}
|
}
|
||||||
} elsif (any { $_ eq $command} ('copy-out', 'tar-out', 'download')) {
|
} elsif (any { $_ eq $command} ('copy-out', 'tar-out', 'download')) {
|
||||||
if (scalar @ARGV < 9) {
|
if (scalar @ARGV < 9) {
|
||||||
error "copy-out needs at least one path inside the chroot and the output path on the outside"
|
error "copy-out needs at least one path inside the chroot and"
|
||||||
|
. " the output path on the outside";
|
||||||
}
|
}
|
||||||
my $outpath = $ARGV[-1];
|
my $outpath = $ARGV[-1];
|
||||||
for (my $i = 7; $i < $#ARGV; $i++) {
|
for (my $i = 7; $i < $#ARGV; $i++) {
|
||||||
|
@ -2214,7 +2245,8 @@ sub main() {
|
||||||
'keyring=s' => sub {
|
'keyring=s' => sub {
|
||||||
my ($opt_name, $opt_value) = @_;
|
my ($opt_name, $opt_value) = @_;
|
||||||
if ($opt_value =~ /"/) {
|
if ($opt_value =~ /"/) {
|
||||||
error "--keyring: apt cannot handle paths with double quotes: $opt_value";
|
error "--keyring: apt cannot handle paths with double quotes:"
|
||||||
|
. " $opt_value";
|
||||||
}
|
}
|
||||||
if (! -e $opt_value) {
|
if (! -e $opt_value) {
|
||||||
error "keyring \"$opt_value\" does not exist";
|
error "keyring \"$opt_value\" does not exist";
|
||||||
|
@ -2253,7 +2285,8 @@ sub main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $arg (@{$options->{noop}}) {
|
foreach my $arg (@{$options->{noop}}) {
|
||||||
info "The option --$arg is a no-op. It only exists for compatibility with some debootstrap wrappers.";
|
info "The option --$arg is a no-op. It only exists for compatibility"
|
||||||
|
. " with some debootstrap wrappers.";
|
||||||
}
|
}
|
||||||
|
|
||||||
my @valid_variants = ('extract', 'custom', 'essential', 'apt', 'required',
|
my @valid_variants = ('extract', 'custom', 'essential', 'apt', 'required',
|
||||||
|
@ -2267,7 +2300,8 @@ sub main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($options->{variant} eq 'essential' and scalar @{$options->{include}} > 0) {
|
if ($options->{variant} eq 'essential' and scalar @{$options->{include}} > 0) {
|
||||||
warning "cannot install extra packages with variant essential because apt is missing";
|
warning "cannot install extra packages with variant essential because"
|
||||||
|
. " apt is missing";
|
||||||
}
|
}
|
||||||
|
|
||||||
# fakeroot is an alias for fakechroot
|
# fakeroot is an alias for fakechroot
|
||||||
|
@ -2361,10 +2395,14 @@ sub main() {
|
||||||
chomp(my $content = do { local $/; <$fh> });
|
chomp(my $content = do { local $/; <$fh> });
|
||||||
close($fh);
|
close($fh);
|
||||||
if ($content ne "1") {
|
if ($content ne "1") {
|
||||||
info "/proc/sys/kernel/unprivileged_userns_clone is set to $content";
|
info "/proc/sys/kernel/unprivileged_userns_clone is set to"
|
||||||
info "try running: sudo sysctl -w kernel.unprivileged_userns_clone=1";
|
. " $content";
|
||||||
info "or permanently enable unprivileged usernamespaces by putting the setting into /etc/sysctl.d/";
|
info "Try running:";
|
||||||
info "see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=898446";
|
info " sudo sysctl -w kernel.unprivileged_userns_clone=1";
|
||||||
|
info "or permanently enable unprivileged usernamespaces by"
|
||||||
|
. " putting the setting into /etc/sysctl.d/";
|
||||||
|
info "see https://bugs.debian.org/cgi-bin/"
|
||||||
|
. "bugreport.cgi?bug=898446";
|
||||||
}
|
}
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
|
@ -2394,7 +2432,8 @@ sub main() {
|
||||||
$options->{nativearch} = $hostarch;
|
$options->{nativearch} = $hostarch;
|
||||||
$options->{foreignarchs} = [];
|
$options->{foreignarchs} = [];
|
||||||
if (scalar @architectures == 0) {
|
if (scalar @architectures == 0) {
|
||||||
warning "empty architecture list: falling back to native architecture $hostarch";
|
warning "empty architecture list: falling back to native architecture"
|
||||||
|
. " $hostarch";
|
||||||
} elsif (scalar @architectures == 1) {
|
} elsif (scalar @architectures == 1) {
|
||||||
$options->{nativearch} = $architectures[0];
|
$options->{nativearch} = $architectures[0];
|
||||||
} else {
|
} else {
|
||||||
|
@ -2444,7 +2483,8 @@ sub main() {
|
||||||
# if exec didn't work (for example because the arch-test
|
# if exec didn't work (for example because the arch-test
|
||||||
# program is missing) prepare for the worst and assume that
|
# program is missing) prepare for the worst and assume that
|
||||||
# the architecture cannot be executed
|
# the architecture cannot be executed
|
||||||
print "$options->{nativearch}: not supported on this machine/kernel\n";
|
print "$options->{nativearch}: not supported on this"
|
||||||
|
. " machine/kernel\n";
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
chomp (my $content = do { local $/; <$fh> });
|
chomp (my $content = do { local $/; <$fh> });
|
||||||
|
@ -2460,10 +2500,11 @@ sub main() {
|
||||||
no warnings; # don't print a warning if the following fails
|
no warnings; # don't print a warning if the following fails
|
||||||
exec 'arch-test', '-n', $options->{nativearch};
|
exec 'arch-test', '-n', $options->{nativearch};
|
||||||
}
|
}
|
||||||
print "$options->{nativearch}: not supported on this machine/kernel\n";
|
|
||||||
# if exec didn't work (for example because the arch-test
|
# if exec didn't work (for example because the arch-test
|
||||||
# program is missing) prepare for the worst and assume that
|
# program is missing) prepare for the worst and assume that
|
||||||
# the architecture cannot be executed
|
# the architecture cannot be executed
|
||||||
|
print "$options->{nativearch}: not supported on this"
|
||||||
|
. " machine/kernel\n";
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
chomp (my $content = do { local $/; <$fh> });
|
chomp (my $content = do { local $/; <$fh> });
|
||||||
|
@ -2485,46 +2526,55 @@ sub main() {
|
||||||
{
|
{
|
||||||
open my $fh, '<', '/proc/filesystems' or error "failed to open /proc/filesystems: $!";
|
open my $fh, '<', '/proc/filesystems' or error "failed to open /proc/filesystems: $!";
|
||||||
unless (grep /^nodev\tbinfmt_misc$/, (<$fh>)) {
|
unless (grep /^nodev\tbinfmt_misc$/, (<$fh>)) {
|
||||||
warning "binfmt_misc not found in /proc/filesystems -- is the module loaded?";
|
warning "binfmt_misc not found in /proc/filesystems --"
|
||||||
|
. " is the module loaded?";
|
||||||
}
|
}
|
||||||
close $fh;
|
close $fh;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
open my $fh, '<', '/proc/mounts' or error "failed to open /proc/mounts: $!";
|
open my $fh, '<', '/proc/mounts' or error "failed to open /proc/mounts: $!";
|
||||||
unless (grep /^binfmt_misc \/proc\/sys\/fs\/binfmt_misc binfmt_misc/, (<$fh>)) {
|
unless (grep /^binfmt_misc \/proc\/sys\/fs\/binfmt_misc binfmt_misc/, (<$fh>)) {
|
||||||
warning "binfmt_misc not found in /proc/mounts -- not mounted?";
|
warning "binfmt_misc not found in /proc/mounts -- not"
|
||||||
|
. " mounted?";
|
||||||
}
|
}
|
||||||
close $fh;
|
close $fh;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
if (!exists $deb2qemu->{$options->{nativearch}}) {
|
if (!exists $deb2qemu->{$options->{nativearch}}) {
|
||||||
warning "no mapping from $options->{nativearch} to qemu-user binary";
|
warning "no mapping from $options->{nativearch} to"
|
||||||
|
. " qemu-user binary";
|
||||||
} else {
|
} else {
|
||||||
my $binfmt_identifier = 'qemu-' . $deb2qemu->{$options->{nativearch}};
|
my $binfmt_identifier = 'qemu-' . $deb2qemu->{$options->{nativearch}};
|
||||||
open my $fh, '-|', '/usr/sbin/update-binfmts', '--display', $binfmt_identifier // error "failed to fork(): $!";
|
open my $fh, '-|', '/usr/sbin/update-binfmts', '--display', $binfmt_identifier // error "failed to fork(): $!";
|
||||||
chomp (my $binfmts = do { local $/; <$fh> });
|
chomp (my $binfmts = do { local $/; <$fh> });
|
||||||
close $fh;
|
close $fh;
|
||||||
if ($binfmts eq '') {
|
if ($binfmts eq '') {
|
||||||
warning "$binfmt_identifier is not a supported binfmt name";
|
warning "$binfmt_identifier is not a supported"
|
||||||
|
. " binfmt name";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
error "$options->{nativearch} can neither be executed natively nor via qemu user emulation with binfmt_misc";
|
error "$options->{nativearch} can neither be executed natively"
|
||||||
|
. " nor via qemu user emulation with binfmt_misc";
|
||||||
} elsif ($withemu == 0 and $noemu == 1) {
|
} elsif ($withemu == 0 and $noemu == 1) {
|
||||||
error "arch-test succeeded without emu but not with emu";
|
error "arch-test succeeded without emu but not with emu";
|
||||||
} elsif ($withemu == 1 and $noemu == 0) {
|
} elsif ($withemu == 1 and $noemu == 0) {
|
||||||
info "$options->{nativearch} cannot be executed, falling back to qemu-user";
|
info "$options->{nativearch} cannot be executed, falling back"
|
||||||
|
. " to qemu-user";
|
||||||
if (!exists $deb2qemu->{$options->{nativearch}}) {
|
if (!exists $deb2qemu->{$options->{nativearch}}) {
|
||||||
error "no mapping from $options->{nativearch} to qemu-user binary";
|
error "no mapping from $options->{nativearch} to qemu-user"
|
||||||
|
. " binary";
|
||||||
}
|
}
|
||||||
$options->{qemu} = $deb2qemu->{$options->{nativearch}};
|
$options->{qemu} = $deb2qemu->{$options->{nativearch}};
|
||||||
} elsif ($withemu == 1 and $noemu == 1) {
|
} elsif ($withemu == 1 and $noemu == 1) {
|
||||||
info "$options->{nativearch} is different from $hostarch but can be executed natively";
|
info "$options->{nativearch} is different from $hostarch but"
|
||||||
|
. " can be executed natively";
|
||||||
} else {
|
} else {
|
||||||
error "logic error";
|
error "logic error";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
info "chroot architecture $options->{nativearch} is equal to the host's architecture";
|
info "chroot architecture $options->{nativearch} is equal to the"
|
||||||
|
. " host's architecture";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2646,7 +2696,8 @@ sub main() {
|
||||||
error "gpg failed";
|
error "gpg failed";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
info "gpg --version failed: cannot determine the right signed-by value"
|
info "gpg --version failed: cannot determine the right"
|
||||||
|
. " signed-by value"
|
||||||
}
|
}
|
||||||
remove_tree($gpghome, {error => \my $err});
|
remove_tree($gpghome, {error => \my $err});
|
||||||
if (@$err) {
|
if (@$err) {
|
||||||
|
@ -2707,11 +2758,15 @@ sub main() {
|
||||||
} elsif (any {$_ eq $suite} @debstable) {
|
} elsif (any {$_ eq $suite} @debstable) {
|
||||||
$sourceslist .= "deb$signedby $mirror $suite-updates $compstr\n";
|
$sourceslist .= "deb$signedby $mirror $suite-updates $compstr\n";
|
||||||
if (any {$_ eq $suite} ('oldoldstable', 'oldstable', 'stable', 'jessie', 'stretch', 'buster')) {
|
if (any {$_ eq $suite} ('oldoldstable', 'oldstable', 'stable', 'jessie', 'stretch', 'buster')) {
|
||||||
$sourceslist .= "deb$signedby $secmirror $suite/updates $compstr\n";
|
$sourceslist
|
||||||
|
.= "deb$signedby $secmirror $suite/updates"
|
||||||
|
. " $compstr\n";
|
||||||
} else {
|
} else {
|
||||||
# starting from bullseye use
|
# starting from bullseye use
|
||||||
# https://lists.debian.org/87r26wqr2a.fsf@43-1.org
|
# https://lists.debian.org/87r26wqr2a.fsf@43-1.org
|
||||||
$sourceslist .= "deb$signedby $secmirror $suite-security $compstr\n";
|
$sourceslist
|
||||||
|
.= "deb$signedby $secmirror $suite-security"
|
||||||
|
. " $compstr\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2725,7 +2780,8 @@ sub main() {
|
||||||
if ($options->{target} ne '-') {
|
if ($options->{target} ne '-') {
|
||||||
my $abs_path = abs_path($options->{target});
|
my $abs_path = abs_path($options->{target});
|
||||||
if (!defined $abs_path) {
|
if (!defined $abs_path) {
|
||||||
error "unable to get absolute path of target directory $options->{target}";
|
error "unable to get absolute path of target directory"
|
||||||
|
. " $options->{target}";
|
||||||
}
|
}
|
||||||
$options->{target} = $abs_path;
|
$options->{target} = $abs_path;
|
||||||
}
|
}
|
||||||
|
@ -2771,7 +2827,9 @@ sub main() {
|
||||||
|
|
||||||
if ($options->{maketar} or $options->{makesqfs}) {
|
if ($options->{maketar} or $options->{makesqfs}) {
|
||||||
if (any { $_ eq $options->{variant} } ('extract', 'custom') and any { $_ eq $options->{mode} } ('fakechroot', 'proot')) {
|
if (any { $_ eq $options->{variant} } ('extract', 'custom') and any { $_ eq $options->{mode} } ('fakechroot', 'proot')) {
|
||||||
info "creating a tarball or squashfs image in fakechroot mode or proot mode might fail in extract and custom variants because there might be no tar inside the chroot";
|
info "creating a tarball or squashfs image in fakechroot mode or"
|
||||||
|
. " proot mode might fail in extract and custom variants because"
|
||||||
|
. " there might be no tar inside the chroot";
|
||||||
}
|
}
|
||||||
# try to fail early if target tarball or squashfs image cannot be
|
# try to fail early if target tarball or squashfs image cannot be
|
||||||
# opened for writing
|
# opened for writing
|
||||||
|
@ -2822,7 +2880,8 @@ sub main() {
|
||||||
# rationale for requiring an empty directory:
|
# rationale for requiring an empty directory:
|
||||||
# https://bugs.debian.org/833525
|
# https://bugs.debian.org/833525
|
||||||
if (readdir $dh2) {
|
if (readdir $dh2) {
|
||||||
error "$options->{root} contains a non-empty lost+found directory";
|
error "$options->{root} contains a non-empty"
|
||||||
|
. " lost+found directory";
|
||||||
}
|
}
|
||||||
closedir($dh2);
|
closedir($dh2);
|
||||||
} else {
|
} else {
|
||||||
|
@ -3435,7 +3494,9 @@ sub main() {
|
||||||
# working directory" if the working directory cannot be
|
# working directory" if the working directory cannot be
|
||||||
# accessed by the unprivileged unshared user. Thus, we first
|
# accessed by the unprivileged unshared user. Thus, we first
|
||||||
# navigate to the parent of the root directory.
|
# navigate to the parent of the root directory.
|
||||||
chdir "$options->{root}/.." or error "unable to chdir() to parent directory of $options->{root}: $!";
|
chdir "$options->{root}/.."
|
||||||
|
or error "unable to chdir() to parent directory of"
|
||||||
|
. " $options->{root}: $!";
|
||||||
remove_tree($options->{root}, {error => \my $err});
|
remove_tree($options->{root}, {error => \my $err});
|
||||||
if (@$err) {
|
if (@$err) {
|
||||||
for my $diag (@$err) {
|
for my $diag (@$err) {
|
||||||
|
|
Loading…
Reference in a new issue