feat: Complete DOS machine deployment verification and AD2-NAS sync infrastructure
This checkpoint establishes verified deployment infrastructure for the Dataforth DOS Update System with proper file synchronization and documentation. ## Key Changes ### TS-4R Backup and Analysis - Backed up complete TS-4R machine to D:\ClaudeTools\backups\TS-4R\ - Analyzed MENUX.EXE startup menu system (758-line QuickBasic program) - Documented complete startup sequence: AUTOEXEC.BAT → STARTNET.BAT → MENUX.EXE - Found MENUX.BAS source code (Feb 2008 version) from KEPCO ABC software archive ### AD2-NAS Sync Infrastructure Fixes - Created junction: COMMON → _COMMON (single source of truth for software updates) - Verified bidirectional sync logic prevents data backflow: * Test data: DOS → NAS → AD2 → Database (one-way, deleted from NAS) * Program updates: AD2 → NAS → DOS (one-way, files remain on AD2) - Manually deployed correct BAT file versions to NAS after sync connection issues - Verified all 9 BAT files deployed correctly (5.1KB-8.8KB each) ### Deployment Scripts Created - check-junction.ps1: Verify COMMON/\_COMMON junction status - compare-common-folders.ps1: Compare folder contents - deploy-correct-bat-files.ps1: Deploy BAT files from local to AD2 - fix-common-junction.ps1: Create COMMON → _COMMON junction - verify-bat-deployment.ps1: Verify file versions on AD2 - manual-push-to-nas.sh: Manual BAT file deployment to NAS - read-sync-script.ps1: Read Sync-FromNAS.ps1 from AD2 - search-menux-ad2.ps1: Search for MENUX source files ### Documentation Updates - Updated all deployment guides with MENUX startup sequence - Added startup flow to credentials.md and session logs - Documented junction requirement for COMMON/\_COMMON - Added data flow verification confirming unidirectional sync ## Technical Details **Files Deployed to NAS (2026-01-20 09:01-09:02):** - UPDATE.BAT (5,181 bytes) - Machine backup utility - DEPLOY.BAT (5,579 bytes) - One-time deployment installer - NWTOC.BAT (6,305 bytes) - Network to Computer updates - CTONW.BAT (7,831 bytes) - Computer to Network uploads - CTONWTXT.BAT (1,504 bytes) - Text file version - CHECKUPD.BAT (6,495 bytes) - Check for updates - STAGE.BAT (8,794 bytes) - Stage system files - REBOOT.BAT (5,099 bytes) - Apply staged updates - AUTOEXEC.BAT (2,211 bytes) - DOS startup configuration **Sync Logic Verified:** - PULL: /data/test/TS-*/LOGS/*.DAT copied to AD2, then deleted from NAS - PUSH: C:\Shares\test\_COMMON\ProdSW\* copied to /data/test/COMMON/ProdSW/ - No reverse flow in either direction (test data never returns to DOS) **Junction Created:** - Target: C:\Shares\test\COMMON → C:\Shares\test\_COMMON - Eliminates duplicate file maintenance - Backup saved to C:\Shares\test\COMMON.backup ## Files Modified - DOS_DEPLOYMENT_GUIDE.md: Added automatic startup sequence - docs/DEPLOYMENT_GUIDE.md: Updated post-reboot expectations - docs/ENGINEER_HOWTO_GUIDE.md: Added MENUX menu loading step - credentials.md: Documented startup sequence and MENUX interface - session-logs/2026-01-19-session.md: Added startup documentation ## Files Added - 8 PowerShell deployment/verification scripts - 3 HTML documentation exports - TS-4R complete backup (not committed to git) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -188,10 +188,12 @@ Next Steps:
|
||||
1. REBOOT this machine to activate MACHINE variable
|
||||
Press Ctrl+Alt+Del to reboot
|
||||
|
||||
2. After reboot, run NWTOC to download all updates:
|
||||
C:\BAT\NWTOC
|
||||
2. After reboot, system will automatically:
|
||||
- Start network (STARTNET.BAT)
|
||||
- Download updates (NWTOC.BAT runs automatically)
|
||||
- Load test menu (MENUX.EXE)
|
||||
|
||||
3. Create initial backup:
|
||||
3. Create initial backup when convenient:
|
||||
C:\BAT\UPDATE
|
||||
|
||||
==============================================================
|
||||
|
||||
50
check-junction.ps1
Normal file
50
check-junction.ps1
Normal file
@@ -0,0 +1,50 @@
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host "Checking COMMON vs _COMMON on AD2" -ForegroundColor Cyan
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Write-Host "=== Checking if _COMMON and COMMON are junctioned ===" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
# Check _COMMON
|
||||
$underCommon = Get-Item "C:\Shares\test\_COMMON" -Force
|
||||
Write-Host "_COMMON:" -ForegroundColor Cyan
|
||||
Write-Host " Type: $($underCommon.Attributes)" -ForegroundColor White
|
||||
if ($underCommon.LinkType) {
|
||||
Write-Host " LinkType: $($underCommon.LinkType)" -ForegroundColor Green
|
||||
Write-Host " Target: $($underCommon.Target)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " LinkType: Not a link/junction" -ForegroundColor Yellow
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Check COMMON
|
||||
$common = Get-Item "C:\Shares\test\COMMON" -Force
|
||||
Write-Host "COMMON:" -ForegroundColor Cyan
|
||||
Write-Host " Type: $($common.Attributes)" -ForegroundColor White
|
||||
if ($common.LinkType) {
|
||||
Write-Host " LinkType: $($common.LinkType)" -ForegroundColor Green
|
||||
Write-Host " Target: $($common.Target)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " LinkType: Not a link/junction" -ForegroundColor Yellow
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Compare file counts
|
||||
Write-Host "=== File Counts ===" -ForegroundColor Yellow
|
||||
$underCount = (Get-ChildItem "C:\Shares\test\_COMMON\ProdSW" -File -ErrorAction SilentlyContinue | Measure-Object).Count
|
||||
$commonCount = (Get-ChildItem "C:\Shares\test\COMMON\ProdSW" -File -ErrorAction SilentlyContinue | Measure-Object).Count
|
||||
|
||||
Write-Host "_COMMON\ProdSW: $underCount files" -ForegroundColor White
|
||||
Write-Host "COMMON\ProdSW: $commonCount files" -ForegroundColor White
|
||||
|
||||
if ($underCount -ne $commonCount) {
|
||||
Write-Host "WARNING: File counts differ!" -ForegroundColor Red
|
||||
} else {
|
||||
Write-Host "File counts match" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
@@ -1,38 +1,19 @@
|
||||
# Check if sync is running and show recent log output
|
||||
$password = ConvertTo-SecureString "Paper123!@#" -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential("INTRANET\sysadmin", $password)
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Write-Host "=== Sync Status Check ===" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Check for running PowerShell processes with Sync-FromNAS
|
||||
$syncProcesses = Get-Process powershell -ErrorAction SilentlyContinue | Where-Object {
|
||||
$_.CommandLine -like "*Sync-FromNAS*"
|
||||
}
|
||||
|
||||
if ($syncProcesses) {
|
||||
Write-Host "[RUNNING] Sync process(es) active:" -ForegroundColor Yellow
|
||||
$syncProcesses | ForEach-Object {
|
||||
Write-Host " PID $($_.Id) - Started: $($_.StartTime)" -ForegroundColor Gray
|
||||
}
|
||||
Write-Host "=== Sync Status File ===" -ForegroundColor Cyan
|
||||
if (Test-Path "C:\Shares\test\_SYNC_STATUS.txt") {
|
||||
Get-Content "C:\Shares\test\_SYNC_STATUS.txt"
|
||||
} else {
|
||||
Write-Host "[IDLE] No sync processes running" -ForegroundColor Green
|
||||
Write-Host "Status file not found" -ForegroundColor Red
|
||||
}
|
||||
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Recent log output (last 30 lines):" -ForegroundColor Cyan
|
||||
Write-Host "=" * 80 -ForegroundColor Gray
|
||||
|
||||
Get-Content "C:\Shares\test\scripts\sync-from-nas.log" -Tail 30 | ForEach-Object {
|
||||
if ($_ -match "ERROR|error") {
|
||||
Write-Host $_ -ForegroundColor Red
|
||||
} elseif ($_ -match "Pushed|Pulled") {
|
||||
Write-Host $_ -ForegroundColor Green
|
||||
} elseif ($_ -match "Starting|Complete") {
|
||||
Write-Host $_ -ForegroundColor Cyan
|
||||
} else {
|
||||
Write-Host $_ -ForegroundColor Gray
|
||||
}
|
||||
Write-Host "=== Last 30 lines of Sync Log ===" -ForegroundColor Cyan
|
||||
if (Test-Path "C:\Shares\test\scripts\sync-from-nas.log") {
|
||||
Get-Content "C:\Shares\test\scripts\sync-from-nas.log" | Select-Object -Last 30
|
||||
} else {
|
||||
Write-Host "Log file not found" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
37
compare-common-folders.ps1
Normal file
37
compare-common-folders.ps1
Normal file
@@ -0,0 +1,37 @@
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Write-Host "=== Files in _COMMON\ProdSW ===" -ForegroundColor Yellow
|
||||
Get-ChildItem "C:\Shares\test\_COMMON\ProdSW" -File |
|
||||
Select-Object Name, Length, LastWriteTime |
|
||||
Sort-Object Name |
|
||||
Format-Table -AutoSize
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "=== Files in COMMON\ProdSW ===" -ForegroundColor Yellow
|
||||
Get-ChildItem "C:\Shares\test\COMMON\ProdSW" -File |
|
||||
Select-Object Name, Length, LastWriteTime |
|
||||
Sort-Object Name |
|
||||
Format-Table -AutoSize
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "=== Files ONLY in _COMMON\ProdSW ===" -ForegroundColor Cyan
|
||||
$underFiles = Get-ChildItem "C:\Shares\test\_COMMON\ProdSW" -File | Select-Object -ExpandProperty Name
|
||||
$commonFiles = Get-ChildItem "C:\Shares\test\COMMON\ProdSW" -File | Select-Object -ExpandProperty Name
|
||||
$onlyInUnder = $underFiles | Where-Object { $_ -notin $commonFiles }
|
||||
if ($onlyInUnder) {
|
||||
$onlyInUnder | ForEach-Object { Write-Host " $_" -ForegroundColor White }
|
||||
} else {
|
||||
Write-Host " (none)" -ForegroundColor Gray
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "=== Files ONLY in COMMON\ProdSW ===" -ForegroundColor Cyan
|
||||
$onlyInCommon = $commonFiles | Where-Object { $_ -notin $underFiles }
|
||||
if ($onlyInCommon) {
|
||||
$onlyInCommon | ForEach-Object { Write-Host " $_" -ForegroundColor White }
|
||||
} else {
|
||||
Write-Host " (none)" -ForegroundColor Gray
|
||||
}
|
||||
}
|
||||
@@ -140,6 +140,8 @@
|
||||
- DOS 6.22 limitations: no %COMPUTERNAME%, no IF /I
|
||||
- Network stack: MS Client 3.0, Netware VLM client
|
||||
- Update workflow: AD2 → D2TESTNAS → DOS machines
|
||||
- Startup sequence: AUTOEXEC.BAT → STARTNET.BAT → MENUX.EXE
|
||||
- MENUX menu provides test module selection interface
|
||||
|
||||
### AD2-NAS Sync System
|
||||
- **Script:** C:\Shares\test\scripts\Sync-FromNAS.ps1
|
||||
|
||||
58
deploy-correct-bat-files.ps1
Normal file
58
deploy-correct-bat-files.ps1
Normal file
@@ -0,0 +1,58 @@
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host "Deploying Correct BAT Files to AD2" -ForegroundColor Cyan
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Map network drive
|
||||
Write-Host "[1/4] Mapping network drive to AD2..." -ForegroundColor Yellow
|
||||
$null = New-PSDrive -Name TEMP_AD2 -PSProvider FileSystem -Root "\\192.168.0.6\C$" -Credential $cred -ErrorAction Stop
|
||||
Write-Host "[OK] Network drive mapped" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Copy to _COMMON\ProdSW (update old versions)
|
||||
Write-Host "[2/4] Updating _COMMON\ProdSW with correct versions..." -ForegroundColor Yellow
|
||||
Copy-Item D:\ClaudeTools\DEPLOY.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\CTONW.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\CTONWTXT.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\NWTOC.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\UPDATE.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\CHECKUPD.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\STAGE.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\REBOOT.BAT "TEMP_AD2:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Write-Host "[OK] _COMMON\ProdSW updated" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Copy to COMMON\ProdSW (ensure latest)
|
||||
Write-Host "[3/4] Ensuring COMMON\ProdSW has latest versions..." -ForegroundColor Yellow
|
||||
Copy-Item D:\ClaudeTools\DEPLOY.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\CTONW.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\CTONWTXT.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\NWTOC.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\UPDATE.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\CHECKUPD.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\STAGE.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Copy-Item D:\ClaudeTools\REBOOT.BAT "TEMP_AD2:\Shares\test\COMMON\ProdSW\" -Force
|
||||
Write-Host "[OK] COMMON\ProdSW updated" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Copy DEPLOY.BAT to root
|
||||
Write-Host "[4/4] Copying DEPLOY.BAT to root (C:\Shares\test\)..." -ForegroundColor Yellow
|
||||
Copy-Item D:\ClaudeTools\DEPLOY.BAT "TEMP_AD2:\Shares\test\" -Force
|
||||
Write-Host "[OK] DEPLOY.BAT copied to root" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Cleanup
|
||||
Remove-PSDrive -Name TEMP_AD2
|
||||
|
||||
Write-Host "================================================" -ForegroundColor Green
|
||||
Write-Host "Deployment Complete!" -ForegroundColor Green
|
||||
Write-Host "================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Files deployed to:" -ForegroundColor Cyan
|
||||
Write-Host " - C:\Shares\test\COMMON\ProdSW\" -ForegroundColor White
|
||||
Write-Host " - C:\Shares\test\_COMMON\ProdSW\" -ForegroundColor White
|
||||
Write-Host " - C:\Shares\test\DEPLOY.BAT (root)" -ForegroundColor White
|
||||
Write-Host ""
|
||||
523
docs/DEPLOYMENT_GUIDE.html
Normal file
523
docs/DEPLOYMENT_GUIDE.html
Normal file
@@ -0,0 +1,523 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>DOS Update System - Test Staff Guide</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;0,700;1,400&family=Raleway:wght@400;600;700;800&family=Fira+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
:root {
|
||||
--color-primary: #1e3a8a;
|
||||
--color-secondary: #3b82f6;
|
||||
--color-success: #10b981;
|
||||
--color-text: #1f2937;
|
||||
--color-text-light: #4b5563;
|
||||
--color-border: #d1d5db;
|
||||
--color-bg-code: #f9fafb;
|
||||
--color-bg-highlight: #dbeafe;
|
||||
--color-bg-success: #d1fae5;
|
||||
--font-body: 'Lora', Georgia, serif;
|
||||
--font-heading: 'Raleway', -apple-system, sans-serif;
|
||||
--font-mono: 'Fira Mono', 'Consolas', monospace;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-body);
|
||||
font-size: 11pt;
|
||||
line-height: 1.7;
|
||||
color: var(--color-text);
|
||||
background: white;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 20mm;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 700;
|
||||
line-height: 1.3;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.75em;
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 28pt;
|
||||
font-weight: 800;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5em;
|
||||
padding-bottom: 0.3em;
|
||||
border-bottom: 3px solid var(--color-primary);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
margin-top: 1.5em;
|
||||
padding-bottom: 0.2em;
|
||||
border-bottom: 2px solid var(--color-border);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: var(--color-secondary);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 12pt;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: 700;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin-left: 1.5em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: var(--color-bg-code);
|
||||
border: 1px solid var(--color-border);
|
||||
border-left: 4px solid var(--color-secondary);
|
||||
padding: 1em;
|
||||
margin: 1em 0;
|
||||
overflow-x: auto;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9pt;
|
||||
line-height: 1.5;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9.5pt;
|
||||
background: var(--color-bg-code);
|
||||
padding: 0.15em 0.4em;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
pre code {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1.5em 0;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: 1px solid var(--color-border);
|
||||
padding: 0.75em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: var(--color-primary);
|
||||
color: white;
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
background: var(--color-bg-code);
|
||||
}
|
||||
|
||||
.metadata {
|
||||
background: var(--color-bg-highlight);
|
||||
border-left: 4px solid var(--color-secondary);
|
||||
padding: 1em;
|
||||
margin-bottom: 2em;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
.metadata p {
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
|
||||
.divider {
|
||||
border: none;
|
||||
border-top: 1px solid var(--color-border);
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
.highlight-box {
|
||||
background: var(--color-bg-success);
|
||||
border: 2px solid var(--color-success);
|
||||
border-left: 6px solid var(--color-success);
|
||||
padding: 1em;
|
||||
margin: 1em 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.highlight-box p {
|
||||
margin-bottom: 0;
|
||||
font-weight: 600;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.dos-screen {
|
||||
background: #000;
|
||||
color: #c0c0c0;
|
||||
border: 4px solid #808080;
|
||||
padding: 1.5em;
|
||||
margin: 1.5em 0;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9pt;
|
||||
line-height: 1.4;
|
||||
white-space: pre;
|
||||
overflow-x: auto;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.toc {
|
||||
background: var(--color-bg-code);
|
||||
border: 1px solid var(--color-border);
|
||||
padding: 1.5em;
|
||||
margin: 2em 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.toc h2 {
|
||||
margin-top: 0;
|
||||
font-size: 14pt;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.toc ol {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.toc a {
|
||||
color: var(--color-secondary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.toc a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.step-number {
|
||||
display: inline-block;
|
||||
background: var(--color-secondary);
|
||||
color: white;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
line-height: 2em;
|
||||
text-align: center;
|
||||
border-radius: 50%;
|
||||
font-weight: 700;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
max-width: 100%;
|
||||
padding: 15mm;
|
||||
}
|
||||
|
||||
h1 {
|
||||
page-break-before: auto;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
h2, h3, h4 {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
pre, table, .dos-screen, .highlight-box {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.toc {
|
||||
page-break-after: always;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 20mm;
|
||||
@bottom-center {
|
||||
content: "Page " counter(page);
|
||||
font-family: var(--font-heading);
|
||||
font-size: 9pt;
|
||||
color: var(--color-text-light);
|
||||
}
|
||||
@bottom-right {
|
||||
content: "Test Staff Guide";
|
||||
font-family: var(--font-heading);
|
||||
font-size: 8pt;
|
||||
color: var(--color-text-light);
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>DOS Update System - Test Staff Guide</h1>
|
||||
|
||||
<div class="metadata">
|
||||
<p><strong>Document Version:</strong> 1.0</p>
|
||||
<p><strong>Date:</strong> January 19, 2026</p>
|
||||
<p><strong>Audience:</strong> Test Staff and Technicians</p>
|
||||
<p><strong>Prerequisites:</strong> Access to DOS test machines (TS-01 through TS-30)</p>
|
||||
</div>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<div class="toc">
|
||||
<h2>Table of Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#daily-operations">Daily Operations</a></li>
|
||||
<li><a href="#first-time-setup">First Time Setup</a></li>
|
||||
<li><a href="#manual-operations">Manual Operations</a></li>
|
||||
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
||||
<li><a href="#quick-reference">Quick Reference</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="daily-operations">Daily Operations</h2>
|
||||
|
||||
<p><strong>Starting your test machine:</strong></p>
|
||||
<ol>
|
||||
<li>Power on DOS machine</li>
|
||||
<li>Wait for boot process</li>
|
||||
<li>System automatically downloads updates</li>
|
||||
<li>System automatically uploads test data</li>
|
||||
<li>See "System Ready" message</li>
|
||||
<li>Start testing</li>
|
||||
</ol>
|
||||
|
||||
<div class="highlight-box">
|
||||
<p>No manual commands needed - the system handles everything automatically.</p>
|
||||
</div>
|
||||
|
||||
<h3>Boot Sequence</h3>
|
||||
|
||||
<div class="dos-screen">┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Microsoft(R) MS-DOS(R) Version 6.22 │
|
||||
│ │
|
||||
│ ============================================================== │
|
||||
│ Dataforth Test Machine: TS-04 │
|
||||
│ DOS 6.22 with Automatic Update System │
|
||||
│ ============================================================== │
|
||||
│ │
|
||||
│ Starting network client... │
|
||||
│ [OK] Network started │
|
||||
│ │
|
||||
│ Checking for software updates... │
|
||||
│ [1/4] Updating batch files from T:\COMMON\ProdSW... │
|
||||
│ [OK] No new batch files in COMMON │
|
||||
│ [2/4] Updating machine-specific files... │
|
||||
│ [SKIP] No machine-specific directory │
|
||||
│ [3/4] Checking for system file updates... │
|
||||
│ [OK] No system file updates │
|
||||
│ [4/4] Checking for network client updates... │
|
||||
│ [OK] No network client updates │
|
||||
│ ============================================================== │
|
||||
│ Update Complete │
|
||||
│ ============================================================== │
|
||||
│ │
|
||||
│ Uploading test data to network... │
|
||||
│ [1/3] Uploading batch files from C:\BAT... │
|
||||
│ [OK] Batch files uploaded │
|
||||
│ [2/3] Uploading programs and config from C:\ATE... │
|
||||
│ [OK] Programs uploaded to ProdSW │
|
||||
│ [3/3] Uploading test data to LOGS... │
|
||||
│ [OK] Test data uploaded to LOGS (for database import) │
|
||||
│ ============================================================== │
|
||||
│ Upload Complete │
|
||||
│ ============================================================== │
|
||||
│ │
|
||||
│ ============================================================== │
|
||||
│ System Ready │
|
||||
│ ============================================================== │
|
||||
│ │
|
||||
│ C:\> │
|
||||
└─────────────────────────────────────────────────────────────────┘</div>
|
||||
|
||||
<p><strong>Boot time:</strong> 2-3 minutes</p>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="first-time-setup">First Time Setup</h2>
|
||||
|
||||
<p><strong>For new or reformatted machines:</strong></p>
|
||||
|
||||
<h3><span class="step-number">1</span> Boot Machine</h3>
|
||||
<ul>
|
||||
<li>Power on DOS machine</li>
|
||||
<li>Let it boot to C:\> prompt</li>
|
||||
<li>Verify network drives (T: and X:)</li>
|
||||
</ul>
|
||||
|
||||
<p>You should see a black DOS screen with white text showing the machine name and a blinking cursor at the C:\> prompt.</p>
|
||||
|
||||
<h3><span class="step-number">2</span> Verify Network</h3>
|
||||
<p>Type:</p>
|
||||
<pre><code>DIR T:\</code></pre>
|
||||
|
||||
<p>Should see COMMON and TS-XX folders.</p>
|
||||
|
||||
<h3><span class="step-number">3</span> Run Deployment</h3>
|
||||
<p>Type (replace XX with your machine number):</p>
|
||||
<pre><code>T:\UPDATE.BAT TS-04</code></pre>
|
||||
|
||||
<p>The deployment script will start immediately and display the installation progress.</p>
|
||||
|
||||
<h3><span class="step-number">4</span> Watch Progress</h3>
|
||||
|
||||
<div class="dos-screen">==============================================================
|
||||
DOS Update System - Deployment
|
||||
==============================================================
|
||||
Machine: TS-04
|
||||
==============================================================
|
||||
|
||||
Installing automatic update system...
|
||||
|
||||
Files to install:
|
||||
- AUTOEXEC.BAT (startup configuration)
|
||||
- NWTOC.BAT (download updates)
|
||||
- CTONW.BAT (upload test data)
|
||||
- UPDATE.BAT (full backup)
|
||||
- CHECKUPD.BAT (check updates)
|
||||
- STAGE.BAT (system file updates)
|
||||
- REBOOT.BAT (apply staged updates)
|
||||
|
||||
Press any key to continue . . .</div>
|
||||
|
||||
<h3><span class="step-number">5</span> Deployment Complete</h3>
|
||||
|
||||
<div class="dos-screen">==============================================================
|
||||
Deployment Complete!
|
||||
==============================================================
|
||||
|
||||
Machine: TS-04
|
||||
|
||||
The automatic update system is now installed.
|
||||
|
||||
==============================================================
|
||||
REBOOT NOW
|
||||
==============================================================
|
||||
|
||||
Press Ctrl+Alt+Del to reboot</div>
|
||||
|
||||
<h3><span class="step-number">6</span> Reboot</h3>
|
||||
<p>Press <strong>Ctrl+Alt+Del</strong> to reboot.</p>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="manual-operations">Manual Operations</h2>
|
||||
|
||||
<p><strong>Manual operations are optional.</strong> Use them when needed:</p>
|
||||
|
||||
<h3>Check for Updates</h3>
|
||||
<pre><code>C:\BAT\CHECKUPD</code></pre>
|
||||
|
||||
<p>This displays a list of files on the network that are newer than your local files.</p>
|
||||
|
||||
<h3>Download Updates Now</h3>
|
||||
<pre><code>C:\BAT\NWTOC</code></pre>
|
||||
|
||||
<p>This runs the same update process that happens automatically at boot. You'll see progress messages as files are downloaded.</p>
|
||||
|
||||
<h3>Upload Test Data Now</h3>
|
||||
<pre><code>C:\BAT\CTONW</code></pre>
|
||||
|
||||
<p>This uploads your local test data and programs to the network. Progress messages show which files are being uploaded.</p>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="troubleshooting">Troubleshooting</h2>
|
||||
|
||||
<h3>Network Not Available</h3>
|
||||
<p><strong>Error:</strong> "T: drive not available"</p>
|
||||
|
||||
<p><strong>Solution:</strong></p>
|
||||
<ol>
|
||||
<li>Check network cable</li>
|
||||
<li>Restart network: <code>C:\NET\STARTNET</code></li>
|
||||
<li>Wait 30 seconds</li>
|
||||
<li>Try: <code>DIR T:\</code></li>
|
||||
</ol>
|
||||
|
||||
<p>If the network is working, <code>DIR T:\</code> will show a directory listing. If not working, you'll see "Invalid drive specification".</p>
|
||||
|
||||
<h3>Updates Not Downloading</h3>
|
||||
<p><strong>Solution:</strong></p>
|
||||
<ol>
|
||||
<li>Wait 15-20 minutes (for sync)</li>
|
||||
<li>Reboot machine</li>
|
||||
<li>Check DOS date/time: <code>DATE</code> and <code>TIME</code></li>
|
||||
<li>Contact engineering if still not working</li>
|
||||
</ol>
|
||||
|
||||
<h3>Boot Takes Too Long</h3>
|
||||
<p><strong>Normal boot time:</strong> 2-3 minutes</p>
|
||||
|
||||
<p><strong>If longer:</strong></p>
|
||||
<ol>
|
||||
<li>Check network cable</li>
|
||||
<li>Press Ctrl+C to skip if stuck</li>
|
||||
<li>Contact IT</li>
|
||||
</ol>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="quick-reference">Quick Reference</h2>
|
||||
|
||||
<h3>Daily Operations</h3>
|
||||
<pre><code>Boot machine → Wait for "System Ready" → Start testing</code></pre>
|
||||
|
||||
<h3>First Time Setup</h3>
|
||||
<pre><code>T:\UPDATE.BAT TS-XX → Reboot → Done</code></pre>
|
||||
|
||||
<h3>Manual Commands</h3>
|
||||
<pre><code>C:\BAT\CHECKUPD - Check available updates
|
||||
C:\BAT\NWTOC - Download updates now
|
||||
C:\BAT\CTONW - Upload test data now</code></pre>
|
||||
|
||||
<h3>Troubleshooting</h3>
|
||||
<pre><code>C:\NET\STARTNET - Restart network
|
||||
DATE - Check DOS date
|
||||
TIME - Check DOS time
|
||||
DIR T:\ - Verify network access</code></pre>
|
||||
|
||||
<h3>Emergency Contacts</h3>
|
||||
<pre><code>Test Lead: [Contact]
|
||||
Engineering: [Contact]
|
||||
IT Support: [Contact]</code></pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -315,9 +315,11 @@ Press any key to continue . . .
|
||||
**Press Ctrl+Alt+Del to reboot**
|
||||
|
||||
After reboot:
|
||||
- Automatic updates enabled
|
||||
- No manual commands needed
|
||||
- Ready for testing!
|
||||
- Network starts automatically (STARTNET.BAT)
|
||||
- Updates download automatically (NWTOC.BAT)
|
||||
- MENUX test menu loads
|
||||
- Select module type from menu to begin testing
|
||||
- No manual commands needed!
|
||||
|
||||
---
|
||||
|
||||
|
||||
440
docs/ENGINEER_CHANGELOG.html
Normal file
440
docs/ENGINEER_CHANGELOG.html
Normal file
@@ -0,0 +1,440 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>DOS Update System - Technical Documentation</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;0,700;1,400&family=Raleway:wght@400;600;700;800&family=Fira+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
:root {
|
||||
--color-primary: #1e3a8a;
|
||||
--color-secondary: #3b82f6;
|
||||
--color-text: #1f2937;
|
||||
--color-text-light: #4b5563;
|
||||
--color-border: #d1d5db;
|
||||
--color-bg-code: #f9fafb;
|
||||
--color-bg-highlight: #eff6ff;
|
||||
--font-body: 'Lora', Georgia, serif;
|
||||
--font-heading: 'Raleway', -apple-system, sans-serif;
|
||||
--font-mono: 'Fira Mono', 'Consolas', monospace;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-body);
|
||||
font-size: 11pt;
|
||||
line-height: 1.7;
|
||||
color: var(--color-text);
|
||||
background: white;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 20mm;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 700;
|
||||
line-height: 1.3;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.75em;
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 28pt;
|
||||
font-weight: 800;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5em;
|
||||
padding-bottom: 0.3em;
|
||||
border-bottom: 3px solid var(--color-primary);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
margin-top: 1.5em;
|
||||
padding-bottom: 0.2em;
|
||||
border-bottom: 2px solid var(--color-border);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: var(--color-secondary);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 12pt;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: 700;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin-left: 1.5em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: var(--color-bg-code);
|
||||
border: 1px solid var(--color-border);
|
||||
border-left: 4px solid var(--color-secondary);
|
||||
padding: 1em;
|
||||
margin: 1em 0;
|
||||
overflow-x: auto;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9pt;
|
||||
line-height: 1.5;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9.5pt;
|
||||
background: var(--color-bg-code);
|
||||
padding: 0.15em 0.4em;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
pre code {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1.5em 0;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: 1px solid var(--color-border);
|
||||
padding: 0.75em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: var(--color-primary);
|
||||
color: white;
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
background: var(--color-bg-code);
|
||||
}
|
||||
|
||||
.metadata {
|
||||
background: var(--color-bg-highlight);
|
||||
border-left: 4px solid var(--color-secondary);
|
||||
padding: 1em;
|
||||
margin-bottom: 2em;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
.metadata p {
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
|
||||
.divider {
|
||||
border: none;
|
||||
border-top: 1px solid var(--color-border);
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
.diagram {
|
||||
background: var(--color-bg-code);
|
||||
border: 2px solid var(--color-border);
|
||||
padding: 1.5em;
|
||||
margin: 1.5em 0;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9pt;
|
||||
line-height: 1.4;
|
||||
white-space: pre;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
max-width: 100%;
|
||||
padding: 15mm;
|
||||
}
|
||||
|
||||
h1 {
|
||||
page-break-before: auto;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
h2, h3, h4 {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
pre, table, .diagram {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 20mm;
|
||||
@bottom-center {
|
||||
content: "Page " counter(page);
|
||||
font-family: var(--font-heading);
|
||||
font-size: 9pt;
|
||||
color: var(--color-text-light);
|
||||
}
|
||||
@bottom-right {
|
||||
content: "DOS Update System - Technical Documentation";
|
||||
font-family: var(--font-heading);
|
||||
font-size: 8pt;
|
||||
color: var(--color-text-light);
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>DOS Update System - Technical Documentation</h1>
|
||||
|
||||
<div class="metadata">
|
||||
<p><strong>Document Version:</strong> 1.0</p>
|
||||
<p><strong>Date:</strong> January 19, 2026</p>
|
||||
<p><strong>Audience:</strong> Engineers and System Administrators</p>
|
||||
</div>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>System Overview</h2>
|
||||
<p>The DOS Update System automatically downloads software updates and uploads test data on every machine boot. No manual intervention required.</p>
|
||||
|
||||
<p><strong>Key Features:</strong></p>
|
||||
<ul>
|
||||
<li>Automatic updates on boot</li>
|
||||
<li>Centralized file management on AD2</li>
|
||||
<li>15-minute sync interval to NAS</li>
|
||||
<li>DOS 6.22 compatible</li>
|
||||
</ul>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>System Architecture</h2>
|
||||
|
||||
<h3>File Flow</h3>
|
||||
|
||||
<div class="diagram">┌─────────────────────────────────────────────────────────────────┐
|
||||
│ AD2 Server (192.168.0.6) │
|
||||
│ C:\Shares\test\COMMON\ProdSW\ │
|
||||
│ │
|
||||
│ Engineers place files here (via \\AD2\test\COMMON\ProdSW\) │
|
||||
└──────────────────────┬──────────────────────────────────────────┘
|
||||
│
|
||||
│ Automatic Sync (every 15 minutes)
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ D2TESTNAS (192.168.0.9) │
|
||||
│ /data/test/COMMON/ProdSW/ │
|
||||
│ │
|
||||
│ DOS machines access via T:\COMMON\ProdSW\ (SMB1) │
|
||||
└──────────────────────┬──────────────────────────────────────────┘
|
||||
│
|
||||
│ NWTOC.BAT downloads updates
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ DOS Machines (~30 units: TS-01 through TS-30) │
|
||||
│ C:\BAT\ and C:\ATE\ │
|
||||
│ │
|
||||
│ AUTOEXEC.BAT runs NWTOC + CTONW automatically on boot │
|
||||
└─────────────────────────────────────────────────────────────────┘</div>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>System Components</h2>
|
||||
|
||||
<h3>AUTOEXEC.BAT</h3>
|
||||
<p><strong>Location:</strong> C:\AUTOEXEC.BAT on each DOS machine<br>
|
||||
<strong>Function:</strong> Machine startup configuration</p>
|
||||
|
||||
<p><strong>Executes on boot:</strong></p>
|
||||
<ol>
|
||||
<li>Sets machine identity (SET MACHINE=TS-XX)</li>
|
||||
<li>Starts network client</li>
|
||||
<li>Calls NWTOC.BAT (downloads updates)</li>
|
||||
<li>Calls CTONW.BAT (uploads test data)</li>
|
||||
</ol>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h3>NWTOC.BAT (Network to Computer)</h3>
|
||||
<p><strong>Location:</strong> C:\BAT\NWTOC.BAT<br>
|
||||
<strong>Function:</strong> Downloads software updates from network</p>
|
||||
|
||||
<p><strong>Download paths:</strong></p>
|
||||
<ul>
|
||||
<li>T:\COMMON\ProdSW\*.BAT → C:\BAT\</li>
|
||||
<li>T:\COMMON\ProdSW\*.EXE → C:\ATE\</li>
|
||||
<li>T:\TS-XX\ProdSW\*.* → C:\BAT\ and C:\ATE\</li>
|
||||
<li>T:\COMMON\DOS\*.NEW → Staged for reboot</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Features:</strong></p>
|
||||
<ul>
|
||||
<li>Only downloads newer files (XCOPY /D flag)</li>
|
||||
<li>Creates .BAK backups before overwriting</li>
|
||||
<li>Handles system file staging (AUTOEXEC.NEW, CONFIG.NEW)</li>
|
||||
</ul>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h3>CTONW.BAT (Computer to Network)</h3>
|
||||
<p><strong>Location:</strong> C:\BAT\CTONW.BAT<br>
|
||||
<strong>Function:</strong> Uploads test data and programs to network</p>
|
||||
|
||||
<p><strong>Upload paths:</strong></p>
|
||||
<ul>
|
||||
<li>C:\BAT\*.BAT → T:\TS-XX\ProdSW\</li>
|
||||
<li>C:\ATE\*.EXE, *.CFG → T:\TS-XX\ProdSW\</li>
|
||||
<li>C:\ATE\*DATA\*.DAT → T:\TS-XX\LOGS\*LOG\</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Data routing:</strong></p>
|
||||
<ul>
|
||||
<li>Programs → ProdSW (for distribution)</li>
|
||||
<li>Test data → LOGS (for database import)</li>
|
||||
</ul>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h3>DEPLOY.BAT</h3>
|
||||
<p><strong>Location:</strong> T:\COMMON\ProdSW\DEPLOY.BAT<br>
|
||||
<strong>Function:</strong> Initial machine deployment<br>
|
||||
<strong>Usage:</strong> <code>T:\UPDATE.BAT TS-XX</code> (one-time setup)</p>
|
||||
|
||||
<p><strong>Deployment steps:</strong></p>
|
||||
<ol>
|
||||
<li>Creates C:\BAT\ directory</li>
|
||||
<li>Copies all batch files to C:\BAT\</li>
|
||||
<li>Installs AUTOEXEC.BAT with machine name</li>
|
||||
<li>Creates network backup folder T:\TS-XX\</li>
|
||||
</ol>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h3>UPDATE.BAT (Root Redirect)</h3>
|
||||
<p><strong>Location:</strong> T:\UPDATE.BAT<br>
|
||||
<strong>Function:</strong> Shortcut to DEPLOY.BAT<br>
|
||||
<strong>Usage:</strong> <code>T:\UPDATE.BAT TS-XX</code></p>
|
||||
|
||||
<pre><code>@ECHO OFF
|
||||
REM UPDATE.BAT - Redirect to DEPLOY.BAT in proper location
|
||||
REM Usage: UPDATE.BAT machine-name
|
||||
REM Example: UPDATE.BAT TS-4R
|
||||
CALL T:\COMMON\ProdSW\DEPLOY.BAT %1</code></pre>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>Automatic Workflow</h2>
|
||||
|
||||
<ol>
|
||||
<li>DOS machine boots</li>
|
||||
<li>Network starts (C:\NET\STARTNET.BAT)</li>
|
||||
<li>NWTOC runs automatically (downloads updates)</li>
|
||||
<li>CTONW runs automatically (uploads test data)</li>
|
||||
<li>System ready for testing</li>
|
||||
</ol>
|
||||
|
||||
<p><strong>User actions required:</strong> None</p>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>Deployment Status</h2>
|
||||
|
||||
<h3>Files on AD2:</h3>
|
||||
<ul>
|
||||
<li>Location: <code>C:\Shares\test\COMMON\ProdSW\</code></li>
|
||||
<li>Access: <code>\\AD2\test\COMMON\ProdSW\</code></li>
|
||||
</ul>
|
||||
|
||||
<h3>Sync to NAS:</h3>
|
||||
<ul>
|
||||
<li>Frequency: Every 15 minutes</li>
|
||||
<li>Destination: <code>/data/test/COMMON/ProdSW/</code></li>
|
||||
<li>DOS Access: <code>T:\COMMON\ProdSW\</code></li>
|
||||
</ul>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>DOS 6.22 Compatibility</h2>
|
||||
|
||||
<p><strong>Directory testing:</strong> Uses <code>*.*</code> wildcard instead of NUL device</p>
|
||||
<pre><code>IF NOT EXIST C:\BAT\*.* MD C:\BAT</code></pre>
|
||||
|
||||
<p><strong>Pipe operations:</strong> Single pipes with temp files instead of multi-pipe chains</p>
|
||||
<pre><code>TYPE C:\AUTOEXEC.TM1 | FIND /V "REM Dataforth" > C:\AUTOEXEC.TM2
|
||||
TYPE C:\AUTOEXEC.TM2 | FIND /V "REM Automatically" > C:\AUTOEXEC.TM3</code></pre>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>File List</h2>
|
||||
|
||||
<h3>Core Files:</h3>
|
||||
<ul>
|
||||
<li>AUTOEXEC.BAT (82 lines)</li>
|
||||
<li>NWTOC.BAT (221 lines)</li>
|
||||
<li>CTONW.BAT (272 lines)</li>
|
||||
<li>DEPLOY.BAT (188 lines)</li>
|
||||
<li>UPDATE.BAT (5 lines)</li>
|
||||
</ul>
|
||||
|
||||
<h3>Utility Files:</h3>
|
||||
<ul>
|
||||
<li>CHECKUPD.BAT - Check available updates</li>
|
||||
<li>STAGE.BAT - System file staging</li>
|
||||
<li>REBOOT.BAT - Apply staged updates</li>
|
||||
</ul>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>Support</h2>
|
||||
|
||||
<p><strong>Documentation:</strong></p>
|
||||
<ul>
|
||||
<li>ENGINEER_HOWTO_GUIDE.md - Engineer procedures</li>
|
||||
<li>DEPLOYMENT_GUIDE.md - Test staff procedures</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Emergency Contact:</strong></p>
|
||||
<ul>
|
||||
<li>System Down: Contact IT immediately</li>
|
||||
<li>Rollback Required: See git history</li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
563
docs/ENGINEER_HOWTO_GUIDE.html
Normal file
563
docs/ENGINEER_HOWTO_GUIDE.html
Normal file
@@ -0,0 +1,563 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>DOS Update System - Engineer Guide</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;0,700;1,400&family=Raleway:wght@400;600;700;800&family=Fira+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
:root {
|
||||
--color-primary: #1e3a8a;
|
||||
--color-secondary: #3b82f6;
|
||||
--color-text: #1f2937;
|
||||
--color-text-light: #4b5563;
|
||||
--color-border: #d1d5db;
|
||||
--color-bg-code: #f9fafb;
|
||||
--color-bg-highlight: #eff6ff;
|
||||
--color-warning: #fef3c7;
|
||||
--color-warning-border: #fbbf24;
|
||||
--font-body: 'Lora', Georgia, serif;
|
||||
--font-heading: 'Raleway', -apple-system, sans-serif;
|
||||
--font-mono: 'Fira Mono', 'Consolas', monospace;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-body);
|
||||
font-size: 11pt;
|
||||
line-height: 1.7;
|
||||
color: var(--color-text);
|
||||
background: white;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 20mm;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 700;
|
||||
line-height: 1.3;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.75em;
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 28pt;
|
||||
font-weight: 800;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5em;
|
||||
padding-bottom: 0.3em;
|
||||
border-bottom: 3px solid var(--color-primary);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18pt;
|
||||
margin-top: 1.5em;
|
||||
padding-bottom: 0.2em;
|
||||
border-bottom: 2px solid var(--color-border);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14pt;
|
||||
color: var(--color-secondary);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 12pt;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: 700;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin-left: 1.5em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: var(--color-bg-code);
|
||||
border: 1px solid var(--color-border);
|
||||
border-left: 4px solid var(--color-secondary);
|
||||
padding: 1em;
|
||||
margin: 1em 0;
|
||||
overflow-x: auto;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9pt;
|
||||
line-height: 1.5;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9.5pt;
|
||||
background: var(--color-bg-code);
|
||||
padding: 0.15em 0.4em;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
pre code {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1.5em 0;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: 1px solid var(--color-border);
|
||||
padding: 0.75em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: var(--color-primary);
|
||||
color: white;
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
background: var(--color-bg-code);
|
||||
}
|
||||
|
||||
.metadata {
|
||||
background: var(--color-bg-highlight);
|
||||
border-left: 4px solid var(--color-secondary);
|
||||
padding: 1em;
|
||||
margin-bottom: 2em;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
.metadata p {
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
|
||||
.divider {
|
||||
border: none;
|
||||
border-top: 1px solid var(--color-border);
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
.note-box {
|
||||
background: var(--color-warning);
|
||||
border: 1px solid var(--color-warning-border);
|
||||
border-left: 4px solid var(--color-warning-border);
|
||||
padding: 1em;
|
||||
margin: 1em 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.note-box p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.diagram {
|
||||
background: var(--color-bg-code);
|
||||
border: 2px solid var(--color-border);
|
||||
padding: 1.5em;
|
||||
margin: 1.5em 0;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 9pt;
|
||||
line-height: 1.4;
|
||||
white-space: pre;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.toc {
|
||||
background: var(--color-bg-code);
|
||||
border: 1px solid var(--color-border);
|
||||
padding: 1.5em;
|
||||
margin: 2em 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.toc h2 {
|
||||
margin-top: 0;
|
||||
font-size: 14pt;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.toc ol {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.toc a {
|
||||
color: var(--color-secondary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.toc a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
max-width: 100%;
|
||||
padding: 15mm;
|
||||
}
|
||||
|
||||
h1 {
|
||||
page-break-before: auto;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
h2, h3, h4 {
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
pre, table, .diagram, .note-box {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.toc {
|
||||
page-break-after: always;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 20mm;
|
||||
@bottom-center {
|
||||
content: "Page " counter(page);
|
||||
font-family: var(--font-heading);
|
||||
font-size: 9pt;
|
||||
color: var(--color-text-light);
|
||||
}
|
||||
@bottom-right {
|
||||
content: "Engineer Guide";
|
||||
font-family: var(--font-heading);
|
||||
font-size: 8pt;
|
||||
color: var(--color-text-light);
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>DOS Update System - Engineer Guide</h1>
|
||||
|
||||
<div class="metadata">
|
||||
<p><strong>Document Version:</strong> 1.0</p>
|
||||
<p><strong>Date:</strong> January 19, 2026</p>
|
||||
<p><strong>Audience:</strong> Engineers and System Administrators</p>
|
||||
<p><strong>Prerequisites:</strong> Network access to \\AD2\test\ share</p>
|
||||
</div>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<div class="toc">
|
||||
<h2>Table of Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#quick-start">Quick Start</a></li>
|
||||
<li><a href="#accessing-share">Accessing the Test Share</a></li>
|
||||
<li><a href="#file-placement">File Placement Guide</a></li>
|
||||
<li><a href="#sync-process">Sync Process</a></li>
|
||||
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
||||
<li><a href="#best-practices">Best Practices</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="quick-start">Quick Start</h2>
|
||||
|
||||
<p><strong>To deploy a software update:</strong></p>
|
||||
<ol>
|
||||
<li>Map network drive to <code>\\AD2\test</code></li>
|
||||
<li>Copy files to: <code>\\AD2\test\COMMON\ProdSW\</code></li>
|
||||
<li>Wait 15 minutes for sync to NAS</li>
|
||||
<li>DOS machines download on next reboot</li>
|
||||
</ol>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="accessing-share">Accessing the Test Share</h2>
|
||||
|
||||
<h3>Map Network Drive</h3>
|
||||
|
||||
<p><strong>Windows File Explorer:</strong></p>
|
||||
<ol>
|
||||
<li>Open File Explorer</li>
|
||||
<li>Click "Map network drive"</li>
|
||||
<li>Drive letter: <code>T:</code></li>
|
||||
<li>Path: <code>\\AD2\test</code></li>
|
||||
<li>Credentials: <code>INTRANET\[your-username]</code></li>
|
||||
</ol>
|
||||
|
||||
<p>Once mapped successfully, you'll see T: drive appear in File Explorer with access to the test share folders.</p>
|
||||
|
||||
<p><strong>Command Line:</strong></p>
|
||||
<pre><code>net use T: \\AD2\test /persistent:yes</code></pre>
|
||||
|
||||
<p><strong>PowerShell:</strong></p>
|
||||
<pre><code>New-PSDrive -Name "T" -PSProvider FileSystem -Root "\\AD2\test" -Persist</code></pre>
|
||||
|
||||
<h3>Direct UNC Path</h3>
|
||||
<pre><code>copy C:\MyFiles\*.BAT \\AD2\test\COMMON\ProdSW\</code></pre>
|
||||
|
||||
<h3>Folder Structure</h3>
|
||||
<pre><code>\\AD2\test\
|
||||
├── COMMON\
|
||||
│ ├── ProdSW\ ← Batch files, executables, configs
|
||||
│ ├── DOS\ ← System files (AUTOEXEC.NEW, CONFIG.NEW)
|
||||
│ └── NET\ ← Network client updates
|
||||
├── TS-01\ ← Machine-specific folders
|
||||
├── TS-02\
|
||||
└── TS-30\</code></pre>
|
||||
|
||||
<p>When you open <code>\\AD2\test\</code> in Windows Explorer, you'll see the COMMON folder plus numbered folders (TS-01 through TS-30) for each test machine.</p>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="file-placement">File Placement Guide</h2>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>File Type</th>
|
||||
<th>Destination</th>
|
||||
<th>Scope</th>
|
||||
<th>Deployed To</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Batch files (.BAT)</td>
|
||||
<td><code>\\AD2\test\COMMON\ProdSW\</code></td>
|
||||
<td>All machines</td>
|
||||
<td>C:\BAT\</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Executables (.EXE)</td>
|
||||
<td><code>\\AD2\test\COMMON\ProdSW\</code></td>
|
||||
<td>All machines</td>
|
||||
<td>C:\ATE\</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Config files (.CFG)</td>
|
||||
<td><code>\\AD2\test\COMMON\ProdSW\</code></td>
|
||||
<td>All machines</td>
|
||||
<td>C:\ATE\</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>System files (.NEW)</td>
|
||||
<td><code>\\AD2\test\COMMON\DOS\</code></td>
|
||||
<td>All machines</td>
|
||||
<td>Staged for reboot</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Machine-specific</td>
|
||||
<td><code>\\AD2\test\TS-XX\ProdSW\</code></td>
|
||||
<td>Single machine</td>
|
||||
<td>C:\BAT\ and C:\ATE\</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>Deploy Batch File Update</h3>
|
||||
|
||||
<ol>
|
||||
<li>Access: <code>\\AD2\test\COMMON\ProdSW\</code></li>
|
||||
<li>Backup existing file (rename to .BAK)</li>
|
||||
<li>Copy new file to share</li>
|
||||
<li>Verify file size and timestamp</li>
|
||||
<li>Wait 15 minutes for sync</li>
|
||||
<li>DOS machines download on next reboot</li>
|
||||
</ol>
|
||||
|
||||
<p>The file copy should complete instantly. You'll see the new file appear in the ProdSW folder with the current date and time.</p>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="sync-process">Sync Process</h2>
|
||||
|
||||
<div class="diagram">┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Step 1: Engineer places file on AD2 │
|
||||
│ Location: \\AD2\test\COMMON\ProdSW\NEWFILE.BAT │
|
||||
│ Time: 0 minutes │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ Automatic Sync (every 15 minutes)
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Step 2: File syncs to NAS │
|
||||
│ Location: /data/test/COMMON/ProdSW/NEWFILE.BAT │
|
||||
│ DOS Access: T:\COMMON\ProdSW\NEWFILE.BAT │
|
||||
│ Time: 0-15 minutes │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ DOS machine reboots
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Step 3: NWTOC downloads to DOS machine │
|
||||
│ Location: C:\BAT\NEWFILE.BAT │
|
||||
│ Status: Ready to use │
|
||||
└─────────────────────────────────────────────────────────────────┘</div>
|
||||
|
||||
<h3>Timing</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Action</th>
|
||||
<th>Time</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Copy to AD2</td>
|
||||
<td>Instant</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AD2 → NAS sync</td>
|
||||
<td>0-15 minutes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NAS → DOS machine</td>
|
||||
<td>Next reboot</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="note-box">
|
||||
<p><strong>For urgent updates:</strong> Ask test staff to reboot machine or manually run NWTOC.BAT</p>
|
||||
</div>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="troubleshooting">Troubleshooting</h2>
|
||||
|
||||
<h3>Cannot Access \\AD2\test\</h3>
|
||||
|
||||
<p><strong>Solutions:</strong></p>
|
||||
<ol>
|
||||
<li>Verify credentials: <code>INTRANET\username</code></li>
|
||||
<li>Ping AD2: <code>ping 192.168.0.6</code></li>
|
||||
<li>Enable SMB1 if required (Windows 10+)</li>
|
||||
<li>If still unable to access, contact IT</li>
|
||||
</ol>
|
||||
|
||||
<p>If the network path is not accessible, Windows will display an error: "\\AD2\test is not accessible. You might not have permission to use this network resource."</p>
|
||||
|
||||
<h3>File Not Updating on DOS Machine</h3>
|
||||
|
||||
<p><strong>Check:</strong></p>
|
||||
<ol>
|
||||
<li>File exists on AD2: <code>dir \\AD2\test\COMMON\ProdSW\FILENAME.BAT</code></li>
|
||||
<li>Wait 15+ minutes for sync</li>
|
||||
<li>Verify on NAS: <code>DIR T:\COMMON\ProdSW\</code> on DOS machine</li>
|
||||
<li>Check DOS clock (must be correct for XCOPY /D to work)</li>
|
||||
<li>Force update: Delete file on DOS, run NWTOC</li>
|
||||
</ol>
|
||||
|
||||
<h3>Sync Not Happening</h3>
|
||||
|
||||
<p><strong>Check:</strong></p>
|
||||
<ol>
|
||||
<li>Scheduled task on AD2 is running</li>
|
||||
<li>NAS is accessible from AD2</li>
|
||||
<li>Ping NAS: <code>ping 192.168.0.9</code></li>
|
||||
<li>Contact IT to manually trigger sync</li>
|
||||
</ol>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2 id="best-practices">Best Practices</h2>
|
||||
|
||||
<h3>File Naming</h3>
|
||||
|
||||
<p><strong>Use:</strong></p>
|
||||
<ul>
|
||||
<li>Uppercase: <code>MYFILE.BAT</code></li>
|
||||
<li>8.3 format: <code>FILENAME.EXT</code></li>
|
||||
<li>Underscores: <code>MY_FILE.BAT</code></li>
|
||||
<li>Dates: <code>FILE_20260119.BAT</code></li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Avoid:</strong></p>
|
||||
<ul>
|
||||
<li>Spaces: <code>MY FILE.BAT</code></li>
|
||||
<li>Special characters: <code>FILE@#$.BAT</code></li>
|
||||
<li>Long names: <code>VERYLONGFILENAME.BAT</code></li>
|
||||
</ul>
|
||||
|
||||
<h3>Testing</h3>
|
||||
|
||||
<p><strong>Always test on TS-30 first:</strong></p>
|
||||
<ol>
|
||||
<li>Deploy to <code>\\AD2\test\TS-30\ProdSW\</code></li>
|
||||
<li>Wait for sync + reboot TS-30</li>
|
||||
<li>Verify functionality</li>
|
||||
<li>Deploy to COMMON if successful</li>
|
||||
</ol>
|
||||
|
||||
<h3>Backup</h3>
|
||||
|
||||
<p><strong>Before deploying:</strong></p>
|
||||
<ol>
|
||||
<li>Rename old file to .BAK</li>
|
||||
<li>Or copy to <code>_backup\</code> folder</li>
|
||||
<li>Include date in backup filename</li>
|
||||
<li>Keep backups for 30 days</li>
|
||||
</ol>
|
||||
|
||||
<h3>Communication</h3>
|
||||
|
||||
<p><strong>Notify test staff:</strong></p>
|
||||
<ul>
|
||||
<li>Email: What changed, expected behavior</li>
|
||||
<li>Urgent updates: Phone or Teams</li>
|
||||
<li>System file updates: Schedule during off-hours</li>
|
||||
</ul>
|
||||
|
||||
<hr class="divider">
|
||||
|
||||
<h2>Quick Reference</h2>
|
||||
|
||||
<p><strong>Deployment time:</strong> 15 minutes to 24 hours (depending on reboot schedule)</p>
|
||||
|
||||
<p><strong>File locations:</strong></p>
|
||||
<ul>
|
||||
<li>COMMON: All 30 machines</li>
|
||||
<li>TS-XX: Specific machine only</li>
|
||||
<li>Machine-specific overrides COMMON</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Emergency rollback:</strong></p>
|
||||
<pre><code>copy \\AD2\test\COMMON\ProdSW\_backup\FILE.BAK \\AD2\test\COMMON\ProdSW\FILE.BAT</code></pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -282,11 +282,12 @@ Copy-Item C:\MyFiles\*.BAT -Destination \\AD2\test\COMMON\ProdSW\
|
||||
2. File syncs to NAS (15 minutes)
|
||||
3. DOS machine reboots
|
||||
4. AUTOEXEC.BAT runs automatically:
|
||||
- Network starts
|
||||
- Network starts (STARTNET.BAT)
|
||||
- NWTOC downloads updates from T:\COMMON\ProdSW
|
||||
- NWTOC downloads machine-specific updates from T:\TS-XX\ProdSW
|
||||
- CTONW uploads test data to T:\TS-XX\LOGS
|
||||
5. System ready for testing
|
||||
- MENUX test menu loads (C:\ATE\MENUX.EXE)
|
||||
5. System ready for testing - test staff selects module type from menu
|
||||
|
||||
**No intervention required from test staff.**
|
||||
|
||||
|
||||
60
fix-common-junction.ps1
Normal file
60
fix-common-junction.ps1
Normal file
@@ -0,0 +1,60 @@
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host "Creating Junction: COMMON -> _COMMON" -ForegroundColor Cyan
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Write-Host "[1/4] Backing up COMMON to COMMON.backup..." -ForegroundColor Yellow
|
||||
if (Test-Path "C:\Shares\test\COMMON.backup") {
|
||||
Remove-Item "C:\Shares\test\COMMON.backup" -Recurse -Force
|
||||
}
|
||||
Copy-Item "C:\Shares\test\COMMON" "C:\Shares\test\COMMON.backup" -Recurse -Force
|
||||
Write-Host "[OK] Backup created" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "[2/4] Copying AUTOEXEC.BAT from COMMON to _COMMON..." -ForegroundColor Yellow
|
||||
Copy-Item "C:\Shares\test\COMMON\ProdSW\AUTOEXEC.BAT" "C:\Shares\test\_COMMON\ProdSW\" -Force
|
||||
Write-Host "[OK] AUTOEXEC.BAT copied to _COMMON" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "[3/4] Removing COMMON directory..." -ForegroundColor Yellow
|
||||
Remove-Item "C:\Shares\test\COMMON" -Recurse -Force
|
||||
Write-Host "[OK] COMMON removed" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "[4/4] Creating junction COMMON -> _COMMON..." -ForegroundColor Yellow
|
||||
cmd /c mklink /J "C:\Shares\test\COMMON" "C:\Shares\test\_COMMON"
|
||||
Write-Host "[OK] Junction created" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "=== Verification ===" -ForegroundColor Yellow
|
||||
$junction = Get-Item "C:\Shares\test\COMMON" -Force
|
||||
Write-Host "COMMON LinkType: $($junction.LinkType)" -ForegroundColor Cyan
|
||||
Write-Host "COMMON Target: $($junction.Target)" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "=== File count check ===" -ForegroundColor Yellow
|
||||
$underCount = (Get-ChildItem "C:\Shares\test\_COMMON\ProdSW" -File | Measure-Object).Count
|
||||
$commonCount = (Get-ChildItem "C:\Shares\test\COMMON\ProdSW" -File | Measure-Object).Count
|
||||
Write-Host "_COMMON\ProdSW: $underCount files" -ForegroundColor White
|
||||
Write-Host "COMMON\ProdSW: $commonCount files (via junction)" -ForegroundColor White
|
||||
|
||||
if ($underCount -eq $commonCount) {
|
||||
Write-Host "[OK] File counts match!" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "[ERROR] File counts differ!" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "================================================" -ForegroundColor Green
|
||||
Write-Host "Junction Created Successfully!" -ForegroundColor Green
|
||||
Write-Host "================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Result:" -ForegroundColor Cyan
|
||||
Write-Host " COMMON is now a junction pointing to _COMMON" -ForegroundColor White
|
||||
Write-Host " Both paths access the same files" -ForegroundColor White
|
||||
Write-Host " Backup saved to: C:\Shares\test\COMMON.backup" -ForegroundColor White
|
||||
35
manual-push-to-nas.sh
Normal file
35
manual-push-to-nas.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "================================================"
|
||||
echo "Manually Pushing BAT Files to NAS"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
|
||||
echo "[1/3] Pushing files to /data/test/COMMON/ProdSW/..."
|
||||
scp -o StrictHostKeyChecking=no \
|
||||
D:/ClaudeTools/DEPLOY.BAT \
|
||||
D:/ClaudeTools/CTONW.BAT \
|
||||
D:/ClaudeTools/CTONWTXT.BAT \
|
||||
D:/ClaudeTools/NWTOC.BAT \
|
||||
D:/ClaudeTools/UPDATE.BAT \
|
||||
D:/ClaudeTools/CHECKUPD.BAT \
|
||||
D:/ClaudeTools/STAGE.BAT \
|
||||
D:/ClaudeTools/REBOOT.BAT \
|
||||
D:/ClaudeTools/AUTOEXEC.BAT \
|
||||
root@192.168.0.9:/data/test/COMMON/ProdSW/
|
||||
echo "[OK] COMMON/ProdSW updated"
|
||||
echo ""
|
||||
|
||||
echo "[2/3] Pushing UPDATE.BAT to /data/test/ root..."
|
||||
scp -o StrictHostKeyChecking=no D:/ClaudeTools/UPDATE.BAT root@192.168.0.9:/data/test/
|
||||
echo "[OK] UPDATE.BAT pushed to root"
|
||||
echo ""
|
||||
|
||||
echo "[3/3] Pushing DEPLOY.BAT to /data/test/ root..."
|
||||
scp -o StrictHostKeyChecking=no D:/ClaudeTools/DEPLOY.BAT root@192.168.0.9:/data/test/
|
||||
echo "[OK] DEPLOY.BAT pushed to root"
|
||||
echo ""
|
||||
|
||||
echo "================================================"
|
||||
echo "Manual Push Complete!"
|
||||
echo "================================================"
|
||||
6
read-sync-script.ps1
Normal file
6
read-sync-script.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Get-Content "C:\Shares\test\scripts\Sync-FromNAS.ps1"
|
||||
}
|
||||
6
search-menux-ad2.ps1
Normal file
6
search-menux-ad2.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Get-ChildItem C:\Shares\test -Recurse -Filter '*menux*.bas' -ErrorAction SilentlyContinue | Select-Object FullName, LastWriteTime, Length
|
||||
}
|
||||
@@ -497,6 +497,7 @@ fatal: Could not read from remote repository.
|
||||
- Root Files: `T:\UPDATE.BAT`, `T:\DEPLOY.BAT`
|
||||
- Batch Files: `C:\BAT\`
|
||||
- Programs/Data: `C:\ATE\` (with subdirectories)
|
||||
- Startup: AUTOEXEC.BAT → STARTNET.BAT → MENUX.EXE (test menu interface)
|
||||
|
||||
**SSH Keys:**
|
||||
- Location: `C:\Users\MikeSwanson\.ssh\`
|
||||
|
||||
@@ -1,40 +1,30 @@
|
||||
# Trigger sync on AD2 by creating and executing a remote batch file
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
$Username = "INTRANET\sysadmin"
|
||||
$Password = ConvertTo-SecureString "Paper123!@#" -AsPlainText -Force
|
||||
$Cred = New-Object System.Management.Automation.PSCredential($Username, $Password)
|
||||
|
||||
Write-Host "Connecting to AD2..."
|
||||
New-PSDrive -Name TEMP_AD2 -PSProvider FileSystem -Root "\\192.168.0.6\C$" -Credential $Cred | Out-Null
|
||||
Write-Host "[OK] Connected"
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host "Triggering Sync Script on AD2" -ForegroundColor Cyan
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Create a trigger batch file on AD2
|
||||
$triggerContent = @"
|
||||
@ECHO OFF
|
||||
ECHO Running sync manually...
|
||||
powershell.exe -ExecutionPolicy Bypass -File C:\Shares\test\scripts\Sync-FromNAS.ps1 -Verbose
|
||||
ECHO Sync complete.
|
||||
"@
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Write-Host "Running Sync-FromNAS.ps1..." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
Set-Content -Path "TEMP_AD2:\Shares\test\scripts\run-sync-now.bat" -Value $triggerContent -Force
|
||||
Write-Host "[OK] Created trigger script on AD2"
|
||||
# Run the sync script
|
||||
& "C:\Shares\test\scripts\Sync-FromNAS.ps1"
|
||||
|
||||
# Try to execute it via PsExec-style approach
|
||||
Write-Host ""
|
||||
Write-Host "Attempting to trigger sync..."
|
||||
Write-Host ""
|
||||
Write-Host ""
|
||||
Write-Host "Sync complete!" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Create a scheduled task to run immediately
|
||||
$taskCmd = @"
|
||||
schtasks /create /s 192.168.0.6 /u INTRANET\sysadmin /p "Paper123!@#" /tn "TempSyncTrigger" /tr "C:\Shares\test\scripts\run-sync-now.bat" /sc once /st 00:00 /f
|
||||
schtasks /run /s 192.168.0.6 /u INTRANET\sysadmin /p "Paper123!@#" /tn "TempSyncTrigger"
|
||||
"@
|
||||
|
||||
Write-Host $taskCmd
|
||||
Invoke-Expression $taskCmd
|
||||
# Show sync status
|
||||
if (Test-Path "C:\Shares\test\_SYNC_STATUS.txt") {
|
||||
Write-Host "=== Sync Status ===" -ForegroundColor Yellow
|
||||
Get-Content "C:\Shares\test\_SYNC_STATUS.txt" | Select-Object -Last 10
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "[INFO] Sync triggered. Check C:\Shares\test\scripts\sync-from-nas.log for results."
|
||||
|
||||
Remove-PSDrive TEMP_AD2
|
||||
Write-Host "================================================" -ForegroundColor Green
|
||||
Write-Host "Sync Triggered Successfully" -ForegroundColor Green
|
||||
Write-Host "================================================" -ForegroundColor Green
|
||||
|
||||
24
verify-bat-deployment.ps1
Normal file
24
verify-bat-deployment.ps1
Normal file
@@ -0,0 +1,24 @@
|
||||
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
|
||||
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host "Checking BAT files on AD2" -ForegroundColor Cyan
|
||||
Write-Host "================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Invoke-Command -ComputerName 192.168.0.6 -Credential $cred -ScriptBlock {
|
||||
Write-Host "=== Root Files ===" -ForegroundColor Yellow
|
||||
Get-ChildItem C:\Shares\test\*.BAT -ErrorAction SilentlyContinue |
|
||||
Select-Object Name, Length, LastWriteTime |
|
||||
Format-Table -AutoSize
|
||||
|
||||
Write-Host "=== COMMON\ProdSW ===" -ForegroundColor Yellow
|
||||
Get-ChildItem C:\Shares\test\COMMON\ProdSW\*.BAT -ErrorAction SilentlyContinue |
|
||||
Select-Object Name, Length, LastWriteTime |
|
||||
Format-Table -AutoSize
|
||||
|
||||
Write-Host "=== _COMMON\ProdSW ===" -ForegroundColor Yellow
|
||||
Get-ChildItem "C:\Shares\test\_COMMON\ProdSW\*.BAT" -ErrorAction SilentlyContinue |
|
||||
Select-Object Name, Length, LastWriteTime |
|
||||
Format-Table -AutoSize
|
||||
}
|
||||
Reference in New Issue
Block a user