Tag: hostname

  • RHEL7 – How to Set Your Hostname in Redhat Enterprise Linux 7

    name-badge

    Setting a server’s hostname used to be as simple as running the ‘hostname’ command and adding a “HOSTNAME” entry in /etc/sysconfig/network. However things have changed quite a bit in RHEL7. Apparently, systemd now controls setting a server’s hostname. The ‘hostname‘ command no longer works to set your hostname, however the command is still available just to confuse you.

    Now in RHEL 7 you use the command ‘hostnamectl‘. Below is an example of how it works.

    Here I have logged into my a RHEL 7.1 VM. You can see that the system appears to have the hostname of node1.

    [root@node1 ~]# hostname
    node1

    However upon further inspection, I find that this is not the case. Rather, the server has a static hostname of localhost.localdomain.

    [root@node1 ~]# hostnamectl
    Static hostname: localhost.localdomain
    Transient hostname: node1
    Icon name: computer-vm
    Chassis: vm
    Machine ID: 4c26a2a3101947bfa2ec7d9c16824ca4
    Boot ID: f58707942bd1458da48680025b6f1a53
    Virtualization: vmware
    CPE OS Name: cpe:/o:redhat:enterprise_linux:7.1:GA:server
    Kernel: Linux 3.10.0-229.el7.x86_64
    Architecture: x86_64

    So lets set the hostname permanently using ‘hostnamectl’.

    [root@node1 ~]# hostnamectl set-hostname node1.packy.lab.localdomain

    As you can see the hostname shows correct in the output of the ‘hostname’ command

    [root@node1 ~]# hostname
    node1.packy.lab.localdomain

    … and in the output from ‘hostnamectl’

    [root@node1 ~]# hostnamectl
    Static hostname: node1.packy.lab.localdomain
    Icon name: computer-vm
    Chassis: vm
    Machine ID: 4c26a2a3101947bfa2ec7d9c16824ca4
    Boot ID: f58707942bd1458da48680025b6f1a53
    Virtualization: vmware
    Operating System: Employee SKU
    CPE OS Name: cpe:/o:redhat:enterprise_linux:7.1:GA:server
    Kernel: Linux 3.10.0-229.el7.x86_64
    Architecture: x86_64

  • Redhat 6 Minimal Kickstart Configuration with VMware Tools and Puppet Agent Install

    smartaHere is my small, crude, little Kickstart configuration and post install script that I have up and running in my lab at home. Don’t expect to find anything too fancy here, as this Kickstart was purposefully built to be small and to the point. Here, the point was to spin up a VM, run through a basic install of CentOS/Redhat Linux,  and install VMware Tools along with a Puppet agent.

    Note that this post assumes that you have a working Kickstart server.

    First lets take a look at our kickstart file, CentOS-6.6-x86_64-minimal.ks

    The section directly below kicks off our kickstart ks file. Here we set our root password (no that’s not my hash) and setup our network interface for DHCP. We do a tiny bit of disk partitioning, and setup very simple LVM. Then we choose our packages. As you can see my package list is not at all fancy, I just want to make sure that I have pretty much every package that might need for a lab VM.

    [code language=”bash”]
    # Kickstart file for RHEL 6 Minimal
    # Small Disk

    text
    install
    url –url=http://10.1.0.106/ks/loop/CentOS-6.6-x86_64-bin-DVD1
    lang en_US.UTF-8
    keyboard us
    network –onboot yes –device eth0 –bootproto dhcp –noipv6
    rootpw –iscrypted $6$X/4YYZPN$4Sv.khxXms8N8vRssR/Vl35w/m80FF5P6p7aX0D7EFfD9p734F6tU4kXdcSCoOjPiXLrVxqfKxxxxxxxxxxxq5551
    firewall –disabled
    authconfig –enableshadow –passalgo=sha512
    selinux –permissive
    timezone America/New_York

    # Disk
    bootloader –location=mbr –driveorder=sda –append="crashkernel=auto rhgb"
    zerombr
    clearpart –all –drives=sda
    part pv.1 –grow –size=1
    part /boot –fstype=ext4 –size=1024
    volgroup VolGroup pv.1
    logvol / –fstype=ext4 –name=lv_root –vgname=VolGroup –size=1024 –grow
    logvol swap –name=lv_swap –vgname=VolGroup –size=1024

    #Network
    network –device=eth0 –bootproto=dhcp –nameserver=10.1.0.110

    # Package Selection
    %packages –nobase –excludedocs
    @Base
    @core
    kernel-headers
    wget
    perl
    sysstat
    bind-utils
    tcpdump
    [/code]

    Now let me pause to point out the section below. This is the %pre script that I am using to prompt me for the VM hostname before the install begins. The hostname needs to be set before you install puppet on the VM, otherwise you are going to have to recreate your puppet certificates after you set properly set your hostname post install and reboot.

    [code language=”bash”]
    %pre –log=/root/ks_pre.log
    #change to tty6 to get input
    chvt 6
    exec </dev/tty6 > /dev/tty6

    #Prompt for hostname
    echo "What is my hostname?"
    read NAME
    echo "NETWORKING=yes
    HOSTNAME=${NAME}" > network
    chvt 1
    [/code]

    Now we run a simple post install, along with a custom post install script. It is this script that will install Vmware tools and Puppet. Myself, I prefer keeping most of my code out of the actual Kickstart ks file, however you can always jam all your code into it if you like. You will just need to validate your syntax first, as I have not tested my config this way.

    [code language=”bash”]
    %post –nochroot
    # bring in hostname collected from %pre, then source it
    cp network /mnt/sysimage/etc/sysconfig/network
    . /mnt/sysimage/etc/sysconfig/network
    # force hostname change
    /mnt/sysimage/bin/hostname $HOSTNAME
    #Post Install
    %post –log=/root/ks-post.log
    cd /root
    echo "Getting the post install script – if this takes a long time check network or path"
    wget http://10.1.0.106/ks/scripts/centos-6-postinstall.bash
    echo "Running the post install script"
    /bin/bash centos-6-postinstall.bash
    [/code]

    Ok, so below is the post install script that I am calling in the section above. After a quick modification of my hosts file, I pull down the Puppet installer from my local Puppet server. Next we install the open source VMware tools packages, after creating the required yum repofile.

     

    [code language=”bash”]
    #!/bin/bash
    #centos-6-postinstall.bash

    #Switch to the 6th console and redirect all i/o
    exec < /dev/tty6 > /dev/tty6 2> /dev/tty6
    chvt 6

    # Lets make sure we know who the puppet server is before we get too far
    echo "Adding hosts entry for puppet master"
    echo "10.1.0.115 puppet puppet.lab.localdomain" >> /etc/hosts

    ## Update Via Yum – not doing this for now in order to save time
    #yum -y update
    # Install puppet from local puppet master
    echo "Downloading and running Puppet installer"
    curl -k https://10.1.0.115:8140/packages/current/install.bash | sudo bash
    #Install Open Source VMware Tools
    rpm –import http://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-DSA-KEY.pub
    rpm –import http://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-RSA-KEY.pub

    echo -e "[vmware-tools]\nname=VMware Tools\nbaseurl=http://packages.vmware.com/tools/esx/5.1latest/rhel6/$HOSTTYPE\nenabled=1\ngpgcheck=1" > /etc/yum.repos.d/vmware-tools.repo

    echo "Installing Vmware Tools"
    yum -y install vmware-tools-esx-nox

    #Minor grub.conf modifications
    sed -i ‘s/rhgb quiet//’ /boot/grub/grub.conf
    sed -i ‘s/hiddenmenu//’ /boot/grub/grub.conf
    sed -i ‘s/timeout=5/timeout=10/’ /boot/grub/grub.conf

    #Kick off first puppet run, for some reason I think you might need to do this twice.
    sleep 5
    echo "Running Puppet for the first time"
    puppet agent –test
    puppet agent –test

    #Tell us we have reached the end
    echo "We have reached the end of the post-install script"
    [/code]

    A couple of additional details to note about the post install script above. I like to modify the grub.conf so that I unhide the menu and increase the time out. I also like to make sure that we disable the Redhat graphical boot screen… I want to make sure its easy to catch any errors or miss-configurations in my kickstarts.
     

  • Puppet: How Not To Generate a Certificate with Your Correct Hostname

    954f7381089ac290b4690c5ffd9dd7d3_400x400So, I’ve been hacking away in my homelab as of late, building out a CentOS kickstart server, a Git server, and a puppet server. Right now, I am working on how to roll my puppet agent installs into my kickstart process. I just started on this, so I have yet to nail it down.

    So currently, when kicking a VM, I am not yet setting my new CentOS node’s hostname before the install process. Sadly I am setting it manually as I am still building my kickstarts, and they are no where near where I want them to be.

    Well, this whole hostname mumbo-jumbo just creates all sorts of issues for puppet… the hostname is one thing initially, then puppet installs as part of the post, and the hostname is set manually to finalize the install. Well this is no good, as you are are not going to be able to add your new node properly until you step in and provide a bit of manual persuasion.

    Now while its not hard to find documentation on how to troubleshoot puppet node and master certificate issues — see here and here for example — none of it was written to help troubleshoot the mess that I had created.

    Here was my specfic error.

    Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key.
    Certificate fingerprint: BE:B6:B6:5E:AC:B8: ..truncated

    And here verbatim, is the output that you get in response to the error above.

    To fix this, remove the certificate from both the master and the agent and then start a puppet run, which will automatically regenerate a certificate.

    On the master:
      puppet cert clean localhost.localdomain

    On the agent:
      rm -f /etc/puppetlabs/puppet/ssl/certs/localhost.localdomain.pem
      puppet agent -t

    So we try that and it doesn’t work. The next cert I generate identifies my node as localhost again.

    So here’s how to fix the issue.

    # rm -rf /etc/puppetlabs/puppet/ssl

    Now before we generate another certificate for our node, lets test what hostname a new cert would have using the command below.

    #puppet agent --verbose --configprint certname

    If the command above does not spit out the correct hostname, then you my friend, are in luck. Edit the file below

    # vi /etc/puppetlabs/puppet/puppet.conf

    Now change the entry below by removing the localhost.localdomain, and replacing that mess with the correct hostname

    certname = correcthostname.localdomain

    Now kickoff a puppet run on the node

    #puppet agent -t

    Log into the UI, or ssh into the puppet master, and accept the new node request.

    Kick off another puppet run after you have accepted the request to seal the deal and update the new node properly.