From 5ff2bb973f66dc9fffa262de978deac89618163f Mon Sep 17 00:00:00 2001 From: Aaron Klingaman Date: Wed, 5 Apr 2006 18:18:17 +0000 Subject: [PATCH] moved to v4arch repo --- documentation/bm_flowchart.svg | 2711 ----------------------- documentation/bm_sequence.svg | 1821 --------------- documentation/boot-manager-tech-doc.pdf | Bin 115600 -> 0 bytes documentation/boot-manager-tech-doc.xml | 891 -------- 4 files changed, 5423 deletions(-) delete mode 100644 documentation/bm_flowchart.svg delete mode 100644 documentation/bm_sequence.svg delete mode 100644 documentation/boot-manager-tech-doc.pdf delete mode 100644 documentation/boot-manager-tech-doc.xml diff --git a/documentation/bm_flowchart.svg b/documentation/bm_flowchart.svg deleted file mode 100644 index 4d0b8a3..0000000 --- a/documentation/bm_flowchart.svg +++ /dev/null @@ -1,2711 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Master slide - - - Slide - - Graphic - - - - - - - - - - - - - - Read network - - - configuration - - - , - - - node id - - - , - - - and key - - - from floppy disk - - - - - - - - - - - - - - - - - Boot manager - - - exits - - - - - - - - - - - - - - - - - - - - Authentication - - - successful - - - ? - - - - - - - - - - - - - - - - - - - - No - - - - - - - - - - - Notify - - - - - - - - - - - Boot manager - - - started by cd - - - - - - - - - - - - - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - Is boot state - - - new - - - ? - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - Is boot state - - - reinstall - - - ? - - - - - - - - - - - Notify - - - - - - - - - - - - - - Prompt user to - - - confirm install - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - Install - - - confirmed - - - ? - - - - - - - - - - - - - - - - - - - - No - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - Is boot state - - - boot - - - ? - - - - - - - - - - - - - - No - - - - - - - - - - - - - - Validate that node - - - is in fact installed - - - . - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - Add any unused - - - block devices to - - - extend partitions - - - - - - - - - - - - - - Chain boot to - - - installed node - - - kernel - - - - - - - - - - - - - - Boot - - - successful - - - ? - - - - - - - - - - - Notify - - - - - - - - - - - - - - No - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - Is boot state - - - debug - - - ? - - - - - - - - - - - - - - No - - - - - - - - - - - - - - Setup debug - - - environment - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - - - - - - - No - - - - - - - - - - - - - - Update node - - - configuration to - - - match PLC - - - - - - - - - - - - - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - No - - - - - - - - - - - - - - - - - - - - Node - - - Requirements - - - met - - - ? - - - - - - - - - - - - - - Check machine - - - hardware and - - - network - - - requirements - - - - - - - - - - - - - - - - - - - - Invoke installer to - - - reinstall machine - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - - - - - - - No - - - - - - - - - - - - - - Install - - - succesful - - - ? - - - - - - - - - - - - - - Yes - - - - - - - - - - - - - - - - - - - - No - - - - - - - - - - - - - - - - Authenticate - - - with PLC - - - - - - - - - - - - - - - - Get full node - - - details from - - - API - - - , - - - including - - - all networks - - - and boot - - - state - - - - - - - - - - - - - - - - Update node - - - boot state to - - - reinstall - - - - - - - - - - - - - - - - Update node - - - boot state to - - - boot - - - - - - - - - - - - - - - - Send working - - - hardware - - - configuration - - - to PLC - - - - - - - - - - - - - - - - Notify tech - - - contacts of - - - problem via - - - email - - - - - - - - - - - - - - - - PLC API Calls - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/documentation/bm_sequence.svg b/documentation/bm_sequence.svg deleted file mode 100644 index f9a0dc4..0000000 --- a/documentation/bm_sequence.svg +++ /dev/null @@ -1,1821 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Master slide - - - Slide - - Drawing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Drawing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Drawing - - - - - - - - - - - - Node - - - - - - - - Drawing - - - - - - - - - - - - PLC (MA) Boot Server - - - - - - - - Drawing - - - - - - 1. Boots from BootCD - - - - - - - (Linux loaded) - - - - - - - - Drawing - - - - - - 2. Hardware initialized - - - - - - - - Drawing - - - - - - 3. Read network config - - - - - - - from floppy - - - - - - - - Drawing - - - - - - 7. Node key read into memory from floppy - - - - - - - - Drawing - - - - - - 4. Contact PLC (MA) - - - - - - - - Drawing - - - - - - 6. Execute boot mgr - - - - - - - - Drawing - - - - - - - - - - - - Boot Manager - - - - - - - - Drawing - - - - - - 8. Invoke Boot API - - - - - - - - Drawing - - - - - - 10. State = “install”, run installer - - - - - - - - Drawing - - - - - - 11. Update node state via Boot API - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - 13. Chain-boot node (no restart) - - - - - - - - Drawing - - - - - - - - - - Drawing - - - - - - 14. Node booted - - - - - - - - Drawing - - - - - - 9. Verify node key, send - - - - - - - current node state - - - - - - - - Drawing - - - - - - 12. Verify node key, - - - - - - - change state to “boot” - - - - - - - - Drawing - - - - - - 5. Send boot manager - - - - - - - - diff --git a/documentation/boot-manager-tech-doc.pdf b/documentation/boot-manager-tech-doc.pdf deleted file mode 100644 index 9a336e3265b21f6aff09442fe4ce2a5872562742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115600 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 diff --git a/documentation/boot-manager-tech-doc.xml b/documentation/boot-manager-tech-doc.xml deleted file mode 100644 index dfd6082..0000000 --- a/documentation/boot-manager-tech-doc.xml +++ /dev/null @@ -1,891 +0,0 @@ - - -
- - BootManager Technical Documentation - - - Aaron - - Klingaman - - alk@absarokasoft.com - - - - Princeton University - - - - - 1.0 - - March 15, 2005 - - AK - - - Initial draft. - - - - - 1.1 - - May 31, 2005 - - AK - - - Updated post implementation and deployment. - - - - - 1.2 - - November 16, 2005 - - AK - - - Add section on where source code is, and other updates to make - it consistent with implementation. - - - - - 1.3 - - March 17, 2006 - - AK - - - Reworked various wording to fit in correctly with new - architecture terminology. - - Updated to match PlanetLab Core Specification. - - - - - -
- Overview - - This document describes the implementation of the package called the - BootManager at a technical level. The BootManager is used in conjunction - with the PlanetLab BootCD to securely boot nodes, including remote - installation, debugging, and validation. It is the primary method used by - the PlanetLab Central Management Authority (MA) to manage nodes. -
- -
- Components - - The entire BootManager system consists of several primary - components. These are: - - - - The existing, stardard MA provided calls to allow principals to - add and manage node records, and a new call to generate node-specific - configuration files - - - - New MA API calls with a new authentication mechanism for - node-based MA calls - - - - A code package to be run in the boot cd environment on nodes - containing core install/validate/boot logic - - - - The intention with the BootManager system is to send the same script - to all nodes (consisting of the core BootManager code), each time the node - starts. Then, the BootManager will run and detiremine which operations to - perform on the node, based on its state of installation. All state based - logic for the node boot, install, debug, and reconfigure operations are - contained in one place; there is no boot state specific logic located on - the MA servers. -
- -
- Soure Code - - All BootManager source code is located in the repository - 'bootmanager' on the PlanetLab CVS system. For information on how to - access CVS, consult the PlanetLab website. Unless otherwise noted, all - file references refer to this repository. -
- -
- Management Authority Node Fields - - The following MA database fields are directly applicable to the - BootManager operation, and to the node-related API calls (detailed - below). - -
- node_id - - An integer unique identifier for a specific node. -
- -
- node_key - - This is a per-node, unique value that forms the basis of the node - authentication mechanism detailed below. When a new node record is added - to the MA by a principal, it is automatically assigned a new, random - key, and distributed out of band to the nodes. This shared secret is - then used for node authentication. The contents of node_key are - generated using this command: - - openssl rand -base64 32 - - Any = (equals) characters are removed from the string. -
- -
- boot_state - - Each node always has one of four possible boot states, stored as a - string, refered to as boot_state. These are: - - - - 'inst' - - Install. The boot state cooresponds to a new node that has not - yet been installed, but record of it does exist. When the - BootManager starts, and the node is in this state, the user is - prompted to continue with the installation. The intention here is to - prevent a non-PlanetLab machine (like a user's desktop machine) from - becoming inadvertantly wiped and installed with the PlanetLab node - software. This is the default state for new nodes. - - - - 'rins' - - Reinstall. In this state, a node will reinstall the node - software, erasing anything that might have been on the disk - before. - - - - 'boot' - - Boot to bring a node online. This state cooresponds with nodes - that have sucessfully installed, and can be chain booted to the - runtime node kernel. - - - - 'dbg' - - Debug. Regardless of whether or not a machine has been - installed, this state sets up a node to be debugged by - administrators. In debug mode, no node software is running, and the - node can be accessed remotely by administrators. - - -
-
- -
- Existing Management Authority API Calls - - These calls, take from the PlanetLab Core Specification and extended - with additional parameters, are used by principals to maintain the set of - nodes managed by a MA. See the Core Specification for more information. - The MA may provide an easy to use interface, such as a web interface, that - calls these directly. - - - - AddNode( authentication, node_values ) - - Add a new node record. node_values contains hostname, ip - address and other network settings, and the new fields: boot_state. - The resultant node_id is returned. - - - - UpdateNode( authentication, node_id, update_values ) - - Update an existing node record. update_values can include - hostname, ipaddress, and the new fields: boot_state. - - - - DeleteNode( authentication, node_id ) - - Delete a node record. - - -
- -
- New Management Authority API Calls - - The API calls available as part of the MA API that are intended to - be run by principals leverage existing authentication mechanisms. However, - the API calls described below that will be run by the nodes themselves - need a new authentication mechanism. - -
- Node Authentication - - As is done with other MA API calls, the first parameter to all - BootManager related calls will be an authentication structure, - consisting of these named fields: - - - - AuthMethod - - The authentication method, only 'hmac' is currently - supported - - - - node_id - - The node id, contained in the configuration file on the - node. - - - - node_ip - - The node's primary IP address. This will be checked with the - node_id against MA records. - - - - value - - The authentication string, depending on method. For the 'hmac' - method, a hash for the call using the HMAC algorithm, made from the - parameters of the call and the key contained on the configuration - file. For specifics on how this is created, see below. - - - - Authentication is succesful if the MA is able to create the same - hash from the values usings its own copy of the NODE_KEY. If the hash - values to not match, then either the keys do not match or the values of - the call were modified in transmision and the node cannot be - authenticated. - - Both the BootManager and the authentication functions at the MA - must agree on a method for creating the hash values for each call. This - hash is essentially a finger print of the method call, and is created by - this algorithm: - - - - Take the value of every part of each parameter, except the - authentication structure, and convert them to strings. For arrays, - each element is used. For dictionaries, not only is the value of all - the items used, but the keys themselves. Embedded types (arrays or - dictionaries inside arrays or dictionaries, etc), also have all - values extracted. - - - - Alphabetically sort all the parameters. - - - - Concatenate them into a single string. - - - - Prepend the string with the method name and [, and append - ]. - - - - The implementation of this algorithm is in the function - serialize_params in the file source/BootAPI.py. The same algorithm is - located in the 'plc_api' repository, in the function serialize_params in - the file PLC/Auth.py. - - The resultant string is fed into the HMAC algorithm with the node - key, and the resultant hash value is used in the authentication - structure. - - This authentication method makes a number of assumptions, detailed - below. - - - - All calls made to the MA are done over SSL, so the details of - the authentication structure cannot be viewed by 3rd parties. If, in - the future, non-SSL based calls are desired, a sequence number or - some other value making each call unique will would be required to - prevent replay attacks. In fact, the current use of SSL negates the - need to create and send hashes across - technically, the key itself - could be sent directly to the MA, assuming the connection is made to - an HTTPS server with a third party signed SSL certificate being - verified. - - - - Athough calls are done over SSL, they use the Python class - libary xmlrpclib, which does not do SSL certificate - verification. - - -
- -
- New API Calls - - The calls available to the BootManager, that accept the above - authentication, are: - - - - BootUpdateNode( authentication, update_values ) - - Update a node record, including its boot state, primary - network, or ssh host key. - - - - BootCheckAuthentication( authentication ) - - Simply check to see if the node is recognized by the system - and is authorized. - - - - BootGetNodeDetails( authentication ) - - Return details about a node, including its state, what - networks the MA database has configured for the node, and what the - model of the node is. - - - - BootNotifyOwners( authentication, message, include_pi, - include_tech, include_support ) - - Notify someone about an event that happened on the machine, - and optionally include the site Principal Investigators, technical - contacts, and PlanetLab Support. - - - - The new calls used by principals, using existing authentication - methods, are: - - - - GenerateNodeConfigurationFile( authentication, node_id - ) - - Generate a configuration file to be used by the BootManager - and the BootCD to configure the network for the node during boot. - This resultant file also contains the node_id and node_key values. - A new node_key is generated each time, invalidating old files. The - full contents and format of this file is detailed below. - - -
-
- -
- Core Software Package - - The BootManager core package, which is run on the nodes and contacts - the MA API as necessary, is responsible for the following major functional - units: - - - - Configuring node hardware and installing the PlanetLab operating - system - - - - Putting a node into a debug state so administrators can track - down problems - - - - Reconfiguring an already installed node to reflect new hardware, - or changed network settings - - - - Booting an already installed node into the PlanetLab operating - system - - - -
- BootManager Flow Chart - - Below is a high level flow chart of the BootManager, from the time - it is executed to when it exits. This core state machine is located in - source/BootManager.py. - -
- BootManager Flow Chart - - - - - - -
- - -
- -
- Example Execution Session - - Below is one example session of the BootManager, for a new node - being installed then booted. - -
- Example Execution Session - - - - - - -
-
- -
- Boot CD Environment - - The BootManager needs to be able to operate under all currently - supported boot cds. The new 3.0 cd contains software the current 2.x cds - do not contain, including the Logical Volume Manager (LVM) client tools, - RPM, and YUM, among other packages. Given this requirement, the boot cd - will need to download as necessary the extra support files it needs to - run. Depending on the size of these files, they may only be downloaded - by specific steps in the flow chart in figure 1, and thus are not - mentioned. - - See the PlanetLab BootCD Documentation for more information about - the current, 3.x boot cds, how they are build, and what they provide to - the BootManager. -
- -
- Node Configuration Files - - To remain compatible with 2.x boot cds, the format and existing - contents of the configuration files for the nodes will not change. There - will be, however, the addition of three fields: - - - - NET_DEVICE - - If present, use the device with the specified mac address to - contact the MA. The network on this device will be setup. If not - present, the device represented by 'eth0' will be used. - - - - NODE_KEY - - The unique, per-node key to be used during authentication and - identity verification. This is a fixed length, random value that is - only known to the node and the MA database. - - - - NODE_ID - - The MA assigned node identifier. - - - - An example of a configuration file for a dhcp networked - machine: - - IP_METHOD="dhcp" -HOST_NAME="planetlab-1" -DOMAIN_NAME="cs.princeton.edu" -NET_DEVICE="00:06:5B:EC:33:BB" -NODE_KEY="79efbe871722771675de604a227db8386bc6ef482a4b74" -NODE_ID="121" - - An example of a configuration file for the same machine, only with - a statically assigned network address: - - IP_METHOD="static" -IP_ADDRESS="128.112.139.71" -IP_GATEWAY="128.112.139.65" -IP_NETMASK="255.255.255.192" -IP_NETADDR="128.112.139.127" -IP_BROADCASTADDR="128.112.139.127" -IP_DNS1="128.112.136.10" -IP_DNS2="128.112.136.12" -HOST_NAME="planetlab-1" -DOMAIN_NAME="cs.princeton.edu" -NET_DEVICE="00:06:5B:EC:33:BB" -NODE_KEY="79efbe871722771675de604a227db8386bc6ef482a4b74" -NODE_ID="121" - - Existing 2.x boot cds will look for the configuration files only - on a floppy disk, and the file must be named 'planet.cnf'. The new 3.x - boot cds, however, will initially look for a file named 'plnode.txt' on - either a floppy disk, or burned onto the cd itself. Alternatively, it - will fall back to looking for the original file name, 'planet.cnf'. This - initial file reading is performed by the boot cd itself to bring the - nodes network online, so it can download and execute the - BootManager. - - However, the BootManager will also need to identify the location - of and read in the file, so it can get the extra fields not initially - used to bring the network online (primarily node_key and node_id). Below - is the search order that the BootManager will use to locate a - file. - - Configuration file location search order: - - - - File name - - Floppy drive - - Flash devices - - Root file system, in / - - CDRom, in /usr/boot - - CDRom, in /usr - - - - plode.txt - - 1 - - 2 - - 4 - - 5 - - 6 - - - - planet.cnf - - 3 - - - - - - - - - - - - -
- -
- BootManager Configuration - - All run time configuration options for the BootManager exist in a - single file located at source/configuration. These values are described - below. These values cannot be changed on the fly - they must be changed - and a new BootManager package built and signed. - - - - VERSION - - The current BootManager version. During install, written out - to /etc/planetlab/install_version - - - - BOOT_API_SERVER - - The full URL of the API server to contact for authenticated - operations. - - - - TEMP_PATH - - A writable path on the boot cd we can use for temporary - storage of files. - - - - SYSIMG_PATH - - The path were we will mount the node logical volumes during - any step that requires access to the disks. - - - - CACERT_PATH - - Variable not used anymore. - - - - NONCE_FILE - - Variable not used anymore. - - - - PLCONF_DIR - - The path that PlanetLab node configuration files will be - created in during install. This should not be changed from - /etc/planetlab, as this path is assumed in other PlanetLab - components. - - - - SUPPORT_FILE_DIR - - A path on the boot server where per-step additional files may - be located. For example, the packages that include the tools to - allow older 2.x version boot cds to partition disks with LVM. - - - - ROOT_SIZE - - During install, this sets the size of the node root partition. - It must be large enough to house all the node operational software. - It does not store any user/slice files. Include 'G' suffix in this - value, indicating gigabytes. - - - - SWAP_SIZE - - How much swap to configure the node with during install. - Include 'G' suffix in this value, indicating gigabytes. - - - - SKIP_HARDWARE_REQUIREMENT_CHECK - - Whether or not to skip any of the hardware requirement checks, - including total disk and memory size constraints. - - - - MINIMUM_MEMORY - - How much memory is required by a running PlanetLab node. If a - machine contains less physical memory than this value, the install - will not proceed. - - - - MINIMUM_DISK_SIZE - - The size of the small disk we are willing to attempt to use - during the install, in gigabytes. Do not include any - suffixes. - - - - TOTAL_MINIMUM_DISK_SIZE - - The size of all usable disks must be at least this sizse, in - gigabytes. Do not include any suffixes. - - - - INSTALL_LANGS - - Which language support to install. This value is used by RPM, - and is used in writting /etc/rpm/macros before any RPMs are - installed. - - - - NUM_AUTH_FAILURES_BEFORE_DEBUG - - How many authentication failures the BootManager is willing to - except for any set of calls, before stopping and putting the node - into a debug mode. - - -
- -
- Installer Hardware Detection - - When a node is being installed, the BootManager must identify - which hardware the machine has that is applicable to a running node, and - configure the node properly so it can boot properly post-install. The - general procedure for doing so is outline in this section. It is - implemented in the source/systeminfo.py - file. - - The process for identifying which kernel module needs to be load - is: - - - - Create a lookup table of all modules, and which PCI ids - coorespond to this module. - - - - For each PCI device on the system, lookup its module in the - first table. - - - - If a module is found, put in into one of two categories of - modules, either network module or scsi module, based on the PCI - device class. - - - - For each network module, write out an 'eth<index>' entry - in the modprobe.conf configuration file. - - - - For each scsi module, write out a - 'scsi_hostadapter<index>' entry in the modprobe.conf - configuration file. - - - - This process is fairly straight forward, and is simplified by the - fact that we currently do not need support for USB, sound, or video - devices when the node is fully running. The boot cd itself uses a - similar process, but includes USB devices. Consult the boot cd technical - documentation for more information. - - The creation of the PCI id to kernel module table lookup uses - three different sources of information, and merges them together into a - single table for easier lookups. With these three sources of - information, a fairly comprehensive lookup table can be generated for - the devices that PlanetLab nodes need to have configured. They - include: - - - - The installed /usr/share/hwdata/pcitable - file - - Created at the time the hwdata rpm was built, this file - contains mappings of PCI ids to devices for a large number of - devices. It is not necessarily complete, and doesn't take into - account the modules that are actually available by the built - PlanetLab kernel, which is a subset of the full set available - (again, PlanetLab nodes do not have a use for network or video - drivers, and thus are not typically built). - - - - From the built kernel, the modules.pcimap - from the /lib/modules/<kernelversion>/ - directory. - - This file is generated at the time the kernel is installed, - and pulls the PCI ids out of each module, for the modules list they - devices they support. Not all modules list all devices they sort, - and some contain wild cards (that match any device of a single - manufacturer). - - - - From the built kernel, the modules.dep - from the /lib/modules/<kernelversion>/ - directory. - - This file is also generated at the time the kernel is - installed, but lists the dependencies between various modules. It is - used to generate a list of modules that are actually - available. - - - - It should be noted here that SATA (Serial ATA) devices have been - known to exist with both a PCI SCSI device class, and with a PCI IDE - device class. Under linux 2.6 kernels, all SATA modules need to be - listed in modprobe.conf under 'scsi_hostadapter' lines. This case is - handled in the hardware loading scripts by making the assumption that if - an IDE device matches a loadable module, it should be put in the - modprobe.conf file, as 'real' IDE drivers are all currently built into - the kernel, and do not need to be loaded. SATA devices that have a PCI - SCSI device class are easily identified. - - It is enssential that the modprobe.conf configuration file contain - the correct drivers for the disks on the system, if they are present, as - during kernel installation the creation of the initrd (initial ramdisk) - which is responsible for booting the system uses this file to identify - which drivers to include in it. A failure to do this typically results - in an kernel panic at boot with a 'no init found' message. -
-
- -
- Backward Compatibility - - This section only applies to those interested in sections of the - BootManager that exist for backward compatibility with nodes not - containing the NODE_KEY. This does not affect any nodes added to the - system after deployment of the BootManager. - - Given the large number of nodes in PlanetLab, and the lack of direct - physical access to them, the process of updating all configuration files - to include the new NODE_ID and NODE_KEY will take a fairly significant - amount of time. Rather than delay deployment of the BootManager until all - machines are updated, alternative methods for aquiring these values is - used for these nodes. - - First, the NODE_ID value. For any machine already part of PlanetLab, - there exists a record of its IP address and MAC address in PlanetLab - central. To get the NODE_ID value, if it is not located in the - configuration file, the BootManager uses a standard HTTP POST request to a - known php page on the boot server, sending the IP and MAC address of the - node. This php page queries the MA database (by using a PHP page, not - through the MA API), and returns a NODE_ID if the node is part of - PlanetLab, -1 otherwise. - - Second, the NODE_KEY value. All Boot CDs currently in use, at the - time they request a script from the MA to run, send in the request a - randomly generated value called a boot_nonce, usually 32 bytes or larger. - During normal BootManager operation, this value is ignored. However, in - the absense of a node key, we can use this value. Although it is not as - secure as a typical node key (because it is not distributed through - external mechanisms, but is generated by the node itself), it can be used - if we validate that the IP address of the node making the request matches - the MA record. This means that nodes behind firewalls can no longer be - allowed in this situation. -
-
\ No newline at end of file -- 2.47.0