История изменений
Исправление Pinkbyte, (текущая версия) :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter --ipc=/root/test --net=/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Суть проблемы в том, что unshare создает временные namespace для ВСЕГО(а не только для того, что ты указываешь аргументами). Поэтому когда ты делаешь unshare внутри ip netns exec оно создает тебе ВРЕМЕННЫЕ mount и сетевые namespace. И уже туда монтируется ipc namespace. Почему снаружи эти точки монтирования не видны - хороший вопрос, видимо такая двойная смена сетевого namespace для ip netns - это не очень хорошо.
В общем не надо так делать :-). Создавай постоянные ipc namespace через unshare(я не в курсе, может есть какая-то более вменяемая команда для работы с ipc namespace, типа ip netns add, которая пригодна для создания сетевых namespace), а входи сразу в ipc и network namespace через nsenter.
exit только не забывай делать после unshare - он вернет тебя назад и все ненужные тебе временные namespace схлопнутся
Исправление Pinkbyte, :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter --ipc=/root/test --net=/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Суть проблемы в том, что unshare создает временные namespace для ВСЕГО(а не только для того, что ты указываешь аргументами). Поэтому когда ты делаешь unshare внутри ip netns exec оно создает тебе ВРЕМЕННЫЙ mount namespace. В котором другой список точек монтирования. И уже туда монтируется ipc namespace. Вот только снаружи эти точки монтирования не видны.
В общем не надо так делать :-). Создавай постоянные ipc namespace через unshare(я не в курсе, может есть какая-то более вменяемая команда для работы с ipc namespace, типа ip netns add, которая пригодна для создания сетевых namespace), а входи сразу в ipc и network namespace через nsenter.
exit только не забывай делать после unshare - он вернет тебя назад и все ненужные тебе временные namespace схлопнутся
Исправление Pinkbyte, :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter --ipc=/root/test --net=/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Суть проблемы в том, что unshare создает временные namespace для ВСЕГО(а не только для того, что ты указываешь аргументами). Поэтому когда ты делаешь unshare внутри ip netns exec оно создает тебе ВРЕМЕННЫЙ mount namespace. В котором другой список точек монтирования. И уже туда монтируется ipc namespace. Вот только снаружи эти точки монтирования не видны.
В общем не надо так делать :-). Создавай постоянные ipc namespace через unshare(я не в курсе, может есть какая-то более вменяемая команда для работы с ipc namespace, типа ip netns add, которая пригодна для создания сетевых namespace), а входи сразу в ipc и network namespace через nsenter.
Исправление Pinkbyte, :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter --ipc=/root/test --net=/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Суть проблемы в том, что unshare создает временные namespace для ВСЕГО(а не только для того, что ты указываешь аргументами). Поэтому когда ты делаешь unshare внутри ip netns exec оно создает тебе ЕЩЕ один временный mount namespace. В котором другой список точек монтирования. И уже туда монтируется ipc namespace. Вот только снаружи эти точки монтирования не видны.
В общем не надо так делать :-). Создавай постоянные ipc namespace через unshare(я не в курсе, может есть какая-то более вменяемая команда для работы с ipc namespace, типа ip netns add, которая пригодна для создания сетевых namespace), а входи сразу в ipc и network namespace через nsenter.
Исправление Pinkbyte, :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter --ipc=/root/test --net=/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Суть проблемы в том, что unshare создает временные namespace для ВСЕГО(а не только для того, что ты указываешь аргументами). Поэтому когда ты делаешь unshare внутри ip netns exec оно создает тебе ЕЩЕ один временный mount namespace. В котором другой список точек монтирования. И уже туда монтируется ipc namespace. Вот только снаружи эти точки монтирования не видны.
В общем не надо так делать :-). Создавай постоянные ipc namespace через unshare(я не в курсе, может есть какая-то более вменяемая команда для них, типа ip netns add, которая пригодна для создания сетевых namespace), а входи сразу в ipc и network namespace через nsenter.
Исправление Pinkbyte, :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter --ipc=/root/test --net=/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Суть проблемы в том, что unshare создает временные namespace для ВСЕГО(а не только для того, что ты указываешь аргументами). Поэтому когда ты делаешь unshare внутри ip netns exec оно создает тебе ЕЩЕ один временный сетевой namespace. В котором, ясен, хрен нет никаких интерфейсов. Возможно при этом самому unshare сносит башню и из-за этого ничего не монтируется.
В общем не надо так делать :-). Создавай постоянные ipc namespace через unshare(я не в курсе, может есть какая-то более вменяемая команда для них, типа ip netns add, которая пригодна для создания сетевых namespace), а входи сразу в ipc и network namespace через nsenter.
Исправление Pinkbyte, :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter --ipc=/root/test --net=/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Исходная версия Pinkbyte, :
Просто надо отделить создание постоянных namespace от входа в них:
oas1 ~ # ip netns add TEST
oas1 ~ # touch /root/test
oas1 ~ # ls -la /run/netns
total 0
drwxr-xr-x 2 root root 80 Jun 21 20:10 .
drwxr-xr-x 10 root root 760 Jun 19 12:40 ..
-r--r--r-- 1 root root 0 Jun 21 20:10 TEST
oas1 ~ # unshare --ipc=/root/test
oas1 ~ # exit
oas1 ~ # ip netns exec TEST ifconfig lo up
oas1 ~ # nsenter -i/root/test -n/run/netns/TEST bash
oas1 ~ # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0