return bless $self, $class;
}
+# Alpine doesn't support the /dev/lxc/ subdirectory.
+sub devttydir {
+ return '';
+}
+
sub template_fixup {
my ($self, $conf) = @_;
$self->ct_symlink('/etc/init.d/savecache',
'/etc/runlevels/shutdown/savecache');
- $self->setup_securetty($conf, qw(lxc/console lxc/tty1 lxc/tty2 lxc/tty3 lxc/tty4));
+ $self->setup_securetty($conf);
}
sub setup_init {
'/etc/systemd/system/socket.target.wants/systemd-networkd.socket');
# edit /etc/securetty (enable login on console)
- $self->setup_securetty($conf, qw(console tty1 tty2 tty3 tty4));
+ $self->setup_securetty($conf);
}
sub setup_init {
my ($self, $conf) = @_;
- $self->setup_container_getty_service(1);
+ $self->setup_container_getty_service($conf);
}
sub setup_network {
}
}
+# A few distros as well as unprivileged containers cannot deal with the
+# /dev/lxc/ tty subdirectory.
+sub devttydir {
+ my ($self, $conf) = @_;
+ return $conf->{unprivileged} ? '' : 'lxc/';
+}
+
sub setup_container_getty_service {
- my ($self, $nosubdir) = @_;
+ my ($self, $conf) = @_;
+
my $systemd_dir_rel = $self->ct_is_executable("/lib/systemd/systemd") ?
"/lib/systemd/system" : "/usr/lib/systemd/system";
my $servicefile = "$systemd_dir_rel/container-getty\@.service";
my $raw = $self->ct_file_get_contents($servicefile);
- my $ttyname = ($nosubdir ? '' : 'lxc/') . 'tty%I';
+ my $ttyname = $self->devttydir($conf) . 'tty%I';
if ($raw =~ s@pts/%I|lxc/tty%I@$ttyname@g) {
$self->ct_file_set_contents($servicefile, $raw);
}
# root login is already allowed on every device if no securetty present
return if !$self->ct_file_exists($filename);
+ if (!scalar(@add)) {
+ @add = qw(console tty1 tty2 tty3 tty4);
+ if (my $dir = $self->devttydir($conf)) {
+ @add = map { "${dir}$_" } @add;
+ }
+ }
+
my $data = $self->ct_file_get_contents($filename);
chomp $data; $data .= "\n";
foreach my $dev (@add) {
$self->ct_file_set_contents($filename, $data);
# edit /etc/securetty (enable login on console)
- $self->setup_securetty($conf, qw(lxc/console lxc/tty1 lxc/tty2 lxc/tty3 lxc/tty4));
+ $self->setup_securetty($conf);
}
}
my $systemd = $self->ct_readlink('/sbin/init');
if (defined($systemd) && $systemd =~ m@/systemd$@) {
- $self->setup_container_getty_service(1);
+ $self->setup_container_getty_service($conf);
}
my $filename = "/etc/inittab";
return bless $self, $class;
}
+# Gentoo doesn't support the /dev/lxc/ subdirectory
+sub devttydir {
+ return '';
+}
+
sub template_fixup {
my ($self, $conf) = @_;
- $self->setup_securetty($conf, qw(lxc/console lxc/tty1 lxc/tty2 lxc/tty3 lxc/tty4));
+ $self->setup_securetty($conf);
}
sub setup_init {
sub template_fixup {
my ($self, $conf) = @_;
- $self->setup_securetty($conf, qw(lxc/console lxc/tty1 lxc/tty2 lxc/tty3 lxc/tty4));
+ $self->setup_securetty($conf);
}
sub setup_init {
my ($self, $conf) = @_;
if ($self->{version} >= 13.2) {
- $self->setup_container_getty_service();
+ $self->setup_container_getty_service($conf);
}
$self->setup_systemd_console($conf);
}
my $version = $self->{version};
if ($version eq '16.10') {
- $self->setup_container_getty_service(0);
+ $self->setup_container_getty_service($conf);
}
if ($version eq '12.04' || $version eq '14.04') {