Bug 32462

Summary: Контейнеры на базе ALT Linux неработоспособны
Product: Sisyphus Reporter: Вадим Илларионов <gbIMoBou>
Component: pve-lxcAssignee: Alexey Shabalin <shaba>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: aen, andy, cavetroll, dans, dd, gbIMoBou, ildar, imz, mike, shaba, shrek, viy
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Поддержка контейнеров на базе альта. none

Description Вадим Илларионов 2016-09-01 09:42:31 MSK
На альтовом проксмоксе не работает ни один из шаблонов или распакованных контейнеров (что LXC, что OpenVZ) с одинаковой руганью:

# lxc-start -n 101 -F
lxc-start: cgroups/cgmanager.c: cgm_setup_limits: 1519 call to cgmanager_set_value_sync failed: invalid request
lxc-start: cgroups/cgmanager.c: cgm_setup_limits: 1522 Error setting cgroup memory:lxc/101 limit type memory.memsw.limit_in_bytes
lxc-start: start.c: lxc_spawn: 1181 failed to setup the cgroup limits for '101'
lxc-start: start.c: __lxc_start: 1354 failed to spawn '101'
lxc-start: tools/lxc_start.c: main: 344 The container failed to start.
lxc-start: tools/lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.

Контейнеры на базе дебиана и кентоси в оригинальным проксмоксе работают, а на базе альта (восстановленные из OpenVZ) - ни там, ни там:
TASK ERROR: unsupported fedora release 'ALT Linux <Release Name> (<Niсkname>)'

Последнее - из-за отсутствия альтовой обвязки /usr/share/perl5/PVE/LXC/Setup/AltLinux.pm, долженствующей, в частности, прописывать параметры etcnet. Однако я не мастак в приготовлении перловки - моих познаний для написания этого модуля недостаточно и хватает лишь на добавление приправы:
# diff -u /usr/share/perl5/PVE/LXC/Setup-orig.pm Setup-my.pm 
--- /usr/share/perl5/PVE/LXC/Setup-orig.pm      2016-08-29 01:32:53.349807739 +0800
+++ Setup-my.pm 2016-08-29 01:25:50.807177979 +0800
@@ -10,6 +10,7 @@
 use PVE::LXC::Setup::CentOS;
 use PVE::LXC::Setup::Fedora;
 use PVE::LXC::Setup::SUSE;
+use PVE::LXC::Setup::AltLinux;
 use PVE::LXC::Setup::ArchLinux;
 use PVE::LXC::Setup::Alpine;
 use PVE::LXC::Setup::Gentoo;
@@ -20,6 +21,7 @@
     centos    => 'PVE::LXC::Setup::CentOS',
     fedora    => 'PVE::LXC::Setup::Fedora',
     opensuse  => 'PVE::LXC::Setup::SUSE',
+    altlinux  => 'PVE::LXC::Setup::AltLinux',
     archlinux => 'PVE::LXC::Setup::ArchLinux',
     alpine    => 'PVE::LXC::Setup::Alpine',
     gentoo    => 'PVE::LXC::Setup::Gentoo',
@@ -40,6 +42,8 @@
        return "debian";
     } elsif (-f  "$rootdir/etc/SuSE-brand" || -f "$rootdir/etc/SuSE-release") {
        return "opensuse";
+    } elsif (-f  "$rootdir/etc/altlinux-release") {
+       return "altlinux";
     } elsif (-f  "$rootdir/etc/fedora-release") {
        return "fedora";
     } elsif (-f  "$rootdir/etc/centos-release" || -f "$rootdir/etc/redhat-release") {

Каковая в отсутствие основного блюда ни на что не пригодна.
Comment 1 Valery Inozemtsev 2016-09-01 16:09:44 MSK
начинать надо с memory.memsw.limit_in_bytes - #32314
Comment 2 Вадим Илларионов 2016-09-02 03:02:45 MSK
Я прокомментировал #32314, но чтоб не прыгать между багами, дублирую сюда.

http://cateee.net/lkddb/web-lkddb/MEMCG_SWAP_ENABLED.html

Здесь сказано: General purpose distribution kernels which want to enable the
feature but keep it disabled by default and let the user enable it by
swapaccount=1 boot command line parameter should have this option unselected.

То есть, pve можно грузить с опцией ядра swapaccount=1 без его пересборки.
Проверил, работает - контейнеры (кроме альтовых) запускаются.
Дело за малым: написать перловый модуль для альтов. А вот тут и первые грабли. Часть выпусков идёт с номерами, как, например:
ALT Linux 7.0.5 Centaurus  (Pholus)
ALT Linux 8.0.0 KDesktop  (Centaurea Montana)
Часть - без:
ALT Linux Sisyphus (unstable)
ALT Linux starter kit (Hypericum)

И как прикажете их сортировать, если даже на сайте альта толком нет информации по соответствию наименований/ников/номеров?
Разве что руками в переносимом с OpenVZ контейнере править /etc/altlinux-release как-то так:
ALT Linux 9.0.0 Sisyphus (unstable)
ALT Linux 8.0.1 starter kit (Hypericum)
А при создании шаблона как быть?
Ведь номер потребен следующей проверке в перловом модуле:

my distro = altlinux;
my $release = PVE::Tools::file_read_firstline("$rootdir/etc/$distro-release");
die "unable to read version info\n" if !defined($release);
my $version;
if ($release =~ m/release\s+(\d+\.\d+)(\.\d+)?/){
    if ($1 >= 5 && $1 < 10){ # и ещё вопрос: какой диапазон версий поддерживать?
        $version = $1;
    }
}
die "unsupported $distro release '$release'\n" if !$version;

Или вовсе забить на проверку и сосредоточиться на функции формирования файлов настройки етснет?
Comment 3 Вадим Илларионов 2016-09-02 03:08:23 MSK
Жаль, нельзя редактировать собственные реплики, так что поправлюсь здесь.
Проверка, полагаю, должна выглядеть примерно так (предыдущий вариант - бездумная калька с проверки на кентось):
if ($release =~ m/Alt\s+Linux\s+(\d+\.\d+\.\d+)/){
    if ($2 >= 5 && $2 < 10){ # какой диапазон версий поддерживать?
        $version = $2;
    }
}
Comment 4 Вадим Илларионов 2016-09-02 03:23:47 MSK
# pct enter 100
Insecure $ENV{ENV} while running with -T switch at /usr/share/perl5/PVE/CLI/pct.pm line 162.

И так с любым контейнером. Выручает лишь возможность входа через консоль из веб-интерфейса.
Comment 5 Вадим Илларионов 2016-09-02 03:29:47 MSK
Ещё поправка: my $distro = "altlinux";
Comment 6 Вадим Илларионов 2016-09-02 03:30:02 MSK
Ещё поправка: my $distro = "altlinux";
Comment 7 Вадим Илларионов 2016-09-04 08:18:54 MSK
Insecure $ENV{ENV} while running with -T switch
устраняется отключением ENV=$HOME/.bashrc из ~/.bashrc

После этого вход в контейнеры работает.
Comment 8 Вадим Илларионов 2016-09-04 18:22:17 MSK
Created attachment 6812 [details]
Поддержка контейнеров на базе альта.

Вот, состряпал в меру разумения из кусков других модулей. По крайней мере, под альтовым проксмоксом контейнеры работают, сетевые интерфейсы с маршрутом и шлюзом создаются, а под оригинальным в будни буду попробовать.
1. Не реализована поддержка ipv6 - просто доселе не пользовался и не знаю, куда что прописывать, а догадки отметаю: пусть знающие добавят.
2. Как ни крутил правку модулем /usr/share/perl5/PVE/LXC/Setup/Base.pm рутового пароля в контейнере по маршруту не /etc/shadow, а /etc/tcb/$user/shadow, буде таковой наличествует - без толку. Оставил без изменений - может, кто другой запилит.
Comment 9 Вадим Илларионов 2016-09-05 11:08:48 MSK
На оригинальном проксмоксе со следующими версиями пакетов патч тоже отработал:

# dpkg -l pve-* | awk '/^i/{print $2"\t"$3}'
pve-cluster     4.0-44
pve-container   1.0-73
pve-docs        4.2-8
pve-firewall    2.0-29
pve-firmware    1.1-9
pve-ha-manager  1.0-33
pve-kernel-4.4.16-1-pve 4.4.16-64
pve-libspice-server1    0.12.8-1
pve-manager     4.2-18
pve-qemu-kvm    2.6.1-2

Альтовые контейнеры работают.
Comment 10 Вадим Илларионов 2016-09-14 11:11:44 MSK
Патч запускать из каталога с ним следующим образом:
# patch=$(pwd)/pve-4.patch; cd /; patch -p1 <$patch

Важно, чтоб в альтовском шаблоне или дампе были удалены симлинки /etc/{fedora,redhat}-release, иначе проксмокс воспримет их как шаблон/дамп федоры или кентоси неизвестной ему версии.
Comment 11 Michael Shigorin 2016-09-15 16:01:25 MSK
(В ответ на комментарий №10)
> Важно, чтоб в альтовском шаблоне или дампе были удалены симлинки
> /etc/{fedora,redhat}-release, иначе проксмокс воспримет их как шаблон/дамп
> федоры или кентоси неизвестной ему версии.
Как вариант, можно их убрать из стартеркитного брендинга.
Comment 12 Valery Inozemtsev 2016-09-22 13:39:28 MSK
поддержка altlinux контейнеров добавлена в pve-manager 4.2.23-alt3
шаблон ftp://ftp.altlinux.ru/pub/people/shrek/altlinux-p8-x86_64.tar.xz
Comment 13 Вадим Илларионов 2016-09-23 06:27:44 MSK
А в мейнстрим предложено?
Comment 14 Michael Shigorin 2018-09-08 17:11:14 MSK
(В ответ на комментарий №12)
> поддержка altlinux контейнеров добавлена в pve-manager 4.2.23-alt3
> шаблон ftp://ftp.altlinux.ru/pub/people/shrek/altlinux-p8-x86_64.tar.xz
Валер, а из чего делал?  Давай в стартеркиты добавим, если там не как для ovz:
http://nightly.altlinux.org/p8/permalink/alt-p8-ovz-generic-latest-x86_64.tar.xz
Comment 15 ildar 2023-03-22 23:29:14 MSK
(In reply to Вадим Илларионов from comment #13)
> А в мейнстрим предложено?

присоединяюсь к вопросу, т.к. в свежем Proxmox поддержки Альта нет.
Comment 16 ildar 2023-03-22 23:51:05 MSK
+ andy@ , как текущий мэйнтэйнер
Comment 17 Илья Демьянов 2024-12-10 12:30:14 MSK
Подтверждаю по поводу мейнстрима - в Proxmox 8.3.0 создание контейнера заканчивается так:
 
>extracting archive '/var/lib/vz/template/cache/alt-p11-rootfs-systemd-x86_64.tar.xz'
>Total bytes read: 467056640 (446MiB, 37MiB/s)
>unknown ID 'altlinux' in /etc/os-release file, trying fallback detection
>TASK ERROR: unable to create CT 200 - unsupported Fedora release '11'