KB: Part 4 step 5 (Tools > Share accounts), the Upload-Image password prompt, the new site-vars rows and example, share sign-in without the shipped password, and that a re-run keeps the webapp's share passwords. site-vars examples and SITE-CUSTOMIZATION.md list the new keys. Upload-Image.ps1 lost its CRLF line endings in fa79f76; restored.
1090 lines
63 KiB
HTML
1090 lines
63 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>How To Deploy a PXE Imaging Server at a New Site - GE Aerospace Knowledge Base</title>
|
|
<style>
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
:root {
|
|
--ge-blue-dark: #003B5C;
|
|
--ge-blue-primary: #0075C9;
|
|
--ge-blue-light: #4A9BD9;
|
|
--ge-gray-dark: #2D3E50;
|
|
--ge-gray-medium: #6C757D;
|
|
--ge-gray-light: #E9ECEF;
|
|
--ge-white: #FFFFFF;
|
|
--success-green: #28A745;
|
|
--warning-yellow: #FFC107;
|
|
--danger-red: #DC3545;
|
|
--info-blue: #17A2B8;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
line-height: 1.6;
|
|
color: var(--ge-gray-dark);
|
|
background: var(--ge-gray-light);
|
|
padding: 20px;
|
|
}
|
|
|
|
.container {
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
background: var(--ge-white);
|
|
border-radius: 8px;
|
|
box-shadow: 0 4px 20px rgba(0, 59, 92, 0.1);
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* Header Styles */
|
|
.header {
|
|
background: linear-gradient(135deg, var(--ge-blue-dark) 0%, var(--ge-blue-primary) 100%);
|
|
color: var(--ge-white);
|
|
padding: 40px 40px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.header-content {
|
|
flex: 1;
|
|
}
|
|
|
|
.header-logo {
|
|
margin-left: 30px;
|
|
}
|
|
|
|
.header-logo svg {
|
|
height: 40px;
|
|
width: auto;
|
|
}
|
|
|
|
.kb-badge {
|
|
background: rgba(255, 255, 255, 0.2);
|
|
color: var(--ge-white);
|
|
padding: 4px 12px;
|
|
border-radius: 4px;
|
|
font-size: 0.85em;
|
|
font-weight: 600;
|
|
display: inline-block;
|
|
margin-bottom: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
|
|
.header h1 {
|
|
font-size: 2em;
|
|
font-weight: 600;
|
|
margin-bottom: 8px;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.header-subtitle {
|
|
font-size: 1.05em;
|
|
opacity: 0.95;
|
|
font-weight: 400;
|
|
}
|
|
|
|
/* Content Area */
|
|
.content {
|
|
padding: 40px;
|
|
}
|
|
|
|
/* Overview Section */
|
|
.overview {
|
|
background: linear-gradient(to right, #E3F2FD 0%, #F5F9FC 100%);
|
|
border-left: 5px solid var(--ge-blue-primary);
|
|
padding: 25px;
|
|
margin-bottom: 35px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.overview h2 {
|
|
color: var(--ge-blue-dark);
|
|
font-size: 1.5em;
|
|
margin-bottom: 15px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.overview p {
|
|
margin-bottom: 15px;
|
|
line-height: 1.7;
|
|
}
|
|
|
|
.overview h4 {
|
|
color: var(--ge-blue-dark);
|
|
font-size: 1.1em;
|
|
margin: 20px 0 10px 0;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.overview ul {
|
|
list-style-position: inside;
|
|
margin-left: 15px;
|
|
}
|
|
|
|
.overview li {
|
|
margin-bottom: 8px;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
/* Typography */
|
|
h2 {
|
|
color: var(--ge-blue-dark);
|
|
font-size: 1.8em;
|
|
font-weight: 600;
|
|
margin: 50px 0 25px 0;
|
|
padding-bottom: 12px;
|
|
border-bottom: 3px solid var(--ge-blue-primary);
|
|
}
|
|
|
|
h3 {
|
|
color: var(--ge-blue-primary);
|
|
font-size: 1.4em;
|
|
font-weight: 600;
|
|
margin: 35px 0 15px 0;
|
|
padding-left: 15px;
|
|
border-left: 4px solid var(--ge-blue-primary);
|
|
}
|
|
|
|
h4 {
|
|
color: var(--ge-gray-dark);
|
|
font-size: 1.15em;
|
|
font-weight: 600;
|
|
margin: 25px 0 12px 0;
|
|
}
|
|
|
|
p {
|
|
margin-bottom: 15px;
|
|
line-height: 1.7;
|
|
}
|
|
|
|
/* Lists */
|
|
ol, ul {
|
|
margin-left: 30px;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
li {
|
|
margin-bottom: 10px;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
ul ul, ol ol {
|
|
margin-top: 10px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
/* Step Boxes */
|
|
.step {
|
|
background: #F8F9FA;
|
|
padding: 25px;
|
|
margin: 25px 0;
|
|
border-radius: 6px;
|
|
border-left: 5px solid var(--ge-blue-primary);
|
|
}
|
|
|
|
.step-number {
|
|
background: var(--ge-blue-primary);
|
|
color: var(--ge-white);
|
|
padding: 6px 16px;
|
|
border-radius: 20px;
|
|
font-weight: 600;
|
|
display: inline-block;
|
|
margin-bottom: 12px;
|
|
font-size: 0.95em;
|
|
}
|
|
|
|
/* Code Blocks */
|
|
.code-block {
|
|
position: relative;
|
|
background: #1E1E1E;
|
|
color: #D4D4D4;
|
|
padding: 20px;
|
|
border-radius: 6px;
|
|
margin: 20px 0;
|
|
overflow-x: auto;
|
|
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
|
font-size: 0.9em;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.code-block pre {
|
|
margin: 0;
|
|
white-space: pre-wrap;
|
|
word-wrap: break-word;
|
|
}
|
|
|
|
.copy-button {
|
|
position: absolute;
|
|
top: 12px;
|
|
right: 12px;
|
|
background: var(--ge-blue-primary);
|
|
color: var(--ge-white);
|
|
border: none;
|
|
padding: 8px 16px;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
font-size: 0.85em;
|
|
font-weight: 600;
|
|
transition: all 0.3s ease;
|
|
z-index: 10;
|
|
}
|
|
|
|
.copy-button:hover {
|
|
background: var(--ge-blue-dark);
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 4px 12px rgba(0, 117, 201, 0.3);
|
|
}
|
|
|
|
.copy-button:active {
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.copy-button.copied {
|
|
background: var(--success-green);
|
|
}
|
|
|
|
/* Alert Boxes */
|
|
.alert {
|
|
padding: 18px 22px;
|
|
margin: 25px 0;
|
|
border-radius: 6px;
|
|
border-left: 5px solid;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.alert strong {
|
|
display: block;
|
|
margin-bottom: 8px;
|
|
font-size: 1.05em;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.alert-info {
|
|
background: #E3F2FD;
|
|
border-color: var(--info-blue);
|
|
color: #014361;
|
|
}
|
|
|
|
.alert-warning {
|
|
background: #FFF8E1;
|
|
border-color: var(--warning-yellow);
|
|
color: #5D4037;
|
|
}
|
|
|
|
.alert-danger {
|
|
background: #FFEBEE;
|
|
border-color: var(--danger-red);
|
|
color: #B71C1C;
|
|
}
|
|
|
|
.alert-success {
|
|
background: #E8F5E9;
|
|
border-color: var(--success-green);
|
|
color: #1B5E20;
|
|
}
|
|
|
|
.alert ul {
|
|
margin-top: 12px;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
/* Navigation */
|
|
.nav {
|
|
position: sticky;
|
|
top: 20px;
|
|
background: var(--ge-white);
|
|
padding: 25px;
|
|
border-radius: 6px;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
margin-bottom: 30px;
|
|
border: 1px solid var(--ge-gray-light);
|
|
}
|
|
|
|
.nav h3 {
|
|
margin: 0 0 18px 0;
|
|
padding: 0 0 12px 0;
|
|
border: none;
|
|
border-bottom: 2px solid var(--ge-gray-light);
|
|
font-size: 1.1em;
|
|
color: var(--ge-blue-dark);
|
|
}
|
|
|
|
.nav ul {
|
|
list-style: none;
|
|
margin: 0;
|
|
}
|
|
|
|
.nav li {
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.nav a {
|
|
color: var(--ge-blue-primary);
|
|
text-decoration: none;
|
|
transition: all 0.2s ease;
|
|
display: block;
|
|
padding: 6px 12px;
|
|
border-radius: 4px;
|
|
font-size: 0.95em;
|
|
}
|
|
|
|
.nav a:hover {
|
|
background: var(--ge-gray-light);
|
|
color: var(--ge-blue-dark);
|
|
padding-left: 18px;
|
|
}
|
|
|
|
/* Troubleshooting Section */
|
|
.troubleshooting {
|
|
background: #FFF8E1;
|
|
padding: 25px;
|
|
border-radius: 6px;
|
|
margin: 25px 0;
|
|
border-left: 5px solid var(--warning-yellow);
|
|
}
|
|
|
|
.troubleshooting h4 {
|
|
color: #E65100;
|
|
margin-top: 0;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Tables */
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 25px 0;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
border-radius: 6px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
table th {
|
|
background: var(--ge-blue-dark);
|
|
color: var(--ge-white);
|
|
padding: 16px;
|
|
text-align: left;
|
|
font-weight: 600;
|
|
font-size: 0.95em;
|
|
}
|
|
|
|
table td {
|
|
padding: 16px;
|
|
border-bottom: 1px solid var(--ge-gray-light);
|
|
}
|
|
|
|
table tr:last-child td {
|
|
border-bottom: none;
|
|
}
|
|
|
|
table tr:hover {
|
|
background: #F8F9FA;
|
|
}
|
|
|
|
/* Inline Code */
|
|
.command-inline {
|
|
background: var(--ge-gray-light);
|
|
padding: 3px 8px;
|
|
border-radius: 4px;
|
|
font-family: 'Consolas', 'Monaco', monospace;
|
|
font-size: 0.88em;
|
|
color: var(--ge-blue-dark);
|
|
font-weight: 500;
|
|
}
|
|
|
|
/* Highlight */
|
|
.highlight {
|
|
background: #FFF9C4;
|
|
padding: 2px 6px;
|
|
border-radius: 3px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Checkbox List */
|
|
.checkbox-list {
|
|
list-style: none;
|
|
margin-left: 0;
|
|
}
|
|
|
|
.checkbox-list li {
|
|
padding-left: 30px;
|
|
position: relative;
|
|
}
|
|
|
|
.checkbox-list li::before {
|
|
content: "\2610";
|
|
position: absolute;
|
|
left: 0;
|
|
color: var(--ge-blue-primary);
|
|
font-size: 1.3em;
|
|
font-weight: bold;
|
|
}
|
|
|
|
/* Section Divider */
|
|
.section-divider {
|
|
height: 3px;
|
|
background: linear-gradient(to right, var(--ge-blue-primary), transparent);
|
|
margin: 50px 0;
|
|
border: none;
|
|
}
|
|
|
|
/* Footer */
|
|
.footer {
|
|
background: var(--ge-gray-light);
|
|
padding: 30px 40px;
|
|
text-align: center;
|
|
color: var(--ge-gray-medium);
|
|
border-top: 3px solid var(--ge-blue-primary);
|
|
}
|
|
|
|
.footer-content {
|
|
max-width: 800px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.footer p {
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.footer strong {
|
|
color: var(--ge-blue-dark);
|
|
}
|
|
|
|
/* Print Styles */
|
|
@media print {
|
|
body {
|
|
background: white;
|
|
padding: 0;
|
|
}
|
|
.container {
|
|
box-shadow: none;
|
|
}
|
|
.copy-button {
|
|
display: none;
|
|
}
|
|
.nav {
|
|
display: none;
|
|
}
|
|
.header {
|
|
background: var(--ge-blue-dark);
|
|
-webkit-print-color-adjust: exact;
|
|
print-color-adjust: exact;
|
|
}
|
|
}
|
|
|
|
/* Responsive Design */
|
|
@media (max-width: 768px) {
|
|
body {
|
|
padding: 10px;
|
|
}
|
|
|
|
.header {
|
|
flex-direction: column;
|
|
text-align: center;
|
|
padding: 25px 20px;
|
|
}
|
|
|
|
.header-logo {
|
|
margin-left: 0;
|
|
margin-top: 20px;
|
|
}
|
|
|
|
.content {
|
|
padding: 25px 20px;
|
|
}
|
|
|
|
.header h1 {
|
|
font-size: 1.5em;
|
|
}
|
|
|
|
h2 {
|
|
font-size: 1.5em;
|
|
}
|
|
|
|
h3 {
|
|
font-size: 1.2em;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<!-- HEADER SECTION -->
|
|
<div class="header">
|
|
<div class="header-content">
|
|
<span class="kb-badge">Knowledge Base Article</span>
|
|
<h1>How To Deploy a PXE Imaging Server at a New Site</h1>
|
|
<p class="header-subtitle">From an empty server to imaging PCs: build the installer USB on Windows, install the server, load the images</p>
|
|
</div>
|
|
<div class="header-logo">
|
|
<!-- GE Aerospace Logo -->
|
|
<svg width="138" height="32" viewBox="0 0 138 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<mask id="mask0_1587_16237" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="138" height="32">
|
|
<path d="M138 0H0V32H138V0Z" fill="white"/>
|
|
</mask>
|
|
<g mask="url(#mask0_1587_16237)">
|
|
<path d="M52.7203 22.4828V9.51721H59.3399V10.944H54.3731V15.2042H59.0216V16.5948H54.3731V21.06H59.3399V22.4868H52.7203V22.4828ZM66.7717 17.1294L68.5021 10.9962L70.2325 17.1294H66.7717ZM65.2657 22.4828L66.3921 18.4999H70.6243L71.7507 22.4828H73.4811L69.5673 9.51721H67.4981L63.5843 22.4828H65.2576H65.2657ZM78.2234 14.4607C79.4069 14.4607 79.9742 15.0917 79.9742 16.4421V17.2017H76.4766V16.4421C76.4766 15.0877 77.0398 14.4607 78.2275 14.4607M74.8605 16.5546V19.3358C74.8605 21.5021 76.044 22.6677 78.1907 22.6677C80.3374 22.6677 81.4638 21.7232 81.5373 19.7217H79.9742C79.9171 20.9234 79.3743 21.4258 78.1867 21.4258C76.999 21.4258 76.4766 20.7787 76.4766 19.4243V18.4999H81.574V16.5185C81.574 14.3682 80.4068 13.2228 78.2275 13.2228C76.0481 13.2228 74.8605 14.3883 74.8605 16.5546ZM87.8957 14.9269V13.3353H87.7243C86.5775 13.3353 85.7858 13.8337 85.3368 14.7822V13.4117H83.8146V22.4868H85.4307V16.9847C85.4307 15.783 86.0143 14.8907 87.5162 14.8907C87.6672 14.8907 87.8182 14.9068 87.8916 14.9269M92.3319 21.4097C91.1484 21.4097 90.6015 20.7787 90.6015 19.4283V16.4622C90.6015 15.1118 91.1484 14.4808 92.3319 14.4808C93.5154 14.4808 94.0623 15.1118 94.0623 16.4622V19.4283C94.0623 20.7787 93.5154 21.4097 92.3319 21.4097ZM92.3319 22.6677C94.5153 22.6677 95.6825 21.5021 95.6825 19.3358V16.5546C95.6825 14.3883 94.5153 13.2228 92.3319 13.2228C90.1485 13.2228 88.9854 14.3883 88.9854 16.5546V19.3358C88.9854 21.5021 90.1526 22.6677 92.3319 22.6677ZM99.1964 15.5378C99.1964 14.8144 99.7025 14.4446 100.588 14.4446C101.641 14.4446 102.074 14.943 102.074 16.0362H103.616C103.616 14.111 102.714 13.2188 100.588 13.2188C98.6863 13.2188 97.6333 14.1432 97.6333 15.7589C97.6333 17.258 98.6128 17.7965 99.8535 18.3873L100.813 18.8495C101.792 19.3117 102.131 19.5328 102.131 20.2763C102.131 21.0721 101.568 21.4418 100.588 21.4418C99.4576 21.4418 98.9719 20.9234 98.9719 19.7739H97.4293C97.4293 21.7553 98.4087 22.6637 100.588 22.6637C102.563 22.6637 103.69 21.6991 103.69 20.0512C103.69 18.5521 102.71 18.0136 101.47 17.4228L100.511 16.9606C99.5311 16.4984 99.1923 16.2773 99.1923 15.5338M110.836 19.4243C110.836 20.7224 110.326 21.3132 109.199 21.3132C107.959 21.3132 107.375 20.4974 107.375 19.1469V16.6471C107.375 15.2967 107.959 14.4808 109.199 14.4808C110.326 14.4808 110.836 15.0756 110.836 16.3698V19.4283V19.4243ZM112.452 19.3881V16.4059C112.452 14.3321 111.379 13.2188 109.554 13.2188C108.501 13.2188 107.73 13.6609 107.277 14.5129V13.4037H105.755V25.8146H107.371V21.4418C107.82 22.1814 108.575 22.5712 109.554 22.5712C111.379 22.5712 112.452 21.4579 112.452 19.3841M117.341 21.3293C116.362 21.3293 115.876 20.8269 115.876 19.8302V19.5529C115.876 18.4959 116.533 18.0899 118.321 18.0899H119.17V19.4243C119.17 20.6662 118.529 21.3333 117.345 21.3333M116.99 22.5752C118.064 22.5752 118.851 22.1492 119.284 21.3333V22.4828H120.79V16.1286C120.79 14.1472 119.757 13.2188 117.59 13.2188C115.541 13.2188 114.525 14.107 114.488 15.9437H116.052C116.072 14.9631 116.598 14.4446 117.594 14.4446C118.668 14.4446 119.174 14.9832 119.174 16.1326V16.836H118.235C115.525 16.836 114.268 17.7242 114.268 19.6534V19.9307C114.268 21.5423 115.341 22.5793 116.994 22.5793M126.34 22.6717C128.54 22.6717 129.536 21.6549 129.536 19.376H127.977C127.977 20.839 127.487 21.4137 126.34 21.4137C125.193 21.4137 124.626 20.7827 124.626 19.4323V16.4662C124.626 15.1158 125.173 14.4848 126.34 14.4848C127.507 14.4848 127.956 14.9832 127.977 16.4099H129.536C129.515 14.1874 128.556 13.2228 126.34 13.2228C124.124 13.2228 123.01 14.3883 123.01 16.5546V19.3358C123.01 21.5021 124.177 22.6677 126.34 22.6677M134.653 14.4607C135.837 14.4607 136.404 15.0917 136.404 16.4421V17.2017H132.907V16.4421C132.907 15.0877 133.47 14.4607 134.658 14.4607M131.291 16.5546V19.3358C131.291 21.5021 132.474 22.6677 134.621 22.6677C136.767 22.6677 137.894 21.7232 137.967 19.7217H136.404C136.347 20.9234 135.804 21.4258 134.617 21.4258C133.429 21.4258 132.907 20.7787 132.907 19.4243V18.4999H138.004V16.5185C138.004 14.3682 136.837 13.2228 134.658 13.2228C132.478 13.2228 131.291 14.3883 131.291 16.5546ZM46.3088 22.6677C47.6433 22.6677 48.8473 22.3904 49.9573 21.8156V15.2042H45.9129V16.5948H48.3208V20.8912C47.7576 21.1324 47.023 21.2811 46.3292 21.2811C44.2968 21.2811 43.5255 20.3165 43.5255 17.8166V13.3514C43.5255 11.7036 44.4682 10.7229 46.0476 10.7229C47.627 10.7229 48.3412 11.4464 48.3779 13.0018H50.092C50.0349 10.5019 48.7575 9.33635 46.0476 9.33635C43.3377 9.33635 41.8726 10.7792 41.8726 13.4117V17.7443C41.8726 21.1726 43.2275 22.6717 46.3129 22.6717M19.8915 11.8362C19.8915 10.0196 21.1404 8.25119 21.826 8.5888C22.6014 8.97061 21.2424 10.6868 19.8915 11.8362ZM11.3823 12.4994C11.3823 11.0364 12.8475 8.25521 13.7453 8.54861C14.8023 8.89425 12.8679 11.6996 11.3823 12.4994ZM9.89679 22.9611C9.2234 22.9932 8.77447 22.5672 8.77447 21.8558C8.77447 19.9508 11.4558 18.1301 13.4841 17.1535C13.125 19.8141 12.2108 22.8525 9.90087 22.957M22.279 16.7516C20.7486 16.7516 19.5773 17.8608 19.5773 19.1912C19.5773 20.3004 20.2507 21.1846 21.1526 21.1846C21.4668 21.1846 21.7811 21.0078 21.7811 20.6099C21.7811 20.0352 21.0057 19.8945 21.0669 19.0304C21.1036 18.4637 21.6505 18.0819 22.1892 18.0819C23.2707 18.0819 23.7768 19.1148 23.7768 20.1758C23.7319 21.8156 22.5075 22.957 21.0669 22.957C19.1773 22.957 17.9611 21.1846 17.9611 19.2756C17.9611 16.4381 19.8507 15.3328 20.8424 15.0676C20.8547 15.0676 23.4299 15.5217 23.3483 14.4004C23.3156 13.9101 22.5688 13.7212 22.03 13.6971C21.4301 13.6729 20.8302 13.886 20.8302 13.886C20.5159 13.7292 20.2996 13.4238 20.165 13.0701C22.0096 11.6956 23.3156 10.3652 23.3156 8.85808C23.3156 8.0623 22.7769 7.35092 21.7403 7.35092C19.8956 7.35092 18.4998 9.65386 18.4998 11.7398C18.4998 12.0934 18.4998 12.4511 18.5896 12.7606C17.4183 13.6046 16.5491 14.1271 14.9737 15.0555C14.9737 14.8626 15.0145 14.3602 15.1492 13.7131C15.6879 13.1384 16.4307 12.2743 16.4307 11.6112C16.4307 11.3017 16.2511 11.0364 15.892 11.0364C14.9941 11.0364 14.3167 12.3667 14.1371 13.2952C13.7331 13.7815 12.9209 14.4044 12.2475 14.4044C11.7088 14.4044 11.5292 13.9141 11.4803 13.7413C13.1903 13.1625 15.3084 10.8596 15.3084 8.77769C15.3084 8.33559 15.1288 7.35895 13.778 7.35895C11.7537 7.35895 10.0437 10.3291 10.0437 12.632C9.32134 12.632 9.05607 11.8764 9.05607 11.3017C9.05607 10.727 9.28053 10.1482 9.28053 9.97136C9.28053 9.79452 9.19075 9.57347 8.92139 9.57347C8.248 9.57347 7.83989 10.4617 7.83989 11.4785C7.88478 12.8973 8.83161 13.7855 10.0886 13.8739C10.2682 14.7179 11.0354 15.5137 11.9782 15.5137C12.5659 15.5137 13.2841 15.3369 13.778 14.8947C13.7331 15.2042 13.6882 15.4695 13.6433 15.7388C11.6639 16.7596 10.2233 17.467 8.91731 18.6204C7.88478 19.5529 7.29709 20.7908 7.29709 21.7674C7.29709 23.0977 8.15005 24.3356 9.90903 24.3356C11.9782 24.3356 13.5535 22.6958 14.3208 20.4371C14.6799 19.372 14.8268 17.8247 14.9166 16.4059C16.9857 15.2565 17.9693 14.5853 19.0467 13.8337C19.1814 14.0548 19.3202 14.2316 19.4956 14.3642C18.5529 14.8505 16.3001 16.2251 16.3001 19.4604C16.3001 21.7674 17.8754 24.3356 20.9812 24.3356C23.5482 24.3356 25.3031 22.2537 25.3031 20.2602C25.3031 18.4436 24.2665 16.7596 22.2872 16.7596M30.025 20.5657C30.025 20.5657 29.9924 20.6019 29.9434 20.5818C29.9067 20.5697 29.8944 20.5496 29.8944 20.5255C29.8944 20.4974 30.4372 18.9219 30.4331 17.1133C30.429 15.164 29.621 13.9663 28.5884 13.9663C27.96 13.9663 27.5069 14.4084 27.5069 15.0756C27.5069 16.2733 28.9925 16.3617 28.9925 18.9781C28.9925 20.0432 28.768 21.06 28.4089 22.1693C26.7438 27.7076 21.4301 30.2798 16.2593 30.2798C13.8718 30.2798 12.1781 29.7975 11.6721 29.5765C11.6517 29.5684 11.6354 29.5283 11.6517 29.4881C11.6639 29.4559 11.6966 29.4358 11.717 29.4439C11.921 29.5242 13.378 29.9744 15.1778 29.9744C17.1571 29.9744 18.3284 29.1786 18.3284 28.202C18.3284 27.583 17.8346 27.0967 17.202 27.0967C15.9859 27.0967 15.8961 28.6039 13.2882 28.6039C12.1618 28.6039 11.1742 28.3828 10.0029 28.0291C4.41988 26.3451 1.76306 21.1605 1.76714 16.0161C1.76714 13.5122 2.48134 11.5187 2.49358 11.4986C2.50174 11.4866 2.53439 11.4705 2.5752 11.4866C2.61602 11.4986 2.62418 11.5348 2.62418 11.5428C2.55888 11.7518 2.08547 13.1786 2.08547 14.951C2.08547 16.9003 2.89353 18.0538 3.93015 18.0538C4.51783 18.0538 5.01165 17.6117 5.01165 16.9887C5.01165 15.791 3.52611 15.6584 3.52611 13.0862C3.52611 11.9769 3.75058 11.0043 4.10972 9.85079C5.80747 4.34464 11.0722 1.7684 16.2471 1.72821C18.6509 1.70811 20.7567 2.41949 20.8383 2.47978C20.8506 2.49184 20.8669 2.52399 20.8506 2.56016C20.8343 2.60035 20.8057 2.60839 20.7935 2.60437C20.769 2.60437 19.3977 2.03768 17.3286 2.03768C15.3941 2.03768 14.1779 2.83346 14.1779 3.85431C14.1779 4.42904 14.6268 4.91535 15.3043 4.91535C16.5205 4.91535 16.6103 3.4524 19.2181 3.4524C20.3445 3.4524 21.3322 3.67345 22.5035 4.02713C28.1314 5.71113 30.6902 10.94 30.7392 15.996C30.7637 18.5843 30.025 20.5456 30.0169 20.5576M16.2471 0.75157C7.69705 0.75157 0.763175 7.58001 0.763175 16C0.763175 24.42 7.69705 31.2444 16.2471 31.2444C24.7971 31.2444 31.7269 24.42 31.7269 16C31.7269 7.58001 24.7971 0.75157 16.2471 0.75157ZM16.2471 32C7.28893 32 0 24.8661 0 16C0 7.13389 7.28893 0 16.2471 0C25.2052 0 32.4941 7.18212 32.4941 16C32.4941 24.8179 25.2011 32 16.2471 32Z" fill="white"/>
|
|
</g>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- MAIN CONTENT -->
|
|
<div class="content">
|
|
|
|
<!-- NAVIGATION -->
|
|
<div class="nav">
|
|
<h3>Quick Navigation</h3>
|
|
<ul>
|
|
<li><a href="#overview">Overview</a></li>
|
|
<li><a href="#usb">Part 1 - Build the Installer USB</a></li>
|
|
<li><a href="#install">Part 2 - Install the Server</a></li>
|
|
<li><a href="#images">Part 3 - Load the Images</a></li>
|
|
<li><a href="#enroll">Part 4 - Site Content</a></li>
|
|
<li><a href="#test">Part 5 - Image a Test PC</a></li>
|
|
<li><a href="#sitevars">Site Settings</a></li>
|
|
<li><a href="#apps">Adding Shop Floor Apps</a></li>
|
|
<li><a href="#options">Script Options</a></li>
|
|
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- OVERVIEW SECTION -->
|
|
<div id="overview" class="overview">
|
|
<h2>Overview</h2>
|
|
<p>The PXE imaging server images Shop Floor, Standard and Engineer PCs over an isolated imaging network, and wipes PCs with Blancco. A new site builds one from scratch: a Windows PC builds the installer USB, the server installs itself from it, and the images are loaded from Media Creator Lite. No Linux knowledge and no existing PXE server are needed.</p>
|
|
<h4>Prerequisites:</h4>
|
|
<ul class="checkbox-list">
|
|
<li>Server: UEFI firmware, a 500 GB+ disk, at least one wired NIC (two if it also joins the GE network)</li>
|
|
<li>An unmanaged switch for the isolated imaging network (never connected to the GE network)</li>
|
|
<li>A Windows 10/11 PC with local administrator rights and 25 GB free disk</li>
|
|
<li>A USB stick of 32 GB (everything on it is erased)</li>
|
|
<li>The <span class="command-inline">pxe-usb</span> build folder from the DT team (about 10 GB)</li>
|
|
<li>A PC with Media Creator Lite, for the images (Part 3)</li>
|
|
</ul>
|
|
<h4>Objectives:</h4>
|
|
<ul>
|
|
<li>Build and verify the installer USB on Windows</li>
|
|
<li>Install the PXE server; the imaging port is picked automatically</li>
|
|
<li>Load the Shop Floor, Standard and Engineer images and image a test PC</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="alert alert-info">
|
|
<strong>Build folder:</strong>
|
|
The <span class="command-inline">pxe-usb</span> folder holds everything the server needs offline: the Ubuntu installer, packages, the setup, the web interface, boot files and Clonezilla (Blancco is loaded in Part 4). Get the current copy from: <span class="highlight"><build folder location></span>. Always use a fresh copy; never edit files in it.
|
|
</div>
|
|
|
|
<!-- PART 1 -->
|
|
<h2 id="usb">Part 1 - Build the Installer USB</h2>
|
|
<div class="step">
|
|
<span class="step-number">Step 1</span>
|
|
<h3>Copy the build folder to the Windows PC</h3>
|
|
<p>Copy the whole <span class="command-inline">pxe-usb</span> folder to a local disk, for example <span class="command-inline">C:\pxe-usb</span>. Add the site's <span class="command-inline">site-vars.yml</span> now (at least the site name and the passwords): see <a href="#sitevars">Site Settings</a>.</p>
|
|
<div class="alert alert-info">
|
|
<strong>Why local:</strong>
|
|
The build runs as administrator, and an administrator window cannot see network drives mapped in your normal session. A local copy is also faster and does not fail half-way if the network drops.
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 2</span>
|
|
<h3>Run the USB builder</h3>
|
|
<ol>
|
|
<li>Plug in the USB stick.</li>
|
|
<li>Start menu, type <strong>PowerShell</strong>, right-click <strong>Windows PowerShell</strong>, <strong>Run as administrator</strong>.</li>
|
|
<li>Run:</li>
|
|
</ol>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre>cd C:\pxe-usb
|
|
powershell -ExecutionPolicy Bypass -File .\scripts\Build-PxeUsb.ps1 -Interactive</pre>
|
|
</div>
|
|
<ol start="4">
|
|
<li>It lists the USB disks. Type the number of your stick and press Enter.</li>
|
|
<li>It checks the build folder, shows the disk again and asks you to <strong>type the disk number</strong> once more to confirm.</li>
|
|
</ol>
|
|
<p>It then erases the stick, creates one FAT32 partition labelled CIDATA, copies the installer, the payload and your <span class="command-inline">site-vars.yml</span> (if there is one), and reads every file back to verify it. It ends with <span class="highlight">USB build complete and verified</span> and waits for Enter. Expect 10-20 minutes.</p>
|
|
<div class="alert alert-danger">
|
|
<strong>Erases the disk:</strong>
|
|
Everything on the selected disk is destroyed. The script refuses disks that are not on the USB bus and the Windows system disk, but check the model and size it shows before typing the number.
|
|
</div>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 3</span>
|
|
<h3>Eject the stick</h3>
|
|
<p>Use <strong>Safely Remove Hardware</strong> before unplugging it.</p>
|
|
</div>
|
|
|
|
|
|
<hr class="section-divider">
|
|
|
|
<!-- PART 2 -->
|
|
<h2 id="install">Part 2 - Install the Server</h2>
|
|
<div class="alert alert-warning">
|
|
<strong>Cabling rule:</strong>
|
|
During the install plug in <b>ONLY the imaging switch</b>. Leave the GE network cable unplugged. The first boot picks the imaging port by its link, and refuses if it cannot tell which port that is.
|
|
</div>
|
|
<div class="step">
|
|
<span class="step-number">Step 1</span>
|
|
<h3>Boot the USB stick</h3>
|
|
<ol>
|
|
<li>Connect one server port to the imaging switch. Nothing else.</li>
|
|
<li>Insert the stick, power on and open the one-time boot menu (<strong>F12</strong> on Dell).</li>
|
|
<li>Choose the USB stick under <strong>UEFI</strong> boot.</li>
|
|
</ol>
|
|
<p>Ubuntu installs itself with no questions and reboots (about 10 minutes).</p>
|
|
</div>
|
|
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 2</span>
|
|
<h3>Let the first boot finish</h3>
|
|
<p>The first boot picks the imaging port, checks it is isolated (no GE switch, no 802.1X, no other DHCP server), gives it <span class="command-inline">172.16.9.1</span> and sets up every service. This takes 15-30 minutes. It is done when the console shows a normal login prompt without a red banner.</p>
|
|
<div class="alert alert-info">
|
|
<strong>Leave the stick in</strong>
|
|
until the first boot has finished: setup reads its files from it. Remove it afterwards.
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 3</span>
|
|
<h3>Connect the GE network (optional)</h3>
|
|
<p>Plug the GE cable into <strong>any other</strong> wired port. It gets an address by DHCP; SSH and the web interface then work from GE too. The server never serves DHCP or PXE on that port.</p>
|
|
</div>
|
|
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 4</span>
|
|
<h3>Open the web interface</h3>
|
|
<p>From a PC on the imaging switch: <span class="command-inline">http://172.16.9.1:9009</span> (from GE: <span class="command-inline">http://<server GE address>:9009</span>). The <strong>Overview</strong> page should show every service green.</p>
|
|
</div>
|
|
|
|
|
|
<hr class="section-divider">
|
|
|
|
<!-- PART 3 -->
|
|
<h2 id="images">Part 3 - Load the Images</h2>
|
|
<p>The images come from Media Creator Lite (MCL). Each run of MCL caches one operating system; upload and import it, then repeat for the next image. <strong>Shop Floor</strong> uses Windows LTSC; <strong>Standard</strong> and <strong>Engineer</strong> use Windows Pro.</p>
|
|
<div class="step">
|
|
<span class="step-number">Step 1</span>
|
|
<h3>Build the MCL cache</h3>
|
|
<p>On the MCL PC, run Media Creator Lite for the image you are loading and let it finish completely (it writes a <span class="command-inline">-Production.tag</span> file when done).</p>
|
|
</div>
|
|
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 2</span>
|
|
<h3>Upload it to the server</h3>
|
|
<ol>
|
|
<li>Connect the MCL PC to the <strong>imaging switch</strong> (it gets a 172.16.9.x address).</li>
|
|
<li>Copy <span class="command-inline">scripts\Upload-Image.ps1</span> from the build folder to it and run:</li>
|
|
</ol>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre>powershell -ExecutionPolicy Bypass -File .\Upload-Image.ps1</pre>
|
|
</div>
|
|
<p>It asks for the <span class="command-inline">pxe-upload</span> password (the site's, see <a href="#shares">Share passwords</a>; add <span class="command-inline">-Pass <password></span> to give it on the command line). It checks the MCL cache first (finished, consistent, every file matching MCL's own hashes), copies it to the server and has the server hash every file; files that arrived wrong are sent again. It ends with <span class="highlight">Upload complete: all N file(s) verified on the server</span>. Add <span class="command-inline">-IncludeDrivers</span> to also send the hardware drivers MCL downloaded.</p>
|
|
</div>
|
|
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 3</span>
|
|
<h3>Import it</h3>
|
|
<ol>
|
|
<li>In the web interface open <strong>Images > All images and import</strong>.</li>
|
|
<li>Under <strong>From the network upload share</strong> the upload shows as verified, with the operating system MCL cached.</li>
|
|
<li>Choose the image it is for (only the matching images are offered) and import.</li>
|
|
</ol>
|
|
<p>Repeat Steps 1-3 for each image type.</p>
|
|
</div>
|
|
|
|
|
|
<hr class="section-divider">
|
|
|
|
<!-- PART 4 -->
|
|
<h2 id="enroll">Part 4 - Site Content</h2>
|
|
<p>The build folder carries no site content. Add these in the web interface; each one can be replaced later the same way.</p>
|
|
<div class="step">
|
|
<span class="step-number">Step 1</span>
|
|
<h3>Enrollment package (Shop Floor)</h3>
|
|
<p>Shop Floor PCs enroll with a provisioning package. Open <strong>Tools > Enrollment packages</strong>, click <strong>Upload SFLD package</strong> and upload the current <span class="command-inline">GCCH_Prod_SFLD_v<version>.ppkg</span>. The package you upload becomes the active one (shown on that page); upload a newer version the same way when one is released.</p>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 2</span>
|
|
<h3>Engineering Layer (Engineer)</h3>
|
|
<p>Engineer PCs install the Engineering Layer at first logon. Without it they still image, but with no engineering applications. Open <strong>Images > Engineer</strong>, tab <strong>Engineering Layer</strong>, and upload one of:</p>
|
|
<ul>
|
|
<li>the whole payload as a <span class="command-inline">.zip</span>, with the folders <span class="command-inline">engineering_layer\</span> (holding <span class="command-inline">Engineering_Install_v<version>.exe</span>) and <span class="command-inline">prereqs\</span> (VC++ and .NET 3.5) at its top, or inside one <span class="command-inline">extra_engineering\</span> folder. Use this the first time.</li>
|
|
<li>only a newer <span class="command-inline">Engineering_Install_v<version>.exe</span>. It replaces the installer and keeps the prerequisites.</li>
|
|
</ul>
|
|
<p>The page shows the installer version in use and the status <span class="highlight">Ready</span> once both parts are present. The two previous uploads are kept under <strong>Previous versions</strong>, with a <strong>Restore</strong> button. The Engineer image must be imported (Part 3) first.</p>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 3</span>
|
|
<h3>Blancco</h3>
|
|
<p>The <span class="command-inline">pxe-usb</span> folder carries no Blancco release: each site loads its own. Until it does, the Blancco entry in the PXE menu does not boot.</p>
|
|
<ol>
|
|
<li>Download <strong>Blancco Drive Eraser 7.20</strong> (the ISO, or the USB image) from the Blancco portal. Use 7.20: a newer version stops at staging until the preferences are merged for it.</li>
|
|
<li>Open <strong>Updates > Blancco releases</strong>, upload it under <strong>Release files</strong> and click <strong>Stage</strong>. The server writes the GE preferences (report share, licensing) into it.</li>
|
|
<li>Click <strong>Add test entry</strong>, boot a test PC from the new entry in the PXE menu, and check that Blancco starts and licenses. Then click <strong>Activate</strong>.</li>
|
|
</ol>
|
|
<p>Then fill in <strong>Site settings</strong> on the same page:</p>
|
|
<ul>
|
|
<li><strong>Business location</strong>: your site, as it should appear on every erasure report.</li>
|
|
<li><strong>Wi-Fi network (SSID)</strong> and <strong>Wi-Fi password</strong>: the internet-only Wi-Fi Blancco joins to license each erasure in the GE Blancco cloud. Usually <span class="command-inline">INTERNETACCESS</span>; the password differs between sites, so get yours from the site network team.</li>
|
|
</ul>
|
|
<p>Click <strong>Save</strong>. The settings go into the active Blancco release at once and into every release staged later.</p>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 4</span>
|
|
<h3>Shop Floor apps (optional)</h3>
|
|
<p>A Shop Floor PC gets the provisioning package and the ShopFloor auto-logon and lockdown, and nothing else. To install your own applications on it, see <a href="#apps">Adding Shop Floor Apps</a>.</p>
|
|
</div>
|
|
|
|
<div class="step" id="shares">
|
|
<span class="step-number">Step 5</span>
|
|
<h3>Share passwords</h3>
|
|
<p>Three Samba logins are used on the imaging network: <span class="command-inline">pxe-upload</span> (WinPE and Shop Floor setup on every PC, image and app uploads), <span class="command-inline">blancco</span> (Blancco's erasure reports) and <span class="command-inline">clonezilla</span> (Clonezilla back up and restore). Their shipped passwords are the same at every site.</p>
|
|
<p>Open <strong>Tools > Share accounts</strong>. Each account shows <span class="highlight">Site password</span> or <span class="highlight">Default password</span>. For any still on the default, type a new password twice and click <strong>Save</strong>: 8-64 characters from A-Z a-z 0-9 . _ ~ -. The server changes the login and every file that carries it (the WinPE boot image, the boot menu, the Blancco preferences) at once.</p>
|
|
<ul>
|
|
<li>Change a password only when no PC is imaging: the page refuses while one is, because that PC's next share connection would fail.</li>
|
|
<li>Passwords set in <span class="command-inline">site-vars.yml</span> at install are applied the same way; after that this page is where they change.</li>
|
|
<li>The PXE boot files are readable by any PC on the imaging switch, and they carry the <span class="command-inline">pxe-upload</span> and <span class="command-inline">clonezilla</span> passwords. A site password keeps other sites' people and PCs out; it does not hide it from a PC on your own imaging switch.</li>
|
|
</ul>
|
|
</div>
|
|
<hr class="section-divider">
|
|
|
|
<!-- PART 5 -->
|
|
<h2 id="test">Part 5 - Image a Test PC</h2>
|
|
<ol>
|
|
<li>Connect a test PC to the imaging switch and PXE boot it (F12, network boot).</li>
|
|
<li>Pick the image in the boot menu and follow the prompts.</li>
|
|
<li>Follow it on <strong>Operate > Imaging floor</strong> in the web interface.</li>
|
|
</ol>
|
|
<div class="alert alert-success">
|
|
<strong>Deployment Complete</strong>
|
|
The server images PCs on the isolated switch at 172.16.9.1. Keep the USB stick: it rebuilds the server the same way.
|
|
</div>
|
|
|
|
<hr class="section-divider">
|
|
|
|
<h2 id="sitevars">Site Settings</h2>
|
|
<p>Site settings live in one small text file, <span class="command-inline">site-vars.yml</span>, in the build folder. The USB builder copies it onto the stick and the server reads it while it installs. Without the file the defaults are used: fine for a test, but every production site must set <span class="command-inline">pxe_admin_password</span> (the install stops without it) and should set <span class="command-inline">site_name</span> and the three share passwords.</p>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 1</span>
|
|
<h3>Create the file</h3>
|
|
<ol>
|
|
<li>In Explorer turn on <strong>View > Show > File name extensions</strong> (so the file does not end up named <span class="command-inline">site-vars.yml.txt</span>).</li>
|
|
<li>In <span class="command-inline">C:\pxe-usb</span>, copy <span class="command-inline">site-vars.example.yml</span> and rename the copy to <span class="command-inline">site-vars.yml</span>.</li>
|
|
<li>Right-click it, <strong>Open with > Notepad</strong>, change the values (see the table below), save.</li>
|
|
</ol>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 2</span>
|
|
<h3>Follow the format</h3>
|
|
<ul>
|
|
<li>One setting per line: <span class="command-inline">name: value</span>, with a space after the colon.</li>
|
|
<li>Put text in double quotes: <span class="command-inline">site_name: "Example Site"</span>.</li>
|
|
<li>Lists go in square brackets: <span class="command-inline">corp_admin_cidrs: ["10.12.34.0/24", "10.12.40.0/24"]</span>.</li>
|
|
<li>A line starting with <span class="command-inline">#</span> is a note and is ignored. Remove the <span class="command-inline">#</span> to turn a setting on.</li>
|
|
<li>Start every setting at the beginning of the line. No tabs.</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 3</span>
|
|
<h3>Build the USB</h3>
|
|
<p>Build as in Part 1. The builder checks the NIC addresses; the server checks everything else while it installs. If a value is wrong it stops before changing anything; the console banner points at <span class="command-inline">/var/log/first-boot.log</span>, which names the setting. Fix the file on the stick (<span class="command-inline">playbook\site-vars.yml</span>) and reboot: setup runs again.</p>
|
|
</div>
|
|
|
|
<h3>The settings</h3>
|
|
<table>
|
|
<tr><th>Setting</th><th>What it does</th><th>When to set it</th><th>Example</th></tr>
|
|
<tr><td><span class="command-inline">site_name</span></td><td>The site name stamped on Blancco erasure reports and the monthly CMMC evidence packs. Not set: <em>Unnamed site</em>. Letters, digits, spaces and . , - ( ) & / only.</td><td><strong>Always</strong></td><td><span class="command-inline">"Example Site"</span></td></tr>
|
|
<tr><td><span class="command-inline">site_timezone</span></td><td>Time zone of the server clock, of every time in the web interface, and of the evidence-pack month boundaries.</td><td>If the site is not on US Eastern time</td><td><span class="command-inline">"America/Chicago"</span></td></tr>
|
|
<tr><td><span class="command-inline">pxe_admin_password</span></td><td>Password of the server's own login, <span class="command-inline">pxe</span> (console, SSH and sudo). Required: the install stops while the server still has the shipped password. 8-128 characters. Keep it with the site's admin passwords.</td><td><strong>Always</strong></td><td><span class="command-inline">"<a long site password>"</span></td></tr>
|
|
<tr><td><span class="command-inline">pxe_upload_password</span></td><td>Password of the <span class="command-inline">pxe-upload</span> share login: WinPE and Shop Floor setup on every imaging PC, <span class="command-inline">Upload-Image.ps1</span>, app uploads. 8-64 characters from A-Z a-z 0-9 . _ ~ -. Not set: the shipped default. Used at the install only; later, <strong>Tools > Share accounts</strong>.</td><td><strong>Always</strong></td><td><span class="command-inline">"ExSite-Upload-2026"</span></td></tr>
|
|
<tr><td><span class="command-inline">blancco_smb_password</span></td><td>Password of the <span class="command-inline">blancco</span> share login Blancco saves erasure reports with. Same rules as above.</td><td><strong>Always</strong></td><td><span class="command-inline">"ExSite-Reports-2026"</span></td></tr>
|
|
<tr><td><span class="command-inline">clonezilla_smb_password</span></td><td>Password of the share Clonezilla backs up to and restores from. The boot menu carries it, so it protects the share on the imaging network only. Same rules as above.</td><td><strong>Always</strong> (the default is the same at every site)</td><td><span class="command-inline">"ExSite-Clone-2026"</span></td></tr>
|
|
<tr><td><span class="command-inline">corp_admin_cidrs</span></td><td>The GE subnets allowed to reach the web interface (port 9009) and SSH. Not set: all of GE. The imaging network always has access.</td><td>Recommended once the server is on the GE network</td><td><span class="command-inline">["10.12.34.0/24"]</span></td></tr>
|
|
<tr><td><span class="command-inline">pxe_nic_mac</span><br><span class="command-inline">corp_nic_mac</span></td><td>Pin the imaging port and the GE port by MAC address instead of picking the imaging port at install. Then both cables may be in from the start.</td><td>Only if the automatic pick is not wanted</td><td><span class="command-inline">"34:c8:d6:b1:10:10"</span></td></tr>
|
|
<tr><td><span class="command-inline">pxe_nic_allowed_switches</span></td><td>A <em>managed</em> imaging switch sends LLDP/CDP like a GE switch, and the server would refuse to serve on it. Its name (or MAC) here marks it as the imaging switch. Comma separated.</td><td>Only if the imaging switch is managed</td><td><span class="command-inline">"IMG-SW-01"</span></td></tr>
|
|
<tr><td><span class="command-inline">pxe_dhcp_start</span><br><span class="command-inline">pxe_dhcp_end</span><br><span class="command-inline">pxe_dhcp_lease</span></td><td>The addresses handed to PCs being imaged. Default 172.16.9.10 to .100 (91 PCs at once), 12 hour leases.</td><td>Only if more than about 90 PCs image at the same time</td><td><span class="command-inline">"172.16.9.250"</span></td></tr>
|
|
</table>
|
|
<div class="alert alert-warning">
|
|
<strong>Do not change:</strong>
|
|
<span class="command-inline">pxe_server_ip</span> and <span class="command-inline">pxe_subnet</span> (172.16.9.1, 172.16.9.0/24). That address is built into the boot menu, WinPE and the Windows answer files.
|
|
</div>
|
|
|
|
<h3>Finding the values</h3>
|
|
<h4>Admin subnet (corp_admin_cidrs)</h4>
|
|
<p>On each admin PC that should manage the server, run <span class="command-inline">ipconfig</span> and read the GE adapter's IPv4 address and subnet mask. Replace the last part of the address with 0 and add the suffix for the mask:</p>
|
|
<table>
|
|
<tr><th>Subnet mask</th><th>Suffix</th><th>Example: address 10.12.34.56</th></tr>
|
|
<tr><td>255.255.255.0</td><td>/24</td><td><span class="command-inline">10.12.34.0/24</span></td></tr>
|
|
<tr><td>255.255.254.0</td><td>/23</td><td><span class="command-inline">10.12.34.0/23</span> (third number even: 34 stays, 35 becomes 34)</td></tr>
|
|
<tr><td>255.255.252.0</td><td>/22</td><td><span class="command-inline">10.12.32.0/22</span> (third number rounded down to a multiple of 4)</td></tr>
|
|
</table>
|
|
<div class="alert alert-info">
|
|
<strong>Locked out from GE?</strong>
|
|
A wrong subnet only blocks the GE side. The web interface still works from a PC on the imaging switch at <span class="command-inline">http://172.16.9.1:9009</span>; fix the file and re-apply it (below).
|
|
</div>
|
|
<h4>MAC address (pxe_nic_mac, corp_nic_mac)</h4>
|
|
<p>From the label on the server or the network page of its firmware setup. Write it with colons and lower case: <span class="command-inline">34:c8:d6:b1:10:10</span>.</p>
|
|
<h4>Time zone (site_timezone)</h4>
|
|
<p>Common names: <span class="command-inline">America/New_York</span>, <span class="command-inline">America/Chicago</span>, <span class="command-inline">America/Denver</span>, <span class="command-inline">America/Phoenix</span>, <span class="command-inline">America/Los_Angeles</span>, <span class="command-inline">Europe/London</span>, <span class="command-inline">Europe/Warsaw</span>, <span class="command-inline">Asia/Kolkata</span>. The full list: the "TZ identifier" column of the tz database.</p>
|
|
|
|
<h3>A complete example</h3>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre># C:\pxe-usb\site-vars.yml
|
|
|
|
# Name on Blancco erasure reports and the monthly evidence packs.
|
|
site_name: "Example Site"
|
|
|
|
# Time zone of the server clock and the web interface.
|
|
site_timezone: "America/New_York"
|
|
|
|
# The server's own login (pxe): required.
|
|
pxe_admin_password: "<a long site password>"
|
|
|
|
# The share logins (8-64 characters from A-Z a-z 0-9 . _ ~ -).
|
|
pxe_upload_password: "ExSite-Upload-2026"
|
|
blancco_smb_password: "ExSite-Reports-2026"
|
|
clonezilla_smb_password: "ExSite-Clone-2026"
|
|
|
|
# Who may reach the web interface and SSH from the GE network.
|
|
# Remove the # once you know your admin subnet(s):
|
|
# corp_admin_cidrs: ["10.12.34.0/24"]</pre>
|
|
</div>
|
|
|
|
<h3>Changing settings after the install</h3>
|
|
<ol>
|
|
<li>On the USB stick, edit <span class="command-inline">playbook\site-vars.yml</span> (same format).</li>
|
|
<li>Plug the stick into the server, log in as <span class="command-inline">pxe</span> and run the setup again:</li>
|
|
</ol>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre>sudo /opt/first-boot.sh</pre>
|
|
</div>
|
|
<p>It re-applies every setting and changes only what differs, except the three share passwords: those stay as <strong>Tools > Share accounts</strong> has them. Run it when no PCs are imaging: while they are, it postpones restarting services, and a change to the network settings is refused until the floor is idle.</p>
|
|
|
|
<hr class="section-divider">
|
|
|
|
<h2 id="apps">Adding Shop Floor Apps</h2>
|
|
<p>A Shop Floor PC installs two app lists, both empty when the server is installed:</p>
|
|
<table>
|
|
<tr><th>List</th><th>When it installs</th><th>Use it for</th></tr>
|
|
<tr><td><span class="command-inline">preinstall.json</span></td><td>At first logon, in the same run as the provisioning package, before the PC restarts</td><td>Apps that must be present before the PC enrolls</td></tr>
|
|
<tr><td><span class="command-inline">postppkg.json</span></td><td>Once, after the restart that follows the provisioning package (as SYSTEM)</td><td>Everything else</td></tr>
|
|
</table>
|
|
<p>Both are in the <span class="command-inline">pre-install</span> folder of the enrollment share. The first list shows as a step on <strong>Operate > Imaging floor</strong>; each PC keeps its logs in <span class="command-inline">C:\Logs\PreInstall\install.log</span> and <span class="command-inline">C:\Logs\PostPpkg\install.log</span>.</p>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 1</span>
|
|
<h3>Open the share</h3>
|
|
<p>From a PC on the imaging switch, open <span class="command-inline">\\172.16.9.1\enrollment\pre-install</span> and sign in as <span class="command-inline">pxe-upload</span> with the site's password (<a href="#shares">Share passwords</a>; the account <span class="command-inline">Upload-Image.ps1</span> uses).</p>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 2</span>
|
|
<h3>Copy the installer</h3>
|
|
<p>Make a folder per app under <span class="command-inline">installers\</span> and copy the installer into it, for example <span class="command-inline">installers\exampleapp\ExampleApp.msi</span>.</p>
|
|
</div>
|
|
|
|
<div class="step">
|
|
<span class="step-number">Step 3</span>
|
|
<h3>Add it to a list</h3>
|
|
<p>Open the list in Notepad and add one entry per app to <span class="command-inline">Applications</span>. Each list contains an <span class="command-inline">_example</span> entry to copy; it is ignored. Apps install in list order, and an app already detected on the PC is skipped, so a PC can be re-imaged safely.</p>
|
|
</div>
|
|
|
|
<table>
|
|
<tr><th>Field</th><th>Meaning</th><th>Required</th></tr>
|
|
<tr><td><span class="command-inline">Name</span></td><td>Shown in the log</td><td>Yes</td></tr>
|
|
<tr><td><span class="command-inline">Installer</span></td><td>Path under <span class="command-inline">installers\</span>. In JSON, write every <span class="command-inline">\</span> as <span class="command-inline">\\</span></td><td>Yes</td></tr>
|
|
<tr><td><span class="command-inline">Type</span></td><td><span class="command-inline">MSI</span> (run with msiexec /i) or <span class="command-inline">EXE</span> (run directly)</td><td>Yes</td></tr>
|
|
<tr><td><span class="command-inline">InstallArgs</span></td><td>Silent-install switches, e.g. <span class="command-inline">/qn /norestart</span> for an MSI</td><td>Usually</td></tr>
|
|
<tr><td><span class="command-inline">DetectionMethod</span></td><td><span class="command-inline">Registry</span> (a registry key, optionally one value) or <span class="command-inline">File</span> (a file or folder exists)</td><td>Recommended</td></tr>
|
|
<tr><td><span class="command-inline">DetectionPath</span></td><td>The registry key (<span class="command-inline">HKLM:\\SOFTWARE\\...</span>) or file path that proves the app is installed</td><td>With DetectionMethod</td></tr>
|
|
<tr><td><span class="command-inline">DetectionName</span><br><span class="command-inline">DetectionValue</span></td><td>Registry only: a value under the key, and the data it must have</td><td>No</td></tr>
|
|
<tr><td><span class="command-inline">PCTypes</span></td><td>Limit the app to these PC types, e.g. <span class="command-inline">["gea-shopfloor-standard"]</span>. Not set: every Shop Floor PC</td><td>No</td></tr>
|
|
<tr><td><span class="command-inline">LogFile</span></td><td>EXE only: the installer's own log, copied into the install log when it fails</td><td>No</td></tr>
|
|
</table>
|
|
|
|
<h3>Example</h3>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre>{
|
|
"Version": "1.0",
|
|
"Applications": [
|
|
{
|
|
"Name": "Example App 1.2",
|
|
"Installer": "exampleapp\\ExampleApp.msi",
|
|
"Type": "MSI",
|
|
"InstallArgs": "/qn /norestart",
|
|
"DetectionMethod": "Registry",
|
|
"DetectionPath": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{00000000-0000-0000-0000-000000000000}"
|
|
},
|
|
{
|
|
"Name": "Example Tool 4.0",
|
|
"Installer": "exampletool\\setup.exe",
|
|
"Type": "EXE",
|
|
"InstallArgs": "/S",
|
|
"DetectionMethod": "File",
|
|
"DetectionPath": "C:\\Program Files\\Example Tool\\tool.exe"
|
|
}
|
|
]
|
|
}</pre>
|
|
</div>
|
|
<div class="alert alert-warning">
|
|
<strong>Test before the floor:</strong>
|
|
A broken list or a failed install never stops imaging: it is logged and the PC carries on without that app. Image one test PC after every change and check its install log.
|
|
</div>
|
|
<p>Reinstalling the server (<span class="command-inline">sudo /opt/first-boot.sh</span>) keeps both lists and the installers.</p>
|
|
|
|
<hr class="section-divider">
|
|
|
|
<h2 id="options">Script Options</h2>
|
|
<p>Only needed for special cases. Run the script from an elevated PowerShell in <span class="command-inline">C:\pxe-usb</span> with options instead of <span class="command-inline">-Interactive</span>:</p>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre>powershell -ExecutionPolicy Bypass -File .\scripts\Build-PxeUsb.ps1 -DiskNumber 1 -SiteVars .\site-vars.yml</pre>
|
|
</div>
|
|
<table>
|
|
<tr><th>Option</th><th>Effect</th></tr>
|
|
<tr><td><span class="command-inline">-DiskNumber N</span></td><td>The USB disk to erase and build. Without it the script lists USB disks.</td></tr>
|
|
<tr><td><span class="command-inline">-SiteVars FILE</span> / <span class="command-inline">-NoSiteVars</span></td><td>Per-site values, or the defaults.</td></tr>
|
|
<tr><td><span class="command-inline">-SkipEnrollment</span>, <span class="command-inline">-SkipBios</span>, <span class="command-inline">-SkipDrivers</span>, <span class="command-inline">-SkipBootTools</span></td><td>Leave that payload off the stick.</td></tr>
|
|
<tr><td><span class="command-inline">-QuickVerify</span></td><td>Read back by size only instead of SHA-256 (faster, weaker).</td></tr>
|
|
</table>
|
|
|
|
<!-- TROUBLESHOOTING SECTION -->
|
|
<h2 id="troubleshooting">Troubleshooting</h2>
|
|
<div class="troubleshooting">
|
|
<h4>Issue: "cannot be run because it contains a #requires statement for running as Administrator"</h4>
|
|
<p><strong>Resolution:</strong> the PowerShell window is not elevated. Close it and open <strong>Windows PowerShell</strong> with <strong>Run as administrator</strong> (Part 1, Step 2).</p>
|
|
</div>
|
|
|
|
<div class="troubleshooting">
|
|
<h4>Issue: "Cannot find path" for the build folder</h4>
|
|
<p><strong>Resolution:</strong> an administrator window cannot see network drives mapped in your normal session. Copy the <span class="command-inline">pxe-usb</span> folder to <span class="command-inline">C:\pxe-usb</span> (Part 1, Step 1) and run it from there.</p>
|
|
</div>
|
|
|
|
<div class="troubleshooting">
|
|
<h4>Issue: The USB build stops with "does not match" or "was built for ISO"</h4>
|
|
<p><strong>Resolution:</strong> the build folder is incomplete or out of date. Delete the local copy and copy a fresh <span class="command-inline">pxe-usb</span> folder.</p>
|
|
</div>
|
|
|
|
|
|
<div class="troubleshooting">
|
|
<h4>Issue: "The stick is NOT good"</h4>
|
|
<p><strong>Resolution:</strong> the read-back found missing or different files. Rebuild on a different USB port or stick. Never boot a stick that failed verification.</p>
|
|
</div>
|
|
|
|
|
|
<div class="troubleshooting">
|
|
<h4>Issue: The server does not boot the stick</h4>
|
|
<p><strong>Resolution:</strong> the stick boots in UEFI mode only. In the firmware setup set the boot mode to UEFI (not Legacy/CSM) and pick the UEFI entry for the stick in the F12 menu.</p>
|
|
</div>
|
|
|
|
|
|
<div class="troubleshooting">
|
|
<h4>Issue: Console banner "Could not pick the imaging port"</h4>
|
|
<p><strong>Symptoms:</strong> no port had a link, two ports had a link, or the port looked like the GE network.</p>
|
|
<p><strong>Resolution:</strong> log in on the console as <span class="command-inline">pxe</span> and run the picker. When asked, pull the imaging switch cable out and plug it back into the same port; the port that blinked becomes the imaging port and setup runs again.</p>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre>sudo pxe-pick-nic</pre>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="troubleshooting">
|
|
<h4>Issue: Setup failed for another reason</h4>
|
|
<p><strong>Resolution:</strong> the reason is on the console banner and in the log. Setup retries at every reboot (5 attempts).</p>
|
|
<div class="code-block">
|
|
<button class="copy-button" onclick="copyCode(this)">Copy</button>
|
|
<pre>sudo less /var/log/first-boot.log</pre>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="troubleshooting">
|
|
<h4>Issue: Upload-Image.ps1 reports files NOT verified</h4>
|
|
<p><strong>Resolution:</strong> run it again; it re-sends only the files that differ. Files that are bad in the MCL cache itself must be downloaded again by MCL (delete the cache and run MCL again).</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- FOOTER -->
|
|
<div class="footer">
|
|
<div class="footer-content">
|
|
<p><strong>For questions or support, contact GE Aerospace DT Team</strong></p>
|
|
<p style="font-size: 0.9em;">Document Classification: Internal Use Only</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- JAVASCRIPT -->
|
|
<script>
|
|
// Copy code functionality
|
|
function copyCode(button) {
|
|
const codeBlock = button.parentElement;
|
|
const code = codeBlock.querySelector('pre').textContent;
|
|
|
|
navigator.clipboard.writeText(code).then(() => {
|
|
const originalText = button.textContent;
|
|
button.textContent = 'Copied!';
|
|
button.classList.add('copied');
|
|
|
|
setTimeout(() => {
|
|
button.textContent = originalText;
|
|
button.classList.remove('copied');
|
|
}, 2000);
|
|
}).catch(err => {
|
|
console.error('Failed to copy text: ', err);
|
|
button.textContent = 'Failed';
|
|
setTimeout(() => {
|
|
button.textContent = 'Copy';
|
|
}, 2000);
|
|
});
|
|
}
|
|
|
|
// Smooth scrolling for navigation links
|
|
document.querySelectorAll('.nav a').forEach(anchor => {
|
|
anchor.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
const target = document.querySelector(this.getAttribute('href'));
|
|
if (target) {
|
|
target.scrollIntoView({
|
|
behavior: 'smooth',
|
|
block: 'start'
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Update page title from h1
|
|
const mainTitle = document.querySelector('.header h1');
|
|
if (mainTitle) {
|
|
document.title = mainTitle.textContent + ' - GE Aerospace Knowledge Base';
|
|
}
|
|
</script>
|
|
</body>
|
|
</html> |