Difference between revisions of "Cobbler installation on CentOS/RHEL"

From Define Wiki
Jump to navigation Jump to search
 
(27 intermediate revisions by 5 users not shown)
Line 6: Line 6:
 
yum install httpd dhcp bind
 
yum install httpd dhcp bind
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Add syslinux too
 +
<syntaxhighlight>
 +
yum install syslinux
 +
</syntaxhighlight>
 +
 +
=== dhcp from a specific interface ===
  
 
If necessary, the dhcpd service can be restricted to servicing dhcp requests on just one port. To do this, edit the '''/etc/sysconfig/dhcpd''' file and set the following line:
 
If necessary, the dhcpd service can be restricted to servicing dhcp requests on just one port. To do this, edit the '''/etc/sysconfig/dhcpd''' file and set the following line:
Line 11: Line 18:
 
DHCPDARGS=eth1
 
DHCPDARGS=eth1
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
'''RedHat 7 NOTE:''' This file is not used any more in RHEL 7. The dhcp server only listens to dhcp requests from ports that are configured with a subnet block (in <tt>/etc/dhcp/dhcpd.conf</tt> file).
  
 
== Adding the EPEL Repo to get cobbler ==
 
== Adding the EPEL Repo to get cobbler ==
Line 16: Line 25:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
wget http://mirrors.coreix.net/fedora-epel/5/i386/epel-release-5-4.noarch.rpm
 
wget http://mirrors.coreix.net/fedora-epel/5/i386/epel-release-5-4.noarch.rpm
 +
 +
centOS 7
 +
yum install epel-release
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
 
And install:
 
And install:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
rpm -ivh epel-release-5-4.noarch.rpm
 
rpm -ivh epel-release-5-4.noarch.rpm
 +
</syntaxhighlight>
 +
 +
=== RHEL 7 ===
 +
 +
<syntaxhighlight>
 +
rpm -Uvh http://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel//7/x86_64/e/epel-release-7-5.noarch.rpm
 +
subscription-manager repos --enable rhel-7-server-optional-rpms
 +
</syntaxhighlight>
 +
 +
=== RHEL 6 ===
 +
<syntaxhighlight>
 +
 +
# wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
 +
# rpm -ivh epel-release-6-8.noarch.rpm
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 31: Line 59:
 
Restart '''httpd''':
 
Restart '''httpd''':
 
<syntaxhighlight>
 
<syntaxhighlight>
 +
centOS 6
 
service httpd restart
 
service httpd restart
 +
 +
centOS 7
 +
systemctl restart httpd
 
</syntaxhighlight>
 
</syntaxhighlight>
 
   
 
   
The following error might occur:
+
=== The following error might occur:===
 
<syntaxhighlight>
 
<syntaxhighlight>
 
Starting httpd: Syntax error on line 10 of /etc/httpd/conf.d/cobbler.conf:
 
Starting httpd: Syntax error on line 10 of /etc/httpd/conf.d/cobbler.conf:
Line 60: Line 92:
 
yum install debmirror
 
yum install debmirror
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
'''RedHat 7 note:''' Package <tt>debmirror</tt> is not available, yet, for RHEL 7.
  
 
Install '''pykickstart''' with yum (A python library for manipulating kickstart files):
 
Install '''pykickstart''' with yum (A python library for manipulating kickstart files):
Line 68: Line 102:
 
== Edit xinet.d/rsync file ==
 
== Edit xinet.d/rsync file ==
 
Edit '''/etc/xinetd.d/rsync''' and change '''disable''' to '''no''':
 
Edit '''/etc/xinetd.d/rsync''' and change '''disable''' to '''no''':
 +
 +
'''RedHat 7 note:''' This file does not exist in RHEL 7.
 +
 
<syntaxhighlight>
 
<syntaxhighlight>
 
service rsync
 
service rsync
Line 158: Line 195:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'''NB''': if the dhcpd service isn't running and it fails to start, it may be because the default '''/etc/dhcpd.conf''' file is blank. Enter the above information and start the dhcpd service (it needs to be running for cobbler sync (below) to complete fully). The content of /etc/dhcpd.conf will be overwritten with the contents of /etc/cobbler/dhcp.template once cobbler sync has been performed.
+
'''NB''': if the dhcpd service isn't running and it fails to start, it may be because the default '''/etc/dhcpd.conf''' file is blank. Enter the above information and start the dhcpd service (it needs to be running for cobbler sync (below) to complete fully). The content of '''/etc/dhcpd.conf''' will be overwritten with the contents of '''/etc/cobbler/dhcp.template''' once <code>cobbler sync</code> has been performed.
  
 
Run cobbler check:
 
Run cobbler check:
Line 168: Line 205:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
cobbler sync
 
cobbler sync
 +
</syntaxhighlight>
 +
 +
== Import a CentOS ISO for deployment ==
 +
 +
Mount a the CentOS ISO file to a local folder, for example:
 +
<syntaxhighlight>
 +
mount -o loop ./CentOS-5.7-x86_64-bin-DVD-1of2.iso /mnt
 +
</syntaxhighlight>
 +
 +
Import the ISO into cobbler:
 +
<syntaxhighlight>
 +
cobbler import --name=CentOS_5.7_X86_64 --path=/mnt/ --breed=redhat --arch=x86_64
 +
</syntaxhighlight>
 +
 +
Finish with a <code>cobbler sync</code>:
 +
<syntaxhighlight>
 +
cobbler sync
 +
</syntaxhighlight>
 +
 +
== Import ARM based Operating Systems ==
 +
Pull the vmlinuz and initrd from:
 +
* Ubuntu 12.04: https://wiki.ubuntu.com/ARM/Server/Install
 +
* Ubuntu 12.10: https://wiki.ubuntu.com/ARM/Server/Install
 +
* Fedora 17: http://fedoraproject.org/wiki/Architectures/ARM/Fedora_17_GA
 +
 +
Add the ARM kernel and ramdisk image to the cobbler system
 +
<syntaxhighlight>
 +
  cobbler distro add --name=ubuntu1204-armhf --kernel=/var/lib/tftpboot/images.bak/ubuntu1204-armhf/vmlinuz --initrd=/var/lib/tftpboot/images.bak/ubuntu1204-armhf/initrd.gz
 +
  cobbler profile add --name=ubuntu1204-armhf --distro=ubuntu1204-armhf
 +
</syntaxhighlight>
 +
 +
Change the boot args:
 +
<syntaxhighlight>
 +
  cobbler profile edit --name ubuntu1204-armhf --kopts="console=ttyAMA0 priority=critical text auto=true netcfg/choose_interface=eth0 url=http://172.28.0.2/cblr/svc/op/ks/profile/ubuntu1204-armhf"
 +
  # Verify them:
 +
  cobbler profile report --name ubuntu1204-armhf
 +
</syntaxhighlight>
 +
 +
Add an ARM system to cobbler:
 +
<syntaxhighlight>
 +
  # Note: use cxmange to get all the MAC address then add MACs to cobbler system
 +
  cobbler system add --name=calx1 --profile=ubuntu1204-armhf --mac=fc:2f:40:c6:e8:64 --ip-address=172.28.10.1 --hostname=calx1 --dns-name=calx1.pxe.boston.co.uk
 +
</syntaxhighlight>
 +
 +
Sample of the Ubuntu NQA (No Questions Asked) preseed file
 +
<syntaxhighlight>
 +
Ubuntu Server Quick Install
 +
# by Dustin Kirkland <kirkland@ubuntu.com>
 +
#  * Documentation: http://bit.ly/uquick-doc
 +
 +
d-i    debian-installer/locale string en_US.UTF-8
 +
d-i    debian-installer/splash boolean false
 +
d-i    console-setup/ask_detect        boolean false
 +
d-i    console-setup/layoutcode        string us
 +
d-i    console-setup/variantcode      string
 +
d-i    netcfg/get_nameservers  string
 +
d-i    netcfg/get_ipaddress    string
 +
d-i    netcfg/get_netmask      string 255.255.255.0
 +
d-i    netcfg/get_gateway      string
 +
d-i    netcfg/confirm_static  boolean true
 +
d-i    mirror/country string manual
 +
d-i    mirror/http/hostname string ports.ubuntu.com
 +
d-i    mirror/http/directory string /ubuntu-ports
 +
d-i    clock-setup/utc boolean true
 +
d-i    partman-auto/method string regular
 +
d-i    partman-lvm/device_remove_lvm boolean true
 +
d-i    partman-lvm/confirm boolean true
 +
d-i    partman/confirm_write_new_label boolean true
 +
d-i    partman/choose_partition        select Finish partitioning and write changes to disk
 +
d-i    partman/confirm boolean true
 +
d-i    partman/confirm_nooverwrite boolean true
 +
d-i    partman/default_filesystem string ext3
 +
d-i    clock-setup/utc boolean true
 +
d-i    clock-setup/ntp boolean true
 +
d-i    clock-setup/ntp-server  string ntp.ubuntu.com
 +
d-i    base-installer/kernel/image    string linux-server
 +
d-i    passwd/root-login      boolean false
 +
d-i    passwd/make-user        boolean true
 +
d-i    passwd/user-fullname    string ubuntu
 +
d-i    passwd/username string ubuntu
 +
# password: ubuntu
 +
d-i    passwd/user-password-crypted    password $6$.1eHH0iY$ArGzKX2YeQ3G6U.mlOO3A.NaL22Ewgz8Fi4qqz.Ns7EMKjEJRIW2Pm/TikDptZpuu7I92frytmk5YeL.9fRY4.
 +
d-i    passwd/user-uid string
 +
d-i    user-setup/allow-password-weak  boolean false
 +
d-i    user-setup/encrypt-home boolean false
 +
d-i    passwd/user-default-groups      string adm cdrom dialout lpadmin plugdev sambashare
 +
d-i    apt-setup/services-select      multiselect security
 +
d-i    apt-setup/security_host string security.ubuntu.com
 +
d-i    apt-setup/security_path string /ubuntu
 +
d-i    debian-installer/allow_unauthenticated  string false
 +
d-i    pkgsel/upgrade  select safe-upgrade
 +
d-i    pkgsel/language-packs  multiselect
 +
d-i    pkgsel/update-policy    select none
 +
d-i    pkgsel/updatedb boolean true
 +
d-i    grub-installer/skip    boolean false
 +
d-i    lilo-installer/skip    boolean false
 +
d-i    grub-installer/only_debian      boolean true
 +
d-i    grub-installer/with_other_os    boolean true
 +
d-i    finish-install/keep-consoles    boolean false
 +
d-i    finish-install/reboot_in_progress      note
 +
d-i    cdrom-detect/eject      boolean true
 +
d-i    debian-installer/exit/halt      boolean false
 +
d-i    debian-installer/exit/poweroff  boolean false
 +
d-i    pkgsel/include string openssh-server puppet curl
 +
byobu  byobu/launch-by-default boolean false
 +
</syntaxhighlight>
 +
 +
Sample of Ubuntu preseed file which uses a custom partition scheme and XFS (details obtained from http://cptyesterday.wordpress.com/2012/06/17/notes-on-using-expert_recipe-in-debianubuntu-preseed-files/):
 +
<syntaxhighlight>
 +
# Ubuntu Server Quick Install
 +
# by Dustin Kirkland <kirkland@ubuntu.com>
 +
#  * Documentation: http://bit.ly/uquick-doc
 +
 +
d-i    debian-installer/locale string en_US.UTF-8
 +
d-i    debian-installer/splash boolean false
 +
d-i    console-setup/ask_detect        boolean false
 +
d-i    console-setup/layoutcode        string us
 +
d-i    console-setup/variantcode      string
 +
d-i    netcfg/get_nameservers  string
 +
d-i    netcfg/get_ipaddress    string
 +
d-i    netcfg/get_netmask      string 255.255.255.0
 +
d-i    netcfg/get_gateway      string
 +
d-i    netcfg/confirm_static  boolean true
 +
d-i mirror/country string manual
 +
d-i mirror/http/hostname string 172.28.0.2
 +
d-i mirror/http/directory string /ubuntu-ports
 +
d-i    clock-setup/utc boolean true
 +
d-i partman-auto/disk string /dev/sda
 +
d-i partman-auto/method string regular
 +
d-i partman-auto/expert_recipe string root :: \
 +
300 10 300 ext3 \
 +
        $primary{ } $bootable{ } method{ format } \
 +
        format{ } use_filesystem{ } filesystem{ ext3 } \
 +
        mountpoint{ /boot } \
 +
    . \
 +
    2048 20 8192 linux-swap \
 +
        $primary{ } method{ swap } format{ } \
 +
    . \
 +
    100 30 10000000000 xfs \
 +
        $primary{ } method{ format } format{ } \
 +
        use_filesystem{ } filesystem{ xfs } \
 +
        mountpoint{ / } \
 +
    .
 +
d-i partman-auto/choose_recipe select root
 +
d-i partman-partitioning/confirm_write_new_label boolean true
 +
d-i partman/choose_partition select Finish partitioning and write changes to disk
 +
d-i partman/confirm boolean true
 +
d-i    clock-setup/utc boolean true
 +
d-i    clock-setup/ntp boolean true
 +
d-i    clock-setup/ntp-server  string ntp.ubuntu.com
 +
d-i    base-installer/kernel/image    string linux-server
 +
d-i    passwd/root-login      boolean false
 +
d-i    passwd/make-user        boolean true
 +
d-i    passwd/user-fullname    string ubuntu
 +
d-i    passwd/username string ubuntu
 +
d-i    passwd/user-password-crypted    password $6$.1eHH0iY$ArGzKX2YeQ3G6U.mlOO3A.NaL22Ewgz8Fi4qqz.Ns7EMKjEJRIW2Pm/TikDptZpuu7I92frytmk5YeL.9fRY4.
 +
d-i    passwd/user-uid string
 +
d-i    user-setup/allow-password-weak  boolean false
 +
d-i    user-setup/encrypt-home boolean false
 +
d-i    passwd/user-default-groups      string adm cdrom dialout lpadmin plugdev sambashare
 +
d-i    apt-setup/services-select      multiselect security
 +
d-i    apt-setup/security_host string security.ubuntu.com
 +
d-i    apt-setup/security_path string /ubuntu
 +
d-i    debian-installer/allow_unauthenticated  string true
 +
d-i    pkgsel/upgrade  select safe-upgrade
 +
d-i    pkgsel/language-packs  multiselect
 +
d-i    pkgsel/update-policy    select none
 +
d-i    pkgsel/updatedb boolean true
 +
d-i    grub-installer/skip    boolean false
 +
d-i    lilo-installer/skip    boolean false
 +
d-i    grub-installer/only_debian      boolean true
 +
d-i    grub-installer/with_other_os    boolean true
 +
d-i    finish-install/keep-consoles    boolean false
 +
d-i    finish-install/reboot_in_progress      note
 +
d-i    cdrom-detect/eject      boolean true
 +
d-i    debian-installer/exit/halt      boolean false
 +
d-i    debian-installer/exit/poweroff  boolean false
 +
d-i    pkgsel/include string openssh-server puppet curl
 +
d-i    preseed/late_command string chroot /target sh -c "/usr/bin/curl -o /tmp/postinstall http://172.28.0.2/cobbler/ks_mirror/seeds/postinstall_puppet && /bin/sh -x /tmp/postinstall"
 +
#d-i    preseed/late_command string true && \
 +
#        \$SNIPPET('boston_test') \
 +
#        true
 +
#d-i    preseed/late_command string in-target 'pwd ; ls ; cd /root ; wget http://172.28.0.2/cobbler/ks_mirror/seeds/arm_late_stage.sh ; chmod +x arm_late_stage.sh ; ./arm_late_stage.sh'
 +
byobu  byobu/launch-by-default boolean false
 +
</syntaxhighlight>
 +
 +
== Display available profiles ==
 +
Display the available profiles used for installations. This is basically the same as seen on the PXE boot menu
 +
<syntaxhighlight>
 +
root@ubuntu1204-cobbler:~# cobbler profile list
 +
  CentOS_6.3_X86_64-x86_64
 +
  centos57-x86_64
 +
  centos57-xen-x86_64
 +
  centos62-x86_64
 +
  centos63-x86_64
 +
  fedora17-armhf
 +
  rhel62-x86_64
 +
  rhel62-x86_64_PCM
 +
  ubuntu1204-armhf
 +
  ubuntu1204-server-x86_64
 +
  ubuntu1210-armhf
 +
</syntaxhighlight>
 +
 +
== Change the installation settings ==
 +
View the profile (which will include kickstart files)
 +
<syntaxhighlight>
 +
root@ubuntu1204-cobbler:~$ cobbler profile report --name=centos62-x86_64
 +
<snip>
 +
Kickstart                      : /var/lib/cobbler/kickstarts/sample.ks
 +
</snip>
 +
</syntaxhighlight>
 +
 +
Change the kickstart file
 +
<syntaxhighlight>
 +
cobbler profile edit --name=centos62-x86_64 --kickstart=/var/lib/cobbler/kickstarts/kickstart-sdaonly.ks
 +
</syntaxhighlight>
 +
 +
=== RedHat 7 Note ===
 +
 +
You can find kickstart files for RHEL 7 by installing <tt>lorax</tt> :
 +
<syntaxhighlight>
 +
[root@puppet-test1 ~] yum install lorax
 +
[root@puppet-test1 ~] ls /usr/share/doc/lorax-19.6.28/
 +
AUTHORS  README.livemedia-creator  rhel7-minimal.ks
 +
COPYING  rhel7-livemedia.ks
 +
</syntaxhighlight>
 +
 +
Modify them as needed
 +
 +
== Add a repo mirror to cobbler ==
 +
<syntaxhighlight>
 +
root@pxe:~# cobbler repo add --name=EPEL-x86_64 --mirror=http://download.fedoraproject.org/pub/epel/6/x86_64 --mirror-locally=0
 +
</syntaxhighlight>
 +
<br>
 +
You then need to create an appropriate directory for this repo to exist (cobbler will decide upon a default directory but won't create it). For example:
 +
<syntaxhighlight>
 +
root@pxe:~# mkdir /var/www/cobbler/repo_mirror/EPEL-x86_64
 +
</syntaxhighlight>
 +
<br>
 +
Then run a '''<code>cobbler reposync</code>''':
 +
<syntaxhighlight>
 +
root@pxe:~# cobbler reposync
 +
task started: 2014-11-27_123446_reposync
 +
task started (id=Reposync, time=Thu Nov 27 12:34:46 2014)
 +
hello, reposync
 +
run, reposync, run!
 +
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/repomd.xml -O /var/www/cobbler/repo_mirror/EPEL-x86_64/.origin/repomd.xml
 +
received on stdout:
 +
received on stderr:
 +
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/a61828faf0beb5ca73e9a5c2cd5294be3ac147a311041aed2bda39b530328846-comps-el6.xml -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/a61828faf0beb5ca73e9a5c2cd5294be3ac147a311041aed2bda39b530328846-comps-el6.xml
 +
received on stdout:
 +
received on stderr:
 +
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/b7dfeeb47e3c60f9510dc99f3e38ab42e8e8030458160cfabf111072295dfdb6-updateinfo.xml.gz -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/b7dfeeb47e3c60f9510dc99f3e38ab42e8e8030458160cfabf111072295dfdb6-updateinfo.xml.gz
 +
received on stdout:
 +
received on stderr:
 +
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/a28e7053cdd302f563a541eb4fb1a0cbd6442787c5a9a968fe0f550e35ad7ff8-comps-el6.xml.gz -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/a28e7053cdd302f563a541eb4fb1a0cbd6442787c5a9a968fe0f550e35ad7ff8-comps-el6.xml.gz
 +
received on stdout:
 +
received on stderr:
 +
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/358cbe9abce14fa5e06d554032a83302e76198ebda9ca6f40017359eac79d32c-pkgtags.sqlite.gz -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/358cbe9abce14fa5e06d554032a83302e76198ebda9ca6f40017359eac79d32c-pkgtags.sqlite.gz
 +
received on stdout:
 +
received on stderr:
 +
creating: /var/www/cobbler/repo_mirror/EPEL-x86_64/config.repo
 +
running: chown -R root:www-data /var/www/cobbler/repo_mirror/EPEL-x86_64
 +
received on stdout:
 +
received on stderr:
 +
running: chmod -R 755 /var/www/cobbler/repo_mirror/EPEL-x86_64
 +
received on stdout:
 +
received on stderr:
 +
*** TASK COMPLETE ***
 +
</syntaxhighlight>
 +
 +
== Attach a local repo to a cobbler profile ==
 +
<syntaxhighlight>
 +
cobbler profile edit --name=SLC6.5-compute-x86_64 --repos="EPEL-x86_64"
 +
</syntaxhighlight>
 +
<br>
 +
Check the rendered kickstart file and you should see the new repo listed. In this example, the URL was '''<code>http://172.28.0.2/cblr/svc/op/ks/profile/SLC6.5-compute-x86_64</code>'''.
 +
<syntaxhighlight>
 +
# System authorization information
 +
auth  --useshadow  --enablemd5
 +
# System bootloader configuration
 +
bootloader --location=mbr
 +
# Partition clearing information
 +
clearpart --all --initlabel
 +
# Use text mode install
 +
text
 +
# Firewall configuration
 +
firewall --enabled
 +
# Run the Setup Agent on first boot
 +
firstboot --disable
 +
# System keyboard
 +
keyboard uk
 +
# System language
 +
lang en_US
 +
# Use network installation
 +
url --url=http://172.28.0.2/cblr/links/SLC6.5-compute-x86_64
 +
# If any cobbler repo definitions were referenced in the kickstart profile, include them here.
 +
repo --name=EPEL-x86_64 --baseurl=http://download.fedoraproject.org/pub/epel/6/x86_64 # <-- Here it is!
 +
repo --name=source-1 --baseurl=http://172.28.0.2/cobbler/ks_mirror/SLC6.5-x86_64-compute-x86_64
 +
repo --name=source-2 --baseurl=http://172.28.0.2/cobbler/ks_mirror/SLC6.5-x86_64-compute-x86_64/SLC
 +
</syntaxhighlight>
 +
 +
== Add unmanaged DNS entry ==
 +
Edit the file: '''/etc/cobbler/zone.template'''
 +
 +
<syntaxhighlight>
 +
puppet IN A 172.28.0.2
 +
 +
$host_record
 +
</syntaxhighlight>
 +
Cobbler sync once the changes have been made
 +
 +
== Cobbler Commands ==
 +
* Show the system settings for an installed systems
 +
* Change profile (image) and MAC
 +
<syntaxhighlight>
 +
$ cobbler system report --name blade8
 +
$ cobbler system edit --name=blade8 --profile=CentOS_6.5_X86_64-x86_64 --mac-address=00:25:90:95:30:EA
 +
$ cobbler sync
 +
</syntaxhighlight>
 +
 +
== Post Install script ==
 +
A post install script can be called as soon as installation has completed. The above preseed file has this script called in the following line:
 +
<syntaxhighlight>
 +
d-i    preseed/late_command string chroot /target sh -c "/usr/bin/curl -o /tmp/postinstall http://172.28.0.2/cobbler/ks_mirror/postinstall_puppet && /bin/sh -x /tmp/postinstall"
 +
</syntaxhighlight>
 +
The actual file location is: '''<code>/var/lib/cobbler/webroot/cobbler/ks_mirror</code>''' and is linked to '''<code>/var/www/cobbler/webroot/cobbler/ks_mirror</code>'''
 +
<br><br>
 +
The file contents can be:
 +
<syntaxhighlight>
 +
#!/bin/sh
 +
CURL=/usr/bin/curl
 +
${CURL} -o /etc/puppet/puppet.conf http://172.28.0.2/cobbler/ks_mirror/puppet.conf
 +
${CURL} -o /etc/default/puppet http://172.28.0.2/cobbler/ks_mirror/default-puppet
 +
puppet agent --enable
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 16:14, 3 November 2015

Pre-Requisits

For this installation, we will need to have the following services installed: dhcp, bind & apache.

Install with the following yum command:

yum install httpd dhcp bind

Add syslinux too

yum install syslinux

dhcp from a specific interface

If necessary, the dhcpd service can be restricted to servicing dhcp requests on just one port. To do this, edit the /etc/sysconfig/dhcpd file and set the following line:

DHCPDARGS=eth1

RedHat 7 NOTE: This file is not used any more in RHEL 7. The dhcp server only listens to dhcp requests from ports that are configured with a subnet block (in /etc/dhcp/dhcpd.conf file).

Adding the EPEL Repo to get cobbler

Download http://mirrors.coreix.net/fedora-epel/5/i386/epel-release-5-4.noarch.rpm (or whatever is suitable for the installed OS):

wget http://mirrors.coreix.net/fedora-epel/5/i386/epel-release-5-4.noarch.rpm

centOS 7
yum install epel-release

And install:

rpm -ivh epel-release-5-4.noarch.rpm

RHEL 7

rpm -Uvh http://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel//7/x86_64/e/epel-release-7-5.noarch.rpm
subscription-manager repos --enable rhel-7-server-optional-rpms

RHEL 6

# wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm

Install cobbler

Install using yum:

yum install cobbler cobbler-web

Check apache is working

Restart httpd:

centOS 6
service httpd restart

centOS 7
systemctl restart httpd

The following error might occur:

Starting httpd: Syntax error on line 10 of /etc/httpd/conf.d/cobbler.conf:
Invalid command 'WSGIScriptAliasMatch', perhaps misspelled or defined by a module not included in the server configuration
[FAILED]

If this error occurs, firstly remove mod_python:

rpm -e mod_python

Then, create a mod_wsgi config file:

cat > /etc/httpd/conf.d/05-load-wsgi.conf
LoadModule wsgi_module modules/mod_wsgi.so

And finally restart apache:

service httpd restart

Add a few more packages to satisfy some cobbler requirements

Install debmirror with yum (needed to manage debian deployments):

yum install debmirror

RedHat 7 note: Package debmirror is not available, yet, for RHEL 7.

Install pykickstart with yum (A python library for manipulating kickstart files):

yum install pykickstart

Edit xinet.d/rsync file

Edit /etc/xinetd.d/rsync and change disable to no:

RedHat 7 note: This file does not exist in RHEL 7.

service rsync
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

Edit /etc/debmirror.conf for proper Debian support

Edit /etc/debmirror.conf and comment dists and arches lines:

# Download options
$host="ftp.debian.org";
$user="anonymous";
$passwd="anonymous@";
$remoteroot="/debian";
$download_method="ftp";
# @dists="sid";
@sections="main,main/debian-installer,contrib,non-free";
# @arches="i386";
# @extra_dirs="";
# @ignores="";
. . . . .

Configure cobbler

Get cobbler to manage dhcp and dns by setting the following in /etc/cobbler/settings:

manage_dhcp: 1
manage_dns: 1

Set server ip addresses in /etc/cobbler/settings:

next_server: 172.28.0.100
server: 172.28.0.100

Confirm the following are set in /etc/cobbler/modules.conf:

[dns]
module = manage_bind

[dhcp]
module = manage_isc

Edit /etc/cobbler/dhcp.template with relevant network information (for example):

# ******************************************************************
# Cobbler managed dhcpd.conf file
#
# generated from cobbler dhcp.conf template ($date)
# Do NOT make changes to /etc/dhcpd.conf. Instead, make your changes
# in /etc/cobbler/dhcp.template, as /etc/dhcpd.conf will be
# overwritten.
#
# ******************************************************************
	
ddns-update-style interim;
	
allow booting;
allow bootp;
	
ignore client-updates;
set vendorclass = option vendor-class-identifier;
	
subnet 172.28.0.0 netmask 255.255.0.0 {
     option routers             172.28.0.100;
     option domain-name-servers 10.0.0.1;
     option subnet-mask         255.255.0.0;
     range dynamic-bootp        172.28.0.101 172.28.0.200;
     filename                   "/pxelinux.0";
     default-lease-time         604800;
     max-lease-time             604800;
     next-server                172.28.0.100;
}
. . . . .

Attempt to start dhcpd:

service dhcpd restart

NB: if the dhcpd service isn't running and it fails to start, it may be because the default /etc/dhcpd.conf file is blank. Enter the above information and start the dhcpd service (it needs to be running for cobbler sync (below) to complete fully). The content of /etc/dhcpd.conf will be overwritten with the contents of /etc/cobbler/dhcp.template once cobbler sync has been performed.

Run cobbler check:

cobbler check

Run cobbler sync:

cobbler sync

Import a CentOS ISO for deployment

Mount a the CentOS ISO file to a local folder, for example:

mount -o loop ./CentOS-5.7-x86_64-bin-DVD-1of2.iso /mnt

Import the ISO into cobbler:

cobbler import --name=CentOS_5.7_X86_64 --path=/mnt/ --breed=redhat --arch=x86_64

Finish with a cobbler sync:

cobbler sync

Import ARM based Operating Systems

Pull the vmlinuz and initrd from:

Add the ARM kernel and ramdisk image to the cobbler system

  cobbler distro add --name=ubuntu1204-armhf --kernel=/var/lib/tftpboot/images.bak/ubuntu1204-armhf/vmlinuz --initrd=/var/lib/tftpboot/images.bak/ubuntu1204-armhf/initrd.gz
  cobbler profile add --name=ubuntu1204-armhf --distro=ubuntu1204-armhf

Change the boot args:

  cobbler profile edit --name ubuntu1204-armhf --kopts="console=ttyAMA0 priority=critical text auto=true netcfg/choose_interface=eth0 url=http://172.28.0.2/cblr/svc/op/ks/profile/ubuntu1204-armhf"
  # Verify them:
  cobbler profile report --name ubuntu1204-armhf

Add an ARM system to cobbler:

  # Note: use cxmange to get all the MAC address then add MACs to cobbler system
  cobbler system add --name=calx1 --profile=ubuntu1204-armhf --mac=fc:2f:40:c6:e8:64 --ip-address=172.28.10.1 --hostname=calx1 --dns-name=calx1.pxe.boston.co.uk

Sample of the Ubuntu NQA (No Questions Asked) preseed file

 Ubuntu Server Quick Install
# by Dustin Kirkland <kirkland@ubuntu.com>
#  * Documentation: http://bit.ly/uquick-doc

d-i     debian-installer/locale string en_US.UTF-8
d-i     debian-installer/splash boolean false
d-i     console-setup/ask_detect        boolean false
d-i     console-setup/layoutcode        string us
d-i     console-setup/variantcode       string
d-i     netcfg/get_nameservers  string
d-i     netcfg/get_ipaddress    string
d-i     netcfg/get_netmask      string 255.255.255.0
d-i     netcfg/get_gateway      string
d-i     netcfg/confirm_static   boolean true
d-i     mirror/country string manual
d-i     mirror/http/hostname string ports.ubuntu.com
d-i     mirror/http/directory string /ubuntu-ports
d-i     clock-setup/utc boolean true
d-i     partman-auto/method string regular
d-i     partman-lvm/device_remove_lvm boolean true
d-i     partman-lvm/confirm boolean true
d-i     partman/confirm_write_new_label boolean true
d-i     partman/choose_partition        select Finish partitioning and write changes to disk
d-i     partman/confirm boolean true
d-i     partman/confirm_nooverwrite boolean true
d-i     partman/default_filesystem string ext3
d-i     clock-setup/utc boolean true
d-i     clock-setup/ntp boolean true
d-i     clock-setup/ntp-server  string ntp.ubuntu.com
d-i     base-installer/kernel/image     string linux-server
d-i     passwd/root-login       boolean false
d-i     passwd/make-user        boolean true
d-i     passwd/user-fullname    string ubuntu
d-i     passwd/username string ubuntu
# password: ubuntu
d-i     passwd/user-password-crypted    password $6$.1eHH0iY$ArGzKX2YeQ3G6U.mlOO3A.NaL22Ewgz8Fi4qqz.Ns7EMKjEJRIW2Pm/TikDptZpuu7I92frytmk5YeL.9fRY4.
d-i     passwd/user-uid string 
d-i     user-setup/allow-password-weak  boolean false
d-i     user-setup/encrypt-home boolean false
d-i     passwd/user-default-groups      string adm cdrom dialout lpadmin plugdev sambashare
d-i     apt-setup/services-select       multiselect security
d-i     apt-setup/security_host string security.ubuntu.com
d-i     apt-setup/security_path string /ubuntu
d-i     debian-installer/allow_unauthenticated  string false
d-i     pkgsel/upgrade  select safe-upgrade
d-i     pkgsel/language-packs   multiselect 
d-i     pkgsel/update-policy    select none
d-i     pkgsel/updatedb boolean true
d-i     grub-installer/skip     boolean false
d-i     lilo-installer/skip     boolean false
d-i     grub-installer/only_debian      boolean true
d-i     grub-installer/with_other_os    boolean true
d-i     finish-install/keep-consoles    boolean false
d-i     finish-install/reboot_in_progress       note 
d-i     cdrom-detect/eject      boolean true
d-i     debian-installer/exit/halt      boolean false
d-i     debian-installer/exit/poweroff  boolean false
d-i     pkgsel/include string openssh-server puppet curl
byobu   byobu/launch-by-default boolean false

Sample of Ubuntu preseed file which uses a custom partition scheme and XFS (details obtained from http://cptyesterday.wordpress.com/2012/06/17/notes-on-using-expert_recipe-in-debianubuntu-preseed-files/):

# Ubuntu Server Quick Install
# by Dustin Kirkland <kirkland@ubuntu.com>
#  * Documentation: http://bit.ly/uquick-doc

d-i     debian-installer/locale string en_US.UTF-8
d-i     debian-installer/splash boolean false
d-i     console-setup/ask_detect        boolean false
d-i     console-setup/layoutcode        string us
d-i     console-setup/variantcode       string
d-i     netcfg/get_nameservers  string
d-i     netcfg/get_ipaddress    string
d-i     netcfg/get_netmask      string 255.255.255.0
d-i     netcfg/get_gateway      string
d-i     netcfg/confirm_static   boolean true
d-i	mirror/country string manual
d-i	mirror/http/hostname string 172.28.0.2
d-i	mirror/http/directory string /ubuntu-ports
d-i     clock-setup/utc boolean true
d-i 	partman-auto/disk string /dev/sda
d-i 	partman-auto/method string regular
d-i 	partman-auto/expert_recipe string root :: 			\
	300 10 300 ext3 						\
        	$primary{ } $bootable{ } method{ format }		\
        	format{ } use_filesystem{ } filesystem{ ext3 } 		\
        	mountpoint{ /boot } 					\
    	. 								\
    	2048 20 8192 linux-swap 					\
        	$primary{ } method{ swap } format{ } 			\
    	. 								\
    	100 30 10000000000 xfs 						\
        	$primary{ } method{ format } format{ } 			\
        	use_filesystem{ } filesystem{ xfs } 			\
        	mountpoint{ / } 					\
    	.
d-i 	partman-auto/choose_recipe select root
d-i 	partman-partitioning/confirm_write_new_label boolean true
d-i 	partman/choose_partition select Finish partitioning and write changes to disk
d-i 	partman/confirm boolean true
d-i     clock-setup/utc boolean true
d-i     clock-setup/ntp boolean true
d-i     clock-setup/ntp-server  string ntp.ubuntu.com
d-i     base-installer/kernel/image     string linux-server
d-i     passwd/root-login       boolean false
d-i     passwd/make-user        boolean true
d-i     passwd/user-fullname    string ubuntu
d-i     passwd/username string ubuntu
d-i     passwd/user-password-crypted    password $6$.1eHH0iY$ArGzKX2YeQ3G6U.mlOO3A.NaL22Ewgz8Fi4qqz.Ns7EMKjEJRIW2Pm/TikDptZpuu7I92frytmk5YeL.9fRY4.
d-i     passwd/user-uid string
d-i     user-setup/allow-password-weak  boolean false
d-i     user-setup/encrypt-home boolean false
d-i     passwd/user-default-groups      string adm cdrom dialout lpadmin plugdev sambashare
d-i     apt-setup/services-select       multiselect security
d-i     apt-setup/security_host string security.ubuntu.com
d-i     apt-setup/security_path string /ubuntu
d-i     debian-installer/allow_unauthenticated  string true
d-i     pkgsel/upgrade  select safe-upgrade
d-i     pkgsel/language-packs   multiselect
d-i     pkgsel/update-policy    select none
d-i     pkgsel/updatedb boolean true
d-i     grub-installer/skip     boolean false
d-i     lilo-installer/skip     boolean false
d-i     grub-installer/only_debian      boolean true
d-i     grub-installer/with_other_os    boolean true
d-i     finish-install/keep-consoles    boolean false
d-i     finish-install/reboot_in_progress       note
d-i     cdrom-detect/eject      boolean true
d-i     debian-installer/exit/halt      boolean false
d-i     debian-installer/exit/poweroff  boolean false
d-i     pkgsel/include string openssh-server puppet curl
d-i     preseed/late_command string chroot /target sh -c "/usr/bin/curl -o /tmp/postinstall http://172.28.0.2/cobbler/ks_mirror/seeds/postinstall_puppet && /bin/sh -x /tmp/postinstall"
#d-i     preseed/late_command string true && \
#        \$SNIPPET('boston_test') \
#        true
#d-i     preseed/late_command string in-target 'pwd ; ls ; cd /root ; wget http://172.28.0.2/cobbler/ks_mirror/seeds/arm_late_stage.sh ; chmod +x arm_late_stage.sh ; ./arm_late_stage.sh'
byobu   byobu/launch-by-default boolean false

Display available profiles

Display the available profiles used for installations. This is basically the same as seen on the PXE boot menu

root@ubuntu1204-cobbler:~# cobbler profile list
   CentOS_6.3_X86_64-x86_64
   centos57-x86_64
   centos57-xen-x86_64
   centos62-x86_64
   centos63-x86_64
   fedora17-armhf
   rhel62-x86_64
   rhel62-x86_64_PCM
   ubuntu1204-armhf
   ubuntu1204-server-x86_64
   ubuntu1210-armhf

Change the installation settings

View the profile (which will include kickstart files)

root@ubuntu1204-cobbler:~$ cobbler profile report --name=centos62-x86_64
<snip>
Kickstart                      : /var/lib/cobbler/kickstarts/sample.ks
</snip>

Change the kickstart file

cobbler profile edit --name=centos62-x86_64 --kickstart=/var/lib/cobbler/kickstarts/kickstart-sdaonly.ks

RedHat 7 Note

You can find kickstart files for RHEL 7 by installing lorax :

[root@puppet-test1 ~] yum install lorax
[root@puppet-test1 ~] ls /usr/share/doc/lorax-19.6.28/
AUTHORS  README.livemedia-creator  rhel7-minimal.ks
COPYING  rhel7-livemedia.ks

Modify them as needed

Add a repo mirror to cobbler

root@pxe:~# cobbler repo add --name=EPEL-x86_64 --mirror=http://download.fedoraproject.org/pub/epel/6/x86_64 --mirror-locally=0


You then need to create an appropriate directory for this repo to exist (cobbler will decide upon a default directory but won't create it). For example:

root@pxe:~# mkdir /var/www/cobbler/repo_mirror/EPEL-x86_64


Then run a cobbler reposync:

root@pxe:~# cobbler reposync
task started: 2014-11-27_123446_reposync
task started (id=Reposync, time=Thu Nov 27 12:34:46 2014)
hello, reposync
run, reposync, run!
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/repomd.xml -O /var/www/cobbler/repo_mirror/EPEL-x86_64/.origin/repomd.xml
received on stdout: 
received on stderr: 
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/a61828faf0beb5ca73e9a5c2cd5294be3ac147a311041aed2bda39b530328846-comps-el6.xml -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/a61828faf0beb5ca73e9a5c2cd5294be3ac147a311041aed2bda39b530328846-comps-el6.xml
received on stdout: 
received on stderr: 
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/b7dfeeb47e3c60f9510dc99f3e38ab42e8e8030458160cfabf111072295dfdb6-updateinfo.xml.gz -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/b7dfeeb47e3c60f9510dc99f3e38ab42e8e8030458160cfabf111072295dfdb6-updateinfo.xml.gz
received on stdout: 
received on stderr: 
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/a28e7053cdd302f563a541eb4fb1a0cbd6442787c5a9a968fe0f550e35ad7ff8-comps-el6.xml.gz -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/a28e7053cdd302f563a541eb4fb1a0cbd6442787c5a9a968fe0f550e35ad7ff8-comps-el6.xml.gz
received on stdout: 
received on stderr: 
running: /usr/bin/wget -q http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/358cbe9abce14fa5e06d554032a83302e76198ebda9ca6f40017359eac79d32c-pkgtags.sqlite.gz -O /var/www/cobbler/repo_mirror/EPEL-x86_64/repodata/358cbe9abce14fa5e06d554032a83302e76198ebda9ca6f40017359eac79d32c-pkgtags.sqlite.gz
received on stdout: 
received on stderr: 
creating: /var/www/cobbler/repo_mirror/EPEL-x86_64/config.repo
running: chown -R root:www-data /var/www/cobbler/repo_mirror/EPEL-x86_64
received on stdout: 
received on stderr: 
running: chmod -R 755 /var/www/cobbler/repo_mirror/EPEL-x86_64
received on stdout: 
received on stderr: 
*** TASK COMPLETE ***

Attach a local repo to a cobbler profile

cobbler profile edit --name=SLC6.5-compute-x86_64 --repos="EPEL-x86_64"


Check the rendered kickstart file and you should see the new repo listed. In this example, the URL was http://172.28.0.2/cblr/svc/op/ks/profile/SLC6.5-compute-x86_64.

# System authorization information
auth  --useshadow  --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
text
# Firewall configuration
firewall --enabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard uk
# System language
lang en_US
# Use network installation
url --url=http://172.28.0.2/cblr/links/SLC6.5-compute-x86_64
# If any cobbler repo definitions were referenced in the kickstart profile, include them here.
repo --name=EPEL-x86_64 --baseurl=http://download.fedoraproject.org/pub/epel/6/x86_64 # <-- Here it is!
repo --name=source-1 --baseurl=http://172.28.0.2/cobbler/ks_mirror/SLC6.5-x86_64-compute-x86_64
repo --name=source-2 --baseurl=http://172.28.0.2/cobbler/ks_mirror/SLC6.5-x86_64-compute-x86_64/SLC

Add unmanaged DNS entry

Edit the file: /etc/cobbler/zone.template

puppet IN A 172.28.0.2

$host_record

Cobbler sync once the changes have been made

Cobbler Commands

  • Show the system settings for an installed systems
  • Change profile (image) and MAC
$ cobbler system report --name blade8
$ cobbler system edit --name=blade8 --profile=CentOS_6.5_X86_64-x86_64 --mac-address=00:25:90:95:30:EA
$ cobbler sync

Post Install script

A post install script can be called as soon as installation has completed. The above preseed file has this script called in the following line:

d-i     preseed/late_command string chroot /target sh -c "/usr/bin/curl -o /tmp/postinstall http://172.28.0.2/cobbler/ks_mirror/postinstall_puppet && /bin/sh -x /tmp/postinstall"

The actual file location is: /var/lib/cobbler/webroot/cobbler/ks_mirror and is linked to /var/www/cobbler/webroot/cobbler/ks_mirror

The file contents can be:

#!/bin/sh 
CURL=/usr/bin/curl 
${CURL} -o /etc/puppet/puppet.conf http://172.28.0.2/cobbler/ks_mirror/puppet.conf 
${CURL} -o /etc/default/puppet http://172.28.0.2/cobbler/ks_mirror/default-puppet
puppet agent --enable