From 410a0ba0b3065acd3db09bcd511036975fa0967f Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Mon, 28 Sep 2020 16:38:10 +0200 Subject: [PATCH] Added documentation for: https://python-archinstall.readthedocs.io/en/latest/ --- docs/Makefile | 20 +++++ docs/_static/logo.png | Bin 0 -> 44691 bytes docs/archinstall/Installer.rst | 11 +++ docs/conf.py | 129 +++++++++++++++++++++++++++++++++ docs/examples/binary.rst | 23 ++++++ docs/examples/python.rst | 59 +++++++++++++++ docs/index.rst | 51 +++++++++++++ docs/installing/binary.rst | 63 ++++++++++++++++ docs/installing/python.rst | 49 +++++++++++++ 9 files changed, 405 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/_static/logo.png create mode 100644 docs/archinstall/Installer.rst create mode 100644 docs/conf.py create mode 100644 docs/examples/binary.rst create mode 100644 docs/examples/python.rst create mode 100644 docs/index.rst create mode 100644 docs/installing/binary.rst create mode 100644 docs/installing/python.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d4bb2cbb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_static/logo.png b/docs/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3ed4e82612c42fb735236d1f375035de3a8300 GIT binary patch literal 44691 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 literal 0 HcmV?d00001 diff --git a/docs/archinstall/Installer.rst b/docs/archinstall/Installer.rst new file mode 100644 index 00000000..b7d8c8ce --- /dev/null +++ b/docs/archinstall/Installer.rst @@ -0,0 +1,11 @@ +.. _archinstall.Installer: + +Installer +========= + +The installer is the main class for accessing a installation-instance. +You can look at this class as the installation you have or will perform. + +Anything related to **inside** the installation, will be found in this class. + +.. autofunction:: archinstall.Installer diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..63e08e8a --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,129 @@ +import sys, os +sys.path.insert(0, os.path.abspath('..')) + +import re + +def process_docstring(app, what, name, obj, options, lines): + spaces_pat = re.compile(r"( {8})") + ll = [] + for l in lines: + ll.append(spaces_pat.sub(" ",l)) + lines[:] = ll + +def setup(app): + app.connect('autodoc-process-docstring', process_docstring) + +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'python-archinstall' +copyright = '2020, Anton Hvornum' +author = 'Anton Hvornum' + +# The full version, including alpha/beta/rc tags +release = 'v2.0.4' + + +# -- General configuration --------------------------------------------------- + +master_doc = 'index' +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.inheritance_diagram', + 'sphinx.ext.todo' +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = 'sphinx_rtd_theme' + +html_logo = "_static/logo.png" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If false, no module index is generated. +html_domain_indices = True + +# If false, no index is generated. +html_use_index = True + +# If true, the index is split into individual pages for each letter. +html_split_index = True + +# If true, links to the reST sources are added to the pages. +html_show_sourcelink = False + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'slimhttpdoc' + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'archinstall', u'archinstall Documentation', + [u'Anton Hvornum'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'archinstall', u'archinstall Documentation', + u'Anton Hvornum', 'archinstall', 'Simple and minimal HTTP server.'), +] diff --git a/docs/examples/binary.rst b/docs/examples/binary.rst new file mode 100644 index 00000000..7b25e201 --- /dev/null +++ b/docs/examples/binary.rst @@ -0,0 +1,23 @@ +.. _examples.python: + +Binary executable +================= + +.. warning:: The binary option is limited and stiff. It's hard to modify or create your own installer-scripts this way unless you compile the source manually. If your usecase needs custom scripts, either use the pypi setup method or you'll need to adjust the PKGBUILD prior to building the arch package. + +The binary executable is a standalone compiled version of the library. +It's compiled using `nuitka `_ with the flag `--standalone`. + +Executing the binary +-------------------- + +As an example we'll use the `guided `_ installer. +To run the `guided` installed, all you have to do *(after installing or compiling the binary)*, is run: + + +.. code-block:: + + ./archinstall guided + +As mentioned, the binary is a bit rudimentary and only supports executing whatever is found directly under `./archinstall/examples`. +Anything else won't be found. This is subject to change in the future to make it a bit more flexible. \ No newline at end of file diff --git a/docs/examples/python.rst b/docs/examples/python.rst new file mode 100644 index 00000000..ca0de708 --- /dev/null +++ b/docs/examples/python.rst @@ -0,0 +1,59 @@ +.. _examples.python: + +Python module +============= + +Archinstall supports running in `module mode `_. +The way the library is invoked in module mode is limited to executing scripts under the **example** folder. + +It's there for important to place any script or profile you wish to invoke in the examples folder prior to building and installing. + +Pre-requisits +------------- + +We'll assume you've followed the `installing.python.manual`_ method. +Before actually installing the library, you will need to place your custom installer-scripts under `./archinstall/examples/` as a python file. + +More on how you create these in the next section. + +.. warning:: + + This is subject to change in the future as this method is currently a bit stiff. The script path will become a parameter. But for now, this is by design. + +Creating a script +----------------- + +Lets create a `test_installer` - installer as an example. This is assuming that the folder `./archinstall` is a git-clone of the main repo. +We begin by creating `./archinstall/examples/test_installer.py`. The placement here is important later. + +This script can now already be called using `python -m archinstall test_installer` after a successful installation of the library itself. +But the script won't do much. So we'll do something simple like list all the harddrives as an example. + +To do this, we'll begin by importing `archinstall` in our `./archinstall/examples/test_installer.py` and call some functions. + +.. code-block:: python + + import archinstall + + all_drives = archinstall.list_drives() + print(all_drives) + +This should print out a list of drives and some meta-information about them. +As an example, this will do just fine. + +Now, go ahead and install the library either as a user-module or system-wide. + +Calling a module +---------------- + +Assuming you've followed the example in `Creating a script`_, you can now safely call it with: + +.. code-block:: + + python -m archinstall test_installer + +This should now print all available drives on your system. + +.. note:: + + This should work on any system, not just Arch Linux based ones. But note that other functions in the library relies heavily on Arch Linux based commands to execute the installation steps. Such as `arch-chroot`. \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..627347e9 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,51 @@ +python-archinstall Documentation +================================ + +| **python-archinstall** *(or, archinstall for short)* is a helper library to install Arch Linux and manage services, packages and other things. +| It comes packaged with different installers *(shopped as scripts)*, such as _guided and _automated installer that can be run as _Python modules. +| +| Here's a `demo `_ using the guided installer. + + +Some of the features of Archinstall are: + +* **No external dependencies or installation requirements.** Runs without any external requirements or installation processes. + +* **Single threaded and context friendly.** The library always executed calls in sequential order to ensure installation-steps don't overlap or executes in the wrong order. It also supports *(and uses)* context wrappers to ensure things such as `sync` are called so data and configurations aren't lost. + +* **Supports standalone executable** The library can be compiled into a single executable and run on any system with or without Python. This is ideal for live mediums that don't want to ship Python as a big dependency. + +.. toctree:: + :maxdepth: 3 + :caption: Installing + + installing/python + installing/binary + +.. toctree:: + :maxdepth: 3 + :caption: Usage & Examples + + examples/python + examples/binary + examples/scripting + +.. toctree:: + :maxdepth: 3 + :caption: Programming Guide + + programming_guide/requirements + programming_guide/basic_concept + +.. toctree:: + :maxdepth: 3 + :caption: Getting help + + help/discord + help/issues + +.. toctree:: + :maxdepth: 3 + :caption: API Reference + + archinstall/Installer \ No newline at end of file diff --git a/docs/installing/binary.rst b/docs/installing/binary.rst new file mode 100644 index 00000000..2868d7f1 --- /dev/null +++ b/docs/installing/binary.rst @@ -0,0 +1,63 @@ +.. _installing.binary + +Binary executable +================= + +Archinstall can be compiled into a standalone executable. +For Arch Linux based systems, there's a package for this called `archinstall `_. + +Using pacman +------------ + +Currently, you need to create your own mirror or use https://archlinux.life as a mirror. +We'll use the later for this example as it's less of a process to explain. + +..note:: To create your own mirror, the `archiso `_ wiki has a good tutorial and explanation of how and what a custom mirror does. + +Setup pacman to use https://archlinux.life as a mirror by modifying `/etc/pacman.conf` to contain the following: + +.. code-block:: + + [archlife] + Server = https://archlinux.life/$repo/os/$arch + SigLevel = Optional TrustAll + +You can now update your mirror-list and install `archinstall`. + +.. code-block:: + + sudo pacman -Syy + sudo pacman -S archinstall + +Using PKGBUILD +-------------- + +The `source `_ contains a binary `PKGBUILD `_ which can be either copied straight off the website. Or cloned using `git clone https://github.com/Torxed/archinstall`. + +Once you've obtained the `PKGBUILD`, building it is pretty straight forward. + +.. code-block:: + + makepkg -s + +Which should produce a `archinstall-X.x.z-1.pkg.tar.zst` that can be installed using: + +.. code-block:: + + sudo pacman -U archinstall-X.x.z-1.pkg.tar.zst + +.. note:: + + For a complete guide on the build process, please consult the wiki on `PKGBUILD `_. + +Manual compilation +------------------ + +You can compile the source manually without using a custom mirror or the `PKGBUILD` that is shipped. +Simply clone or download the source, and while standing in the cloned folder `./archinstall`, execute: + +.. code-block:: + + nuitka3 --standalone --show-progress archinstall + +This requires the `nuitka `_ package as well as `python3` to be installed locally. \ No newline at end of file diff --git a/docs/installing/python.rst b/docs/installing/python.rst new file mode 100644 index 00000000..6ca2adb6 --- /dev/null +++ b/docs/installing/python.rst @@ -0,0 +1,49 @@ +.. _installing.python: + +Python library +============== + +Archinstall shipps on `PyPi `_ as `archinstall `_. +But the library can be installed manually as well. + +Using PyPi +---------- + +The basic concept of PyPi applies using `pip`. +Either as a global library: + +.. code-block:: + + sudo pip install archinstall + +Or as a user module: + +.. code-block:: + + pip --user install archinstall + +Which will allow you to start using the library. + +.. _installing.python.manual + +Manual installation +------------------- + +You can either download the github repo as a zip archive. +Or you can clone it, we'll clone it here but both methods work the same. + +.. code-block:: + + git clone https://github.com/Torxed/archinstall + +Either you can move the folder into your project and simply do + +.. code-block:: python + + import archinstall + +Or you can use `setuptools `_ to install it into the module path. + +.. code-block:: + + sudo python setup.py install \ No newline at end of file