Citrus PXE is a system original created for utilizing desktop computers as cluster nodes where they otherwise whould have been idle (i.e. during nights). It is designed to be used together with syslinux (PXE), but extending it for other purposes should be an easy task.
We use it to reboot student/office computers into a cluster environment (GNU/Linux) during night and automatic reboot them back to the standard OS (Windows) in the morning.
Citrus PXE is written entirely in C++ to be independent of external runtimes (like perl, java or whatever). It consists of the following components:
A cross platform library written in C++ that provides functionality like networking (using BSD socket), logging (eventlog, syslog), service (NT-service, UNIX-daemon), system info (logged on users, CPU & memory), remote reboot (in a safe way).
The solution specific static library with code shared by all sub-projects. Provides command line option parsing and network protocol to name a few things.
The service running on managed computers. Allowes the computer to be remotly rebooted and monitored (status, processes,...).
The service control tool. Used to communicate with the service running on managed computers (cpxeagnt) or the PXE boot manager (cpxesvc).
This service manage the PXE boot environment. It also maintaince the list of computers and their current status and OS. It is controlled by the service control tool (cpxectl).
This service manage the PXE boot environment: including the DHCP server, the PXE boot environment (syslinux) and the DNS (bind). This service is not required if the environment is setup manual.
The targeted OS are Windows XP and Linux. Here's a map that describes which tools, libraries and services that gets build on each supported platform:
cpxeghost - An utility that traps AMD magic packets (wake on LAN packets) on the network and reboots client computers (thru cpxectl/cpxeagnt).
cpxeweb - This web application can be used to manage the PXE environment (DNS, DHCP and PXE config).