Skip to main content

CLI (`lim`) for downloading, verifying and flashing Linux images, LUKS/Btrfs encrypted storage (single drive and RAID1), image backups and chroot maintenance

Project description

Linux Image Manager 🖥️🛠️

GitHub Sponsors Patreon Buy Me a Coffee PayPal

License: GPL v3 GitHub stars

Linux Image Manager (lim) is a Python tool for downloading, configuring, and managing Linux images. Whether you're setting up encrypted storage, configuring a virtual Btrfs RAID1, performing backups, or chrooting into an image, this tool makes Linux image administration simple and efficient. 🚀

Features ✨

  • Image Download & Setup: Automatically download, verify (checksum + GPG signature) and prepare Linux distributions.
  • Encrypted Storage: Configure LUKS encryption for secure image management.
  • Virtual RAID1: Easily set up virtual Btrfs RAID1 for data redundancy.
  • Backup & Restore: Create image backups from devices using dd.
  • Chroot Environment: Easily enter a chroot shell to maintain or modify Linux images.
  • Data Import/Export: Sync personal data into an encfs-encrypted store and back.
  • Automated Procedures: Simplify partitioning, formatting, mounting, and more.

Installation 📦

Install Linux Image Manager quickly using Kevin's Package Manager under the alias lim. Just run:

package-manager install lim

This command makes Linux Image Manager globally available as lim in your terminal. The lim alias points to the main.py entry point.

There are no Python dependencies beyond the standard library. The commands call the usual system tools (cryptsetup, fdisk, dd, rsync, wget, gpg, encfs, pv, bsdtar, ...), so those need to be installed for the command you use.

Usage ⚙️

lim provides a unified interface for all image and storage operations. Commands that need root privileges re-execute themselves with sudo automatically. The built-in --help option displays detailed usage information.

Available Command Types

--type Description
image Download, verify and transfer a Linux image to a device, incl. optional LUKS encryption and Raspberry Pi configuration.
single Set up LUKS encryption with Btrfs on a single drive.
raid1 Set up an encrypted virtual Btrfs RAID1 across two drives.
backup Create an image backup from a memory device using dd.
chroot Mount an image and open a shell inside it.
mount Unlock and mount an encrypted drive.
umount Unmount an encrypted drive and close the mapper.
single-boot Register a single encrypted drive for automount on boot (keyfile, crypttab, fstab).
raid1-boot Register an encrypted RAID1 for automount on boot.
unlock Decrypt the encfs data store.
lock Lock the encfs data store.
import Import personal data from the system into the encrypted store.
export Export personal data from the encrypted store back to the system.

Command-Line Options

  • --type (required): Choose the command to execute (see table above).
  • --auto-confirm (optional): Bypass the confirmation prompt before execution.
  • --help (optional): Display detailed help information.

Example Commands

# Display help
lim --help

# Execute the Linux image setup
lim --type image

# Run the single drive encryption setup without a confirmation prompt
lim --type single --auto-confirm

# Set up an encrypted RAID1
lim --type raid1

# Back up a memory device to an image file
lim --type backup

# Enter a chroot environment for a Linux image
lim --type chroot

Project Structure 🗂️

main.py               # entry point (the `lim` alias)
lim/
  cli.py              # argument parsing and command dispatch
  catalog.py          # read-only access to distributions.yml
  device.py           # block device selection, dd, blkid helpers
  luks.py             # LUKS keyfiles, crypttab/fstab bookkeeping
  runner.py           # subprocess wrapper used by all modules
  storage/            # single drive and RAID1 encryption setups
  image/              # image setup, backup, chroot, verification
  data/               # encfs lock/unlock and data import/export
  distributions.yml   # single point of truth for the image catalog
  configuration/      # package collections used during image setup
tests/unit/           # unit tests (all external commands mocked)
tests/lint/           # architecture guards (e.g. max file length)

Configuration & Customization 🔧

Customize your environment in the lim/configuration/ folder:

  • General Packages: Contains common packages for all setup scripts.
  • Server LUKS Packages: Contains packages needed for setting up LUKS encryption on servers.

Development & Tests 🧪

The test suite mocks all external commands, so it runs safely on any machine:

pytest

License 📜

This project is licensed under the GNU General Public License Version 3. See the LICENSE.txt file for details.

Contact & Support 💬

Feel free to contribute, report issues, or get in touch. Happy Linux managing! 😊

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

linux_image_manager-2.1.0.tar.gz (42.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

linux_image_manager-2.1.0-py3-none-any.whl (48.1 kB view details)

Uploaded Python 3

File details

Details for the file linux_image_manager-2.1.0.tar.gz.

File metadata

  • Download URL: linux_image_manager-2.1.0.tar.gz
  • Upload date:
  • Size: 42.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for linux_image_manager-2.1.0.tar.gz
Algorithm Hash digest
SHA256 25d7e0107b9a2bd9009458c948464618459c54c223224afe0bf3c4fa3f4c727b
MD5 e6402f18dc7ffabe7d15b1549c71f370
BLAKE2b-256 c6c7bd2433e9c46b39932673396ca0e64daa420850b98f7c6efac0f186eeed08

See more details on using hashes here.

File details

Details for the file linux_image_manager-2.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for linux_image_manager-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e048a7cb52f486db24b8fd49c4c4f524a921b4d4be3f7e369b62e5460e993fde
MD5 460c44e107ee7e7e7360ca540fb16c93
BLAKE2b-256 6b3a03aa045c633a9a8a9c63880617f67504c284d856008179553b9faf8a5595

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page