ostype => "ubuntu-21.10",
origin => 'ubuntu',
},
+ 'jammy' => {
+ ostype => "ubuntu-22.04",
+ origin => 'ubuntu',
+ },
+ 'kinetic' => {
+ ostype => "ubuntu-22.10",
+ origin => 'ubuntu',
+ },
};
sub get_suite_info {
sub download {
my ($self, $url, $path) = @_;
+ my $tmpfn = "$path.tmp$$";
$self->logmsg ("download: $url\n");
- my $tmpfn = "$path.tmp$$";
- eval {
- $self->run_command ("wget -q '$url' -O '$tmpfn'");
- };
- my $err = $@;
- if ($err) {
+ eval { $self->run_command ("wget -q '$url' -O '$tmpfn'") };
+ if (my $err = $@) {
unlink $tmpfn;
die $err;
}
print $writer $input if defined $input;
close $writer;
- my $select = new IO::Select;
+ my $select = IO::Select->new();
$select->add ($reader);
$select->add ($error);
}
}
+sub get_target_name {
+ my ($config) = @_;
+
+ my $name = $config->{name} || die "no 'name' specified\n";
+ $name =~ m/^[a-z][0-9a-z\-\*\.]+$/ || die "illegal characters in name '$name'\n";
+
+ my ($version, $arch, $ostype) = $config->@{'version', 'architecture', 'ostype'};
+ $name = "${ostype}-${name}" if $name !~ m/^$ostype/;
+
+ return "${name}_${version}_${arch}"
+}
+
sub new {
my ($class, $config) = @_;
$class = ref ($class) || $class;
-
- my $self = {};
-
$config = read_config ('dab.conf') if !$config;
- $self->{config} = $config;
-
+ my $self = {
+ config => $config,
+ };
bless $self, $class;
$self->{logfile} = "logfile";
- $self->{logfd} = IO::File->new (">>$self->{logfile}") ||
- die "unable to open log file";
-
- my $arch = $config->{architecture};
- die "no 'architecture' specified\n" if !$arch;
+ $self->{logfd} = IO::File->new (">>$self->{logfile}") || die "unable to open log file";
- die "unsupported architecture '$arch'\n"
- if $arch !~ m/^(i386|amd64)$/;
+ my $arch = $config->{architecture} || die "no 'architecture' specified\n";
+ die "unsupported architecture '$arch'\n" if $arch !~ m/^(i386|amd64)$/;
my $suite = $config->{suite} || die "no 'suite' specified\n";
$suite = $suiteinfo->{suite};
$config->{ostype} = $suiteinfo->{ostype};
- my $name = $config->{name} || die "no 'name' specified\n";
-
- $name =~ m/^[a-z][0-9a-z\-\*\.]+$/ ||
- die "illegal characters in name '$name'\n";
-
- my $version = $config->{version};
- die "no 'version' specified\n" if !$version;
- die "no 'section' specified\n" if !$config->{section};
- die "no 'description' specified\n" if !$config->{headline};
- die "no 'maintainer' specified\n" if !$config->{maintainer};
-
- if ($name =~ m/^$config->{ostype}/) {
- $self->{targetname} = "${name}_${version}_$config->{architecture}";
- } else {
- $self->{targetname} = "$config->{ostype}-${name}_" .
- "${version}_$config->{architecture}";
+ # assert required dab.conf keys exist
+ for my $key (qw(version section headline maintainer)) {
+ die "no '$key' specified\n" if !$config->{$key};
}
+ $self->{targetname} = get_target_name($config);
+
if (!$config->{source}) {
if (lc($suiteinfo->{origin}) eq 'debian') {
if ($suite eq 'etch' || $suite eq 'lenny') {
'http://ftp.debian.org/debian SUITE main contrib',
'http://security.debian.org SUITE/updates main contrib',
);
- } elsif ($suite eq 'bullseye' || $suite eq 'bookworm') {
+ } elsif ($suite =~ /^(?:bullseye|bookworm|trixie|forky)$/) {
push @{$config->{source}}, (
- "http://ftp.debian.org/debian SUITE main contrib",
- "http://ftp.debian.org/debian SUITE-updates main contrib",
+ "http://deb.debian.org/debian SUITE main contrib",
+ "http://deb.debian.org/debian SUITE-updates main contrib",
"http://security.debian.org SUITE-security main contrib",
);
} else {
die "syntax error in mirror spezification '$m'\n";
}
}
-
$self->{sources} = $sources;
-
$self->{infodir} = "info";
- $self->__allocate_ve ();
+ $self->__allocate_ve();
$self->{cachedir} = ($config->{cachedir} || 'cache') . "/$suite";;
my $incl = [qw (less ssh openssh-server logrotate)];
+ my $excl = [qw (modutils reiserfsprogs ppp pppconfig pppoe pppoeconf nfs-common mtools ntp)];
- my $excl = [qw (modutils reiserfsprogs ppp pppconfig pppoe
- pppoeconf nfs-common mtools ntp)];
-
- # ubuntu has too many dependencies on udev, so
- # we cannot exclude it (instead we disable udevd)
-
+ # ubuntu has too many dependencies on udev, so we cannot exclude it (instead we disable udevd)
if (lc($suiteinfo->{origin}) eq 'ubuntu' && $suiteinfo->{flags}->{systemd}) {
push @$incl, 'isc-dhcp-client';
- push @$excl, qw(libmodule-build-perl);
+ push @$excl, qw(libmodule-build-perl libdrm-common libdrm2 libplymouth5 plymouth plymouth-theme-ubuntu-text powermgmt-base);
+ if ($suite eq 'jammy') {
+ push @$excl, qw(fuse); # avoid fuse2 <-> fuse3 conflict
+ }
} elsif ($suite eq 'trusty') {
push @$excl, qw(systemd systemd-services libpam-systemd libsystemd-daemon0 memtest86+);
} elsif ($suite eq 'precise') {
push @$excl, qw(systemd systemd-services libpam-systemd libsystemd-daemon0 memtest86+ ubuntu-standard);
} elsif ($suite eq 'hardy') {
push @$excl, qw(kbd);
- push @$excl, qw(apparmor apparmor-utils ntfs-3g
- friendly-recovery);
+ push @$excl, qw(apparmor apparmor-utils ntfs-3g friendly-recovery);
} elsif ($suite eq 'intrepid' || $suite eq 'jaunty') {
- push @$excl, qw(apparmor apparmor-utils libapparmor1 libapparmor-perl
- libntfs-3g28 ntfs-3g friendly-recovery);
+ push @$excl, qw(apparmor apparmor-utils libapparmor1 libapparmor-perl libntfs-3g28);
+ push @$excl, qw(ntfs-3g friendly-recovery);
} elsif ($suite eq 'jessie') {
push @$incl, 'sysvinit-core'; # avoid systemd and udev
push @$incl, 'libperl4-corelibs-perl'; # to make lsof happy
$self->run_command ("lxc-stop -n $veid --rcfile $conffile --kill");
unlink "$rootdir/sbin/defenv";
-
unlink <$rootdir/root/dead.letter*>;
-
unlink "$rootdir/var/log/init.log";
-
- unlink "$rootdir/aquota.group";
-
- unlink "$rootdir/aquota.user";
+ unlink "$rootdir/aquota.group", "$rootdir/aquota.user";
write_file ("", "$rootdir/var/log/syslog");
my $compressor2cmd_map = {
gz => 'gzip',
gzip => 'gzip',
- zst => 'zstd -9',
- zstd => 'zstd -9',
- 'zstd-max' => 'zstd -19 -T0', # maximal level where the decompressor can still run efficiently
+ zst => 'zstd --rm -9',
+ zstd => 'zstd --rm -9',
+ 'zstd-max' => 'zstd --rm -19 -T0', # maximal level where the decompressor can still run efficiently
};
my $compressor2ending = {
gzip => 'gz',
my $pkgfilelist = "$rootdir/var/lib/dpkg/status";
local $/ = '';
- open (PKGLST, "<$pkgfilelist") or die "unable to open '$pkgfilelist' - $!";
+ open(my $PKGLST, '<', $pkgfilelist) or die "unable to open '$pkgfilelist' - $!";
my $pkglist = {};
- while (my $rec = <PKGLST>) {
+ while (my $rec = <$PKGLST>) {
chomp $rec;
$rec =~ s/\n\s+/ /g;
$rec .= "\n";
}
}
- close (PKGLST);
+ close ($PKGLST);
return $pkglist;
}
my ($pkginfo, $filename, $src) = @_;
local $/ = '';
- open (PKGLST, "<$filename") ||
- die "unable to open '$filename'";
+ open(my $PKGLST, '<', $filename) or die "unable to open '$filename' - $!";
- while (my $rec = <PKGLST>) {
+ while (my $rec = <$PKGLST>) {
$rec =~ s/\n\s+/ /g;
chomp $rec;
$rec .= "\n";
my $res = {};
- while ($rec =~ s/^([^:]+):\s+(.*)\s*\n//) {
+ while ($rec =~ s/^([^:]+):\s+(.*?)\s*\n//) {
$res->{lc $1} = $2;
}
}
}
- close (PKGLST);
+ close ($PKGLST);
}
sub pkginfo {
my $memlimit = $opts->{memlimit};
my $rootdir = $self->{rootfs};
+ my $suite = $self->{config}->{suite};
- my $required = $self->compute_required([qw(php php-cli libapache2-mod-php php-gd)]);
+ my $base_set = [qw(php-cli libapache2-mod-php php-gd)];
+ if ($suite =~ /(?:squeeze|wheezy|jessie)$/) {
+ $self->logmsg("WARN: using EOL php release on EOL suite");
+ $base_set = [qw(php5 php5-cli libapache2-mod-php5 php5-gd)];
+ }
+ my $required = $self->compute_required($base_set);
$self->cache_packages ($required);
$self->ve_dpkg ('install', @$required);
if ($memlimit) {
- $self->run_command ("sed -e 's/^\\s*memory_limit\\s*=.*;/memory_limit = ${memlimit}M;/' -i $rootdir/etc/php5/apache2/php.ini");
+ my $sed_cmd = ['sed', '-e', "s/^\\s*memory_limit\\s*=.*;/memory_limit = ${memlimit}M;/", '-i'];
+ if ($suite =~ /(?:squeeze|wheezy|jessie)$/) {
+ push @$sed_cmd, "$rootdir/etc/php5/apache2/php.ini";
+ } else {
+ my $found = 0;
+ for my $fn (glob("'${rootdir}/etc/php/*/apache2/php.ini'")) {
+ push @$sed_cmd, "$rootdir/$fn";
+ $found = 1;
+ }
+ if (!$found) {
+ warn "WARN: did not found any php.ini to set the memlimit!\n";
+ return;
+ }
+ }
+ $self->run_command($sed_cmd);
}
}
my ($self, $pkglist, $unpack) = @_;
my $required = $self->compute_required ($pkglist);
-
+
$self->cache_packages ($required);
$self->ve_dpkg ($unpack ? 'unpack' : 'install', @$required);