_____ _ __ __ | ___| | ___ | \/ | FLoM | |_ | | / _ \| |\/| | Free Lock Manager | _| | |__| (_) | | | | a free and open source lock manager |_| |_____\___/|_| |_| FLoM (Free Lock Manager) is an open source and free lock manager designed to serialize and synchronize shell command execution and custom programs developed in C, C++, Java, Perl, PHP, Python. Official web site is http://www.tiian.org/flom/ Both GitHub https://github.com/tiian/flom and SourceForge https://sourceforge.net/projects/flom/ host FLoM source code. Basic usage examples are in doc/examples directory (default installation path is /usr/local/share/doc/flom/examples/) API documentation is distributed in directory doc/html/ (default installation path is /usr/local/share/doc/flom/html/) and on the web at http://www.tiian.org/flom/API/C/globals_func.html FLoM is implemented using state of the art reactive programming: independent non blocking threads reach unparalleled scalability and C language source code guarantee the best performance. The usage of mutexes is reduced to trifling functions: FLoM can be considered a "lock free lock manager". A list of implemented use cases is listed at this URL: http://www.tiian.org/flom/FLoM_by_examples/FLoM_by_examples.html This is a brief list of the available features: - synchronization of shell commands to avoid conflicts on files, directories, abstract resources - enforcement of command order execution to avoid one command is executed before another one - resource utilization leveling to avoid too many similar tasks run at the same time - all the synchronization features are available inside a single host or in a distributed environment using TCP/IP networking (both IPv4 and IPv6 are suppoted) - an autodiscovery feature is available to reduce deployment complexity in a cloud environment (every node at any time may become a "server" for the others node) - easy API (Application Programming Interface) to synchronize your own programs with shell executed flom commands. These languages have a ready to use binding: C, C++, Java, Perl, PHP, Python. - TLS (Transport Layer Security) support to protect network communication and to supply peer to peer mutual authentication based on X.509 certificates - a large spectrum of different resources: 1. simple: basic locking using DLM semantic 2. hierarchical: HFS like semantic 3. numerical: pools of undifferentiated resources 4. set: sets of differentiated resources 5. sequence: arrays of transactional (or non transactional) sequences 6. timestamp: arrays of unique timestamp sequences FLoM central documentation site is hosted by SourceForge Wiki: http://www.tiian.org/flom/ * FLoM is free software: you can redistribute it and/or modify under the terms * of GNU General Public License version 2 as published by the Free Software * Foundation. * * FLoM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. Download the tarball from SourceForge: https://sourceforge.net/projects/flom/ and install FLoM using standard GNU build chain: tar xvzf flom-X.Y.Z.tar.gz cd flom-X.Y.Z ./configure make sudo make install Python 3 support: if you want to compile the API for Python 3, use: PYTHON_VERSION=3 ./configure make sudo make install If you are using a Red Hat derivative you will probably use su make install exit instead of "sudo make install". Take a look to file INSTALL for more details. Use man flom to read man page and pick up Internet relevant URLs for FLOM project. Use make check to perform package automatic tests. NOTE: do *NOT* run tests on a system that's using flom because some tests need to kill all FLoM running instances and this is not acceptable if you are playing production workloads. DO USE A TEST SYSTEM! NOTE: tests needs the system is NOT overloaded because they stick on timing and timing breaks if the system is overloaded. NOTE: FLoM must be installed with "sudo make install" before tests can proceed (this is a library path issue...) NOTE: if you are not interested in C++ API library support, specify "--disable-cpp" at configure time; example: ./configure --disable-cpp NOTE: if you are not interested in Java API library support, specify "--disable-java" at configure time; example: ./configure --disable-java NOTE: if you are not interested in Perl API library support, specify "--disable-perl" at configure time; example: ./configure --disable-php NOTE: if you are not interested in PHP API library support, specify "--disable-php" at configure time; example: ./configure --disable-php NOTE: if you are not interested in Python API library support, specify "--disable-python" at configure time; example: ./configure --disable-python Issues related to multicast and internal Linux firewalling: the easiest way is to completely disable the internal firewall with commands systemctl stop firewalld systemctl disable firewalld or alternatively service ipchains stop service iptables stop chkconfig ipchains off chkconfig iptables off If you cannot disable the firewall and you want to use FLoM autodiscovery feature (IP multicast based), you will have to configure the internal firewall allowing FLoM multicast packets. If you need some help (usage tricks, hints, etc...) please post a message in the forum: http://sourceforge.net/p/flom/discussion/ If you think you have discovered a bug, please open an issue here: https://github.com/tiian/flom/issues Dependencies report: O.S. Feature Packages Ubuntu Basic make gcc libglib2.0-dev dbus libdbus-1-dev libssl-dev pkg-config automake Ubuntu C++ API g++ Ubuntu PHP API swig php5-cli php5-dev Ubuntu 16.04 PHP API * Ubuntu 18.04 PHP API swig php-cli Ubuntu Python API swig python-dev Ubuntu 10.04 Java API openjdk-6-jdk Ubuntu 12.04 Java API default-jdk (openjdk 6) Ubuntu 14.04 Java API default-jdk (openjdk 7) Ubuntu 16.04 Java API default-jdk (openjdk 8) Ubuntu 18.04 Java API default-jdk (openjdk 10) CentOS Basic gcc glib2-devel dbus dbus-devel autoconf openssl-devel make CentOS C++ API gcc-c++ CentOS Perl API swig perl-devel CentOS PHP API swig php-devel CentOS 6.x Python API swig python-devel CentOS 7.x Python 2 API swig python-devel CentOS 7.x Python 3 API swig python3-devel CentOS 8.x Python 3 API swig python3-devel CentOS 6.x Java API java-1.6.0-openjdk* or java-1.7.0-openjdk* CentOS 7.x Java API java-1.8.0-openjdk* CentOS 8.x Java API java-11-openjdk* * Support not available for PHP 7.0 due to SWIG version, see also tiian#5 Enjoy FLoM! Ch.F.