Вам не нужны системные библиотеки или двоичные файлы внутри chroot
для запуска приложения.
Например:
$ ls chroot_test
hello*
$ sudo chroot chroot_test /hello
Hello, World
Почему это работает? Поскольку программа hello
статически связана и не имеет зависимостей:
$ file chroot_test/hello
chroot_test/hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
В основном, независимо от технологии, файлы, которые необходимы для помещения в «песочницу», являются минимально необходимым для запуска приложения. Таким образом, динамически скомпонованной программе могут потребоваться libc.so
и ld.so
и так далее.
Простая среда bash
может потребовать еще несколько файлов:
$ find chroot-bash -type f
chroot-bash/lib64/libdl.so.2
chroot-bash/lib64/ld-linux-x86-64.so.2
chroot-bash/lib64/libc.so.6
chroot-bash/lib64/libtinfo.so.5
chroot-bash/bin/bash
Мы не можем сделать в ней много (например, нет команды ls
, но это работающая оболочка bash
.
$ sudo chroot chroot-bash /bin/bash
bash-4.2# pwd
/
bash-4.2# ls
bash: ls: command not found
bash-4.2# echo *
bin lib64
Обратите внимание, что эти файлы являются копиями оригиналов; они не оригиналы (ну, вы можете связать-смонтировать их). ОС не выставлена.
Вам потребуется один и тот же набор файлов, независимо от того, используете ли вы chroot
или docker
или lxc
...
Пример небольшого контейнера докеров
Теперь обратите внимание, что это также верно и для самой операционной системы. Когда вы yum install
или apt-get install
пакет, он может добавить некоторые зависимости, включая библиотеки! В вашей ОС есть еще не все! Он просто имеет больший набор параметров по умолчанию, чтобы людям было проще его использовать.
Вы можете следуйте официальной документации node.js , чтобы установить последнюю версию с помощью диспетчера пакетов.
Node.js v6:
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
Node.js v7:
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
Запуск последнего, в моей системе были установлены node v7.5.0 и npm v4.1.2. Оба псевдонима node
и nodejs
были включены для Node автоматически.
в моем случае я выполнил рекомендуемые команды оболочки:
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
проблема была в том, что сценарий bash не обновил мой APT pinning, поэтому apt-get установил старый пакет Debian по умолчанию из источника debian.org, а не с nodesource.com
проверьте эту проблему с помощью apt-cache policy nodejs
. вы должны увидеть что-то вроде Candidate: 6.10. 2-1nodesource1~jessie1
, а не Candidate: 0.10.29~dfsg-2
чтобы установить приоритет вывода на nodesource, добавьте файл в /etc/apt/preferences. d/
под названием node
или любым другим с таким содержанием:
Package: nodejs
Pin: release o=Node Source
Pin-Priority: 1200
сохраните и запустите apt-get cache update
. затем попробуйте apt-cache policy nodejs
снова. если кандидат выглядит правильно, установите как обычно apt-get install nodejs