{% extends "base.html" %} {% import '_ui.html' as ui %} {% block title %}Enrollment packages - PXE Manager{% endblock %} {# Enrollment packages, in sections: the active SFLD PPKG (ppkg.conf), the SFLD packages (the active one is marked and cannot be deleted), the MCL packages in _shared/Applications/BPRT with their duplicate/ignored/used flags, the MCL archive, and which images link to the shared BPRT. #} {% set link_chip = { 'ok': ('Linked', 'ok'), 'copy': ('Own copy', 'err'), 'elsewhere': ('Links elsewhere', 'err'), 'none': ('No BPRT', 'off'), } %} {% block extra_head %} {% endblock %} {% block content %} {% call ui.head('Enrollment packages', 'Tools', 'Shop floor (SFLD) and Standard / Engineer (MCL) provisioning packages.') %} {% endcall %}
{# ---------- Active PPKG ---------- #}

Active SFLD package

{% if active_ppkg and active_ppkg.SOURCE_PPKG %}
{{ active_ppkg.SOURCE_PPKG }} {% if active_ppkg.PPKG_VER %}{{ ui.chip(active_ppkg.PPKG_VER, 'run') }}{% endif %} {% if active_ppkg.PPKG_EXP %}{{ ui.chip('Expires ' ~ active_ppkg.PPKG_EXP, 'neutral') }}{% endif %} startnet.cmd boots with this (from ppkg.conf on the enrollment share).
{% else %}
No active package is set in ppkg.conf. Upload a standard GCCH_Prod_SFLD_v<ver>.ppkg to set one.
{% endif %}
{# ---------- SFLD packages ---------- #}

Shop floor (SFLD) packages

{{ packages | length }}
{% if packages %} {% for p in packages %} {% set is_active = p.filename|lower == effective_ppkg|lower %}
{{ p.filename }} {% if is_active %}{{ ui.chip('Active', 'ok') }}{% endif %} {{ "%.1f"|format(p.size / 1048576) }} MB {{ p.modified | timestamp_fmt }}
Download {% call ui.more(p.filename) %}
{% if is_active %} {% else %} {% endif %} {% endcall %}
{% endfor %} {% else %}
No enrollment packages found. Upload a .ppkg file to get started.
{% endif %}
About SFLD packages

GCCH enrollment .ppkg provisioning packages are copied to C:\Enrollment\ on the target machine after imaging. At OOBE, connect to a network with internet, press Windows key 5 times, then browse to C:\Enrollment\ and select the package. No USB stick needed.

Naming: use with-office.ppkg and without-office.ppkg to match the WinPE enrollment menu options.

{# ---------- MCL packages ---------- #} {% set mcl_users = mcl_links | selectattr('state', 'equalto', 'ok') | map(attribute='image') | list %} {% set any_dup = mcl_packages | selectattr('conflict') | list | length %} {% set any_ign = mcl_packages | rejectattr('prefix') | list | length %} {% set any_used = mcl_packages | selectattr('prefix') | rejectattr('placeholder') | list | length %}

Standard / Engineer (MCL) packages

{{ mcl_packages | length }}

Packages live in _shared/Applications/BPRT, which {{ mcl_users | join(', ') if mcl_users else 'no image' }} link{{ 's' if mcl_users|length == 1 }} to. The bulk-enroll scripts pick the package by its first three name fields (tenant, environment, purpose) and fail enrollment if two match, so an upload replaces the package with the same fields; the old one moves to the archive below and can be restored. Every PC built from those images copies this folder while it images, so upload, archive or restore only when no build is in progress.

A whole new vendor drop (packages, Office zips and scripts from MediaCreator Lite) goes through BPRT Sync instead: it uploads only the changed files from the work PC, checks them and swaps the folder in one step, keeping the site's own scripts.

{% for l in mcl_links if l.state in ('copy', 'elsewhere') %}
{{ l.image }} {% if l.state == 'copy' %}has its own copy of BPRT ({{ l.path }} is a real folder, not a link to _shared/Applications/BPRT; an image import does this), {% else %}links BPRT to {{ l.target or '?' }} instead of _shared/Applications/BPRT, {% endif %}so packages changed here do not reach its PCs. Move that folder aside and link it back to the shared one.
{% endfor %}
Vendor name, unchanged, e.g. GCCH_Prod_MCL-PERS_Exp_XXXXXXXX_v2.19.ppkg
{% if any_dup or any_ign or any_used %}
{% if any_dup %}
{{ ui.chip('Duplicate', 'err') }}Its prefix also matches another package: enrollment for that tenant and purpose fails.
{% endif %} {% if any_ign %}
{{ ui.chip('Ignored', 'warn') }}The name does not match the vendor pattern, so the enroll scripts ignore it.
{% endif %} {% if any_used %}
{{ ui.chip('Used', 'warn') }}No Exp_XXXXXXXX placeholder in the name: it looks already used on a PC, and the enroll script cannot inject a new token into it.
{% endif %}
{% endif %} {% if mcl_packages %} {% for p in mcl_packages %}
{{ p.prefix or '-' }} {% if p.conflict %}{{ ui.chip('Duplicate', 'err') }}{% endif %} {% if not p.prefix %}{{ ui.chip('Ignored', 'warn') }}{% elif not p.placeholder %}{{ ui.chip('Used', 'warn') }}{% endif %} {{ p.filename }} {{ ui.chip(p.version or '?', 'neutral') }} {{ "%.1f"|format(p.size / 1048576) }} MB
{% if p.conflict %}
This prefix also matches {{ p.conflict_with | join(', ') }}; enrollment for it will fail.
{% endif %} {% if not p.prefix %}
Name does not match the vendor pattern; the enroll scripts ignore it.
{% elif not p.placeholder %}
No Exp_XXXXXXXX placeholder in the name: this looks like a package already used on a PC, and the enroll script cannot inject a new token into it.
{% endif %}
File {{ p.filename }}{{ "%.1f"|format(p.size / 1048576) }} MBModified {{ p.modified | timestamp_fmt }}
{% call ui.more(p.filename) %}
{% endcall %}
{% endfor %} {% else %}
No MCL packages found in BPRT.
{% endif %}
{# ---------- MCL archive ---------- #} {% if mcl_archive %}

MCL archive

{{ mcl_archive | length }}
{% for p in mcl_archive %}
{{ p.batch }} {{ p.filename }} {{ ui.chip(p.version or '?', 'neutral') }} {{ "%.1f"|format(p.size / 1048576) }} MB
{% endfor %}
{% endif %} {# ---------- Image links ---------- #} {% if mcl_links %}

Image links to the shared BPRT

{% for l in mcl_links %} {% set c = link_chip.get(l.state, (l.state, 'neutral')) %}
{{ l.image }} {{ ui.chip(c[0], c[1]) }} {% if l.state == 'ok' %}{{ l.path }}{% elif l.state == 'elsewhere' %}{{ l.path }} links to {{ l.target or '?' }}{% elif l.state == 'copy' %}{{ l.path }} is a real folder{% else %}No Deploy/Applications/BPRT{% endif %}
{% endfor %}
{% endif %}
{% endblock %} {% block extra_scripts %} {% endblock %}