Repurposing a Google Search Appliance Lab Log
Hardware: I bought a Dell PowerEdge R720xd (Google Search Appliance T4/T5 variant) - 96 GB DDR3 ECC RAM, PERC H710P Mini RAID controller, BCM5720 quad-NIC. This is a raw log of every bug I hit and every step that actually worked while repurposing it from scratch. I wanted to mess around with it and learn from it, so expect beginner mistakes…..
Want steps only? See the quick repurposing guide (checklist + precautions, no war story).
What Is a Google Search Appliance?
The Google Search Appliance was an enterprise on-premises search product a physical Dell PowerEdge server sold to businesses with Google’s branding and a custom OEM BIOS locked on top. Hardware-wise it’s a standard 12th-gen Dell (R720 or R730 class depending on the generation), but the firmware is not stock - Google modified it to lock BIOS access, disable standard reset paths, and run their own Lifecycle Controller splash.
When Google discontinued the GSA around 2019, units started flooding eBay. The catch: they look like normal servers but behave differently until you replace the firmware.
Phase 1 - First Boot and Display
The server has no HDMI
The R720xd only has a VGA port. To connect it to a modern monitor you need a VGA 🠞 HDMI active converter (not a passive cable). A passive cable won’t work, it briefly showed the POST screen then the monitor lost signal entirely.
The system was booting fine, but after POST the video mode changed and the passive adapter lost sync. It wasn’t a boot failure just a display path failure.
Use an active powered VGA 🠞 HDMI converter, or borrow a native VGA monitor once to do initial setup don’t make the same mistake as I did.
First boot observations
On first power-on with one PSU connected:
- Front health LED: slow amber blink
- Drive bay LEDs: all green
- Fans: slow 🠞 loud during POST 🠞 never settled
The amber blink was just a PSU redundancy warning, perfectly normal with only one PSU plugged in. Not a hardware fault, be sure to have both PSU connected.
Fans stuck at 100%
The fans never settled down after POST. This turned out to be the iDRAC/BMC not completing initialization, which puts the system into a thermal failsafe mode that locks fans at maximum. This is not a BIOS issue or a hardware failure, it’s the management controller not coming up cleanly, which on a GSA is caused by the Google firmware. Although of course saying this now may seem basic knowledge but at the moment it took me a while to figure out since this is my first time dealing with a physical server.
Phase 2 - Trying to Access iDRAC
Direct Ethernet PC <> iDRAC did not work
First attempt: plug iDRAC port directly into PC, open browser. Result: Media State: Media disconnected.
The problem wasn’t IP configuration, it was a physical layer issue. The iDRAC port had no link LEDs at all because the iDRAC subsystem wasn’t initialized yet (again, Google firmware issue). Even after establishing a physical link, a direct PC-to-server cable has no DHCP server, so iDRAC gets no IP unless you set a static one.
What works:
- Connect iDRAC to a local router (no internet needed, just a LAN router providing DHCP)
- Wait 2–3 minutes for iDRAC to initialize and get an IP
- Check the router’s DHCP client list
- Open
https://<idrac-ip>- default credentials:root/calvin
However on this GSA the iDRAC port had a “license required” sticker on the rear. Without an Enterprise iDRAC license the dedicated port may be limited or disabled. This was secondary to the firmware issue.
Phase 3 - The Google BIOS Lock
F2, F10, F11 - all blocked
On first successful boot with a working display:
Memory initialization warning detected
DDR3 training failure / write leveling DIMM A5/A4
MEMBIST memory test failure DIMM A4
Type password and... press CTRL+ENTER to disable password security
Pressing CTRL+ENTER bypassed the password prompt and let the system continue POST. This was the first real entry point.
After that: Strike F1 to continue, F2 to run System Setup
The memory errors (DIMM A4/A5) were real, those slots had failed or empty DIMMs. They didn’t stop the system from booting but needed to be handled.
Jumper resets did not clear the password
The R720xd has two relevant jumpers on the motherboard:
| Jumper | Purpose |
|---|---|
PWRD_EN |
Password enable/disable |
NVRAM_CLR |
Clear NVRAM / stored config |
Moving NVRAM_CLR to the clear position produced this message on next boot:
Applying configuration changes...
System reboot required for configuration changes to take effect.
Please power off the system and remove NVRAM_CLR jumper.
Press F1 to continue, F2 for Setup, F11 for Boot Menu
Initializing firmware interfaces...
Lifecycle Controller: Collecting System Inventory...
The NVRAM reset was detected and applied. But the setup password prompt still appeared afterward. The Google firmware stores the password outside normal NVRAM standard Dell jumper resets don’t reach it.
Jumpers are not useless here. The NVRAM reset does clear some state and is part of the process. But alone, it doesn’t remove the Google password.
BIOS recovery trigger attempts
Tried CTRL+ESC + power button to trigger Dell’s pre-BIOS recovery mode (which reads a BIOS_IMG.rcv file from USB before normal firmware loads). No response.. The Google firmware has this disabled or blocks it.
The actual unlock path (from Reddit r/servers)
Found a thread from a user who had already solved this exact problem on a GSA T4 (also R720). The method that works:
- Enter the RAID config utility (
CTRL+Rat boot) - this is accessible even with the BIOS locked - Wipe the existing RAID config completely
- Build a new array (or leave it empty)
- Boot from a USB (the system will fall through to USB if no bootable disk exists)
- Install Linux (Ubuntu)
- From Linux, flash the Dell standard BIOS over the Google OEM BIOS
- After flash, the password is gone - system behaves as a normal Dell R720xd
You don’t need to crack or bypass the password. You just replace the firmware that enforces it.
Phase 4 - Booting Ubuntu
Getting into USB boot
With CTRL+ENTER bypassing the password prompt at POST, the system could reach F11 (Boot Manager). With a bootable Ubuntu USB inserted, it showed up and booted successfully.
Used: Ubuntu 24.04 live USB made with Rufus (MBR, FAT32 - important for BIOS boot mode).
What was on the original drives
Looking at the Ubuntu installer’s storage layout screen showed:
crypto_LUKS partition 1 existing, not mounted
crypto_LUKS partition 2 existing, not mounted
crypto_LUKS partition 3 existing, not mounted
swap partition unused
ESP partition existing, unused
Multiple crypto_LUKS encrypted partitions across several disks. No readable root filesystem, no mountable OS partition. The previous Google appliance OS was LUKS-encrypted and inaccessible without the passphrase which I do not have.
This is not “OS encryption” in the way Linux users set it up. It’s remnants of a deployed appliance image that was encrypted at the storage level. Without the key it’s unrecoverable, and there’s no reason to try in my opinion, don’t get me wrong I was very curious and wished to see the contents inside even if it was boring files. But realistically it’s just a deployed enterprise appliance, not personal data.
Phase 5 - Flashing the Dell BIOS
Why this works
The Dell official BIOS updater validates the system model before flashing. If you give it the wrong file it refuses to run. If you give it the right file it stages the update and rewrites the firmware region including the part that stored Google’s OEM password. After reboot: standard Dell BIOS, no password, iDRAC initializes normally.
What file to use
Server is a Dell PowerEdge R720xd (confirmed: DDR3 RAM, PERC H710P, 12th gen). The correct file:
BIOS_DYH8T_LN_2.7.0.BIN
DYH8T- Dell package identifier for R720/R720xdLN- Linux executable format (not the Windows.EXE)2.7.0- version
Do not use an R730 or R710 BIOS. If you have the same GSA as me The flash tool will catch mismatches in most cases but it’s not worth risking a brick.
Steps from Ubuntu live session
# USB was the same one used to boot Ubuntu, with the .BIN added to the root
ls /media/ubuntu/
# Navigate to USB
cd /media/ubuntu/<USB_NAME>
# Make executable
chmod +x BIOS_DYH8T_LN_2.7.0.BIN
# Flash
sudo ./BIOS_DYH8T_LN_2.7.0.BIN
The tool ran, verified the system, staged the update, and prompted for reboot. During reboot the BIOS was written. After reboot:
- F2 entered without any password prompt
- iDRAC initialized - port LEDs lit up
- Fans dropped to normal speed (this was the confirmation everything worked)
Phase 6 - RAID Setup and OS Installation
Clearing the old RAID config
Before installing Ubuntu properly, the existing RAID configuration was wiped via CTRL+R at boot (PERC configuration utility):
- Deleted VD0 (RAID 10, 3.7 TB)
- Deleted VD1 (RAID 0, 92 GB)
- Cleared all foreign configurations and metadata
Then rebuilt clean:
| VD | Type | Disks | Size | Purpose |
|---|---|---|---|---|
| VD0 | RAID 10 | 8x HDD | ~3.7 TB | Storage |
| VD1 | RAID 0 | 1x SSD | 92 GB | OS |
Important: RAID controller metadata persists even after deleting virtual disks. If you layer changes without a full reset first, you end up in inconsistent states where the controller initializes slowly or erratically. Always do a full clear.
Installing Ubuntu
Booted the Ubuntu installer, targeted VD1 (92 GB RAID 0) for the OS, used default LVM layout. Install completed fine.
PXE boot loop after install
After removing the USB and rebooting: PXE boot loop. The system ignored the hard drive entirely and fell through to network boot, which failed.
Cause: the BIOS was trying to boot the wrong virtual disk. Dell PERC systems in BIOS mode only boot one virtual disk - and it was pointing at VD0 (the 3.7 TB data disk) instead of VD1 where Ubuntu was installed.
The PERC H710P Mini’s virtual disk management menu does not have a “Make Bootable” option. Boot selection is done at the BIOS level:
F2 🠞 System BIOS 🠞 Boot Settings 🠞 Hard Disk Drive Sequence
Set VD1 (92 GB RAID 0) as first in the sequence.
Even after that: still booting into PXE. GRUB had been installed to the filesystem but not correctly to the MBR of the RAID0 disk.
Fix - boot live USB and reinstall GRUB to the correct device:
lsblk
# confirm RAID0 OS disk = /dev/sdb
sudo mount /dev/ubuntu-vg/ubuntu-lv /mnt
sudo mount /dev/sdb2 /mnt/boot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install --recheck --force /dev/sdb
update-grub
After this: Ubuntu booted correctly.
Phase 7 - Networking Broken on First Boot
What the server looked like after Ubuntu booted
eno1 UP xxx.xxx.x.xxx (active)
eno2 DOWN NO-CARRIER
eno3 DOWN NO-CARRIER
eno4 DOWN NO-CARRIER
zt... UP (ZeroTier interface - was already installed)
IP existed but DNS was broken. Some pings worked, others didn’t. NetworkManager commands had no effect on eno1.
Root cause: dual network stack conflict
Ubuntu server installed with both NetworkManager and systemd-networkd active simultaneously. netplan was configured to use systemd-networkd as the backend, so systemd-networkd was actually controlling the interfaces. NetworkManager was running but had no authority.
This produced:
eno1marked as “unmanaged” by NetworkManager- DHCP inconsistencies
- DNS failures
- Partial connectivity
Fix:
sudo systemctl restart NetworkManager
This was enough to get NetworkManager to take control properly. IPv4 came up stable, DNS resolved, LAN connectivity stable.
The real proper fix is to pick one and commit, either disable systemd-networkd and use NetworkManager, or disable NetworkManager and configure netplan cleanly for systemd-networkd. Running both creates unpredictable states.
Phase 8 - SSH and Remote Access
SSH was never actually the problem
OpenSSH was installed and running on port 22 from the first boot. UFW was inactive (no rules blocking anything). The server was accessible locally via:
The hostname on the server was set to google (leftover from the appliance image’s hostname configuration).
ZeroTier was already installed
The ZeroTier interface (zt...) showed up in ip a with a stable peer connection (PLANET + LEAF nodes visible). This was already configured on the network before the OS install ZeroTier persists across reinstalls if the identity files survive.
ZeroTier works for SSH. It does not work for Wake-on-LAN because WoL requires Layer 2 broadcast packets, and ZeroTier is a Layer 3 VPN broadcasts don’t cross it.
Tailscale setup and ACL bug
Installed Tailscale for more reliable remote access:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Server got a 100.x.x.x Tailscale IP. But SSH over Tailscale failed with:
tailnet policy does not permit you to SSH to this node
Root cause: The Tailscale ACL policy used check instead of accept. In Tailscale’s ACL syntax, check means “test/evaluate this rule” it does not actually allow traffic. The policy was syntactically valid but didn’t permit anything.
Fix: Edit the ACL in the Tailscale admin console:
{
"acls": [
{
"action": "accept",
"src": ["autogroup:member"],
"dst": ["<server-tag-or-ip>:22"]
}
]
}
After saving with accept rules: SSH over Tailscale worked immediately.
Phase 9 - Wake-on-LAN
Local WoL
After confirming the NIC LEDs stayed lit after shutdown (indicating standby power is active), WoL was tested locally:
# Windows PowerShell
$mac = "xx-xx-xx-xx-xx-xx"
$broadcast = [System.Net.IPAddress]::Broadcast
$packet = [byte[]]@(0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF)
$macBytes = $mac -split '-' | ForEach-Object { [Convert]::ToByte($_, 16) }
for ($i = 0; $i -lt 16; $i++) { $packet += $macBytes }
$udp = New-Object System.Net.Sockets.UdpClient
$udp.Connect("xxx.xxx.x.xxx", 9)
$udp.Send($packet, $packet.Length)
$udp.Close()
Worked. Server powered on.
WSL WoL failed
Trying to send the magic packet from WSL (Windows Subsystem for Linux) did not work. WSL cannot reliably send Layer 2 broadcast packets since its virtual network stack intercepts them before they reach the physical NIC. This is a known WSL limitation with WoL.
Fix: Run WoL from native Windows PowerShell, not from WSL.
BIOS setting needed
In BIOS (F2 🠞 System BIOS 🠞 Integrated Devices 🠞 NIC):
- Set NIC to
Enabled (OS)mode - Enable
Preboot Wake-on-LAN
WoL depends more on the NIC having standby power than on what BIOS labels say if the NIC LEDs are on after shutdown, standby power is present and WoL will work.
Remote WoL via Raspberry Pi
WoL magic packets must originate from inside the LAN - they’re Layer 2 broadcasts and don’t route over the internet. The solution for remote wake: a Raspberry Pi that stays always-on inside the home network, accessible via Tailscale or ZeroTier.
Architecture:
Remote device 🠞 SSH (Tailscale) 🠞 Raspberry Pi 🠞 WoL broadcast 🠞 Server wakes up
Script on the Pi (wake.sh):
#!/bin/bash
MAC="xx:xx:xx:xx:xx:xx"
BCAST="xxx.xxx.x.xxx"
echo "Sending WoL..."
wakeonlan -i "$BCAST" "$MAC"
echo "Done"
sudo apt install wakeonlan -y
chmod +x wake.sh
From anywhere in the world:
ssh [email protected] # Tailscale IP of the Pi
./wake.sh
Final System State
| Component | Status |
|---|---|
| BIOS | Standard Dell v2.7.0 - Google firmware gone |
| iDRAC | Initializing normally, fans under control |
| RAM | 86–96 GB DDR3 ECC active (DIMM A4/A5 slots avoided) |
| Storage | RAID 10 (3.7 TB data) + RAID 0 (92 GB OS) - both Optimal |
| OS | Ubuntu, stable, temps 40–52°C |
| Network | eno1 up, 192.168.1.47, NetworkManager controlling interfaces |
| SSH | Working locally + via Tailscale (100.x.x.x) |
| Firewall | UFW active, SSH allowed |
| WoL | Working locally via PowerShell, remote via Pi relay |
| Fans | Normal speed - iDRAC managing thermal properly |
What Actually Caused Each Problem
| Problem | Real cause |
|---|---|
| Fans at 100% | iDRAC not initializing - Google firmware |
| No iDRAC link | Same - BMC not coming up under Google firmware |
| BIOS password bypass failed | Google firmware stores password outside standard NVRAM |
| “Encrypted drives” | LUKS on top of PERC RAID volumes - not recoverable without key |
| PXE boot loop | Wrong RAID virtual disk set as boot target + GRUB not written to MBR correctly |
| RAID instability | Metadata stacking from changes without full controller reset |
| Network broken after install | NetworkManager + systemd-networkd both active, both fighting |
| Tailscale SSH denied | ACL used check instead of accept |
| WoL failed from WSL | WSL cannot send Layer 2 broadcasts |
Summary
- The GSA is just a Dell R720xd with Google OEM firmware. Once the BIOS is replaced it’s a normal server.
- Standard Dell jumper resets (
PWRD_EN,NVRAM_CLR) do partially work - they clear NVRAM state - but don’t remove the Google password on their own. The password lives in firmware, not NVRAM. - The actual unlock path requires booting external media (which is possible via
CTRL+ENTER🠞F11), installing Linux, and flashing the standard Dell BIOS from there. - RAID controller metadata persists through virtual disk deletions. Always do a full controller reset before rebuilding from scratch.
- On Dell PERC systems, boot drive selection is at the BIOS level (
Boot Settings 🠞 Hard Disk Drive Sequence), not inside the PERC utility. - Don’t run NetworkManager and systemd-networkd at the same time. Pick one.
- Tailscale ACL
check≠accept. Easy mistake to make, confusing error message. - WoL from WSL doesn’t work. Use PowerShell or a LAN relay.