|
|
@ -1071,6 +1071,11 @@ sub run_hooks {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "not running ${name}-hooks because of --dry-run";
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
my $runner = sub {
|
|
|
|
my $runner = sub {
|
|
|
|
foreach my $script (@{ $options->{"${name}_hook"} }) {
|
|
|
|
foreach my $script (@{ $options->{"${name}_hook"} }) {
|
|
|
|
if ($script
|
|
|
|
if ($script
|
|
|
@ -1520,11 +1525,18 @@ sub setup {
|
|
|
|
# (essential variant) then we have to compute the package set ourselves.
|
|
|
|
# (essential variant) then we have to compute the package set ourselves.
|
|
|
|
# Same if we want to install priority based variants.
|
|
|
|
# Same if we want to install priority based variants.
|
|
|
|
if (any { $_ eq $options->{variant} } ('extract', 'custom')) {
|
|
|
|
if (any { $_ eq $options->{variant} } ('extract', 'custom')) {
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "simulate downloading packages with apt...";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
info "downloading packages with apt...";
|
|
|
|
info "downloading packages with apt...";
|
|
|
|
|
|
|
|
}
|
|
|
|
run_apt_progress({
|
|
|
|
run_apt_progress({
|
|
|
|
ARGV => [
|
|
|
|
ARGV => [
|
|
|
|
'apt-get', '--yes',
|
|
|
|
'apt-get',
|
|
|
|
'-oApt::Get::Download-Only=true', 'install'
|
|
|
|
'--yes',
|
|
|
|
|
|
|
|
'-oApt::Get::Download-Only=true',
|
|
|
|
|
|
|
|
$options->{dryrun} ? '-oAPT::Get::Simulate=true' : (),
|
|
|
|
|
|
|
|
'install'
|
|
|
|
],
|
|
|
|
],
|
|
|
|
PKGS => [@pkgs_to_install],
|
|
|
|
PKGS => [@pkgs_to_install],
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -1542,11 +1554,18 @@ sub setup {
|
|
|
|
# remind me in 5+ years that I said that after I wrote
|
|
|
|
# remind me in 5+ years that I said that after I wrote
|
|
|
|
# in the bugreport: "Are you crazy?!? Nobody in his
|
|
|
|
# in the bugreport: "Are you crazy?!? Nobody in his
|
|
|
|
# right mind would even suggest depending on it!")
|
|
|
|
# right mind would even suggest depending on it!")
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "simulate downloading packages with apt...";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
info "downloading packages with apt...";
|
|
|
|
info "downloading packages with apt...";
|
|
|
|
|
|
|
|
}
|
|
|
|
run_apt_progress({
|
|
|
|
run_apt_progress({
|
|
|
|
ARGV => [
|
|
|
|
ARGV => [
|
|
|
|
'apt-get', '--yes',
|
|
|
|
'apt-get',
|
|
|
|
'-oApt::Get::Download-Only=true', 'dist-upgrade'
|
|
|
|
'--yes',
|
|
|
|
|
|
|
|
'-oApt::Get::Download-Only=true',
|
|
|
|
|
|
|
|
$options->{dryrun} ? '-oAPT::Get::Simulate=true' : (),
|
|
|
|
|
|
|
|
'dist-upgrade'
|
|
|
|
],
|
|
|
|
],
|
|
|
|
});
|
|
|
|
});
|
|
|
|
} elsif (
|
|
|
|
} elsif (
|
|
|
@ -1648,11 +1667,18 @@ sub setup {
|
|
|
|
debug " $pkg";
|
|
|
|
debug " $pkg";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "simulate downloading packages with apt...";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
info "downloading packages with apt...";
|
|
|
|
info "downloading packages with apt...";
|
|
|
|
|
|
|
|
}
|
|
|
|
run_apt_progress({
|
|
|
|
run_apt_progress({
|
|
|
|
ARGV => [
|
|
|
|
ARGV => [
|
|
|
|
'apt-get', '--yes',
|
|
|
|
'apt-get',
|
|
|
|
'-oApt::Get::Download-Only=true', 'install'
|
|
|
|
'--yes',
|
|
|
|
|
|
|
|
'-oApt::Get::Download-Only=true',
|
|
|
|
|
|
|
|
$options->{dryrun} ? '-oAPT::Get::Simulate=true' : (),
|
|
|
|
|
|
|
|
'install'
|
|
|
|
],
|
|
|
|
],
|
|
|
|
PKGS => [keys %ess_pkgs],
|
|
|
|
PKGS => [keys %ess_pkgs],
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -1660,9 +1686,9 @@ sub setup {
|
|
|
|
error "unknown variant: $options->{variant}";
|
|
|
|
error "unknown variant: $options->{variant}";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# extract the downloaded packages
|
|
|
|
# collect the .deb files that were downloaded by apt
|
|
|
|
my @essential_pkgs;
|
|
|
|
my @essential_pkgs;
|
|
|
|
{
|
|
|
|
if (!$options->{dryrun}) {
|
|
|
|
my $apt_archives = "/var/cache/apt/archives/";
|
|
|
|
my $apt_archives = "/var/cache/apt/archives/";
|
|
|
|
opendir my $dh, "$options->{root}/$apt_archives"
|
|
|
|
opendir my $dh, "$options->{root}/$apt_archives"
|
|
|
|
or error "cannot read $apt_archives";
|
|
|
|
or error "cannot read $apt_archives";
|
|
|
@ -1677,7 +1703,6 @@ sub setup {
|
|
|
|
push @essential_pkgs, $deb;
|
|
|
|
push @essential_pkgs, $deb;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
close $dh;
|
|
|
|
close $dh;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (scalar @essential_pkgs == 0) {
|
|
|
|
if (scalar @essential_pkgs == 0) {
|
|
|
|
# check if a file:// URI was used
|
|
|
|
# check if a file:// URI was used
|
|
|
@ -1686,12 +1711,13 @@ sub setup {
|
|
|
|
or error "cannot start apt-get indextargets: $!";
|
|
|
|
or error "cannot start apt-get indextargets: $!";
|
|
|
|
while (my $uri = <$pipe_apt>) {
|
|
|
|
while (my $uri = <$pipe_apt>) {
|
|
|
|
if ($uri =~ /^file:\/\//) {
|
|
|
|
if ($uri =~ /^file:\/\//) {
|
|
|
|
error
|
|
|
|
error "nothing got downloaded -- use copy:// instead of"
|
|
|
|
"nothing got downloaded -- use copy:// instead of file://";
|
|
|
|
. " file://";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
error "nothing got downloaded";
|
|
|
|
error "nothing got downloaded";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# We have to extract the packages from @essential_pkgs either if we run in
|
|
|
|
# We have to extract the packages from @essential_pkgs either if we run in
|
|
|
|
# chrootless mode and extract variant or in any other mode.
|
|
|
|
# chrootless mode and extract variant or in any other mode.
|
|
|
@ -1700,6 +1726,8 @@ sub setup {
|
|
|
|
if ( $options->{mode} eq 'chrootless'
|
|
|
|
if ( $options->{mode} eq 'chrootless'
|
|
|
|
and $options->{variant} ne 'extract') {
|
|
|
|
and $options->{variant} ne 'extract') {
|
|
|
|
# nothing to do
|
|
|
|
# nothing to do
|
|
|
|
|
|
|
|
} elsif ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "skip extracting packages because of --dry-run";
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
info "extracting archives...";
|
|
|
|
info "extracting archives...";
|
|
|
|
print_progress 0.0;
|
|
|
|
print_progress 0.0;
|
|
|
@ -1736,7 +1764,11 @@ sub setup {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ($options->{mode} eq 'chrootless') {
|
|
|
|
if ($options->{mode} eq 'chrootless') {
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "simulate installing packages...";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
info "installing packages...";
|
|
|
|
info "installing packages...";
|
|
|
|
|
|
|
|
}
|
|
|
|
# FIXME: the dpkg config from the host is parsed before the command
|
|
|
|
# FIXME: the dpkg config from the host is parsed before the command
|
|
|
|
# line arguments are parsed and might break this mode
|
|
|
|
# line arguments are parsed and might break this mode
|
|
|
|
# Example: if the host has --path-exclude set, then this will also
|
|
|
|
# Example: if the host has --path-exclude set, then this will also
|
|
|
@ -1745,7 +1777,8 @@ sub setup {
|
|
|
|
'-oDPkg::Options::=--force-not-root',
|
|
|
|
'-oDPkg::Options::=--force-not-root',
|
|
|
|
'-oDPkg::Options::=--force-script-chrootless',
|
|
|
|
'-oDPkg::Options::=--force-script-chrootless',
|
|
|
|
'-oDPkg::Options::=--root=' . $options->{root},
|
|
|
|
'-oDPkg::Options::=--root=' . $options->{root},
|
|
|
|
'-oDPkg::Options::=--log=' . "$options->{root}/var/log/dpkg.log"
|
|
|
|
'-oDPkg::Options::=--log=' . "$options->{root}/var/log/dpkg.log",
|
|
|
|
|
|
|
|
$options->{dryrun} ? '-oAPT::Get::Simulate=true' : (),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
if (defined $options->{qemu}) {
|
|
|
|
if (defined $options->{qemu}) {
|
|
|
|
# The binfmt support on the outside is used, so qemu needs to know
|
|
|
|
# The binfmt support on the outside is used, so qemu needs to know
|
|
|
@ -2002,6 +2035,9 @@ sub setup {
|
|
|
|
# we need --force-depends because dpkg does not take Pre-Depends
|
|
|
|
# we need --force-depends because dpkg does not take Pre-Depends
|
|
|
|
# into account and thus doesn't install them in the right order
|
|
|
|
# into account and thus doesn't install them in the right order
|
|
|
|
# And the --predep-package option is broken: #539133
|
|
|
|
# And the --predep-package option is broken: #539133
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "simulate installing packages...";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
info "installing packages...";
|
|
|
|
info "installing packages...";
|
|
|
|
run_chroot(
|
|
|
|
run_chroot(
|
|
|
|
sub {
|
|
|
|
sub {
|
|
|
@ -2016,10 +2052,12 @@ sub setup {
|
|
|
|
},
|
|
|
|
},
|
|
|
|
$options
|
|
|
|
$options
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# if the path-excluded option was added to the dpkg config,
|
|
|
|
# if the path-excluded option was added to the dpkg config,
|
|
|
|
# reinstall all packages
|
|
|
|
# reinstall all packages
|
|
|
|
if (-e "$options->{root}/etc/dpkg/dpkg.cfg.d/99mmdebstrap") {
|
|
|
|
if ((!$options->{dryrun})
|
|
|
|
|
|
|
|
and -e "$options->{root}/etc/dpkg/dpkg.cfg.d/99mmdebstrap") {
|
|
|
|
open(my $fh, '<',
|
|
|
|
open(my $fh, '<',
|
|
|
|
"$options->{root}/etc/dpkg/dpkg.cfg.d/99mmdebstrap")
|
|
|
|
"$options->{root}/etc/dpkg/dpkg.cfg.d/99mmdebstrap")
|
|
|
|
or error "cannot open /etc/dpkg/dpkg.cfg.d/99mmdebstrap: $!";
|
|
|
|
or error "cannot open /etc/dpkg/dpkg.cfg.d/99mmdebstrap: $!";
|
|
|
@ -2096,15 +2134,29 @@ sub setup {
|
|
|
|
$? == 0 or error "apt-get indextargets failed";
|
|
|
|
$? == 0 or error "apt-get indextargets failed";
|
|
|
|
|
|
|
|
|
|
|
|
if (scalar @pkgs_to_install_from_outside > 0) {
|
|
|
|
if (scalar @pkgs_to_install_from_outside > 0) {
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info 'simulate downloading '
|
|
|
|
|
|
|
|
. (join ', ', @pkgs_to_install_from_outside) . "...";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
info 'downloading '
|
|
|
|
info 'downloading '
|
|
|
|
. (join ', ', @pkgs_to_install_from_outside) . "...";
|
|
|
|
. (join ', ', @pkgs_to_install_from_outside) . "...";
|
|
|
|
|
|
|
|
}
|
|
|
|
run_apt_progress({
|
|
|
|
run_apt_progress({
|
|
|
|
ARGV => [
|
|
|
|
ARGV => [
|
|
|
|
'apt-get', '--yes',
|
|
|
|
'apt-get',
|
|
|
|
'-oApt::Get::Download-Only=true', 'install'
|
|
|
|
'--yes',
|
|
|
|
|
|
|
|
'-oApt::Get::Download-Only=true',
|
|
|
|
|
|
|
|
$options->{dryrun}
|
|
|
|
|
|
|
|
? '-oAPT::Get::Simulate=true'
|
|
|
|
|
|
|
|
: (),
|
|
|
|
|
|
|
|
'install'
|
|
|
|
],
|
|
|
|
],
|
|
|
|
PKGS => [@pkgs_to_install_from_outside],
|
|
|
|
PKGS => [@pkgs_to_install_from_outside],
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info 'simulate installing '
|
|
|
|
|
|
|
|
. (join ', ', @pkgs_to_install_from_outside) . "...";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
my @debs_to_install;
|
|
|
|
my @debs_to_install;
|
|
|
|
my $apt_archives = "/var/cache/apt/archives/";
|
|
|
|
my $apt_archives = "/var/cache/apt/archives/";
|
|
|
|
opendir my $dh, "$options->{root}/$apt_archives"
|
|
|
|
opendir my $dh, "$options->{root}/$apt_archives"
|
|
|
@ -2121,14 +2173,16 @@ 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"
|
|
|
|
warning
|
|
|
|
|
|
|
|
"nothing got downloaded -- maybe the packages"
|
|
|
|
. " were already installed?";
|
|
|
|
. " 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
|
|
|
|
# them in the right order
|
|
|
|
# them in the right order
|
|
|
|
info 'installing '
|
|
|
|
info 'installing '
|
|
|
|
. (join ', ', @pkgs_to_install_from_outside) . "...";
|
|
|
|
. (join ', ', @pkgs_to_install_from_outside)
|
|
|
|
|
|
|
|
. "...";
|
|
|
|
run_dpkg_progress({
|
|
|
|
run_dpkg_progress({
|
|
|
|
ARGV => [
|
|
|
|
ARGV => [
|
|
|
|
@chrootcmd, 'env',
|
|
|
|
@chrootcmd, 'env',
|
|
|
@ -2143,16 +2197,21 @@ sub setup {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!$options->{dryrun}) {
|
|
|
|
run_chroot(
|
|
|
|
run_chroot(
|
|
|
|
sub {
|
|
|
|
sub {
|
|
|
|
info
|
|
|
|
info "installing remaining packages inside the"
|
|
|
|
"installing remaining packages inside the chroot...";
|
|
|
|
. " chroot...";
|
|
|
|
run_apt_progress({
|
|
|
|
run_apt_progress({
|
|
|
|
ARGV => [
|
|
|
|
ARGV => [
|
|
|
|
@chrootcmd, 'env',
|
|
|
|
@chrootcmd,
|
|
|
|
'--unset=APT_CONFIG', '--unset=TMPDIR',
|
|
|
|
'env',
|
|
|
|
'apt-get', '--yes',
|
|
|
|
'--unset=APT_CONFIG',
|
|
|
|
|
|
|
|
'--unset=TMPDIR',
|
|
|
|
|
|
|
|
'apt-get',
|
|
|
|
|
|
|
|
'--yes',
|
|
|
|
'install'
|
|
|
|
'install'
|
|
|
|
],
|
|
|
|
],
|
|
|
|
PKGS => [@pkgs_to_install],
|
|
|
|
PKGS => [@pkgs_to_install],
|
|
|
@ -2160,7 +2219,17 @@ sub setup {
|
|
|
|
},
|
|
|
|
},
|
|
|
|
$options
|
|
|
|
$options
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
info "simulate installing remaining packages inside the"
|
|
|
|
|
|
|
|
. " chroot...";
|
|
|
|
|
|
|
|
run_apt_progress({
|
|
|
|
|
|
|
|
ARGV => [
|
|
|
|
|
|
|
|
'apt-get', '--yes',
|
|
|
|
|
|
|
|
'-oAPT::Get::Simulate=true', 'install'
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
PKGS => [@pkgs_to_install],
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
error "unknown variant: $options->{variant}";
|
|
|
|
error "unknown variant: $options->{variant}";
|
|
|
@ -2536,6 +2605,7 @@ sub main() {
|
|
|
|
setup_hook => [],
|
|
|
|
setup_hook => [],
|
|
|
|
essential_hook => [],
|
|
|
|
essential_hook => [],
|
|
|
|
customize_hook => [],
|
|
|
|
customize_hook => [],
|
|
|
|
|
|
|
|
dryrun => 0,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
my $logfile = undef;
|
|
|
|
my $logfile = undef;
|
|
|
|
Getopt::Long::Configure('default', 'bundling', 'auto_abbrev',
|
|
|
|
Getopt::Long::Configure('default', 'bundling', 'auto_abbrev',
|
|
|
@ -2589,6 +2659,8 @@ sub main() {
|
|
|
|
'setup-hook=s@' => \$options->{setup_hook},
|
|
|
|
'setup-hook=s@' => \$options->{setup_hook},
|
|
|
|
'essential-hook=s@' => \$options->{essential_hook},
|
|
|
|
'essential-hook=s@' => \$options->{essential_hook},
|
|
|
|
'customize-hook=s@' => \$options->{customize_hook},
|
|
|
|
'customize-hook=s@' => \$options->{customize_hook},
|
|
|
|
|
|
|
|
'simulate' => \$options->{dryrun},
|
|
|
|
|
|
|
|
'dry-run' => \$options->{dryrun},
|
|
|
|
) or pod2usage(-exitval => 2, -verbose => 1);
|
|
|
|
) or pod2usage(-exitval => 2, -verbose => 1);
|
|
|
|
|
|
|
|
|
|
|
|
if (defined($logfile)) {
|
|
|
|
if (defined($logfile)) {
|
|
|
@ -2600,6 +2672,14 @@ sub main() {
|
|
|
|
. " with some debootstrap wrappers.";
|
|
|
|
. " with some debootstrap wrappers.";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
foreach my $hook ('setup', 'essential', 'customize') {
|
|
|
|
|
|
|
|
if (scalar @{ $options->{"${hook}_hook"} } > 0) {
|
|
|
|
|
|
|
|
warning "In dry-run mode, --$hook-hook options have no effect";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
my @valid_variants = (
|
|
|
|
my @valid_variants = (
|
|
|
|
'extract', 'custom', 'essential', 'apt',
|
|
|
|
'extract', 'custom', 'essential', 'apt',
|
|
|
|
'required', 'minbase', 'buildd', 'important',
|
|
|
|
'required', 'minbase', 'buildd', 'important',
|
|
|
@ -3249,10 +3329,17 @@ sub main() {
|
|
|
|
# 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
|
|
|
|
if ($options->{target} ne '-') {
|
|
|
|
if ($options->{target} ne '-') {
|
|
|
|
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
if (-e $options->{target}) {
|
|
|
|
|
|
|
|
info "not overwriting $options->{target} because in"
|
|
|
|
|
|
|
|
. " dry-run mode";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
open my $fh, '>', $options->{target}
|
|
|
|
open my $fh, '>', $options->{target}
|
|
|
|
or error "cannot open $options->{target} for writing: $!";
|
|
|
|
or error "cannot open $options->{target} for writing: $!";
|
|
|
|
close $fh;
|
|
|
|
close $fh;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
# since the output is a tarball, we create the rootfs in a temporary
|
|
|
|
# since the output is a tarball, we create the rootfs in a temporary
|
|
|
|
# directory
|
|
|
|
# directory
|
|
|
|
$options->{root}
|
|
|
|
$options->{root}
|
|
|
@ -3493,7 +3580,9 @@ sub main() {
|
|
|
|
|
|
|
|
|
|
|
|
close $childsock;
|
|
|
|
close $childsock;
|
|
|
|
|
|
|
|
|
|
|
|
if ($options->{maketar} or $options->{makesqfs}) {
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
info "simulate creating tarball...";
|
|
|
|
|
|
|
|
} elsif ($options->{maketar} or $options->{makesqfs}) {
|
|
|
|
info "creating tarball...";
|
|
|
|
info "creating tarball...";
|
|
|
|
|
|
|
|
|
|
|
|
# redirect tar output to the writing end of the pipe so that
|
|
|
|
# redirect tar output to the writing end of the pipe so that
|
|
|
@ -3914,7 +4003,9 @@ sub main() {
|
|
|
|
|
|
|
|
|
|
|
|
close $parentsock;
|
|
|
|
close $parentsock;
|
|
|
|
|
|
|
|
|
|
|
|
if ($options->{maketar} or $options->{makesqfs}) {
|
|
|
|
if ($options->{dryrun}) {
|
|
|
|
|
|
|
|
# nothing to do
|
|
|
|
|
|
|
|
} elsif ($options->{maketar} or $options->{makesqfs}) {
|
|
|
|
# we use eval() so that error() doesn't take this process down and
|
|
|
|
# we use eval() so that error() doesn't take this process down and
|
|
|
|
# thus leaves the setup() process without a parent
|
|
|
|
# thus leaves the setup() process without a parent
|
|
|
|
eval {
|
|
|
|
eval {
|
|
|
@ -3927,7 +4018,8 @@ sub main() {
|
|
|
|
my @argv = ();
|
|
|
|
my @argv = ();
|
|
|
|
if ($options->{makesqfs}) {
|
|
|
|
if ($options->{makesqfs}) {
|
|
|
|
push @argv, 'tar2sqfs',
|
|
|
|
push @argv, 'tar2sqfs',
|
|
|
|
'--quiet', '--no-skip', '--force', '--exportable',
|
|
|
|
'--quiet', '--no-skip', '--force',
|
|
|
|
|
|
|
|
'--exportable',
|
|
|
|
'--compressor', 'xz',
|
|
|
|
'--compressor', 'xz',
|
|
|
|
'--block-size', '1048576',
|
|
|
|
'--block-size', '1048576',
|
|
|
|
$options->{target};
|
|
|
|
$options->{target};
|
|
|
@ -4299,8 +4391,20 @@ equivalent:
|
|
|
|
--architectures=amd64,armhf,mipsel
|
|
|
|
--architectures=amd64,armhf,mipsel
|
|
|
|
--arch=amd64 --arch="armhf mipsel" --arch=armhf,mipsel
|
|
|
|
--arch=amd64 --arch="armhf mipsel" --arch=armhf,mipsel
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=item B<--simulate>, B<--dry-run>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Run apt-get with B<--simulate>. Only the package cache is initialized but no
|
|
|
|
|
|
|
|
binary packages are downloaded or installed. Use this option to quickly check
|
|
|
|
|
|
|
|
whether a package selection within a certain suite and variant can in principle
|
|
|
|
|
|
|
|
be installed as far as their dependencies go. If the output is a tarball, then
|
|
|
|
|
|
|
|
no output is produced. If the output is a directory, then the directory will be
|
|
|
|
|
|
|
|
left populated with the skeleton files and directories necessary for apt to run
|
|
|
|
|
|
|
|
in it.
|
|
|
|
|
|
|
|
|
|
|
|
=begin comment
|
|
|
|
=begin comment
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
No hooks are executed in with B<--simulate> or B<--dry-run>.
|
|
|
|
|
|
|
|
|
|
|
|
=item B<--setup-hook>=I<command>
|
|
|
|
=item B<--setup-hook>=I<command>
|
|
|
|
|
|
|
|
|
|
|
|
Execute arbitrary I<command>s right after initial setup (directory creation,
|
|
|
|
Execute arbitrary I<command>s right after initial setup (directory creation,
|
|
|
|