mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-09 00:13:31 +00:00
367ef8d318abc5b303e66a32372e0d0d318a694d
" We would like to deploy Scylla in constrained environments where internet access is not permitted. In those environments it is not possible to acquire the dependencies of Scylla from external repos and the packages have to be sent alongside with its dependencies. In older distributions, like CentOS7 there isn't a python3 interpreter available. And while we can package one from EPEL this tends to break in practice when installing the software in older patchlevels (for instance, installing into RHEL7.3 when the latest is RHEL7.5). The reason for that, as we saw in practice, is that EPEL may not respect RHEL patchlevels and have the python interpreter depending on newer versions of some system libraries. virtualenv can be used to create isolated python enviornments, but it is not designed for full isolation and I hit at least two roadblocks in practice: 1) It doesn't copy the files, linking some instead. There is an --always-copy option but it is broken (for years) in some distributions. 2) Even when the above works, it still doesn't copy some files, relying on the system files instead (one sad example was the subprocess module that was just kept in the system and not moved to the virtualenv) This patch solves that problem by creating a python3 environment in a directory with the modules that Scylla uses, and no other else. It is essentially doing what vitualenv should do but doesn't. Once this environment is assembled the binaries are then made relocatable the same way the Scylla binary is. One difference (for now) between the Scylla binary relocation process and ours is that we steer away from LD_LIBRARY_PATH: the environment variable is inherited by any child process steming from the caller, which means that we are unable to use the subprocess module to call system binaries like mkfs (which our scripts do a lot). Instead, we rely on RUNPATH to tell the binary where to search for its libraries. Once we generate an archive with the python3 interpreter, we then package it as an rpm with bare any dependencies. The dependencies listed are: $ rpm -qpR scylla-relocatable-python3-3.6.7-1.el7.x86_64.rpm rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PartialHardlinkSets) <= 4.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsXz) <= 5.2-1 And the total size of that rpm, with all modules scylla needs is 20MB. The Scylla rpm now have a way more modest dependency list: $ rpm -qpR scylla-server-666.development-0.20190121.80b7c7953.el7.x86_64.rpm | sort | uniq /bin/sh curl file hwloc kernel >= 3.10.0-514 mdadm pciutils rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsXz) <= 5.2-1 scylla-conf scylla-relocatable-python3 <== our python3 package. systemd-libs util-linux xfsprogs I have tested this end to end by generating RPMs from our master branch, then installing them in a clean CentOS7.3 installation without even using yum, just rpm -Uhv <package_list> Then I called scylla_setup to make sure all python scripts were working and started Scylla successfully. " * 'scylla-python3-v5' of github.com:glommer/scylla: Create a relocatable python3 interpreter spec file: fix python3 dependency list. fixup scripts before installing them to their final location automatically relocate python scripts make scyllatop relocatable use relative paths for installing scylla and iotune binaries
…
…
…
…
…
…
…
…
Scylla
Quick-start
$ git submodule update --init --recursive
$ sudo ./install-dependencies.sh
$ ./configure.py --mode=release
$ ninja-build -j4 # Assuming 4 system threads.
$ ./build/release/scylla
$ # Rejoice!
Please see HACKING.md for detailed information on building and developing Scylla. Note: GCC >= 8.1.1 is require to compile Scylla.
Running Scylla
- Run Scylla
./build/release/scylla
- run Scylla with one CPU and ./tmp as data directory
./build/release/scylla --datadir tmp --commitlog-directory tmp --smp 1
- For more run options:
./build/release/scylla --help
Building Fedora RPM
As a pre-requisite, you need to install Mock on your machine:
# Install mock:
sudo yum install mock
# Add user to the "mock" group:
usermod -a -G mock $USER && newgrp mock
Then, to build an RPM, run:
./dist/redhat/build_rpm.sh
The built RPM is stored in /var/lib/mock/<configuration>/result directory.
For example, on Fedora 21 mock reports the following:
INFO: Done(scylla-server-0.00-1.fc21.src.rpm) Config(default) 20 minutes 7 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-21-x86_64/result
Building Fedora-based Docker image
Build a Docker image with:
cd dist/docker
docker build -t <image-name> .
Run the image with:
docker run -p $(hostname -i):9042:9042 -i -t <image name>
Contributing to Scylla
Description
Languages
C++
72.1%
Python
26.7%
CMake
0.3%
GAP
0.3%
Shell
0.3%