LINUX.ORG.RU
решено ФорумAdmin

Как создать lxc-контейнер в Debian?

 


0

2

Выполняю команду
# LANG=C lxc-create -n MyContainer -t gentoo
получаю

### set_default_arch: default arch/variant autodetect...
 => Got: arch=amd64 variant=amd64
Attempting to obtain an exclusive lock (timeout: 60 sec) named "cache-amd64-amd64"...
 => done.
 => Executing "do_all"
###### cache_setup(): doing cache preparation
### cache_precheck(): doing some pre-start checks ...
### cache_stage3(): stage3 cache deployment...
Determining path to latest Gentoo amd64 (amd64) stage3 archive...
 => downloading and processing http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3-amd64.txt
 => Got: 
Downloading/untarring the actual stage3 tarball...
--2022-11-19 13:00:48--  http://distfiles.gentoo.org/releases/amd64/autobuilds/
Resolving distfiles.gentoo.org (distfiles.gentoo.org)... 156.146.33.18, 212.102.56.181, 212.102.56.143, ...
Connecting to distfiles.gentoo.org (distfiles.gentoo.org)|156.146.33.18|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'STDOUT'

     0K ........bzip2: (stdin) is not a bzip2 file.
.. ..tar: Child died with signal 13
tar: Error is not recoverable: exiting now
.                                          331K=0.04s


Cannot write to '-' (Broken pipe).

[the last exit code leading to this death was: 2 ]
Error: unable to fetch or untar
lxc-create: MyContainer: lxccontainer.c: create_run_template: 1616 Failed to create container from template
lxc-create: MyContainer: tools/lxc_create.c: main: 319 Failed to create container MyContainer

я согласен с тем, что в директории http://distfiles.gentoo.org/releases/amd64/autobuilds/ нет файла latest-stage3-amd64.txt
Зато там есть много других.

Что (и куда) надо писа́ть, чтобы заработало?

★★★★

Ответ на: комментарий от MrClon

-t download просто покажет что скачивать, и в списке там много всего, но нет calculate, sabayon, nix, gentoo. Есть только одна версия funtoo (funtoo 1.4 amd64). Она устанавливается. Но я именно gentoo хочу.

Пробовал отредактировать скрипт /usr/share/lxc/templates/lxc-gentoo заменил там строку 158 с

        local stage3_pointer="${stage3_baseurl}/latest-stage3-${variant}.txt"
на
        local stage3_pointer="${stage3_baseurl}/latest-stage3-${variant}-llvm-systemd.txt"
установка прошла чуть дальше, но всё равно не установилось.

Пишет

### set_default_arch: default arch/variant autodetect...
 => Got: arch=amd64 variant=amd64
Attempting to obtain an exclusive lock (timeout: 60 sec) named "cache-amd64-amd64"...
 => done.
 => Executing "do_all"
###### cache_setup(): doing cache preparation
### cache_precheck(): doing some pre-start checks ...
### cache_stage3(): stage3 cache deployment...
Determining path to latest Gentoo amd64 (amd64) stage3 archive...
 => downloading and processing http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3-amd64-llvm-systemd.txt
 => Got: 20221114T111652Z/stage3-amd64-llvm-systemd-20221114T111652Z.tar.xz
Downloading/untarring the actual stage3 tarball...
20221114T111652Z/stage3-amd64-llvm-systemd-20221114T111652Z.tar.xz
--2022-11-19 18:20:07--  http://distfiles.gentoo.org/releases/amd64/autobuilds/20221114T111652Z/stage3-amd64-llvm-systemd-20221114T111652Z.tar.xz
Resolving distfiles.gentoo.org (distfiles.gentoo.org)... 212.102.56.181, 195.181.174.6, 156.146.33.17, ...
Connecting to distfiles.gentoo.org (distfiles.gentoo.org)|212.102.56.181|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 393028244 (375M) [application/x-xz]
Saving to: 'STDOUT'

     0K .......... .......... .......... .......... ..........  0%  389K 16m27s
383800K .......... ......                                     100% 10.6M=40s

2022-11-19 18:20:47 (9.38 MB/s) - written to stdout [393028244/393028244]

 => extracted to: /var/cache/lxc/gentoo/partial-amd64-amd64
chroot test... OK
 => stage3 cache extracted in : /var/cache/lxc/gentoo/partial-amd64-amd64
### cache_portage: caching portage tree tarball...
### cache_inittab: tuning inittab...

[the last exit code leading to this death was: 1 ]
Error: /var/cache/lxc/gentoo/partial-amd64-amd64/etc/inittab is not writeablelxc-create: MyContainer: lxccontainer.c: create_run_template: 1616 Failed to create container from template
lxc-create: MyContainer: tools/lxc_create.c: main: 319 Failed to create container MyContainer

Дополнительно меня расстраивает, что 350 MB архив скачивается в «STDOUT», то есть при каждой попытке установки, это долго.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr

Если дописать перед этой ошибкой строчку touch $INITTAB, то там ошибки будут и дальше, например «chroot: failed to run command ‘rc-update’: No such file or directory»

Это видимо из-за того, что скрипт установки ожидает SysV-init скрипты, а в скачанном образе давно systemd (и это правильно, без него ныне никуда, особенно в контейнерах).

Как дорабатывать скрипт, и надо ли это делать, если правильным считается другой способ установки, а этот способ через скрипты считается устаревшим - неясно.

Ну и как сделать правильным новым способом - тоже не ясно.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)

LXD начнёт в полной мере работать только в Debian 12 «Bookworm» (это на странице https://wiki.debian.org/LXC написано

the newer LXD tooling packaging is anticipated to be part of the upcoming Debian 12.0 «Bookworm» release

Я понимаю, что это вопрос «на переднем крае технологий», «это вам не Docker» и всё такое... Но, блин, документации могло бы быть и побольше.

Shushundr ★★★★
() автор топика

Что (и куда) надо писа́ть, чтобы заработало?

Правильная команда:

# lxc-create -t download -n MyContainer -- --variant="systemd"
Setting up the GPG keyring
Downloading the image index

---
DIST	RELEASE	ARCH	VARIANT	BUILD
---
gentoo	current	amd64	systemd	20221119_17:52
gentoo	current	arm64	systemd	20221118_19:37
gentoo	current	armhf	systemd	20221118_16:07
gentoo	current	ppc64el	systemd	20221119_16:07
---

Distribution: 
gentoo
Release: 
current
Architecture: 
amd64

Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created an Gentoo  amd64 (systemd) (20221119_17:52) container.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

дальше надо зайти в директорию
/var/lib/lxc/MyContainer/rootfs
и отредактировать файл etc/security/passwdqc.conf

заменить в нём строку
enforce=everyone
на
enforce=none

выполнить
chroot . /bin/bash
passwd

(в этом месте можно убедиться, что /dev/null там не устройство)

И после этого надо запустить контейнер командой
lxc-start -n MyContainer --foreground
(foreground - это чтобы можно было залогиниться)

Сеть будет host-only (10.0.3.*), но как вывести машину в локальную сеть - это для следующего сообщения.

выход из контейнера - набрать команду
poweroff

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr

Если /dev/null регулярный файл, значит lxc настроен, что монтирует в /dev/null контейнера файл устройство из настоящей корневой ФС.

В stage3 /dev/null это файл-устройство. Более того существует скрипт (уже заброшеный) lxc-gentoo https://github.com/globalcitizen/lxc-gentoo специально для создания lxc-контейнера c gentoo. И этот скрипт создаёт для контейнера /dev/null и пр. файлы-устройства.

mky ★★★★★
()