//! ISO store: uploads, listing, introspection, boot-entry generation. //! //! An ISO goes through three states: //! 1. **Uploading** — bytes streaming to a `.partial` file under `iso_dir`. //! 2. **Introspecting** — once upload completes, we probe the ISO to detect //! the distro family and extract kernel/initrd if applicable. Metadata //! persisted as a sibling `.meta.json` file. //! 3. **Ready** — listed in the menu, servable over HTTP. //! //! Introspection is best-effort. If we can't identify the distro, the ISO is //! still bootable via a generic `memdisk`/`sanboot` fallback path (not //! recommended but better than nothing). //! //! The `smb` submodule needs exactly one `unsafe` call to `libc::kill` for //! SIGHUP-based Samba reload — the call is documented inline and every //! other file in this crate is `#![forbid(unsafe_code)]`-equivalent via //! the workspace lints. pub mod entry; pub mod introspect; pub mod nfs_share; pub mod pxe_logo; pub mod sftp_share; pub mod smb; pub mod smb_share; pub mod store; pub mod unattended; pub mod windows; pub use entry::{BootEntry, BootKind, KernelArgs}; pub use introspect::{DistroFamily, IntrospectionReport}; // v0.4.65: kernel-mount NFS is gone. SMB shares via Samba's userspace // `smbclient` CLI replaced it — works in any container (no // CAP_SYS_ADMIN, no host kernel modules), matching how Bootimus and // every other PXE/imaging tool that supports network storage handles // it. pub use smb::{extract_windows_iso, SmbManager, SmbState}; pub use smb_share::{SmbAddRequest, SmbShare, SmbShareError, SmbShareManager, SmbStream}; // v0.4.67: NFS is back — this time as an in-process userspace NFSv3 // client (the `nfs3_client` crate) rather than a kernel mount. Same // "works in any container" property as SMB, plus support for HTTP // Range requests because NFSv3 READ3 takes an explicit offset. pub use nfs_share::{NfsAddRequest, NfsShare, NfsShareError, NfsShareManager, NfsStream}; // v0.5.5: SFTP-over-SSH remote shares via the pure-Rust `russh` + // `russh-sftp` crates (ring backend — no OpenSSL, no new C deps). Like // NFS, supports HTTP Range requests because SFTP opens a seekable file // handle. See crates/iso-store/src/sftp_share.rs. pub use sftp_share::{ SftpAddRequest, SftpAuthKind, SftpShare, SftpShareError, SftpShareManager, SftpStream, }; pub use store::{ generate_boot_entries_for, slugify_str, IsoCategory, IsoMeta, IsoSource, IsoStore, UploadHandle, }; pub use unattended::{ classify as classify_unattended, render_template, UnattendedKind, UnattendedMeta, UnattendedStore, MAX_UNATTENDED_BYTES, }; pub use windows::{WimPatcher, WinPatchState};