[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT/PYTHON3 v5 14/14] README.md: Update with info about building and running
Hi Costin, Vlad, this looks ok, thanks. Reviewed-by: Felipe Huici <felipe.huici@xxxxxxxxx> On 16.10.19, 16:23, "Costin Lupu" <costin.lupu@xxxxxxxxx> wrote: Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx> --- README.md | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c9544d1..1eae7b6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,89 @@ -python3 for Unikraft -============================= - +# python3 for Unikraft This is the port of python3 for Unikraft as external library. +## Build +Python 3 interpreter depends on the following libraries, that need to be added +to `Makefile` in this order: +* `pthreads`, e.g. `pthread-embedded` +* `libc`, e.g. `newlib` +* network stack, e.g. `lwip` +* (optional) a SIMD library, e.g. `intel-intrinsics`, for optimized BLAKE + hashing +* optional extensions: `openssl`, `zlib`, `libuuid`, Expat XML parser, `_ctypes` + and decimal operations with `libmpdec`. + +## Root filesystem +### Creating the filesystem +Python 3 interpreter needs a filesystem which should contain its standard +library. Therefore, the filesystem needs to be created before running the VM. +You can do this by running the following command: + +```bash +make python-rootfs path=<some directory> +``` + +It will create the filesystem in the directory you choose, by first creating a +virtual Python environment. After that it will install the Python standard +library into it. For this second step, the original code needs to be configured +and build with paths relative to the provided root directory. These two steps +are executed transparently, all you have to do is just running the above `make` +command. + +### Using the filesystem +Mounting the filesystem is a transparent operation. All you have to do is to +provide the right Qemu parameters in order for Unikraft to mount the filesystem. +We will use the 9pfs support for filesystems and for this you will need to use +the following parameters: + +```bash +-fsdev local,id=myid,path=<some directory>,security_model=none \ +-device virtio-9p-pci,fsdev=myid,mount_tag=test,disable-modern=on,disable-legacy=off +``` + +You should also use `vfs.rootdev=test` to specify the 9pfs mounting tag to +Unikraft. Please make sure you have 9pfs support enabled via `menuconfig`. + +## Running modes +Next step is to pick a running mode. We currently support 3 running modes: + +1. **Python shell**. No extra parameters are needed. + * You can use the `main()` function provided by the library via + `menuconfig`. Otherwise you will have to provide your own `main()` function + which should call `_Py_UnixMain()`. +2. **Python script**. You can use any file available in the root filesystem. + You should use Qemu's `-append` option to pass parameter to Python + interpreter, e.g. `-append "vfs.rootdev=test -- -f <some file in rootfs>"`. + Please notice that we are using `test` for the 9pfs mounting tag. For brevity + we will skip setting the mounting tag in the next examples. +3. **Python unit testing (developers only)**. With this mode you can check what + functionality is completely supported by the Python 3 port. Please be aware + that this mode is unstable and some of the tests may block. You can work + around that by using the options provided by the unit testing framework. The + unit testing mode itself does support several submodes: + * **Running all the tests**. You have to use the following Qemu parameters: `-append "-- -B -c 'from test import autotest'"` + * Check the supported options of the unit testing framework, e.g. `-append "-- -B -c 'from test import autotest' -h"`. + * For example, you can run only one unit test with verbosity using `-append "-- -B -c 'from test import autotest' -v test_dict"`. + * Or you can run only the tests listed in a file using `-append "-- -B -c 'from test import autotest' -f <file in rootfs>"`. + +### Memory usage +Some of the unit tests may require a lot of memory during their running. For +this reason it is safe to use at least 1G of memory for unit testing. + +## Adding modules +For installing Python modules which have only Python code, you can use the +`pip` utility installed in the Python virtual environment you created using the +steps above. + +```bash +<my-python-rootfs> $ . bin/activate +<my-python-rootfs> $ pip install mymodule +``` +However, some of the Python modules need some native support, e.g. some C code +which should be compiled and registered at run time. You need to add the source +files of the native library to `Makefile.uk.` for compiling them. For runtime +registration, you need to add a new entry in the `modules_config.c` file. You +can use as examples the `openssl`, `zlib` or `libuuid` extensions. + +## Further information Please refer to the `README.md` as well as the documentation in the `doc/` subdirectory of the main unikraft repository. -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |