Running Windows XP in a VM (April 2025)

I run Linux obviously… and sometimes Wine blows my mind with how good it is. I have several cases lately however, where my mind isn’t exactly… blown…

This was going to be a guide on running VirtualBox 6.0.24 on Debian testing. TLDR; VMWare Workstation is Free for Linux, and is probably a much better idea anyway. Still though, wanted to document the journey.

So… XP as a guest has not been supported by any of the major virtualization solutions for years at this point. Now sure, you can install and run XP just fine on any of them… but 3D acceleration for smooth desktop operation is another story. Today, I’m going to see just how much of a pain in the ass that is – getting a 2019 VirtualBox packaged for Debian Buster… running on Debian Trixie (testing) in 2025.

SPOILER: This didn’t work; if you’re determined though, I’m sure you could get it working. This will get you Vbox installed, and the application runs, but you can’t actually run a VM… in my case anyway. I have a mismatch of Sid/Trixie/Bookworm though, and generally that is bad practice 🙂 See the alternate solution… just scroll down a bit.

If you try and just go for it, you’ll be met in the very least with a message informing you that you system lacks these dependencies:

dpkg: dependency problems prevent configuration of virtualbox-6.0:
virtualbox-6.0 depends on libssl1.1 (>= 1.1.1); however:
Package libssl1.1 is not installed.
virtualbox-6.0 depends on libvpx5 (>= 1.6.0); however:
Package libvpx5 is not installed.
virtualbox-6.0 depends on python (<< 2.8); however:
Package python is not installed.
virtualbox-6.0 depends on python (>= 2.7); however:
Package python is not installed.
virtualbox-6.0 depends on python:any (>= 2.6.6-7~).

You’ll need an older libssl package. libssl1.1_1.1.1n-0+deb10u6_amd64.deb is easily found on Debian’s site, there will be a link at the end of the article too. For me, a simple dpkg -i installed this with 0 problems… So far, so good!

For libvpx5:
wget http://ftp.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3+deb10u1_amd64.deb

sudo dpkg -i libvpx5_1.7.0-3+deb10u1_amd64.deb

Now, Python… obviously Python 2 is dead. I first tried this with the python-is-python3 package; I wish this would have worked. The backup plan is installing Python 2.7 from Bullseye, which I’d have liked to avoid.

Steps for Python 2.7…

Download http://ftp.debian.org/debian/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb
dpkg -i libffi7_3.3-6_amd64.deb

If you’re running as root, you can save time with a single command for the download / install. Here is the next thing we’ll need:

wget http://ftp.debian.org/debian/pool/main/p/python2.7/libpython2.7-minimal_2.7.18-8+deb11u1_amd64.deb && dpkg -i libpython2.7-minimal_2.7.18-8+deb11u1_amd64.deb

For the next two, I had to tell it to ignore a dependency. “mime-support” is no longer a package, and I have the new version installed, so this should be OK.

Wget http://ftp.debian.org/debian/pool/main/p/python2.7/libpython2.7-stdlib_2.7.18-8+deb11u1_amd64.deb && sudo dpkg -i –force-depends libpython2.7-stdlib_2.7.18-8+deb11u1_amd64.deb

Again, we have to do that for the actual Python 2.7 package

wget http://ftp.debian.org/debian/pool/main/p/python2.7/python2.7_2.7.18-8+deb11u1_amd64.deb && dpkg -i –force-depends python2.7_2.7.18-8+deb11u1_amd64.deb

At this point, I removed python-is-python3, since we don’t want to be trying to run python2 code on python3 when we have 2.7 installed; so apt remove –purge python-is-python3

VirtualBox will still complain about missing python. Oh well. Use the Force!

sudo dpkg -i –force-depends virtualbox-6.0_6.0.24-139119~Debian~buster_amd64.deb

At this point, Virtualbox was indeed installed however there were problems finishing the setup. Something to do with the kernel modules, maybe the vbox networking, stuff like that. EVERY TIME I used apt, I had to –fix-broken install which REMOVED virtualbox. Then I had to reinstall it, telling it to ignore the python situation. The problem looked related to kernel modules \ lack of kernel headers installed so I made sure I had those installed. Anyway, big f’n mess.

I figured I’d share because for someone determined enough, you’ll probably get it working. At this point, VirtualBox does indeed start, you can start to configure a VM, etc. Just when you try to actually launch a VM, it will complain and fail.

Alternate Solution:

But guess what…. There is a major VM solution that supposedly still supports accelerated graphics on XP. VMWare Workstation – which at the time of writing this – is completely free. You just need to sign up with your email, but no credit card or any BS like that.

You’ll need an older version of the VMWare Guest Tools:
https://packages.vmware.com/tools/releases/10.0.12/windows/

Just download the ISO, and after you install XP you can mount it and the installer should start right up. Reboot and you should be good.

IE Downloading

Man… Been a while since I’ve seen THAT dialog box! Mainly because I used XP for years with FireFox.

 

A fail-safe for changing network config on headless servers

Lenovo Tiny PC

I’ve been setting up a Lenvo tiny system, which came with an M.2 wifi card. I’m going to probably replace it with another Intel GB / 2.5 GB adapter at some point, but right now I don’t really have a reason to. It is always a little scary when you make major changes to your network configuration on a headless system. This box isn’t physically far away, but it is indeed tucked away in another part of the house and I have no desire to bring a monitor over to it.

I realized, the wifi could serve a purpose in case I bork the bridge config somehow, or something unexpected breaks my configuration. Because I used wifi for the Debian netinstall, ifupdown already connects to wifi on boot, so there’s my failsafe. However, I don’t want or need that to stay up after the wired network is up. So I came up with this:

@reboot sleep 60 && ping -c 3 -I br0 10.0.0.1 >/dev/null 2>&1 && ifdown wlp2s0

Put this in root’s crontab, 60 seconds after cron starts it will try to ping something on the LAN, trying three times. If it can ping successfully, we bring down our backup interface. Beautiful.

This would make even more sense with a cheap USB network adapter just to have a failsafe if you’re experimenting and don’t want to lock yourself out of a system without a monitor (or even a physical serial port, for that matter).

Fail-safe, for what? – long version, for those so-inclined

Well, I wanted to be able to easily network some VMs on this thing, so I set up bridged networking. For those who don’t know, this is how Proxmox lets your VMs basically all share a NIC and each get a DHCP lease from your main network, no double-NAT nonsense, and no need to configure static routes either. I briefly did try ProxMox on this thing, and not to talk down of it but there is a reason I don’t use it… has way too much going on out of the box that I’ll never use. It is a great product, and it definitely has its place but I like the minimal-manual style of setting things up. If I wanted to take advantage of the cluster / high availability features or ZFS snapshots then it is a great way to save you a ton of hassle manually setting up some pretty complicated stuff… But I’m not doing anything that fancy. Proxmox IMO is overkill if you just need to run a few VMs, jails or containers. It is convenient as a “poor man’s KVM” though.

XScreenSaver Install Script for Debian MATE Desktop

XScreenSaver

MAKING IT BE (a little) LESS PAIN IN THE ASS

If you’re using Gnome/MATE screensaver (or locker), I’d recommend you don’t. Weather it is because you value X locking security, or just admit it they’re cool screensavers, toss that in the bin and install the real deal.. XScreenSaver.

I have written a script which takes care of all of the following:
1. On Debian, XScreenSaver needs you to manually specify 4 packages to get the program, “extra” savers, gl savers, and “gl extra” savers. This will get you the complete collection, as the author distributes it.
2. Remove MATE Screensaver
3. Apt pin / pref so MATE Screensaver isn’t reinstalled next time you run apt, because MATE Desktop thinks it needs it
4. Autostarts XScreenSaver
5. makes a soft link so you can still lock from the “System” menu up top, and click “Lock Screen”. Now XS will do it.

This will save me HOURS over time.

Get it here: http://lostgeek.net/files/xscreensaver-mate.sh

Trimming the fat from Raspberry Pi OS Lite

Some of you may know that I host this website on a Raspberry Pi 5. I use Raspberry Pi OS Lite, which is a minimal Debian-based operating system that is lean and minimal without excluding anything that would break any features of the Pi itself. I’ve got the 4 GB model, and I don’t think I’ve ever used more than 400-500 MB of RAM during normal server operation. So why slim it down even more? Well, more software equals a larger attack surface, more potential software bugs, and so on.

In a situation where I’m never using the built-in WiFi and Bluetooth radios, there’s no benefit in having their drivers loaded into the kernel. Having unused code running can only increase the likelihood of exploitation, unexpected behavior, bugs, or other unwanted results. These devices also consume power, albeit a small amount, and probably even less when they aren’t connected to a network or device.

Now, I’ve found the drivers on the Raspberry Pi to be pretty good. Honestly, I’ve never had an issue. But since I’m literally not using any wireless on this thing—it’s connected to my network switch with less than a foot of Cat6 Ethernet cable—why bother? If nothing else, you’ll free up a few megabytes of memory. Perhaps an even more tangible benefit is having fewer items cluttering your systemd services and process lists when you check with top or htop.

After removing the following, I saw my memory usage drop to just 125 MB initially. That’s 125 MB of memory used while running Debian 12, with my Apache2 HTTP/HTTPS server and Pi-hole DNS. That’s not bad—kind of impressive, actually!

  • Stopped & Disabled:
    • Audio (via config.txt)
    • avahi-daemon
    • bluetooth
    • ModemManager
    • NetworkManager
    • triggerhappy
    • wpa_supplicant

Most of these are self-explanatory. As for the less obvious names, avahi is sort of like Apple’s Bonjour service; it’s for mDNS/local device discovery. I knew I didn’t need it, but if you’re not sure, leave it alone. Triggerhappy is a hotkey daemon, which is an easy one to disable on my totally headless system. Audio can be disabled by commenting a line in /boot/firmware/config.txt:

dtparam=audio=off`

And since I was in there anyways, I also commented a couple other lines:

camera_auto_detect=1
display_auto_detect=1

ModemManager, Bluetooth, and wpa_supplicant can just be turned off if you don’t plan on using WiFi or Bluetooth.

sudo systemctl stop ModemManager
sudo systemctl disable ModemManager

Repeat the same two commands for the other daemons.

Now, I’m not making this a full tutorial, and there are two reasons for that. For starters, I’m feeling kind of lazy, and I don’t want to have to redo everything to make sure my directions are 100% correct.

If you want to get rid of NetworkManager too, you’ll want to set up networking manually first. In my case, I edited /etc/network/interfaces and added the following:

auto eth0
iface eth0 inet static
address 10.16.17.10/23
gateway 10.16.16.1
dns-search lan
dns-nameservers 10.16.16.1

If you’re not sure, just leave NetworkManager installed. In my case, I went with a static configuration because I didn’t want to have a daemon running for the DHCP client. If your subnet mask is 255.255.255.0, you would use /24.

But the other very real reason is: If you’re not confident yet in how to disable these things, you probably shouldn’t. Do a bit more research first anyways.

When making changes to your system, have an up-to-date backup because you never know when a change could leave you with a non-booting system. Also, when changing the networking system, it should go without saying that doing so can leave you locked out of a headless system. So only proceed if you have a means of getting back in to fix it should you mess up.

This is really more of a journal of my experience setting this up, for those with some experience to get ideas from. It isn’t meant as a tutorial by any means. I just wanted to share how I got my idle RAM usage down to 3%, with my services running.

© 2025 LostGeek.NET - All Rights Reserved. Powered by ClassicPress, NGINX, Debian GNU/Linux.