Create process in linux namespaces
Project description
pyspaces
========
Works with Linux namespaces througth glibc with pure python
|License| |Latest Version| |Downloads| |Docs|
Goals
-----
There is so many beautiful tools like
`docker <https://github.com/docker/docker>`__,
`rocket <https://github.com/coreos/rkt>`__ and
`vagga <https://github.com/tailhook/vagga>`__ written on go and rust,
but no one on python. I think that is because there is no easy way to
works with linux namespaces on python:
- you can use `asylum <https://pypi.python.org/pypi/asylum/0.4.1>`__ -
project that looks like dead and with codebase hosted not on
mainstream hub like github
- or you can use
`python-libvirt <https://pypi.python.org/pypi/libvirt-python/1.2.13>`__
bindings with big layer of abstraction
- or just use native glibc library with ctypes
- otherwise subprocess.Popen your choice
I want to change it: i want to create native python bindings to glibc
with interface of python multiprocessing.Process.
Example
-------
First simple example:
.. code:: python
import os
from pyspaces import Container
def execute(argv):
os.execvp(argv[0], argv)
cmd = "mount -t proc proc /proc; ps ax"
c = Container(target=execute, args=(('bash', '-c', cmd),),
uid_map='0 1000 1',
newpid=True, newuser=True, newns=True
)
c.start()
print("PID of child created by clone() is %ld\n" % c.pid)
c.join()
print("Child returned: pid %s, status %s" % (c.pid, c.exitcode))
output:
.. code:: bash
PID of child created by clone() is 15978
PID TTY STAT TIME COMMAND
1 pts/19 S+ 0:00 bash -c mount -t proc proc /proc; ps ax
3 pts/19 R+ 0:00 ps ax
Child returned: pid 15978, status 0
CLI
---
.. code:: bash
space -v execute --pid --fs --user --uid '0 1000 1' bash -c 'mount -t proc /proc; ps ax'
.. code:: bash
space chroot --pid --uid '0 1000 1' ~/.local/share/lxc/ubuntu/rootfs/ /bin/ls /home/
| Note: If the program you're trying to exec is dynamic linked, and the
dynamic linker is not present in /lib in the chroot environment - you
would get the "OSError: [Errno 2] No such file or directory" error.
You'd need all the other files the dynamic-linked program depends on,
including shared libraries and any essential configuration/table/etc in
the new root directories.
| `src <http://www.ciiycode.com/0JiJzPgggqPg/why-doesnt-exec-work-after-chroot>`__
.. |License| image:: https://pypip.in/license/pyspaces/badge.svg
:target: https://pypi.python.org/pypi/pyspaces/
.. |Latest Version| image:: https://pypip.in/version/pyspaces/badge.svg
:target: https://pypi.python.org/pypi/pyspaces/
.. |Downloads| image:: https://pypip.in/download/pyspaces/badge.svg
:target: https://pypi.python.org/pypi/pyspaces/
.. |Docs| image:: https://readthedocs.org/projects/pyspaces/badge/
:target: https://pyspaces.readthedocs.org/en/latest/
========
Works with Linux namespaces througth glibc with pure python
|License| |Latest Version| |Downloads| |Docs|
Goals
-----
There is so many beautiful tools like
`docker <https://github.com/docker/docker>`__,
`rocket <https://github.com/coreos/rkt>`__ and
`vagga <https://github.com/tailhook/vagga>`__ written on go and rust,
but no one on python. I think that is because there is no easy way to
works with linux namespaces on python:
- you can use `asylum <https://pypi.python.org/pypi/asylum/0.4.1>`__ -
project that looks like dead and with codebase hosted not on
mainstream hub like github
- or you can use
`python-libvirt <https://pypi.python.org/pypi/libvirt-python/1.2.13>`__
bindings with big layer of abstraction
- or just use native glibc library with ctypes
- otherwise subprocess.Popen your choice
I want to change it: i want to create native python bindings to glibc
with interface of python multiprocessing.Process.
Example
-------
First simple example:
.. code:: python
import os
from pyspaces import Container
def execute(argv):
os.execvp(argv[0], argv)
cmd = "mount -t proc proc /proc; ps ax"
c = Container(target=execute, args=(('bash', '-c', cmd),),
uid_map='0 1000 1',
newpid=True, newuser=True, newns=True
)
c.start()
print("PID of child created by clone() is %ld\n" % c.pid)
c.join()
print("Child returned: pid %s, status %s" % (c.pid, c.exitcode))
output:
.. code:: bash
PID of child created by clone() is 15978
PID TTY STAT TIME COMMAND
1 pts/19 S+ 0:00 bash -c mount -t proc proc /proc; ps ax
3 pts/19 R+ 0:00 ps ax
Child returned: pid 15978, status 0
CLI
---
.. code:: bash
space -v execute --pid --fs --user --uid '0 1000 1' bash -c 'mount -t proc /proc; ps ax'
.. code:: bash
space chroot --pid --uid '0 1000 1' ~/.local/share/lxc/ubuntu/rootfs/ /bin/ls /home/
| Note: If the program you're trying to exec is dynamic linked, and the
dynamic linker is not present in /lib in the chroot environment - you
would get the "OSError: [Errno 2] No such file or directory" error.
You'd need all the other files the dynamic-linked program depends on,
including shared libraries and any essential configuration/table/etc in
the new root directories.
| `src <http://www.ciiycode.com/0JiJzPgggqPg/why-doesnt-exec-work-after-chroot>`__
.. |License| image:: https://pypip.in/license/pyspaces/badge.svg
:target: https://pypi.python.org/pypi/pyspaces/
.. |Latest Version| image:: https://pypip.in/version/pyspaces/badge.svg
:target: https://pypi.python.org/pypi/pyspaces/
.. |Downloads| image:: https://pypip.in/download/pyspaces/badge.svg
:target: https://pypi.python.org/pypi/pyspaces/
.. |Docs| image:: https://readthedocs.org/projects/pyspaces/badge/
:target: https://pyspaces.readthedocs.org/en/latest/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pyspaces-1.2.1.tar.gz
(7.4 kB
view details)
File details
Details for the file pyspaces-1.2.1.tar.gz
.
File metadata
- Download URL: pyspaces-1.2.1.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ed1fa1239c99394a31ac6a780f6fd9e9dd494d0bfb13ca72001277fd88f6b005 |
|
MD5 | 04918396774d725ca246f0d9d999b514 |
|
BLAKE2b-256 | 6023e4fd7747456673fb31b4590f7593ae54b1c0c99afd1e8abd1189cadc6d83 |