Skip to main content

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/

Project details


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)

Uploaded Source

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

Hashes for pyspaces-1.2.1.tar.gz
Algorithm Hash digest
SHA256 ed1fa1239c99394a31ac6a780f6fd9e9dd494d0bfb13ca72001277fd88f6b005
MD5 04918396774d725ca246f0d9d999b514
BLAKE2b-256 6023e4fd7747456673fb31b4590f7593ae54b1c0c99afd1e8abd1189cadc6d83

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page