====== 6.1 File Share ======
The simplest distribution method: A network drive.
----
===== Why File Share? =====
**Advantages:**
* ✓ No additional server needed
* ✓ Quick to set up
* ✓ Permissions via Windows ACLs
* ✓ Everyone knows how to use folders
**Disadvantages:**
* ✗ No automatic versioning
* ✗ No dependency management
* ✗ Manual copying required
----
===== Directory Structure =====
A recommended structure for the share:
\\server\builds\openssl\
├── 3.6.0\
│ ├── win-x64\
│ │ ├── bin\
│ │ │ ├── libcrypto-3-x64.dll
│ │ │ ├── libssl-3-x64.dll
│ │ │ └── openssl.exe
│ │ ├── ssl\
│ │ │ └── openssl.cnf
│ │ └── README.txt
│ ├── win-x64-fips\
│ │ └── ... (with FIPS Provider)
│ ├── linux-x64\
│ │ └── ... (Shared Objects)
│ └── wasm\
│ └── ... (JS + WASM)
├── 3.5.0\
│ └── ... (older version)
└── latest -> 3.6.0\
----
===== Set up Share =====
==== 1. Create Folder ====
# On the server
mkdir D:\Builds\OpenSSL
mkdir D:\Builds\OpenSSL\3.6.0
mkdir D:\Builds\OpenSSL\3.6.0\win-x64
==== 2. Copy Files ====
# Copy build result
Copy-Item -Recurse "D:\Projects\openssl-3.6.0\bin\*" "D:\Builds\OpenSSL\3.6.0\win-x64\"
==== 3. Create Share ====
# As Administrator
New-SmbShare -Name "OpenSSL" -Path "D:\Builds\OpenSSL" -ReadAccess "Domain Users"
Or via GUI:
- Right-click on folder
- Properties → Sharing
- Advanced Sharing → Permissions
----
===== Usage =====
==== From Developer PC ====
# Access share
dir \\server\openssl\3.6.0\win-x64\bin\
# Copy to project
copy "\\server\openssl\3.6.0\win-x64\bin\*.dll" C:\MyProject\
==== Mount as Drive ====
# Permanently as O: (for OpenSSL)
net use O: \\server\openssl /persistent:yes
# Then simply:
copy O:\3.6.0\win-x64\bin\*.dll C:\MyProject\
----
===== Permissions =====
| Group | Permission |
|-------|------------|
| Build Server | Full Control (writes new builds) |
| Developers | Read (copy DLLs) |
| CI/CD Agents | Read |
==== PowerShell ====
# Set permissions (NTFS)
$acl = Get-Acl "D:\Builds\OpenSSL"
# Developers: Read only
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMAIN\Developers", "ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
# Build account: Full Control
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMAIN\BuildService", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-Acl "D:\Builds\OpenSSL" $acl
----
===== "latest" Symlink =====
For easy access to the current version:
# Create junction (like symlink)
cmd /c mklink /J "D:\Builds\OpenSSL\latest" "D:\Builds\OpenSSL\3.6.0"
# Then works:
# \\server\openssl\latest\win-x64\...
Update the symlink when a new version is released!
----
===== Automation =====
A PowerShell script for new releases:
# publish-openssl.ps1
param(
[string]$Version = "3.6.0",
[string]$SourceDir = "D:\Projects\openssl-3.6.0\bin",
[string]$SharePath = "\\server\openssl"
)
$TargetDir = "$SharePath\$Version\win-x64"
# Create folder if not present
if (!(Test-Path $TargetDir)) {
New-Item -ItemType Directory -Path $TargetDir -Force
}
# Copy files
Copy-Item -Recurse -Force "$SourceDir\*" $TargetDir
# Add README
@"
OpenSSL $Version
================
Build date: $(Get-Date -Format 'yyyy-MM-dd HH:mm')
Platform: Windows x64 (VC-WIN64A)
Contains:
- libcrypto-3-x64.dll
- libssl-3-x64.dll
- openssl.exe
Post-Quantum: ML-DSA, ML-KEM
"@ | Out-File "$TargetDir\README.txt"
Write-Host "Published: $TargetDir"
----
===== Continue to =====
* [[.:nuget-paket|Create NuGet Package]]
* [[.:versionierung|Versioning]]
* [[.:automatisierung:start|7. CI/CD]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//