Kevin Veen-Birkenbach ccdef065df refactor!: port shell scripts to Python package
Bash scripts were untestable and duplicated device/LUKS/mount logic;
the lim/ package centralizes it behind one subprocess wrapper and a
YAML image catalog (single point of truth).

BREAKING CHANGE: scripts/*.sh removed. Use `lim --type <cmd>`; new
types mount/umount/single-boot/raid1-boot/lock/unlock/import/export
replace direct script calls. --extra is deprecated and ignored.

- distributions.yml + lim/catalog.py hold the image catalog (PyYAML)
- pytest suite: 102 tests with mocked subprocess (tests/unit) and a
  250-line max file-length guard (tests/lint)
- ruff strict (select ALL), GitHub Actions CI, Dependabot; Travis gone
- Makefile: install (symlink ~/.local/bin/lim) and test targets
- fixes over bash: SUDO_USER-aware chown, mmcblk/nvme partition paths,
  sha512 checksum support, whole-pipeline failure detection, blkid
  UUID fallback for pre-mounted images, conditional fstab seeding for
  PARTUUID/LABEL images, clean errors for missing binaries
2026-07-14 11:37:19 +02:00
2026-07-14 10:19:30 +02:00
2019-09-30 13:44:02 +02:00
2025-03-22 11:42:13 +01:00

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)
distributions.yml     # single point of truth for the image catalog
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
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 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! 😊

Description
Linux Image Manager is a powerful suite of shell scripts for downloading, configuring, and managing Linux images—including encrypted storage, RAID1 setups, chroot environments, and backups.
Readme 3.4 MiB
Languages
Python 90.9%
Shell 8.5%
Makefile 0.6%