{ "info": { "author": "Luca Clementi", "author_email": "luca.clementi@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "===========\nFingerPrint\n===========\n\nFingerPrint is a software tool which can analyze arbitrary lists of binaries\nand save all their dependencies information in a file (called Swirl) along\nwith other information.\n\nA Swirl can then be used to understand if the given application can run on\nanother system or if some of the dependencies got modified since the\nSwirl creation. Swirl can also be used to deploy the traced application\non a Rocks cluster.\n\n\nRequirements\n------------\n\nFingerPrint will work only on a Linux system, it does not have any major \nrequirement other than Python from version 2.4 up to 2.7. FingerPrint is \ncurrently tested on RHEL (5.x and 6.x) and (Debian 5.x and 6.x) systems.\n\nIt also requires a minimal set of core utilities (bash, sed, grep,\nldd, and objdump) but all these tools are generally present on most of\nthe systems.\n\nIf found on the system (they are not required), fingerprint uses:\n\n- prelink (to remove pre-linking information from libraries and get their hash)\n- dpkg or rpm (to record package version and info regarding dependencies)\n\nFingerPrint comes with a stack tracing facility that can be used to determine\nwhich shared library opens a file. The stack tracing module is not required for\nthe proper functioning. To compile the module you will need libunwind\nshared libraries (version 0.99 comes with libunwind-ptrace compiled statically\nso it does not work :-(). The stack tracing facility is written in C, so it\nrequires gcc.\n\n\nInstallation\n------------\n\nThe simplest way to use FingerPrint is to checkout the source code\n\n::\n\n # git clone https://github.com/rocksclusters/FingerPrint.git\n\nand then add to your ``PATH`` the ``./bin`` directory of the source code\n\n::\n\n # cd FingerPrint\n # export PATH=$PATH:$PWD/bin\n\nAfter this steps you can start to use fingerprint. The following steps are\nonly required for advanced users. To invoke unit-tests run:\n\n::\n\n # python setup.py test\n\nUnit-tests generate a lot of outputs and errors but if they all succeed at the\nend you will see the following lines:\n\n::\n \n Ran 4 tests in 38.870s\n \n OK\n\n\nIf you want to install FingerPrint on your system python path you can follow the\nstandard `distutils `_ procedure.\nIf you want the stack tracing functionality copy the file ``setup.cfg.template``\ninto ``setup.cfg`` and insert the paths to your libunwind before proceeding.\nTo build and install FingerPrint type:\n\n::\n\n # python setup.py build\n # python setup.py install\n\nThis installs FingerPrint in your Python environment. You might need writing\nprivilege on system directories for such installation.\n\nThe installation will deploy:\n\n- a bunch of python source files inside the ``FingerPrint`` python module\n- a command line python script called fingerprint, inside one of your ``PATH``\n directories\n\n\nUse\n---\n\nTo get some help on the command line you can type:\n\n::\n\n # fingerprint -h\n\nBasically there are four main actions fingerprint can do (-c create, -d display,\n-q query, and -y verify):\n\n1. Create a swirl from a set of input file (flag -c) or with dynamic tracing.\n In this mode fingerprint will scan the list of files passed on the command\n line or it will (-x) trace the execution of the command specified to output\n a swirl file containing the dependencies fingerprint of the given input.\n This mode can also create a \"swirl archive\" (-r) which is nothing else than\n a tar.gz containing the swirl and all the file referenced by it.\n Using the create flag it is also possible to create a Rocks Cluster roll\n (flag -m), which will install the software described in the given \"swirl\n archive\" on all the nodes of a rocks cluster.\n\n2. Display the content of a swirl file (flag -d). In this mode fingerprint\n will print to stdout a detailed description of the input swirl. The input\n swirl can be specified with -f, or it will be the default output.swirl.\n\n3. Query the content of a swirl file (flag -q). In this mode fingerprint\n will run a query against the specified swirl file and return 0 upon success\n or 1 when failing. If the query is run with the verbose flag (-v) it will\n also print to stdout more information regarding the query.\n\n4. Verify a swirl (flag -y). In this mode fingerprint scan the current system\n for the dependencies listed in the input swirl and return 0 if they were\n all found or 1 if some of then are unavailable. If verbose flag is given\n it will print also a list of unmet dependencies. Above the verify it is also\n possible to perform an integrity check. In this mode fingerprint scans the\n system where invoked and checks if any of the dependencies listed in the\n input swirl have been modified since its creation (to this purpose it uses\n the checksums stored in the swirl). It return 0 upon success or 1 in case of\n failure, with the verbose flag it prints also a list of modified files.\n\nExamples\n--------\n\n\nCreate a fingerprint of your ls command:\n\n\n::\n\n clem@sirius:~/projects/FingerPrint/temp$ fingerprint -c /bin/ls\n File output.swirl saved\n\nBy default it uses output.swirl as input or output Siwrl file name \nbut you can choose your own file name with \"-f\"\n\n::\n\n clem@sirius:~/projects/FingerPrint$ ls -lh output.swirl\n -rw-rw-r-- 1 clem clem 2.4K Feb 20 15:51 output.swirl\n\n\nTo see the list of libraries your /bin/ls depends on along with\nthe local package name (this is what is stored in a swirl).\nYou can always use the verbose flag (-v) to create more output.\n\n::\n\n clem@hermes:~/projects/FingerPrint$ fingerprint -dv\n File name: output.swirl\n Swirl 2013-08-23 17:27\n ls.so.conf path list:\n /lib/i386-linux-gnu\n /usr/lib/i386-linux-gnu\n /usr/local/lib\n /lib/x86_64-linux-gnu\n /usr/lib/x86_64-linux-gnu\n /usr/lib/x86_64-linux-gnu/mesa\n /lib32\n /usr/lib32\n -- File List --\n /bin/ls - coreutils 8.13-3ubuntu3.2 amd64\n Deps: librt.so.1, ld-linux-x86-64.so.2, libselinux.so.1, libacl.so.1, libc.so.6\n Provs: \n /lib/x86_64-linux-gnu/ld-2.15.so - libc6 2.15-0ubuntu10.4 amd64\n -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2\n Deps: \n Provs: ld-linux-x86-64.so.2\n /lib/x86_64-linux-gnu/libacl.so.1.1.0 - libacl1 2.2.51-5ubuntu1 amd64\n -> /lib/x86_64-linux-gnu/libacl.so.1\n Deps: libattr.so.1, libc.so.6\n Provs: libacl.so.1\n /lib/x86_64-linux-gnu/libc-2.15.so - libc6 2.15-0ubuntu10.4 amd64\n -> /lib/x86_64-linux-gnu/libc.so.6\n Deps: ld-linux-x86-64.so.2\n Provs: libc.so.6\n /lib/x86_64-linux-gnu/librt-2.15.so - libc6 2.15-0ubuntu10.4 amd64\n -> /lib/x86_64-linux-gnu/librt.so.1\n Deps: libpthread.so.0, libc.so.6\n Provs: librt.so.1\n /lib/x86_64-linux-gnu/libselinux.so.1 - libselinux1 2.1.0-4.1ubuntu1 amd64\n Deps: ld-linux-x86-64.so.2, libc.so.6, libdl.so.2\n Provs: libselinux.so.1\n /lib/x86_64-linux-gnu/libattr.so.1.1.0 - libattr1 1:2.4.46-5ubuntu1 amd64\n -> /lib/x86_64-linux-gnu/libattr.so.1\n Deps: libc.so.6\n Provs: libattr.so.1\n /lib/x86_64-linux-gnu/libpthread-2.15.so - libc6 2.15-0ubuntu10.4 amd64\n -> /lib/x86_64-linux-gnu/libpthread.so.0\n Deps: ld-linux-x86-64.so.2, libc.so.6\n Provs: libpthread.so.0\n /lib/x86_64-linux-gnu/libdl-2.15.so - libc6 2.15-0ubuntu10.4 amd64\n -> /lib/x86_64-linux-gnu/libdl.so.2\n Deps: ld-linux-x86-64.so.2, libc.so.6\n Provs: libdl.so.2\n\n\nScan the current system to verify compatibility with given swirl\ni.e. all dependencies listed in the Swirl can be found:\n\n::\n\n clem@sirius:~/projects/FingerPrint$ fingerprint -y\n\n\nVerify that none of the dependencies have been modified\n(it uses md5sum to check for changes).\n\n::\n\n clem@sirius:~/projects/FingerPrint$ fingerprint -yi\n\n\nYou can query the swirl:\n\n::\n\n clem@sirius:~/projects/FingerPrint$ fingerprint -q -S\n /lib/x86_64-linux-gnu/librt.so.1 && echo librt is used\n librt is used\n \n clem@sirius:~/projects/FingerPrint$ fingerprint -q -v -S\n /lib/x86_64-linux-gnu/libcrypt.so.1 || echo libcrypt is not used\n libcrypt is not used\n\n\nDynamic tracing\n---------------\nFingerPrint can dynamically trace a running process to properly detect dynamic\ndependencies and opened files. To this extent it uses the POSIX ptrace system\ncall and it can trace spawned processes as well.\n\nDynamic tracing can trace dynamically loaded shared libraries and opened files.\nIf FingerPrint is compiled with stacktracer support (see Requirements for more info)\nit can also detect which shared library initiated the open syscall. To dynamically\ntrace a program run FingperPrint with the '-c -x' flags:\n\n::\n\n clem@hermes:~/projects/FingerPrint$ fingerprint -c -x \"xeyes\"\n Tracing terminated successfully\n File output.swirl saved\n\n\nWhen displaying a Swirl created with the dynamic tracing it includes information\nregarding open files and dynamically loaded libraries.\n\n::\n\n clem@hermes:~/projects/FingerPrint$ fingerprint -d\n File name: output.swirl\n Swirl 2013-08-23 17:43\n -- File List --\n /usr/bin/xeyes\n /lib/x86_64-linux-gnu/ld-2.15.so\n /lib/x86_64-linux-gnu/libc-2.15.so\n Opened files:\n /proc/meminfo\n /usr/lib/locale/locale-archive\n /lib/x86_64-linux-gnu/libm-2.15.so\n /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0\n Opened files:\n /usr/share/X11/locale/C/XLC_LOCALE\n /usr/share/X11/locale/locale.dir\n /usr/share/X11/locale/locale.alias\n /usr/share/X11/locale/en_US.UTF-8/XLC_LOCALE\n /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0\n /usr/lib/x86_64-linux-gnu/libXmu.so.6.2.0\n /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0\n /usr/lib/x86_64-linux-gnu/libXt.so.6.0.0\n /lib/x86_64-linux-gnu/libdl-2.15.so\n /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0\n /usr/lib/x86_64-linux-gnu/libICE.so.6.3.0\n /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1\n /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0\n Opened files:\n /home/clem/.Xauthority\n /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0\n /lib/x86_64-linux-gnu/libuuid.so.1.3.0\n /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 --(Dyn)--\n /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 --(Dyn)--\n\nIt the example above, thanks to the stack tracing facility, it is possible to see\nthat the file ``/home/clem/.Xauthority`` was opened by the\n``/usr/lib/x86_64-linux-gnu/libXau.so.6.0.0`` shared library.\n\nAuthors and Contributors\n------------------------\nFingerprint is an idea of Phil Papadopoulos and it is developed by Phil and Luca\nClementi. This work is funded by NSF under the grant #1148473.\n\n\nSupport or Contact\n------------------\nIf you are having trouble with FingerPrint or if you need some help you can post an\nissue or contact me at clem \\a\\t sdsc dot edu.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rocksclusters/FingerPrint", "keywords": null, "license": "FingerPrint Code\n\n Rocks(r) \n www.rocksclusters.org\n FingerPrint \n\n\nCopyright (c) 2000 - 2012 The Regents of the University of California.\nAll rights reserved. \n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice unmodified and in its entirety, this list of conditions and the\nfollowing disclaimer in the documentation and/or other materials provided \nwith the distribution.\n\n3. All advertising and press materials, printed or electronic, mentioning\nfeatures or use of this software must display the following acknowledgement: \n\n \"This product includes software developed by the Rocks(r)\n Cluster Group at the San Diego Supercomputer Center at the\n University of California, San Diego and its contributors.\"\n\n4. Except as permitted for the purposes of acknowledgment in paragraph 3,\nneither the name or logo of this software nor the names of its\nauthors may be used to endorse or promote products derived from this\nsoftware without specific prior written permission. The name of the\nsoftware includes the following terms, and any derivatives thereof:\n\"Rocks\", \"Rocks Clusters\", and \"Avalanche Installer\". For licensing of \nthe associated name, interested parties should contact Technology \nTransfer & Intellectual Property Services, University of California, \nSan Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, \nPh: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\npython-ptrace FingerPrint/ptrace/* code license\n(all rights to Vicotr Stinner):\n\n\n Copyright (C) 1991 Victor Stinner\n\n\n This program is free software; you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation; either version 2 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program; if not, write to the Free Software\n Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA", "maintainer": null, "maintainer_email": null, "name": "fingerprint-app", "package_url": "https://pypi.org/project/fingerprint-app/", "platform": "linux", "project_url": "https://pypi.org/project/fingerprint-app/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/rocksclusters/FingerPrint" }, "release_url": "https://pypi.org/project/fingerprint-app/0.2/", "requires_dist": null, "requires_python": null, "summary": "Fingerprinting application dependencies", "version": "0.2" }, "last_serial": 913164, "releases": { "0.2": [ { "comment_text": "python 2.X", "digests": { "md5": "32504522f2b8ac827b1807887fe6f646", "sha256": "3c8f958692735ddb6d4c49976509482f6cd02cb651df5e86abb01f84be545b86" }, "downloads": -1, "filename": "fingerprint-app-0.2.tar.gz", "has_sig": false, "md5_digest": "32504522f2b8ac827b1807887fe6f646", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48195, "upload_time": "2013-11-07T00:59:17", "url": "https://files.pythonhosted.org/packages/fd/d8/0e555fa03cd03358e9ad9e00e4a378c843afe1c255952c83bbd932b27eb3/fingerprint-app-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "python 2.X", "digests": { "md5": "32504522f2b8ac827b1807887fe6f646", "sha256": "3c8f958692735ddb6d4c49976509482f6cd02cb651df5e86abb01f84be545b86" }, "downloads": -1, "filename": "fingerprint-app-0.2.tar.gz", "has_sig": false, "md5_digest": "32504522f2b8ac827b1807887fe6f646", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48195, "upload_time": "2013-11-07T00:59:17", "url": "https://files.pythonhosted.org/packages/fd/d8/0e555fa03cd03358e9ad9e00e4a378c843afe1c255952c83bbd932b27eb3/fingerprint-app-0.2.tar.gz" } ] }