LINUX.ORG.RU

chroot не подходит для содержания различных видов пингвинов в одной клетке?

 


0

2

Например. Возьмём не очень бородатый, но дистрибутив, какой-нибудь SLAX — прошлый выпуск с KDE, у которого устаревший glibc, или Debian — на VPS, тоже устаревший. Хотим установить современную ОСь в chroot чтобы в будущем перенести на новое устройство. На первом же этапе фейл, почему? Потому что старый glibc.

chroot . /bin/bash
chroot: failed to run command "/bin/bash": Input/output error

Это ниразу не проблема, ну не работает chroot, потому что на хостевой (от слова «хост», я не украинец) ОС стоит старый glibc, а мы пытаемся подключиться к bash, который собран с новым glibc.

Лааадно.

Снова берём Debian на VPS, хотим собирать-обновлять Gentoo в chroot 24/7, чтобы потом просто запаковал-распаковал образ на новом устройстве. Я бы для такого дела даже не пожалел приобрести самый дорогой тариф VPS за 1500 рублей: 6 ядер и 6гб памяти, чтобы круглосуточно крутить автосборку образов дистрибутивов.

 * Messages for package sys-libs/glibc-2.30-r3:

 * In order to use glibc with USE=-suid, you must make sure that
 * you have devpts mounted at /dev/pts with the gid=5 option.
 * Openrc should do this for you, so you should check /etc/fstab
 * and make sure you do not have any invalid settings there.
 * ERROR: sys-libs/glibc-2.30-r3::gentoo failed (pretend phase):
 *   mount & fix your /dev/pts settings
 * 
 * Call stack:
 *              ebuild.sh, line 125:  Called pkg_pretend
 *   glibc-2.30-r3.ebuild, line 757:  Called sanity_prechecks
 *   glibc-2.30-r3.ebuild, line 628:  Called check_devpts
 *   glibc-2.30-r3.ebuild, line 554:  Called die
 * The specific snippet of code:
 *              die "mount & fix your /dev/pts settings"
 * 
 * If you need support, post the output of `emerge --info '=sys-libs/glibc-2.30-r3::gentoo'`,
 * the complete build log and the output of `emerge -pqv '=sys-libs/glibc-2.30-r3::gentoo'`.
 * The complete build log is located at '/var/tmp/portage/sys-libs/glibc-2.30-r3/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/sys-libs/glibc-2.30-r3/temp/die.env'.
 * Working directory: '/var/tmp/portage/sys-libs/glibc-2.30-r3/homedir'
 * S: '/var/tmp/portage/sys-libs/glibc-2.30-r3/work/glibc-2.30'

Даже не вчитываясь сразу понятно, что дело тут не в /dev/pts, а том, что Debian by-design не создаёт всех необходимых условий для пересборки «мира» Gentoo.

По итогу, chroot совсем не пригоден для содержания всех видов пингвинов в одной клетке?

chroot пригоден только если собирать точно такой же дистрибутив, какой и установлен на хосте.

Ни для безопасности, ни для контейнеризации использовать его нельзя.

Печалька. Придётся возвращаться к своим железкам.

★★★★★

А в чём проблема использовать нормальные контейнеры? Ты ж вроде не настолько дремучий дебьян пользуешь, что в нем LXC нет.

Unicode4all ★★★★★
()

Программа, запускаемая с помощью chroot, не использует библиотеки хоста. Она использует библиотеки, установленные в сисрут.

Чтобы понять из-за чего и откуда вылетает ошибка EIO, надо запустить под трассировкой:

strace chroot /sysroot /bin/bash

Я думаю причина ошибки в том, что в сисрут не смонтирован procfs.

mount --bind /proc /sysroot/proc
iliyap ★★★★★
()

удваиваю iliyap

У меня на всех live-cd есть такой скрипт chroot.sh

#!/bin/sh
mount --bind /proc $1/proc
mount --bind /sys $/sys
chroot "$1" "$2"
umount $1/sys
umount $1/proc
именно для того, чтобы загрузившись с live-cd с хрен знает какой glibc можно было выполнять любые команды в восстанавливаемой системе.

vel ★★★★★
()

Так уж случилось, что у нас на работе давно используется Slax для АРМов на объектах внедрения. Соответственно, у меня на буке установлены Slax-5 и Slax-7 в подкаталоги в основной ОС Федора-30, в которых происходит компиляция исполняемых файлов для передачи на объект. Использую именно chroot , предварительно скопировав изменения в исходниках через rsync. Все работает, как часы!

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.