UPDATE May 2022: Dell Repository Manager is all but dead. Post kept up for history reference.
ENV: Windows 10 Pro Desktop for Dell Repo Manager v2.2.4
Proxmox Containers running nginx for repo distribution
Background
I’ve personally found Dell Repository Manager (Business Client Version) to be an unstable beast of a program that I don’t not recommend unless you’re trying to manage updates on at least 30-40 Dell Latitude, Optiplex, Precision, or XPS series devices. Any less then this and its just not worth the time or bandwidth savings to implement this system; just use Dell Command Update to the default internet repo.
Dell Repo Manager is able to download and manage required updates for your local fleet of devices. It works with the standard version of Dell Command update to build a local repo with only the updates you need.
Be warned, this will require semi-constant non-automated maintenance to keep up-to-date.
Premise
Dell Repo Manager on a Windows 10 Pro PC Downloads required updates files and stores them in a dell managed sub-folder on our primary file server. Repo manager exports catalog files (xml) just after each repo update and stores them in the root of this subfolder.
This folder is auto-synced (Synology Sync) to our other sites file servers for local access.
Proxmox based nginx containers mount this sub-folder and serve it over http; making sure the Catalog.xml file is in the root of the nginx servers folder structure. Each container is configured with the shortname (short hostname) ‘dell-repo’
Upon initial install of Dell Command Update (DCU) to a new unit a .bat script is run to configure DCU to point to the URL (http://dell-repo/Catalog.xml) for updates.
When DCU is run either manually or automatically it talks to nginx over http, downloads the latest catalog.xml file and determines which available updates are relevant to its own system. The Catalog.xml file also contains relative download links to each of the update files which are then requested and served up by nginx, again over http.
Updates are downloaded, applied and DCU will prompt for a restart if required.
Setup
Dell Repository Manager (DRM)
Forehead install DRM, start the (Business Client Version) program.
Under Application > Settings > Network Settings; set your proxy
Application > Settings > FileStore; set a downloads cache directory. Either on a large local HDD or network share. With 21 Dell PC Models currently supported by our local repo we are using 136GB (without cleanup). The file store is used to cache downloaded files so if you are managing multiple repo’s with overlapping models it does not download (potentially 600mb for NVidia driver updates) large updates multiple times.
Next goto Source > View Dell Online Catalog
Then to the My Repositories Tab and New > Manually Create New Repository.
Name It.
Base Repo is the Dell Online Catalog
Select your applicable product types under brands.
Select your current and if known future models
Nothing in Optional
Finish.
This will create a open a new tab across the top with your repo name. Press Create Catalog, save repository to the directory that will be mounted to nginx, select Full Repository and Press Save to add the job to the queue.
Show the Job Queue with the up chevron in the lower right. Slowey watch for a couple of hours (millage may vary) as it does its initial download.
Once the download job has completed you’ll need to show details and manually accept code signing certificates for certain updates.
Press Create Catalog again but this time, Catalog file only. Change the Base Location to your local repo hostname, in our case ‘http://dell-repo/’ and press save. This will replace the Catalog.xml file in the base of the repo directory (and the base of the web server directory) to point to the local repo. (This step needs to be completed every time a change is made to the repo, usually takes around 30 seconds)
Web Server Config (nginx)
Build Info
Area | Value |
---|---|
HyperVisor | Proxmox |
Type | LXC Container |
Hostname | dell-repo |
Privileged | Yes |
Template | centos-8-default_20191016_amd64.tar.xz |
Root Disk | 4GB, local-lvm, defaults |
CPU | Cores:2. defaults |
Memory | 512, 512swap |
Network | IPv4:DHCP, VLAN:6, FW:No, defaults |
Options | Features:cifs,Start on boot: Yes, order:any |
First Start:
( as root user) run the following
echo "proxy=http://<local proxy>:3128/" >> /etc/dnf/dnf.conf
dnf install epel-release -y
dnf distro-sync -y
dnf install vim ncdu cifs-utils nginx -y
dnf clean all
# Fix for container hostname issue
touch /etc/hostname
cd /etc
rm -rf localtime
ln -s /usr/share/zoneinfo/<local-tz-country>/<local-tz-city> localtime
date
Configure SMB mount of the dell-repo directory from the fs.
(Originally tried this with NFS, permissions issues and mounting subdirectories of share put me back to SMB)
#! /etc/fstab
//<local-fs-hostname>/dell-repo /mnt/dell-repo cifs ro,guest,file_mode=0777,dir_mode=0777 0 0
Edit the default nginx web service /etc/nginx/nginx.conf file back to basics, removing the default 80 and 443 web servers. Making sure to include the line “include /etc/nginx/conf.d/*.conf;”
Server Specific nginx config:
#! /etc/nginx/conf.d/dell-repo.conf
#-------------------------------------------------------------------------------
# dell-repo
#-------------------------------------------------------------------------------
server {
listen 80;
server_name dell-repo dell-repo.<internal-domain-name> dell-repo.<site-code>.<internal-domain-name>;
location / {
root /mnt/dell-repo/;
}
}
systemctl enable --now nginx
Install Script
We have a public (all ro) directory on our file servers that includes an Install directory containing all our standard software. In the “\\fs\public\Install\Dell” directory we have the latest Dell Command Update (x86) installer; a DCU configuration xml file; and a local-repo.bat file.
On new installs remove the version of DCU that came with windows from the Dell Factory, install the latest DCU, run the bat script which looks like this.
#! local-repo-univ.bat
cd %PROGRAMFILES%\dell\commandupdate
dcu-cli.exe /configure -importSettings="\fs\Public\Install\Dell\DellCommandUpdateSettings-univ.xml"
This script runs the DCU Command Line Interface (CLI) program and on the second line imports this xml config file.
#! DellCommandUpdateSettings-univ.xml
<Configuration>
<Group Name="Settings">
<Property Name="AppCode">
<Value>Classic</Value>
</Property>
<Property Name="InstallPath">
<Value>C:\Program Files\Dell\CommandUpdate\</Value>
</Property>
<Property Name="AppExeName">
<Value>DellCommandUpdate.exe</Value>
</Property>
<Group Name="General">
<Property Name="CatalogsPath">
<ValueList>
<Value>http://dell-repo/Catalog.xml</Value>
<Value>$DELL$</Value>
</ValueList>
</Property>
<Property Name="UserConsent">
<Value>true</Value>
</Property>
<Property Name="SuspendBitLocker">
<Value>true</Value>
</Property>
<Group Name="CustomProxySettings">
<Group Name="ProxyAuthentication" />
</Group>
</Group>
<Group Name="Schedule">
<Property Name="AutomationMode">
<Value>ScanDownloadNotify</Value>
</Property>
</Group>
<Group Name="UpdateFilter">
<Group Name="RecommendedLevel" />
<Group Name="UpdateType" />
<Group Name="DeviceCategory" />
</Group>
<Group Name="AdvancedDriverRestore">
<Property Name="IsAdvancedDriverRestoreEnabled">
<Value>true</Value>
</Property>
</Group>
</Group>
</Configuration>
The ValueLists under CatalogsPath is the only changed item within this config file. It simply adds the local repo ahead of the Dell Online Repo ($DELL$) using a short hostname so PCs that move between sites will always connect to the nearest repo.
Use
PCs setup to talk to the local repo should now be able to download updates successfully.
Updates downloaded from a local repo will show 0 bytes to download when displayed in the pre-update summary in DCU. Make sure to check the nginx access log if you have any errors while downloading.
Maintenance
As new updates become available from Dell you will need to update your local repository to allow clients to receive updates.
Though DRM has a “Run a comparison” option where you can compare your local repo database to the online catalog, it either does not work as intended, or I am just using it wrong, but it will not find new updates that are available for systems. Updates that have been retired (old files) and updates that are being directly replaced (changed) seem to work and will remove old files from your repo. But new updates for your pre-selected equipment does not seem to appear. Also their is no option to add new machines (say if you were purchasing OptiPlex 9020s and now you are getting OptiPlex 70 series machines) to an existing repo and have it just find new updates.
The work around I have in place on a monthly schedule I will:
- Load up DCU and download the latest online catalog.
- Compare this catalog to the local one removing old/changed updates.
- Go to the Client Dell Online Catalog Tab (which will appear after pressing Source > View Dell Online Catalog
- Under Filters, Supported Platform, control-clicking all current hardware that needs to be supported by this local repo.
- Selecting all the filtered results and “Copy To” those items into the local repo
- Going back to the local repo tab and running another Create Catalog > Full Repository to download any new files, which will use the FileStore to cache existing downloads.
- Once that completes and code signing certs accepted, Running Create Catalog again, Selecting Catalog File Only and changing the base location to your repo’s base url.
- This is usually a process I will start first thing in the morning and it will complete mid afternoon.
Afterthoughts
DCU can freeze for long periods of time, will crash about once in every three repo exports. Its not well through out in its use methodology or user interface as it does not seem to work as intended.
For large environments having nginx serve up potentially gigabytes worth of drivers for windows reinstalls in seconds can save a lot of time, and has made us more willing to try driver updates to fix issues during business hours.
For environments with a handful of PCs just upgrade your internet connection to make download faster, it not worth the time for DCU.
We support a 12 different OptiPlex, 7 different Latitude and 2 different Precision workstations models. The FileStore is currently 136GB (before cleaning), the main repo has 959 update files and is 112GB in size.
Catalog.xml is 27mb
DCU will update it self to new version as they become available and if you enable DCU auto update it can check for updates in the background and prompt users to install updates when available.