Package: exasol-script-languages-container-tool
Script-Languages-Container-ToolOverviewThe Script-Languages-Container-Tool (exaslct) is the build tool for the script language container.
You can build, export and upload script-language container from so-called flavors
which are description how to build the script language container. You can find pre-defined flavors
in thescript-languages-releaserepository.
There we also described how you could customize these flavors to your needs.In a NutshellPrerequisitesFor installationIn order to install this tool, your system needs to provide
the following prerequisites:SoftwareLinuxbash>= 4.2MacOsXbash> 3.2coreutilssha512sumsedcurlPython 3 (>=3.8)PipFor runningIn order to use this tool, your system needs to fulfill the following prerequisites:SoftwareLinuxbash>= 4.2coreutilsreadlink with -f optionrealpathdirnameMacOsX (Please see limitations onMacOsX)bash>= 3.2coreutilsgreadlink with -f optionrealpathdirnameDocker>= 17.05with support formulti-stage builds requiredhost volume mounts need to be allowedSystem SetupWe recommend at least 50 GB free disk space on the partition
where Docker stores its images, on linux Docker typically stores
the images at /var/lib/docker.For the partition where the output directory (default: ./.build_output)
is located we recommend additionally at least 10 GB free disk space.Further, prerequisites might be necessary for specific tasks. These are listed under the corresponding section.InstallationYou have two options to use this project:as a pure Python projectusing thestart scriptswhich pull the correct container image from Dockerhub and execute it within the Docker containerPure PythonFind the wheel package for a specificreleaseunder assets.Install the python package withpython3 -m pip install https://github.com/exasol/script-languages-container-tool/releases/download/$VERSION/exasol_script_languages_container_tool-$VERSION-py3-none-any.whl. Replace $VERSION with the latest version or the specific version you are interested in.Starter scriptsYou need to install the Python package only once to install the starter scripts (see theprevious section).Install the starter scripts which allow to run exaslct within a docker image:python3 -m exasol_script_languages_container_tool.main install-starter-scripts --install-path $YOUR_INSTALL_PATHThis will create a subfolder with the scripts itself and a symlinkexaslctin $YOUR_INSTALL_PATH, which can be used as entry point.UsageFor simplicity the following examples use the starter script version (exaslct). If you want to use the pure Python package, simply replaceexaslctwithpython3 -m exasol_script_languages_container_tool.mainin all examples.How to build an existing flavor?Create the language container and export it to the local file system./exaslctexport--flavor-path=flavors/<flavor-name>--export-path<export-path>or upload it directly into the BucketFS (currently http only, https follows soon)./exaslctupload--flavor-path=flavors/<flavor-name>--database-host<hostname-or-ip>--bucketfs-port<port>\--bucketfs-usernamew--bucketfs-password<password>--bucketfs-name<bucketfs-name>\--bucket-name<bucket-name>--path-in-bucket<path/in/bucket>Once it is successfully uploaded, it will print the ALTER SESSION statement
that can be used to activate the script language container in the database.How to activate a script language container in the databaseIf you uploaded a container manually, you can generate the language activation statement with./exaslctgenerate-language-activation--flavor-path=flavors/<flavor-name>--bucketfs-name<bucketfs-name>\--bucket-name<bucket-name>--path-in-bucket<path/in/bucket>--container-name<container-name>where <container-name> is the name of the uploaded archive without its file extension. To activate the language, execute the generated statement in your database session to activate the container for the current session or system wide.This command will print a SQL statement to activate the language similar to the following one:ALTERSESSIONSETSCRIPT_LANGUAGES='<LANGUAGE_ALIAS>=localzmq+protobuf:///<bucketfs-name>/<bucket-name>/<path-in-bucket>/<container-name>?lang=<language>#buckets/<bucketfs-name>/<bucket-name>/<path-in-bucket>/<container-name>/exaudf/exaudfclient[_py3]';Please, refer to theUser Guidefor more detailed information, how to use exalsct.FeaturesBuild a script language container as docker imagesExport a script language container as an archive which can be used for extending Exasol UDFsUpload a script language container as an archive to the Exasol DB's BucketFSGenerating the activation command for a script language containerCan use Docker registries, such as Docker Hub, as a cache to avoid rebuilding image without changesCan push Docker images to Docker registriesRun tests for you container against an Exasol DB (docker-db or external db)LimitationsCaution with symbolic links:
If you use symbolic links inside any directory of the command line arguments
they must not point to files or directories outside the root of the path of the
command line argument (i.e. --flavor-path ./flavors/my_flavor/ => There must be no symbolic
link inside ./flavors/my_flavor point to anywhere outside of ./flavors/my_flavor).
Background: Local directories paths must be mounted manually to the docker container.
We currently support only the mounting of the given command line arguments, but we do not analyze
the content of those directories.
Plan is to fix this limitation with#35MacOsX LimitationsOn MacOsX all arguments (flavors path, output directory, etc.) must point to locations within the current directory (background is that the MacOsX version does not support mount binding additional directories).Table of ContentsInformation for UsersUser GuideChangelogInformation for DevelopersDeveloper GuideDependencies