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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

)4M~uPiUPW0EMpR!bAJlB6!ropi=X~>V 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�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 - -

- - 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.51.1