Have you ever tried to install Linux on a machine that simply refuses to cooperate?
Years ago, I was given a Toshiba Portégé M200. For those who aren’t familiar, it’s a 2004 Tablet PC with a screen that was absurdly ahead of its time (featuring Wacom pen support) and a design that still catches the eye today. But it has one tiny little problem: there is no way to boot from USB. On top of that, it has no internal CD/DVD drive, and booting from an external drive only works with a specific Toshiba model that you can only find on Japanese auction sites.
Apart from booting from an external floppy drive or an SD card (which only supports old cards—no SDHC or newer—and is quite unstable), the only remaining doorway was PXE.
Installing Debian
To avoid messing too much with my main PC (which runs Fedora, btw) or cluttering up my home network, I connected the Toshiba directly to a USB network adapter on my PC. I created an isolated subnet (192.168.10.0/24) and configured a static IP (192.168.10.1) on this secondary interface.
iPXE
The native PXE in a 2004 BIOS is… limited. It’s slow and only supports TFTP. To speed things up, I used a chainloading technique: dnsmasq delivers iPXE via TFTP, and then iPXE takes over.
But what’s the advantage? iPXE can download the kernel and the installer via HTTP, which is infinitely faster and more reliable than traditional TFTP. To make this work, I set up Nginx on Fedora to serve the Debian 11 files.
Pentium M and PAE
Why Debian 11? Because Debian 12 simply falls into an infinite loop during boot. The culprit? The Pentium M 745 processor.
This processor is capable of running modern systems (PAE), but it “lies” to the operating system by hiding this instruction in the BIOS. Modern kernels require PAE, and when they don’t find it, the machine panics.
So, I went back to Debian 11 (32-bit) and used the forcepae parameter directly in the iPXE boot script, which tells the kernel: “I know you think you don’t have PAE, but you do. #trustme”.
Fedora as a Router
The Debian installer is a bit picky—it needs to validate the mirrors to continue the installation. Since the Toshiba was on an isolated network, I had to route the internet from my Fedora PC. To do this, I enabled IP Forwarding and configured NAT/Masquerade rules in the Firewall so the Toshiba could reach the internet.
From there, the installation proceeded smoothly, just like on any other computer.
WiFi Internet
After finishing the Debian installation, I wanted to connect the Toshiba to the internet without needing a network cable. Since the internal WiFi card is a fossil (and doesn’t support modern security standards), I used a TP-Link TL-WN725N USB adapter (which features a Realtek RTL8188 chip).
To get this adapter working properly, I followed a few steps:
- “Non-Free” Repositories: Debian is purist. Since the Realtek driver is closed-source, I had to add
contrib non-freeto my/etc/apt/sources.list. - Firmware and NetworkManager: I installed the
firmware-realtekandnetwork-managerpackages to make life easier. - Interface Adjustment: I cleared the
/etc/network/interfacesfile, leaving only the loopback (lo) active. This avoids conflicts, allowing NetworkManager to take over the hardware. - Enabling Management: I adjusted
/etc/NetworkManager/NetworkManager.confby changing the setting tomanaged=true. - The Connection: After a reboot, I used
nmtuito select the network and authenticate (following the on-screen steps).
Window Maker
With the internet working, I decided to install a graphical environment for when I get tired of the terminal. For this, I chose Window Maker, which is inspired by NeXTSTEP (the father of macOS) and is one of the most nostalgic window managers out there.
For now, I’ve decided not to use a login manager:
- Xorg and Window Maker: I installed the basic graphical server and Window Maker (
apt install xorg wmaker). - Settings: I configured the
~/.xinitrcfile to executewmaker. - Startx: To load Window Maker, just type
startxin the terminal.
Quick Guide
- Main Menu: Right-click anywhere on the empty desktop.
- Move Windows: Hold
Altand drag (a lifesaver if the title bar disappears). - Shortcuts: The icon in the top-left corner is where you drag your favorite apps to create shortcuts.
Conclusion
After all that, now it’s just a matter of enjoying the machine, which is surprisingly fast for being 22 years old and still running on a mechanical HDD.
But then the question arises: why all this, when I have other machines available?
The other day, I read a post by Veronica about a writerdeck she configured, and it caught my attention. I wasn’t familiar with the writerdeck concept, but I think it’s exactly what I need to be able to focus and write more—both here on the blog and in other contexts.
Since I don’t have any other modern laptops (besides my daily driver and my work ones), I’m going to use this Toshiba for that, and I believe it will be a perfect fit. I plan to spend most of my time in the terminal, writing with neovim or something similar.
Technical Guide
Here are the commands I used, in general, to install Debian correctly.
1. dnsmasq Configuration (Fedora)
In /etc/dnsmasq.conf:
port=0
interface=enp4s0 # Secondary card
dhcp-range=192.168.10.10,192.168.10.50,255.255.255.0,1h
dhcp-option=option:router,192.168.10.1
dhcp-option=option:dns-server,8.8.8.8,1.1.1.1
enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-match=set:ipxe,175
dhcp-boot=tag:!ipxe,undionly.kpxe
dhcp-boot=tag:ipxe,http://192.168.10.1/boot.ipxe
2. iPXE Script (boot.ipxe)
#!ipxe
set server_url http://192.168.10.1/debian11
kernel ${server_url}/linux initrd=initrd.gz forcepae -- text
initrd ${server_url}/initrd.gz
boot
3. Routing and NAT (Fedora)
sudo sysctl -w net.ipv4.ip_forward=1
# Replace wlan0 with your internet-connected card
sudo iptables -t nat -I POSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -I FORWARD -i enp4s0 -o wlan0 -j ACCEPT
4. Wi-Fi Setup (On Toshiba/Debian)
# Install firmware and tools
sudo apt update && sudo apt install firmware-realtek network-manager -y
# Enable management in NetworkManager.conf
# [ifupdown]
# managed=true
# Connect via terminal-based visual interface
sudo nmtui
5. Window Maker Installation
# Install Xorg and Window Maker
sudo apt install xorg wmaker wmaker-data menu -y
# Configure manual startup (as your user)
echo "exec wmaker" > ~/.xinitrc
# Start graphical interface
startx
6. SELinux and Permissions (Fedora)
sudo chcon -R -t httpd_sys_content_t /usr/share/nginx/html/debian11
sudo chcon -t httpd_sys_content_t /usr/share/nginx/html/boot.ipxe
7. Debian File Download (Fedora Host)
Commands to download the necessary netboot files (i386):
# Create directory on Nginx server
sudo mkdir -p /usr/share/nginx/html/debian11
cd /usr/share/nginx/html/debian11
# Download installer Kernel and Initrd
sudo wget http://ftp.debian.org/debian/dists/bullseye/main/installer-i386/current/images/netboot/debian-installer/i386/linux
sudo wget http://ftp.debian.org/debian/dists/bullseye/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz
# Adjust permissions and SELinux context
sudo chmod 755 /usr/share/nginx/html/debian11
sudo chmod 644 /usr/share/nginx/html/debian11/linux
sudo chmod 644 /usr/share/nginx/html/debian11/initrd.gz
sudo restorecon -Rv /usr/share/nginx/html/debian11