# --- Pre-Boot Scripting (The Main Goal) --- # This section runs after the live environment has booted into RAM. # It sets up SSH and downloads/runs the harmony-inventory-agent. %pre --log=/root/ks-pre.log echo "Harmony Kickstart: Pre-boot script started." # 1. Configure SSH Access for Root # Create the .ssh directory and set correct permissions. echo " - Setting up SSH authorized_keys for root..." mkdir -p /root/.ssh chmod 700 /root/.ssh # Download the public key from the provisioning server. # The -sS flags make curl silent but show errors. -L follows redirects. curl -vSL "http://{{ gateway_ip }}:8080/{{ cluster_pubkey_filename }}" -o /root/.ssh/authorized_keys if [ $? -ne 0 ]; then echo " - ERROR: Failed to download SSH public key." else echo " - SSH key downloaded successfully." chmod 600 /root/.ssh/authorized_keys fi # 2. Download the Harmony Inventory Agent echo " - Downloading harmony-inventory-agent..." curl -vSL "http://{{ gateway_ip }}:8080/{{ harmony_inventory_agent }}" -o /usr/bin/harmony-inventory-agent if [ $? -ne 0 ]; then echo " - ERROR: Failed to download harmony_inventory_agent." else echo " - Agent binary downloaded successfully." chmod +x /usr/bin/harmony-inventory-agent fi # 3. Create a systemd service to run the agent persistently. # This is the most robust method to ensure the agent stays running. echo " - Creating systemd service for the agent..." cat > /etc/systemd/system/harmony-agent.service << EOF [Unit] Description=Harmony Inventory Agent After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/usr/bin/harmony-inventory-agent Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF # 4. Enable and start the service # The 'systemctl' commands will work correctly within the chroot environment of the %pre script. echo " - Enabling and starting harmony-agent.service..." systemctl daemon-reload systemctl enable --now harmony-agent.service # Check if the service started correctly systemctl is-active --quiet harmony-agent.service if [ $? -eq 0 ]; then echo " - Harmony Inventory Agent service is now running." else echo " - ERROR: Harmony Inventory Agent service failed to start." fi echo "Harmony Kickstart: Pre-boot script finished. The machine is ready for inventory." echo "Running cat - to pause system indefinitely" cat - %end # ================================================================= # Harmony Discovery Agent - Kickstart File (NON-INSTALL, LIVE BOOT) # ================================================================= # # This file achieves a fully automated, non-interactive boot into a # live CentOS environment. It does NOT install to disk. # # --- Automation and Interaction Control --- # Perform the installation in command-line mode. This is critical for # preventing Anaconda from starting a UI and halting for input. cmdline # Accept the End User License Agreement to prevent a prompt. eula --agreed # --- Core System Configuration (Required by Anaconda) --- # Set keyboard and language. These are mandatory. keyboard --vckeymap=us --xlayouts='us' lang en_US.UTF-8 # Configure networking. This is essential for the %post script to work. # The --activate flag ensures this device is brought up in the installer environment. network --bootproto=dhcp --device=link --activate # Set a locked root password. This is a mandatory command. rootpw --lock # Set the timezone. This is a mandatory command. timezone UTC # --- Disable Installation-Specific Features --- # CRITICAL: Do not install a bootloader. The --disabled flag prevents # this step and avoids errors about where to install it. bootloader --disabled # CRITICAL: Ignore all disks. This prevents Anaconda from stopping at the # "Installation Destination" screen asking where to install. # ignoredisk --drives /dev/sda # Do not run the Initial Setup wizard on first boot. firstboot --disable # --- Package Selection --- # We are not installing, so this section can be minimal. # An empty %packages section is valid and ensures no time is wasted # resolving dependencies for an installation that will not happen. %packages %end # IMPORTANT: Do not include a final action command like 'reboot' or 'poweroff'. # The default action is 'halt', which in cmdline mode will leave the system # running in the live environment with the agent active, which is the desired state.