FastNetMon

Monday 3 February 2014

Сборка util-linux 2.23 на CentOS 6

Мануал нерабочий!!!!

Зачем? :) Очень просто - хочется новых утилит - 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
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
После этого идем на 19755ю строку файла configure и под текстом "WARNING: setns syscall not found; do not build nsenter" правим build_nsenter=no на build_nsenter=yes.
./configure --prefix=/opt/util-linux-2-23
make
make install
Таким образом, нам нужен системный вызов setns, который используется на 288й строке sys-utils/nsenter.c и которого нет в RHEL 6.5 ядре (OpenVZ 2.6.32-042stab084.17).

1 comment :

  1. git diff
    diff --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)
    {

    ReplyDelete

Note: only a member of this blog may post a comment.