Мануал нерабочий!!!!
Зачем? :) Очень просто - хочется новых утилит - nsenter (вход в определенный Linux Kernel Namespace), unshare (создание нового Namespace). Обращаю внимание, что собираем мы именно 2.23ю версию, хотя актуальная версия 2.24, но ее не удастся собрать потому что в CentOS 6 нет системного вызова setns и сборка nsenter будет отменена с ошибкой: "WARNING: setns syscall not found; do not build nsenter "
Зачем? :) Очень просто - хочется новых утилит - nsenter (вход в определенный Linux Kernel Namespace), unshare (создание нового Namespace). Обращаю внимание, что собираем мы именно 2.23ю версию, хотя актуальная версия 2.24, но ее не удастся собрать потому что в CentOS 6 нет системного вызова setns и сборка nsenter будет отменена с ошибкой: "WARNING: setns syscall not found; do not build nsenter "
yum install -y ncurses-devel pam-develПосле этого идем на 19755ю строку файла configure и под текстом "WARNING: setns syscall not found; do not build nsenter" правим build_nsenter=no на build_nsenter=yes.
cd /usr/src
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.23/util-linux-2.23.tar.gz
tar -xf util-linux-2.23.tar.gz
cd util-linux-2.23
./configure --prefix=/opt/util-linux-2-23Таким образом, нам нужен системный вызов setns, который используется на 288й строке sys-utils/nsenter.c и которого нет в RHEL 6.5 ядре (OpenVZ 2.6.32-042stab084.17).
make
make install
git diff
ReplyDeletediff --git a/ip/ipnetns.c b/ip/ipnetns.c
index 2b3b2e1..3741c98 100644
--- a/ip/ipnetns.c
+++ b/ip/ipnetns.c
@@ -42,17 +42,11 @@
#define MS_SHARED (1 << 20)
#endif
-#ifndef HAVE_SETNS
+#define __NR_setns 308
static int setns(int fd, int nstype)
{
-#ifdef __NR_setns
return syscall(__NR_setns, fd, nstype);
-#else
- errno = ENOSYS;
- return -1;
-#endif
}
-#endif /* HAVE_SETNS */
static int usage(void)
{