Sure gzip is fun, but how do you use 7zip on Windows to compress/decompress to standard out?
dir | 7zip a -an -txz -bd -si -so > test.7z
type test.7z | 7zip x -an -txz -si -so
Yeah. Lots of crazy flags, but it works.
You’re welcome.
Sure gzip is fun, but how do you use 7zip on Windows to compress/decompress to standard out?
dir | 7zip a -an -txz -bd -si -so > test.7z
type test.7z | 7zip x -an -txz -si -so
Yeah. Lots of crazy flags, but it works.
You’re welcome.
I have some old stuff transcoded to Real Audio, because why not? It’s like a magical hidden file-format from years past.
Granted the streaming software is so old, it breaks with NAT, but there was an older playable RAM / playlist file that’d just pull down .ra’s from a web server, like a snap. Except I never could get it to work right, but I didn’t spend much energy on it, because who cares?

Well I went for it today, hooked up some tcpdump after getting the stupid ‘error 11’ and yeah, turns out that even the 3.0 client is HTTP 1.0. So that means it doesn’t use named servers, so you can’t really put it on a modern web server. It’s bad enough it doesn’t like modern cryptography, but this is just the worst. So I figured I’d just try to do something raw as I’m also kinda annoyed that I can’t have good old HTTP access to my vpsland archive, since google will penalize you for having HTTP sites/links. But a $1 VPS and a $1 domain, and I’m in business.
The first thing I went to do was to setup haproxy to front all this, as I like to use all kinds of weird backends, like UnixWare, or Windows NT 3.1
+
+frontend http8888
+ bind *:8888
+ mode http
+ http-request set-header Connection "keep-alive" if { req.ver "1.0" }
+ http-request set-header Host "dsotm.rabbitfoxtrot.uk" if { req.ver "1.0" }
+
+ acl dsotm hdr(host) -i dsotm.rabbitfoxtrot.uk:8888
+ acl is_ra path_end .ra .RA
+ acl is_ram path_end .ram .RAM
+ use_backend dsotm if dsotm || is_ra || is_ram
+
+backend dsotm
+ balance leastconn
+ option httpclose
+ option forwardfor
+ server local1 127.0.0.1:80 check inter 500 maxconn 20
a
This diff is for the /etc/haproxy/haproxy.conf which simply adds an 8888 front end. I set it to add a ‘keep-alive’ & ‘Host’ fields in the header to start to make it seem a bit right.
Next it will parse out the extension of what files are being retrieved. More magic would be needed to do multiple RealAudio’s in that different paths/trees for sure, but since this is the only one on that front end, just looking for the .ra/.ram is enough. I could also attach other sites to that front end, dancing around this, but that’s a bit more work.
that’ll attach a name, in this case dsotm.rabbitfoxtrot.uk, and then shove it to the local Apache server which I’ve moved to the loopback adapter.
Configuring Apache is a bit more involved with all the moving parts:
ports.conf
--- ports.conf.dist 2025-04-11 17:28:47.627256671 +0000
+++ ports.conf 2025-04-11 17:28:58.374176767 +0000
@@ -2,7 +2,7 @@
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
-Listen 80
+Listen 127.0.0.1:80
<IfModule ssl_module>
Listen 443
The whole point is to make Apache listen on the loopback interface, not the public address. This way haproxy gets the requests first so it can alter/direct them as needed.
The final part, which combines the MiME magic, is contained in the sites-availble directory which then of course is linked to the sites-enabled
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName dsotm.rabbitfoxtrot.uk
ServerAdmin [email protected]
DocumentRoot /srv/www/vpsland/low/DSOTM
AddType audio/x-pn-realaudio ram
AddType audio/x-pn-realaudio-plugin rpm
AddType audio/x-realaudio ra
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error/dsotm-error.log
CustomLog ${APACHE_LOG_DIR}/dsotm-access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
<Directory /srv/www/vpsland/low/DSOTM>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
Require all granted
</Directory>
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
So now I can still host a half dozen other websites on that Apache server but also have that special ‘front door’ access on port 8888 that’ll take notice of requests for .ra/.ram files and it’ll transform those into something more HTTP 1.1 which Apache will enjoy.

And even better, it works.
At some point, like the boxed wine project we’ll hit the point where you can just 90’s internet 100% in the browser to other browser ‘server’ nodes. It’ll be awesome.

I am not a cool person.
I don’t get invited to all the cool people events.
I never get to bask in the glory of FOMO Apple glory.
It’ll be 20 years ago the rumors were insane that Apple was going to dump the beloved PowerPC for intel. Darwin (the open-source core to OS X) was publicly available on Intel processors, and the scene was set for one of the most exciting transitions of the time:

At the 2005 WWDC the bomb was dropped.
The star of the show, of course is that the entire OS X 10.4 Tiger demo was on the intel machine, and for a low price of being invited, belonging to the club & $999 USD you too could be part of the next big FOMO.
So as the big reveal went, not only was OS X on intel now a thing, it “secretly” was always a thing, and had always been the escape hatch from being locked in. And it’s no surprise, it saved NeXT as the i386 “white box” was the cheapest and fastest NeXT ever, just as further transitions to 64 bit then ARM64 would necessitate.
So how does one reasonably acquire one of these mythical beasts, 20 years after the fact? Well basically unless you are a cool kid in the know, you don’t.
however as mentioned in a few places the ATK was quickly out together with standard parts. And if this sounds like the genesis of the IBM 5150 PC, you’d be right! The star of the show is the late SSE3 enabled Pentium 4 processors and the Intel 915 chipset with onboard GMA 900 video.
Thankfully intel sold these parts to whomever basically wanted them, so they were sold on a bunch of partner boards, OEM, and even Intel fabricated boards. It may be my fault as typical board/processor/ram setups can be had for £5 in the UK, the magical 915 chipset has jumped these well north of £100. However, from my searching there are a few OEM systems with the needed chips, and that is the Dell Dimension 3100.

Now I know I got lucky as I got mine for £0.99 + £9 shipping! A huge shout out to my patreons for financing stuff like this! The unit was shown in pictures absolutely filthy, missing an optical drive and “untested”. We all know that it’s code for it was tested, it didn’t work, and it wasn’t worth their time to clean up and fix.
Opening the system up, revealed an ancient mechanical SATA disk, a bunch of dust bunnies, and empty memory sockets where the ram should go. Since I had purchased 7 other boards over the last 2 years (yes! Really! 7!!!), I have ample spare ram, gave it 2x512MB sticks, a new cr2032 CMOS battery, and the hard disk failed to spin or detect, but the machine powered up, did the POST test with no issues! I’ve got to say I was super happy so far! I have a £6 SSD I picked up from CeX, so I placed that into the machine, and now for the OS install.
My first choice was to create a Linux bootable USB stick and just copy the deadmoo image to the SSD. Of course, this came with the caveat that the disk is in the VMDK format which needed to convert using Qemu’s qemu-img utility to a raw disk image, then to compress it with gzip, as the Ubuntu install image seems to only understand gzip. I guess the next pro move is to see about a static standalone iSCSI target, or maybe even rsync? I think there is even Qemu network disk protocols by now, so it may be a way to get around the lack of optical media…? Anyways!
The deadmoo image can be decompressed and copied to the hard disk easily! It’s about 2gb compressed and 6GB uncompressed. A reboot, and we’re quickly and semi glitched in as Curtis to their desktop!
there is a pre-installed driver causing issues which drops us back to the fallback SVGA buffer, and I’m happy to report that the artificing you see under emulation is also present on physical hardware. Delete the TPM driver AppleTPMACPI.kext (the root password is ‘bovinity’), and reboot again. This time there won’t be any further glitches in the video, but there is another change to make, the core graphics needs to be replaced with the SSE3 variant so that after yet another reboot again Rosetta is fully working, giving us access to PowerPC applications (that don’t require Altivec! That wouldn’t arrive until 10.4.4 just in time for the public release!). This lets the screen savers run, and important applications like iTunes and Internet Explorer 5 for Max OS X.
As Steve had demo’d it’s pretty amazing at how much just works. You can really get an appreciation at just how truly portable C is, and how LIBC is the real cross platform winner is. The company behind Rosetta transitive, had a bright future ahead of them as you can’t get a better public endorsement that Steve Jobs at a WWDC! SGi had licensed them for Itanium IRIX, and if the other Unix vendors didn’t partner there was also a Linux path. Honestly, I’m surprised SUN didn’t buy them and do the same thing as Apple and jettison the SPARC, as they can sell a LOT more 1u servers, desktops and laptops than giant E10ks, but IBM equally scared and trapped on their AIX / UnixWare Itanium merge Monterey that sold like 5 units, instead bought the company and quickly disappeared the technology.
What a shame for the industry, but x86_64 still is an unstoppable force. Well at least until someone seriously challenges them.
Getting back to OS X, this is meant for developers, and the deadmoo image has X code installed, although I prefer to use the cli tools. This is a weird time in history as many things may support OS X, but they make really bad platform assumptions, and force endian directions breaking the given stance of all OS X is big endian – even though Intel Darwin has been around the entire time.
Ive had good luck with stuff that is much later than vintage 2005, as I’m lazy and it’s 2025. The fun stuff id built were:
I had thought that the performance using GCC 3 would be better than GCC 4 for Qemu, but after a lot of work I’d benched it with DooM v1.1 that V4 is faster.
Compatibility with OpenGL games is atrocious, but I’m pretty sure by the time 10.4.4 went public compatibility was better, although I doubt contemporary machines did all that well as there is a reason there was a rush to get intel versions out.
Building your own:

The primary ingredient here is a board with the Intel 910/915 Graphics chips, which limits us to the late Intel Pentium 4 boards, with that terrible integrated video. It’s not the best video chipset in the world, but the only one that 10.4.1 had 3d acceleration for.

I had found out that the Dell 3100 pre-built tower has the supported chipset & CPU, however it doesn’t have the correct onboard network card.

The Intel LAN boards of the era with the 915 moniker & Pentium 4 should be fine enough.

Although in the recent years these boards have gotten rather expensive. I can’t imagine why, as they absolutely suck for retro gaming as you’d 100% use a GPU, Other than 10.4.1 I can’t imagine why anyone would want a P4/915 combo.
While you could dd a deadmoo image onto 2 disks, then play partition games, it’s far easier to use the converted ISO with 10.4.1 to just boot up and install if that is an option.
If you don’t have a 910/915 based board, you can run this under emulation well enough. The weird graphical glitches you’ll experience are present on real hardware as well.
While not terribly useful, it is an interesting glimpse as at least x86 is available to the masses.
While trying to index a massive dataset, I found that the whole AltaVista process was kind of slow. And what better way to hope to speed it up, than to add some more processors. The catch is that the indexer only works on the Workstation SKU, and as such it’ll limit you to two processors. But what if one of those ‘one simple trick’ tricks actually can unlock all your cores?
From Rairii:
load the registry hive setupreg.hiv from i386 folder
in ControlSet001\Services\setupdd
default registry value
at offset 8, replace the value thats there (probably 00) with 20, ie decimal 32
then when reinstalling it should set up the registry to allow 32 cpus

I didn’t want to bother trying to make a ‘correct’ NT 4 CD, so I just did the dos bootable disk image thing, and the old school “winnt /b” setup from within DOS on VMWare Workstation 17, and yeah behold!

Although I should add that it’s not all sunshine and rainbows, it fails to boot about 50% of the time with a stop 0x00000078 PHASE0_EXCEPTION. I don’t know what is up with that, if it’s my AMD processor, something with VMware…

Sadly, for anyone wondering, it didn’t help my use case. The fundamental issue being that AltaVista tries to actually use filters to interpret the data, and Microsoft Word documents with the .txt extension, or anything with 90’s L337 ascii art just straight up trip up the indexer halting all progress.

Obviously, this is building up to something else, something I think is kind of exciting, but even as a ‘distraction’ adding more cores to NT 4.0 Workstation is always a good thing!
Granted this isn’t fun. But it’s virtual. We live in an era of exciting expandable disks!

first off start with a full disk. That’s great. In this case the host was proxmox. It doesn’t matter. You apparently have to shut down the VM to expand the disk. Other virtualizers don’t need that. But whatever.

now for the predictable fun. That recovery partition is in the way. Not sure why NTFS needs to be contiguous but here we are.
So now we are stuck. You Google how to expand NTFS drive, how to move recovery partition, how to make disk bigger!! All in vain as everyone is pushing these nifty partition mover programs that don’t run on server. Do you just nuke the partition and hope for the best?
No, we can back it up, delete it, expand our disk and recreate it!
Capture the partition
Dism /Capture-Image /ImageFile:C:\my-system-partition.wim /CaptureDir:S:\ /Name:"My system partition"
Microsoft DiskPart version 10.0.19041.3636
Copyright (C) Microsoft Corporation.
On computer: KOMPUTER
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 250 GB 200 GB
DISKPART> select disk 0
Disk 0 is now the selected disk.
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 Primary 50 MB 1024 KB
Partition 2 Primary 49 GB 51 MB
Partition 3 Recovery 522 MB 49 GB
DISKPART> select partition 3
Partition 3 is now the selected partition.
DISKPART> delete partition OVERRIDE
DiskPart successfully deleted the selected partition.
restore the partition
dism /Apply-Image /ImageFile:c:\my-system-partition.wim /Index:1 /ApplyDir:w:\
Then tag the partition back to being a Recovery partition.
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 Primary 50 MB 1024 KB
Partition 2 Primary 249 GB 51 MB
Partition 3 Primary 600 MB 249 GB
DISKPART> select partition 3
Partition 3 is now the selected partition.
DISKPART> set id=27
DiskPart successfully set the partition ID.
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 Primary 50 MB 1024 KB
Partition 2 Primary 249 GB 51 MB
* Partition 3 Recovery 600 MB 249 GB
DISKPART>
depending on the version the command may fail setting type 27, so try:
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
and there we go!

One big happy drive! 🎉
Well this took a shocking turn;
I’d always seen on Windows that Qemu built with GCC 3.4.5 was not only faster, but more stable than GCC 4.x when regarding version 0.10 (I’m not even going to entertain later versions, as this is about old software).
I’ll have to post more, but I’ve basically learned nothing from all my other Pentium 4 / i915 chipset disasters, and now have my 8th system up and running!
by default it has GCC 4.0.0 for i386, and a GCC 3.x for PowerPC building. Natrually, with assumption in hand, how do you build GCC 3 for Intel?
Thankfully, the question was asked on Mac OS X Hints a few decades ago:
And it was saved in the wayback machine, because, preserving the past is hard.
The steps are pretty simple:
$ tar -zxf gcc_os-1819.tar.gz
3. Fix a line that causes it to not compile: in the file gcc_os-1819/gcc/gcc.c, on line 5883, change the line to look like this:
(char ) v[q - vt] = 0;
4. Make a build directory and run configure. I installed my compiler in /opt/gcc3, and I only built the C compiler. This would not work for building C++ or Cocoa applications.
$ mkdir build
$ cd build
$ ../gcc_os-1819/configure --prefix=/opt/gcc3 --enable-languages=c
Which was great except where on earth am I going to find this old GCC?
In retrospect there are 2 places, naturally, archive.org kept a copy of the Apple pages, the other being github.
For the 2-3 people who will be interested in this kind of thing 20 years from now I went ahead and did the single patch, and built binaries and put them on github over at gcc_os-1819_Marklar.
For testing, I’m using a VMDK with MS-DOS 5.00 no config.sys and DooM v1.1 running the timedemo both with no sound. (gametics/realtics)*35=fps. and in this case, demo1 of DooM v1.1 is 1077 gameticks.
GCC 3.5 gcc version 3.5.0 20041003 (Apple Computer, Inc. build 3506)
GCC 4.0 gcc version 4.0.0 (Apple Computer, Inc. build 5026)
no draw (ticks)
GCC 3.5 6/7/7
GCC 4.0 6/7/6
draw-16bit screen depth (ticks)
GCC 3.5 1074/1074/1077
GCC 4.0 948/947/949
And now for the bad news, it turns out that GCC 4.0 is just slightly faster than GCC 3.3
I couldn’t believe it either.
For anyone that cares, DOSbox SVN builds more or less okay on Tiger with some small fix to the MIDI compatibility code (#ifdef stuff, the MIDI works fine!) and it’s timings are for no draw
DOSBox 566/560/565
and drawing on a 32bit screen (16bit is incompatible)
DOSBox 22/26/25
The takeaway is that the CPU is much faster on Qemu, but screen rendering is much faster with DOSBox. DOSBox uses SDL, so let’s go one further, and rebuild Qemu with SDL instead of it’s Cocoa support! So how we doing in the tick department?
GCC 3.5 1005/999/1000
GCC 4.0 885/886/882
The real killer would of course be trying a newer version of GCC. Which I tried several, but Apple had done something really strange to them, where they product self-modifying code by default. And the assembler in 10.4.1 can’t handle that.
unknown section attribute: self_modifying_code
No really, it’s a thing!
Obviously, I updated my cc-tools to 622.9, and guess what?
I tried :
All give the following:
Illegal instruction
Is this some DTK Pentium 4 thing? Or a Tiger 10.4.1 thing?
verbose output for the curious:
Viglen:~/tmp2 jsteve$ gcc -v hi.c -o hi
Using built-in specs.
Target: i686-apple-darwin8.1.0
Configured with: ../gcc-5247/configure --prefix=/opt/gcc-5247 --enable-languages=c
Thread model: posix
gcc version 4.0.1 (Apple Computer, Inc. build 5247)
/opt/gcc-5247/libexec/gcc/i686-apple-darwin8.1.0/4.0.1/cc1 -quiet -v -D__DYNAMIC__ hi.c -fPIC -quiet -dumpbase hi.c -auxbase hi -version -o /var/tmp//ccq5CJ5D.s
ignoring nonexistent directory "/opt/gcc-5247/lib/gcc/i686-apple-darwin8.1.0/4.0.1/../../../../i686-apple-darwin8.1.0/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/opt/gcc-5247/include
/opt/gcc-5247/lib/gcc/i686-apple-darwin8.1.0/4.0.1/include
/usr/include
/System/Library/Frameworks
/Library/Frameworks
End of search list.
GNU C version 4.0.1 (Apple Computer, Inc. build 5247) (i686-apple-darwin8.1.0)
compiled by GNU C version 4.0.0 (Apple Computer, Inc. build 5026).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 8944321fb1b2a413196eb995bbfd7ab0
hi.c: In function 'main':
hi.c:3: warning: return type of 'main' is not 'int'
as -arch i386 -force_cpusubtype_ALL -o /var/tmp//ccFyDIlr.o /var/tmp//ccq5CJ5D.s
/opt/gcc-5247/libexec/gcc/i686-apple-darwin8.1.0/4.0.1/collect2 -dynamic -arch i386 -weak_reference_mismatches non-weak -o hi -lcrt1.o /opt/gcc-5247/lib/gcc/i686-apple-darwin8.1.0/4.0.1/crt2.o -L/opt/gcc-5247/lib/gcc/i686-apple-darwin8.1.0/4.0.1 -L/opt/gcc-5247/lib/gcc/i686-apple-darwin8.1.0/4.0.1/../../.. /var/tmp//ccFyDIlr.o -lgcc -lSystem
Viglen:~/tmp2 jsteve$ ./hi
Illegal instruction
I’m not entirely sure.
I need a Snow Leopard machine.
Also DosBox SVN wasn’t too hard to build, and runs great.
With large language models being all the rage, I found this tweet (x?) on twitter (x?), from Alex Cheema, discussing Andrej Karpathy’s port of a LLM, to C llma2.c, and then converting it to build with Borland C v5 as llma98.c .
Well naturally I had to take that source code, and make it more C89 happy!
I found this magical sed recipe over on stack overflow:
sed -e 'sX// *\(.*[^ ]\) *$X/* \1 */X' < oldfile > newfile
Thanks Preston Crow!

So, with some really minor hacking, and my port of GCC 1.40 to OS/2, I was shockingly up and running in no time! I should add again that I do kind of enjoy the much older GCC since it was capable of being built with ‘vendor’ tools, in this case the December 1991 Windows NT pre-release C compiler.
I didn’t bother ‘fixing’ the timing code, as honestly it doesn’t matter, running this on my PS/2 Model 60 with the SLC50 upgrade card is incredibly slow.

At best it’s about a word every two minutes, getting this far was over 3 hours of runtime.
I have a feeling much like MP3, where the ideas are significantly older than when they found mainstream success, there is a lesson here to the impatient ones, that just because something doesn’t work today, or seem incredibly unwieldy, it doesn’t mean decades later it’ll be incredibly popular.
For anyone wondering, I also built one that uses the TNT extender, and it seems to require 4MB of RAM. Absolute beast of a 32bit machine for 1987, but here we are.
So yeah, Happy 2025!
While doom scrolling on eBay I always seem to stop and look at the upgrade version of Windows 3.1. It has to be the most clearly marked “why bother upgrading” version of Windows, and at the same time the ugliest. Fitting for the season’s ugly sweater theme!

It’s amazing how terrible this thing has always looked to me. As far as ‘proof’ I remember being able to fake it out by doing a ‘copy con win.com ^Z’ type thing to create a fake windows directory with win.com & kernel286.exe … I think. But back when this was a NEW! product, I had to install Windows 3.0 anyways to get the CGA driver.

I don’t know how I used Windows with CGA either.
Speaking of impossible, back in the dark ages of Windows/286 2.1 this thing snuck out:

One day I’d love to get this Italian Windows 2.1 and frame it? I don’t know who snuck in the Buone Fest onto the box art, but I’d like to think it was subversive, as I hadn’t seen anything like that on any of the other retail Operating System packaging?
It’s been a real struggle this year from the relocation, losing just about everything that I’d tried to do, then losing my job, that brief absolute terror of being unemployed with zero callbacks trying to job hunt to now spending nearly every waking hour at work.

Speaking of stress, I haven’t had to build a physical network in ages, and this was news to me that all the SFP connectors are now vendor locked. Thinking I could just buy some cheap SFP DAC cables and plug away and I was greeted with the fact that neither the Dell, nor Cisco switches would recognize them. Oddly enough, Linux/Windows didn’t care at all. I had ordered some RJ45 10 gig SFPs to run across the data centre, and found out as well that I’d ordered Cisco keyed generic ones, and yes of course they don’t work in the Fortigate firewalls, nor the Dell switches. Those needed their own special ones. Luckily for me I had been pulling out all the old SFPs from decommissioned equipment as I had figured that the single mode fiber optics may be useful if I ever need anything, and there was a couple of these Alcatel-Lucent SFP-GIG-T (1gig) modules that at least saved the day in that I could connect stuff, while waiting for the trial and error of needing 2 weeks to get the appropriate 10 gig interfaces.
Also with mentioning is that Dell switches configure in cluster groups and the 25 gig clusters have to be configured down to 10gig mode to recognize and work with 10/1gig modules.
port-group 1/1/5
mode Eth 25g-4x
!
port-group 1/1/6
mode Eth 10g-4x
For example.
Speaking of, setting up a LACP bundle on the Dell switch was a snap! Just remember your port-groups!
interface ethernet1/1/1
description "WIN-HVN-100 port 0"
no shutdown
channel-group 1 mode active
no switchport
flowcontrol receive off
There isn’t all that much to do in the individual ethernet ports, but you get the idea. Since I’m short on cables, I’ve only got the first two ports populated, but I’m aiming for 4×25 per server!
interface port-channel1
description WIN-HVN-100
no shutdown
switchport mode trunk
switchport trunk allowed vlan 50,75-78,150,875,901-902
I did find that by explicitly allowing the VLANs onto the port helped a lot. And by default, the switches do LACP so there isn’t all that much to do.
And checking the LACP status is a snap as well:
hyperv-lan-core-01# show interface port-channel 1 summary
LAG Mode Status Uptime Ports
1 L2-HYBRID up 1 day 21:45:26 Eth 1/1/1 (Up)
Eth 1/1/2 (Up)
Eth 1/1/3 (Down)
Eth 1/1/4 (Down)
Needless to say, I was happy as ‘it just worked’!

Speaking of which, I deployed Hyper-V 2019 Server. Shame VMware had to go get Broadcomm’ed as there won’t be any more free Hyper-V servers, but for now it’s fine.
I had meant to write more on setting up Hyper-V as doing it through PowerShell is a bit daunting at first.
First setup your load balancing network team. In this case I’m using a 4 port 25gig card:
New-NetlbfoTeam -Name "Converged Network Team" -TeamMembers "Integrated NIC 1 Port 1-1","Integrated NIC 1 Port 2-1","Integrated NIC 1 Port 3-1","Integrated NIC 1 Port 4-1" -TeamingMode lacp
The port names are 100% system dependent, but you can get the idea. And setting the LACP was surprisingly easy.
The next step is to create a virtual switch
New-VMSwitch -Name "Converged Network Switch" -NetAdapterName "Converged Network Team"
I just load everything onto the same switch as I’m old, and trust my VLANs. And the servers are 1u so they don’t exactly have a lot of NIC’s for splitting stuff out but as always do what works for you.
The next step is to add the virtual network card onto my management VLAN in this case it’s 75
add-vmnetworkadapter -switchname "Converged Network Switch" -name Management -managementos
set-vmnetworkadaptervlan -managementos -vmnetworkadaptername "Management" -vlanid 75 -access
From there you can now use the ‘sconfig’ and setup your management IP address, load up Windows patches, load more drivers, and manage the server using the remote RSAT tools. Be sure to enable the remote desktop, unless you really love to type.
I went ahead and installed these services to get my servers onto an existing Hyper-V cluster. I’m sure some can be removed, but YMMV as always:
Install-WindowsFeature -Name FileAndStorage-Services
Install-WindowsFeature -Name File-Services
Install-WindowsFeature -Name FS-FileServer
Install-WindowsFeature -Name Storage-Services
Install-WindowsFeature -Name Hyper-V
Install-WindowsFeature -Name NET-Framework-45-Core
Install-WindowsFeature -Name NET-Framework-45-Features
Install-WindowsFeature -Name NET-WCF-Services45
Install-WindowsFeature -Name NET-WCF-TCP-PortSharing45
Install-WindowsFeature -Name Failover-Clustering
Install-WindowsFeature -Name Multipath-IO
Install-WindowsFeature -Name RSAT
Install-WindowsFeature -Name RSAT-Feature-Tools
Install-WindowsFeature -Name RSAT-Clustering
Install-WindowsFeature -Name RSAT-Clustering-PowerShell
Install-WindowsFeature -Name SNMP-Service
Install-WindowsFeature -Name Windows-Defender
Install-WindowsFeature -Name PowerShellRoot
Install-WindowsFeature -Name PowerShell
Install-WindowsFeature -Name WoW64-Support
Interestingly enough, on 2019 the option is there for the Linux Subsystem. I didn’t install it, but that’d be an interesting thing to share out.
I did have some weird issue with remoting and explicitly enabled it with a
Enable-PSRemoting -Force
It’s probably me, but it worked for me.
Then it’s a matter of adding all the other virtual networks Hyper-V seems to love:
add-vmnetworkadapter -switchname "Converged Network Switch" -name Backup -managementos
add-vmnetworkadapter -switchname "Converged Network Switch" -name "Live Migration" -managementos
add-vmnetworkadapter -switchname "Converged Network Switch" -name Cluster -managementos
set-vmnetworkadaptervlan -managementos -vmnetworkadaptername "Backup" -vlanid 76 -access
set-vmnetworkadaptervlan -managementos -vmnetworkadaptername "Live Migration" -vlanid 77 -access
set-vmnetworkadaptervlan -managementos -vmnetworkadaptername "Cluster" -vlanid 78 -access
And of course, don’t forget your shared storage, in this case my servers have that 4x25gig card, and a smaller custom 2×25 gig card that I used to storage A/B. Fun times!
From there I could use sconfig to join my machines to the domain, and then finally add them into the cluster, and start moving my workload over to the new servers, which is what I’ll be doing throughout the Christmas break.
Speaking of work:

They ordered this very Clark Griswald like Christmas tree. They had to cut it down to get the base to fit the lobby area with it reaching into the 2nd floor. It’d been so long since I’d seen something like this at work. But thats me working remotely for nearly 20 years.
Something awe inspiring about it.
Which reminds me of this Snoopy I saw on twitter. As terrible as life feels from time to time, there is a bit of hope, and fun here and there as my muse is always quick to point out when I’m feeling down.
And sometimes it’s better to just get it out, as who knows, maybe this could be useful in the future somehow.
Thanks for everyone’s ongoing support over on Patron and here. It really means the world to me.
Well, I had to give this a shot, at £8.49, there wasn’t much risk, right?

I mean my expectations weren’t too high. My old TV is gone, and I got the TV I had originally bought in Europe many years ago, as my muses’s parents were done with it, as I’d leant it to them years ago. It’s a JVC.. .something. And the composite ports need some RCA to composite cable.
Yes, I have a few of those weird composite to mini rca jack cables, but none of them worked.

The contents are so incredibly basic. It’s crazy how small the device actually is. It’s got a slider to select between 720p and 1080p, and micro USB power port.

Sadly, it had literally one job to do, to display the Playstation ONE’s composite output onto the JVC TV. And it failed. The image was far to dim, (signal loss?) and was constantly losing sync.
Very sad.
In a Hail Mary, I just plugged the RCA directly into the TV’s composite port, and it worked! Problem solved!?
So at least I got a working cable out of the deal.
So my review is basically… free cable! … not such a great device. But if you paid more than me, you def got ripped off. And I know if I took the time to order from taobao or aliexpress I could get this for a fraction of the price.
Wish I had a good story here, but I really don’t.
Also I screwed up the billing on the blog, and despite having a massive accumulated credit, they cut the service. So Ive bought myself service until March. Yay.
While I have a mountain of old discarded Windows Phones from work, I’d flashed them all to Windows 10, well except for one that was stuck in a ‘happy face boot loop’. In this business we call this foreshadowing.
That’s when I saw this gem, a Nokia Lumia 1520, 32Gb, and in Red. I offered 17.77, and the seller took me up on it!


The phone arrived, running Windows 8.1. Needless to say, the store is all shutdown, so loading apps or doing anything fun is basically out of the question. So, the first thing to do is update it. I can’t download the ‘upgrade advisor’ as the 8.1 store has been shut down. Luckily the hand/dandy OTC Updater (otcupdater.zip) to the rescue!

Just connect the phone with USB, run the CLI tool, and it’ll kick off the update.

A few minutes later, and the gears of progress grind away through the update

And in no time, I’m up and running Windows 10, build 1511. I go ahead, connect up to WiFi, and run Windows update, and after downloading, updating and then rebooting…

Oh no, now my 1520 is now doing the unhappy face boot loop. 🙁 indeed.
Searching around, I see the tool to fix this all is the Windows Device Recovery Tool. Although it didn’t work for me. So, I sat there for 3 days watching my ‘new’ 1520 boot looping over and over and over.
I also need the .FFU recovery file, which is thankfully all backed up on lumiafirmware.com
I’m not sure what was going on, but I got a new USB-A cable, and suddenly, running thor manually ….
thor2.exe -mode uefiflash -ffufile \temp\RM937_02540.00019.15235.40003_RETAIL_prod_signed_942_026BB5_O2O-GB.ffu -do_full_nvi_update -do_factory_reset
As it begins, the phone switched to a nice RED

THOR2 1.8.2.18
Built for Windows @ 13:36:46 Jun 16 2015
Thor2 is running on Windows of version 6.2
thor2.exe -mode uefiflash -ffufile \temp\RM937_02540.00019.15235.40003_RETAIL_prod_signed_942_026BB5_O2O-GB.ffu -do_full_nvi_update -do_factory_reset
Process started Thu Nov 28 17:12:29 2024
Logging to file C:\temp\thor2_win_20241128171229_ThreadId-42432.log
Debugging enabled for uefiflash
Initiating FFU flash operation
WinUSB in use.
isDeviceInNcsdMode
isDeviceInNcsdMode is false
Device mode 6 Uefi mode
[THOR2_flash_state] Pre-programming operations
Disable timeouts
Get flashing parameters
Lumia Boot Manager detected
Check status of battery
State of charge 61, charging current -338
Protocol version 2.6 Implementation version 2.35
Detecting UEFI responder
HELLO success
Lumia Boot Manager detected
Check status of battery
State of charge 61, charging current -381
Protocol version 2.6 Implementation version 2.35
Booting to FlashApp
Reboot to FlashApp command sent successfully.
Verifying that device is online
Device is online
Detecting UEFI responder
HELLO success
Lumia Flash detected
Protocol version 2.34 Implementation version 2.59
Disable timeouts
Get flashing parameters
Lumia Flash detected
Protocol version 2.34 Implementation version 2.59
Size of one transfer is 2363392
MMOS RAM support: 1
Size of buffer is 2359296
Number of eMMC sectors: 61071360
Platform ID of device: Nokia.MSM8974.P6081.2.2
Async protocol version: 01
Security info:
Platform secure boot enabled
Secure FFU enabled
JTAG eFuse blown
RDC not found
Authentication not done
UEFI secure boot enabled
SHK enabled
Device supports FFU protocols: 0015
Subblock ID 32
[THOR2_flash_state] Device programming started
Using secure flash method
CoreProgrammer version 2015.06.10.001.
Start programming signed ffu file \temp\RM937_02540.00019.15235.40003_RETAIL_prod_signed_942_026BB5_O2O-GB.ffu
FfuReader version is 2015061501
Send FlashApp write parameter: 0x4d544f00
Perform handshake with UEFI...
Flash app: Protocol Version 2.34 Implementation Version 2.59
Unknown sub block detected. Skip...
DevicePlatformInfo: Nokia.MSM8974.P6081.2.2
Unknown sub block detected. Skip...
Unknown sub block detected. Skip...
Supported protocol versions bitmap is 15
Secure FFU sync version 1 supported.
Secure FFU async version 1 supported.
Secure FFU sync version 2 supported.
Secure FFU async version 2 supported.
CRC header v. 1
CRC align bytes. 4
Get CID of the device...
Get EMMC size of the device...
Emmc size in sectors: 61071360
CID: Samsung, Size 29820 MB
ConnSpeedEcho: Elapsed= 0.234000, EchoSpeed= 28.85, Transferred= 7077918 bytes
Get security Status...
Security Status:
Platform secure boot is enabled.
Secure eFUSE is enabled.
JTAG is disabled.
RDC is missing from the device.
Authentication is not done.
UEFI secure boot is enabled.
Secondary HW key exists.
Get RKH of the device...
RKH of the device is 3774964A7E6AC7EF7D428DDC0C0EAD71640B0D8DD3BFC3829110AF2D8ED68D7C
Get ISSW Version...
ISSW Version: 216
Mon Aug 11 15:15:33 EEST 2014;ISSW v0216; main; OS; DNE; KCI 1244; ASIC 8974;
Get system memory size...
Size of system mem: 2097152 KB
Read antitheft status...
Requested read param 0x41545250 is not supported by this flash app version.
Send backup to RAM req...
Clearing the backup GPT...SKIPPED!
Successfully parsed FFU file. Header size: 0x000e0000, Payload size: 0x0000000066a00000, Chunk size: 0x00020000, Header offset: 0x00000000, Payload offset: 0x00000000000e0000
RKH match between device and FFU file!
Option: Skip CRC32 check in use
Start sending header data...
Start sending payload data V2Sbl in async mode...
Percents: 0
........
Percents: 100
lastDescriptorIndex: 13135 lastLocationIndex: 0
Flashing completed successfully! Status: 0x0001
Safe write descriptor index reached: true
Payload data transfer speed (31.94 MB/s) Elapsed time 51.41 sec
Payload data size 1642.022339 MB
Read flashing status..
[IN] programSecureFfuFile. Closing \temp\RM937_02540.00019.15235.40003_RETAIL_prod_signed_942_026BB5_O2O-GB.ffu
Get EMMC write speed...
EMMC write speed: 44244 KB/s
Get data verify speed...
Data verify speed: 42032 KB/s
Send restore backup from RAM req...
programming operation completed!
[THOR2_flash_state] Post programming operations
[THOR2_flash_state] Executing factory reset
[Factory reset result] 0
Factory reset done
[THOR2_flash_state] Executing Full NVI Update
Write flash options ( WriteNvi: Full )
Write parameter to device via UEFI Flash App
Write parameter Ok
Flash options set successfully.
[Full NVI update result] 0
Operation took about 58.00 seconds. Average transfer speed was 29.69 MB/s.
Exited with success
And then with the phone prepped, it then went green:

Now it’s just a matter of having the phone reboot, reset from using Thor yet again
thor2 -mode rnd –bootnormalmode
THOR2 1.8.2.18
Built for Windows @ 13:36:46 Jun 16 2015
Thor2 is running on Windows of version 6.2
thor2 -mode rnd -bootnormalmode
Process started Thu Nov 28 17:15:54 2024
Logging to file C:\Temp\thor2_win_20241128171554_ThreadId-3412.log
Initiating do RnD operations
WinUSB in use.
Debugging enabled for rnd
Detecting UEFI responder
Send HELLO
HELLO success
Lumia Flash App detected
Disable time-outs
Read FlashApp Build Info
Read parameter from UEFI Flash App
Read parameter Ok
FlashApp Build Info: Date:Dec 23 2014 Time:10:56:58 Info:-
Transfer size: 2363392
Sublock ID 31
Buffer size: 2359296
Number of sectors: 61071360
PlatformInfo is Nokia.MSM8974.P6081.2.2
Async protocol version: 01
Security info sublock detected
Platform secure boot enabled
Secure FFU enabled
JTAG eFuse blown
RnD Certificate not found
Authentication not done
UEFI secure boot enabled
SHK enabled
Device supports FFU protocols: 0015
Sublock ID 32
Read Root Key Hash
Read parameter from UEFI Flash App
Read parameter Ok
Root Key Hash is 3774964A7E6AC7EF7D428DDC0C0EAD71640B0D8DD3BFC3829110AF2D8ED68D7C
Read public ID
Read parameter from UEFI Flash App
Read parameter Ok
Public ID is 2D54A10E278A16A38EE918F17BBB88431406FBF5
Protocol version 2.34 Implementation version 2.59
Resetting the device
THOR2_ERROR_CONNECTION_OPEN_FAILED
THOR2 1.8.2.18 exited with error code 84001 (0x14821)
And now I was back in business!

And we’re so back!
This time I re-ran the OTC Updater to bring me back to Windows 10 10.0.10586.170 version 1511. This time I just decided to keep re-running the OTC Updater.

I was then able to update to 10.0.14393.1066 Build 1607. Nice!

And one more update, and now I’m running Windows 10 10.0.14393.2551 Version 1607, aka the last version that OTC can pull.
Well that was fun!
Next up, I signed in, and I was able to retrieve my One Drive. I forgot how nice it was to be able to play music directly from OneDrive, without having to download it to flash. And wow is the UI so snappy. Kind of crazy how old and 32bit bound the old Windows Phones are. Shame Microsoft didn’t believe.
I thought Outlook would surely work, but alas, no dice. It’ll load but not sync. MSN weather, stocks, travel are all dead. Just is the map software (Even on 8.1).
Of the purchased apps, Minecraft just sits at the loading screen. Sonic CD, and Final Fantasy load up and run. As does the most coveted game of 2017, Candy Crush Saga still runs as well.
So yeah, it’s nice the paid stuff still works, but with no email it’s now just barely above feature phone level of usefulness.
I guess it’s time to finally just let go.

Time to say Goodbye.