Build static self-extracting app from dynamic executable
Project description
StaticX
Bundle dynamic executables with their library dependencies so they can be run anywhere, just like a static executable.
Requirements
StaticX currently works only with Linux 64-bit dynamic executables.
The following external tools need to be installed to run StaticX:
ldd
- Part of GNU C Libraryreadelf
- Part of binutilsobjcopy
- Part of binutilspatchelf
- Packages available for Debian 8+, Fedora 14+, others
- install with
pip install patchelf-wrapper
The following additional tools must be installed to build StaticX from source:
scons
musl-libc
(optional)
Installation
From PyPI
StaticX is avaiable on PyPI. The wheels are built on Travis CI and include a bootloader built with musl-libc.
You can install using Pip.
StaticX is compatible with Python Python 3.5+ (pip3
):
sudo pip3 install staticx
From source
If you have musl libc installed, you can use it to build the staticx
bootloader, resulting in smaller, better binaries. To do so, set the
BOOTLOADER_CC
environment variable to your musl-gcc
wrapper path
wehn invoking pip
or setup.py
:
sudo BOOTLOADER_CC=/usr/local/musl/bin/musl-gcc pip3 install https://github.com/JonathonReinhart/staticx/archive/master.zip
cd staticx
sudo BOOTLOADER_CC=/usr/local/musl/bin/musl-gcc pip3 install .
Usage
Basic wrapping of an executable
staticx /path/to/exe /path/to/output
StaticX will automatically discover and bundle most normal linked libraries.
However, libraries loaded by an application at runtime via dlopen()
cannot
currently be detected. These can be manually included in the application bundle
by using the -l
option (any number can be specified by repeating the -l
option).
staticx -l /path/to/fancy/library /path/to/exe /path/to/output
Caveats
StaticX employs a number of tricks to run applications with only their bundled libraries to ensure compatibilitiy. Because of this, there are some caveats that apply to StaticX-bundled applications:
- The dynamic linker is instructed (via
nodeflib
) to only permit bundled libraries to be loaded. - Target NSS configuration (
/etc/nsswitch.conf
) is ignored (for GLIBC-linked applications) which means that some advanced name services (e.g. Active Directory) will not be available at runtime. For example, looking up the UID number of a domain user will not work.
Run-time Information
StaticX sets the following environment variables for the wrapped user program:
STATICX_BUNDLE_DIR
: The absolute path of the "bundle" directory, the temporary dir where the archive has been extracted.STATICX_PROG_PATH
: The absolute path of the program being executed.
License
This software is released under the GPLv2, with an exception allowing the bootloader to be distributed. See LICENSE.txt for more details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file staticx-0.13.5.tar.gz
.
File metadata
- Download URL: staticx-0.13.5.tar.gz
- Upload date:
- Size: 69.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.4.2 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7cc80593801440d08cb4a8540cee3ce0b02964724e66d8ee164a6d7650bf4456 |
|
MD5 | 2c94fec260947246fd2707fca22d72fc |
|
BLAKE2b-256 | 7fd91bf6e5aba59e23e2c2b18f206bb9f81d50f0bb4d93796cf332a638119f24 |
File details
Details for the file staticx-0.13.5-py3-none-manylinux1_x86_64.whl
.
File metadata
- Download URL: staticx-0.13.5-py3-none-manylinux1_x86_64.whl
- Upload date:
- Size: 192.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.4.2 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c520ae41cc93dcddc4f325317c5a1f09292c40cc17133651df5cc0d436147633 |
|
MD5 | 0a9b970238a23cd81c2cf453a6758b26 |
|
BLAKE2b-256 | 22f1b584e755bf1017ce4f95cf56504e3dac0539ad461b3556d3223484d72a41 |