LINUX.ORG.RU

сложность с chroot в busybox

 


0

2

возникла необходимость создать свой дистр для встраиваемих систем на базе busybox все нормально собралось однако при попитке chroot из ubuntu в ответ получаю chroot: failed to run command ‘bin/ash’: No such file or directory хотя файл существует в чем причина

# chroot /directory /bin/sh
anonymous
()

No such file or directory

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

$ ldd distr/usr/bin/busybox
	linux-vdso.so.1 (0x00007ffd63bed000)
	libcrypt.so.1 => /usr/lib/libcrypt.so.1 (0x00007f287e7cb000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007f287e426000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f287ea03000)

/lib64/ld-linux-x86-64.so.2 - вот это ссылка на линкер, её и его тоже надо добавить, иначе прогрммы, собранные динамически не будут запускаться.

как-то делал примерно то же, добавлял вот эти либы:

-   ld-2.24.so
l   ld-linux-x86-64.so.2 -> ld-2.24.so
-   libbfd-2.27.so
-   libc-2.24.so
l   libc.so.6 -> libc-2.24.so
-   libdl-2.24.so
l   libdl.so.2 -> libdl-2.24.so
l   libhistory.so.7 -> libhistory.so.7.0
-   libhistory.so.7.0
-   libm-2.24.so
l   libmagic.so.1 -> libmagic.so.1.0.0
-   libmagic.so.1.0.0
l   libm.so.6 -> libm-2.24.so
l   libncursesw.so.6 -> libncursesw.so.6.0
-   libncursesw.so.6.0
-   libopcodes-2.27.so
-   libpthread-2.24.so
l   libpthread.so.0 -> libpthread-2.24.so
l   libreadline.so.7 -> libreadline.so.7.0
-   libreadline.so.7.0
-   libutil-2.24.so
l   libutil.so.1 -> libutil-2.24.so
l   libz.so.1 -> libz.so.1.2.8
-   libz.so.1.2.8
l - ссылка. в итоге запускались nano, sqlite в интерактивном режиме, hexedit, питон, компиляторы tcc и gas.

anonymous
()
Ответ на: комментарий от anonymous

ошибка заглавного файла

а теперь при попытке chroota пишет /bin/sh: error while loading shared libraries: libm.so.6: cannot open shared object file: No such file or directory

хотя файл присутствует в системе chroota

old_unixoid
() автор топика
Ответ на: ошибка заглавного файла от old_unixoid

собери busybox статически, это не сложно

# скачай исходники через браузер или с помощью консольной программы, например curl:
curl https://www.busybox.net/downloads/busybox-1.26.2.tar.bz2 > busybox-1.26.2.tar.bz2
# если curl нет, то наверняка есть wget:
# wget https://www.busybox.net/downloads/busybox-1.26.2.tar.bz2

# разархивируй и перейди в папку с bb:
tar xf busybox-1.26.2.tar.bz2
cd busybox-1.26.2

# настрой на статическую сборку:
make menuconfig
# в разделе "Busybox Settings  --->" надо поставить звёздочку возле "Build BusyBox as a static binary (no shared libs)"
# а ещё
# если хочешь нормальное отображение кириллицы, то надо увеличить значение "Range of supported Unicode characters"
# в разделе "Busybox Library Tuning  --->" до 1200

# выйди из меню конфига с сохранением

# собери busybox
make -j8

# скопируй результат и пользуйся
# mkdir -p /path/to/your/distro/usr/bin   # если надо
cp busybox /path/to/your/distro/usr/bin

cd /path/to/your/distro
sudo chroot . /usr/bin/busybox --install -s /usr/bin
sudo chroot . /usr/bin/sh

ls /usr/bin
...

размер статически собранного бб получился 2.4 МБ, время сборки в один поток (без -j8) на моём i7 — полторы минуты.

anonymous
()
Ответ на: комментарий от old_unixoid

ну тогда проверяй ещё раз все библиотеки, подходят ли они для твоего бб. симлинки на библиотеки делай с относительными путями, то есть

cd distro/usr/lib
ln -s libm-2.24.so libm.so.6

добавь в корень своего дистра симлинки lib и lib64 ссылающиеся на /usr/lib

cd distro
ln -s /usr/lib lib
ln -s /usr/lib lib64
anonymous
()

Добавлю к ответам ещё одну возможность, присутствующую в Debian (и, надеюсь, в Ubuntu): команда debootstrap из одноимённого пакета, - создаёт базовое debian-окружение для chroot. Возможно, в него что-то ещё потребуется добавить, но значительная часть работы выполняется автоматически.

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

проверь какую версию требует бб

objdump -p ./usr/bin/busybox
...
Version References:
  required from libcrypt.so.1:
    0x09691a75 0x00 05 GLIBC_2.2.5
  required from libc.so.6:
    0x09691973 0x00 08 GLIBC_2.3.3
    0x09691974 0x00 07 GLIBC_2.3.4
    0x0d696913 0x00 06 GLIBC_2.3
    0x06969194 0x00 04 GLIBC_2.14
    0x0d696914 0x00 03 GLIBC_2.4
    0x09691a75 0x00 02 GLIBC_2.2.5

то есть для моего busybox'a, который стоит в системе, нужна версия 2.25.

anonymous
()
Ответ на: комментарий от anonymous

[sergey@localhost chroot]$ objdump -p ./bin/busybox

Version References:

required from libm.so.6:

0x0d696910 0x00 04 GLIBC_2.0

required from libc.so.6:

0x09691a71 0x00 14 GLIBC_2.2.1

0x09691974 0x00 12 GLIBC_2.3.4

0x09691f71 0x00 11 GLIBC_2.1.1

0x0d696913 0x00 10 GLIBC_2.3

0x09691f73 0x00 09 GLIBC_2.1.3

0x09691a73 0x00 08 GLIBC_2.2.3

0x06969194 0x00 07 GLIBC_2.14

0x0d696914 0x00 06 GLIBC_2.4

0x0d696912 0x00 05 GLIBC_2.2

0x0d696911 0x00 03 GLIBC_2.1

0x0d696910 0x00 02 GLIBC_2.0

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

отдельно собирал glibc для busybox версию 2,25

required from libm.so.6:
0x0d696910 0x00 04 GLIBC_2.0

теперь собирай busybox под glibc =)

anonymous
()
Ответ на: комментарий от old_unixoid

статически нельзя ибо он будет использоватся в качестве оболчки для встраиваемой оси

И где тут следует, что нельзя? Наоборот есть куча удобств.

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

а ето может быть както связано с тем што я собераю систему дефолтным компилятором?

Может, так как оно слинкует с имеющимися у вас либами, а не с теми, что на стороне, где должно работать.

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

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

old_unixoid
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.