Notice: Due to size constraints and loading performance considerations, scripts referenced in blog posts are not attached directly. To request access, please complete the following form: Script Request Form Note: A Google account is required to access the form.
Disclaimer: I do not accept responsibility for any issues arising from scripts being run without adequate understanding. It is the user's responsibility to review and assess any code before execution. More information

Repurposing : Dell Wyse 3040 with Kali/Docker


The Dell Wyse 3040 thin client offers an attractive platform to host my Twingate connector - it's affordable, fanless, power-efficient, and compact. However, installing Kali Linux on this Intel Atom-powered device presents several challenges that require specific workarounds. 

This guide covers the complete installation process and solutions to the problems you'll encounter.

Hardware Specifications

  • CPU: Intel Atom x5-Z8350 (quad-core, 64-bit)
  • RAM: 2GB or 4GB DDR3L
  • Storage: 8GB or 16GB eMMC flash storage
  • Network: Realtek Gigabit Ethernet
  • Boot: UEFI only (no Legacy BIOS support)
  • Power: 12W TDP, fanless operation

Step 1: Download and Prepare Installation Media

Download Kali Linux

Visit https://www.kali.org/get-kali/ and download the Installer ISO:

  • File: kali-linux-2025.2-installer-amd64.iso (~3.5GB)
  • Important: Use the Installer version, NOT the Live image
  • The installer contains offline packages essential for installation

Create Bootable USB with Rufus

Download Rufus from https://rufus.ie/ and follow these specific settings:

  1. Insert USB drive (8GB minimum - will be completely erased)

  2. Run Rufus as Administrator

  3. Configure Rufus settings:

    • Device: Select your USB drive
    • Boot selection: Click "SELECT" and choose your Kali ISO
    • Partition scheme: GPT (critical for UEFI)
    • Target system: UEFI (non CSM) (essential for Wyse 3040)
    • File system: FAT32 (default)
    • Cluster size: Default allocation size
  4. Advanced options:

    • Check "Quick format"
    • Check "Create extended label and icon files"
  5. Click Start

  6. Select "Write in ISO Image mode" when prompted

  7. Confirm data destruction warning

  8. Wait for completion (5-15 minutes)

Step 2: Configure Dell Wyse 3040 BIOS

Access BIOS

  1. Power on the Wyse 3040
  2. Press F2 immediately when Dell logo appears
  3. Default BIOS password: "Fireport"
  4. Remember to update the default password

Configure BIOS Settings

Navigate through the BIOS and configure:

Security Tab:

  • Secure Boot: DISABLED (critical for Linux installation)

Boot Tab:

  • Boot List Option: UEFI
  • USB Boot Support: ENABLED
  • PXE Boot to LAN: DISABLED (avoid conflicts)

Save BIOS Changes

  • Press F10 to save changes
  • Confirm "Yes" to save and exit
  • Insert your Kali USB drive

Step 3: Install Kali Linux

Boot from USB

  1. System should automatically boot from USB
  2. At Kali boot menu, select "Install" (text mode)
  3. Do NOT select "Graphical install" or "Live"

Installation Configuration

Work through the installation screens:

  1. Language: English
  2. Location: United Kingdom
  3. Keyboard: British
  4. Network:
    • If network cable connected: Configure automatically
    • If no cable: Choose "Configure network manually" → "Do not configure at this time"
  5. Hostname: Twingate
  6. Domain: bear.local
  7. User Account: Mooney

Disk Partitioning

  1. Partitioning method: "Guided - use entire disk"
  2. Select disk: Choose eMMC drive (usually /dev/mmcblk0)
  3. Partition scheme: "All files in one partition"
  4. Write changes: Yes

Package Selection - Critical Step

When you reach "Software selection" screen, this is where most installations fail. The solution is counterintuitive:

Leave everything completely unchecked - we fix this later on....

□ Kali desktop environment - GNOME     [UNCHECK]
□ Kali desktop environment - Xfce      [UNCHECK] 
□ Kali desktop environment - KDE       [UNCHECK]
□ ... collection of tools - top10     [UNCHECK]
□ ... collection of tools - default   [UNCHECK]
□ SSH server                          [UNCHECK]
□ standard system utilities           [UNCHECK]

Click Continue with all options blank. This avoids the installer's package management bugs that cause failures on limited storage systems.

Complete Installation

  1. GRUB bootloader:
    • Install GRUB: Yes
    • Device: /dev/mmcblk0 (entire eMMC drive)
  2. Remove USB when prompted
  3. Click Continue to reboot

Step 4: Fix Boot Issues

Expected Problem

After reboot, you'll see: "No bootable device found"

This happens because the Wyse 3040 UEFI firmware requires the bootloader at a specific fallback location.

Solution: Rescue Mode Boot Fix

  1. Boot from Kali USB again
  2. Select "Advanced options"
  3. Choose "Rescue mode"
  4. Follow prompts until you reach rescue shell
  5. Execute these commands:
# Mount the installed system
mkdir -p /mnt/target
mount /dev/mmcblk0p2 /mnt/target
mount /dev/mmcblk0p1 /mnt/target/boot/efi

# Navigate to EFI directory
cd /mnt/target/boot/efi/EFI/

# Check what's in the kali directory
ls -la kali/

# Copy working GRUB file to fallback location
mkdir -p BOOT
cp kali/grubx64.efi BOOT/BOOTX64.EFI

# Also try copying shimx64.efi if it exists
cp kali/shimx64.efi BOOT/BOOTX64.EFI 2>/dev/null || echo "No shim found"

# Verify copy successful
ls -la BOOT/BOOTX64.EFI

# Clean up and reboot
cd /
umount -R /mnt/target
reboot

Remove USB drive. The system should now boot to Kali Linux console.

Step 5: Configure Network Connectivity

Initial Network Diagnosis

After first successful boot, check network status:

# Check interface status
ip link show eth0
# Should show: <BROADCAST,MULTICAST,UP,LOWER_UP> if cable connected

# Check for IP address (will be empty)
ip -4 addr show eth0

# Attempt DHCP (will fail)
dhclient eth0
# Returns: command not found

Configure Static IP Address

Since DHCP tools aren't installed, configure static IP manually:

# Bring interface up
sudo ip link set eth0 up

# Assign static IP (adjust for your network)
sudo ip addr add 192.168.86.251/24 dev eth0

# Add default route
sudo ip route add default via 192.168.86.1

# Configure DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

# Test connectivity
ping -c 3 8.8.8.8

For corporate proxy environments:

export http_proxy=http://squid.bear.local:3129
export https_proxy=http://squid.bear.local:3129

Step 6: Install Essential System Components

Install Core Network Tools

# Update package repositories
sudo -E apt update

# Install DHCP client and network utilities
sudo -E apt install -y isc-dhcp-client net-tools openssh-server

# Enable SSH for remote access
sudo systemctl enable ssh --now

Switch to DHCP

Now that DHCP client is installed:

# Remove static IP configuration
sudo ip addr flush dev eth0
sudo ip link set eth0 up

# Get IP via DHCP
sudo dhclient eth0

# Verify IP assignment
ip -4 addr show eth0

# Note IP address for remote SSH access
ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d'/' -f1

# Edit network interfaces file
sudo nano /etc/network/interfaces

# Add these lines:
auto eth0
iface eth0 inet dhcp

# Restart networking service
sudo systemctl restart networking

Install Kali Security Tools

Choose your tool installation level:

# Option 1: Minimal core tools (recommended for 8GB storage)
sudo apt install -y kali-linux-core

# Option 2: Headless tools (no GUI, comprehensive)
sudo apt install -y kali-linux-headless

# Option 3: Default tools (may strain limited storage)
sudo apt install -y kali-linux-default

Install Docker Support

# Install Docker
sudo apt install -y docker.io

# Enable Docker service
sudo systemctl enable docker --now

# Add user to docker group
sudo usermod -aG docker $USER

Storage Optimization for Small eMMC Drives

# Clean package cache
sudo apt clean
sudo apt autoclean
sudo apt autoremove

# Check disk usage
df -h
du -sh /var/cache/apt/archives/

Configure Docker for Limited Storage

# Create Docker configuration
sudo nano /etc/docker/daemon.json

# Add resource limits:
{
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

# Restart Docker
sudo systemctl restart docker

Hardware-Specific Optimizations

Fix Intel Atom Shutdown Issues

# Create modprobe configuration
sudo nano /etc/modprobe.d/blacklist-intel-cstate.conf

# Add:
blacklist intel_idle

# Update initramfs
sudo update-initramfs -u

Permanently Fix Atom Shutdown Issues

# Edit GRUB configuration
sudo nano /etc/default/grub

# Find the line starting with GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_idle.max_cstate=0 intel_pstate=disable"

# Update GRUB
sudo update-grub

# Reboot to test
sudo reboot

Disable IPv6 (Optional)

# Create sysctl configuration
sudo nano /etc/sysctl.d/99-disable-ipv6.conf

# Add:
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

# Apply changes
sudo sysctl --system

Results and Performance

After following this complete process, you'll have:

  • Functional headless Kali Linux system
  • SSH remote access capability
  • Docker containerization support
  • Essential penetration testing tools
  • Optimized for low-power operation

This concludes the setup and automation process, we can now move on to installing the Twingate connector (that will be a different post)

Previous Post Next Post

نموذج الاتصال