Metadata-Version: 2.4
Name: osinfoid
Version: 0.0.1
Summary: Identifica la distribucion de Linux, su version, su familia y si tiene cPanel o CloudLinux
Author-email: info@alvarodeleon.com
Keywords: linux,distro,distribucion,os-release,centos,almalinux,rocky,cloudlinux,debian,ubuntu,cpanel,whm,sysadmin
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=2.7
Description-Content-Type: text/markdown

# osinfoid

Identifica la distribución de Linux, su versión, su familia y si el sistema
tiene cPanel/WHM o CloudLinux. Sin dependencias: sólo biblioteca estándar.

Pensado para scripts de administración de servidores, donde hace falta ramificar
por distribución y versión antes de instalar paquetes o tocar configuración.

## Instalación

```bash
pip install osinfoid
```

## Uso

```python
import osinfoid

info = osinfoid.detect()

info.distro         # 'alma'
info.family         # 'rhel'
info.name           # 'seafoam_ocelot'   (nombre en clave)
info.full_version   # '9.4'
info.short_version  # '9'
info.version        # '9'                (alias de short_version)
info.cpanel         # True
info.cloudlinux     # False
info.recognized     # True
info.as_dict()
info.version_tuple()  # (9, 4)
```

Atajos, si sólo hace falta un dato:

```python
from osinfoid import distro, family, version, has_cpanel, is_cloudlinux

if family() == 'rhel' and version() == '7':
    ...
if is_cloudlinux() and has_cpanel():
    ...
```

## Qué detecta

| Campo | Valor |
| --- | --- |
| `distro` | `debian`, `ubuntu`, `centos`, `rocky`, `alma`, `cloudlinux`, `rhel`, `oracle`, `amazon`, `opensuse-leap`, `arch`, `alpine`, ... |
| `family` | `rhel`, `debian`, `suse`, `arch`, `alpine`, `gentoo`, `slackware`, `void`, `nixos`, `mandriva`, `unknown` |
| `name` | nombre en clave en minúsculas, con `_` por espacios: `trixie`, `jammy_jellyfish`, `resolute_raccoon` |
| `full_version` | dos componentes como máximo: `7.9`, `9.4`, `22.04`; `rolling` en rolling releases |
| `short_version` | versión mayor: `6`, `7`, `8`, `9`, `22` |
| `cpanel` | `True` si hay cPanel/WHM instalado |
| `cloudlinux` | `True` si el sistema es (o fue convertido a) CloudLinux |

Cubre **cualquier** distribución: el identificador sale del `ID` de
`/etc/os-release`, así que una distro que no esté en la tabla interna se sigue
reportando por su nombre, con la familia deducida de `ID_LIKE`. La tabla sólo
normaliza alias (`almalinux` → `alma`, `ol` → `oracle`, `amzn` → `amazon`) y
asigna familia cuando `ID_LIKE` no está.

Para sistemas sin `os-release` (CentOS 6, Debian y Slackware antiguos, Alpine,
Gentoo) hay respaldo por `/etc/*-release`, `/etc/lsb-release`,
`/etc/debian_version` y un barrido genérico de `/etc/<distro>-release`.

### Detalles de CloudLinux y cPanel

- **CloudLinux** gana sobre la distro base: en un servidor convertido cuyo
  `os-release` sigue diciendo `centos`, `distro` devuelve `cloudlinux` y la
  versión sale del fichero de CloudLinux, no la obsoleta de `os-release`.
- **cPanel** se comprueba siempre, no sólo en derivados de RHEL: cPanel soporta
  Ubuntu LTS desde la versión 102.

## Compatibilidad

Linux, Python 2.7 y 3.x. El código evita f-strings y dataclasses a propósito,
para poder usarse tal cual en el Python de un CentOS 6 o 7 antiguo. En sistemas
que no son Linux, todos los campos valen `unknown` y `recognized` es `False`.

`os-release` nunca se ejecuta ni se importa como código: se parsea a mano.
Los ficheros se leen en binario y se decodifican como UTF-8, para no depender
de la codificación del locale.
