]> vilimpoc.org git repositories - dotfiles/log
dotfiles
6 days agodotfiles: Windows XP VM provisioning setup-windows-xp
Max Vilimpoc [Tue, 25 Aug 2026 12:48:08 +0000 (14:48 +0200)]
dotfiles: Windows XP VM provisioning

setup-windows-xp.bat provisions the throwaway XP VM that the XP-toolset
builds get tested on: an SSH server, the two logon-policy fixes XP needs
before SSH password auth can work at all, and Python 3.4.4, the last
CPython that runs there.

It downloads nothing. XP's SChannel stops at TLS 1.0, so the VM cannot
reach python.org or sourceforge over HTTPS; the installers are staged on
the host into vendor-xp/ (gitignored) and the script prints the shopping
list when they are missing. Run from the normal account it stages itself
to C:\xp-setup and hands back the runas line, since a share mounted under
one account is invisible to the Administrator account.

Behaviour verified end to end against a stubbed environment rather than a
real XP box, which caught four bugs worth recording: shift renumbers %0,
so %~nx0 goes stale after option parsing; find.exe is shadowed by any unix
find on PATH and a probe write leaks "Access is denied" past 2>nul; and a
message string reaching echo via %~1 must contain no < > ( ) — carets do
not help once the quotes are gone, and a paren inside a nested if-block
closes the block early.

xp-fetch.py covers the other direction: CPython carries its own OpenSSL,
so the Python this installs is a TLS 1.2 client on a box where nothing
else is. cacert.pem comes with it because XP's root store cannot validate
a current certificate chain.

Known gap, recorded in the README: the OpenSSH 3.8.1p1 binary the manifest
asks for is no longer published on SourceForge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvpzKcPxN75rWPqGbSRyvJ

6 days agodotfiles: sync the Windows provisioning scripts
Max Vilimpoc [Tue, 25 Aug 2026 10:45:40 +0000 (12:45 +0200)]
dotfiles: sync the Windows provisioning scripts

Three changes made in the other copy of these scripts, ported back so
the two do not drift. The scripts are now byte-identical apart from a few
naming lines and the one divergence that is deliberate: this copy keeps
the PLACEHOLDER git identity, which the README tells you to edit before
running.

OpenSSH Server. Installed from the Windows on-demand capability (10/1809
and later), set Automatic, started, and reachable on all firewall
profiles. That last part is the one worth having: the capability ships
its own inbound rule, but it is Private-only on some images, and a VM's
host-only or bridged adapter gets classified Public more often than not
-- which presents as a service that is plainly running and plainly
unreachable.

That rule is adopted rather than duplicated. OpenSSH-Server-In-TCP is the
name the capability itself uses, so a second rule beside it under another
name would leave the narrow one in place and merely work around it, while
one under the same name would collide. Widen it to all profiles if it
exists, create it if it does not. One rule either way, under the name the
platform expects.

rsync. Windows ships the SSH transport and nothing to run over it, so
`rsync host:path` has no remote end. The nuket/rsync-windows build is
downloaded to C:\Tools\rsync and added to the machine PATH. Not "Program
Files", because the fallback when PATH lookup fails is --rsync-path and a
path with spaces is painful to quote through two shells. Machine rather
than user PATH, because the remote end runs as `rsync --server ...` in a
non-interactive session with no login shell: Win32-OpenSSH composes that
environment from the registry, so a machine entry resolves there and does
so for every account on the box. sshd is restarted after the write, since
the running service holds the environment it started with.

BinSkim now checks before it fetches. The .nupkg is a self-contained .NET
build -- 141 MB at 4.4.9.11 -- and the old code downloaded it every run
before working out it had nothing to do. The flat-container index is a
few KB of JSON; take the newest non-prerelease and compare against
nupkg-version.txt beside the installed tool. The download URL now
interpolates the version we checked, rather than the v2 /package/<id>
endpoint that redirects to whatever is newest right now. The PATH append
moved out of the download branch so a lost PATH entry no longer costs
141 MB to repair.

Both new sections warn rather than throw: a box that cannot run sshd
should still finish provisioning the toolchain it came for.

README picks up the remote-access notes, including the authorized_keys
ACL requirement and the separate file that accounts in the Administrators
group need.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3 weeks agodotfiles: Linux dev-box provisioning script
Max Vilimpoc [Thu, 6 Aug 2026 12:40:08 +0000 (14:40 +0200)]
dotfiles: Linux dev-box provisioning script

3 weeks agodotfiles: Windows dev-box provisioning scripts
Max Vilimpoc [Wed, 5 Aug 2026 09:48:21 +0000 (11:48 +0200)]
dotfiles: Windows dev-box provisioning scripts

Extracted from a native Windows project so the box setup can be reused
and versioned on its own.

setup-windows.bat runs the non-elevated half (winget installs, user PATH
edits for WinMerge and BinSkim, global git config) and then launches
setup-windows-with-uac.ps1 elevated, printing its transcript when the
elevated window closes.

setup-windows-with-uac.ps1 enables ssh-agent and installs Visual Studio
2022 Community in three labelled passes (base C++ workload, Clang/LLVM,
v141 + Windows XP toolset), the WDK 10.0.26100, and the Windows
Performance Toolkit.

The global git identity is PLACEHOLDER_NAME / PLACEHOLDER_EMAIL and must
be edited before the script is run. The runtime transcript
(setup-windows-uac.log) is gitignored: it embeds local machine paths.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>