This page describes how to configure CentOS 6.3 as an Anaconda
& Kickstart PXE boot and install server. The following guide outlines
the details for setting up both CentOS 6.3 x86_64 and CentOS 6.3 i386 on the
same server. With a bit more effort, it is also possible to install other
Enterprise Linux versions using the same install server (e.g. CentOS 5.8 or any
version of Red Hat Enterprise Linux).
Step 1) Download the CentOS DVD ISOs
o
Keep these available, you'll need them again
later in this process.
# 64-bit
wget
http://www.gtlib.gatech.edu/pub/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso
# 32-bit
wget
http://www.gtlib.gatech.edu/pub/centos/6.3/isos/i386/CentOS-6.3-i386-bin-DVD1.iso
Step 2) Install CentOS 6.3
o
This will be the anaconda / kickstart server.
o
Start with a 'minimal' install.
o
Make sure to have at least 40GB of free space on
/ or mounted as /export.
o
This guide uses yum to install the required
additional packages.
o
Internet (or a Satellite Server) access isn't
necessarily required, but it does make it easier.
o
In lieu of Internet/Satellite access, you could
use rpm to install the required packages, but it's more difficult and you will
have to install all dependent packages manually.
Step 3) Configure the network interface(s)
o
Don't use dhcp for the anaconda / kickstart
server's network interface.
o
Configure /etc/resolv.conf and
/etc/nsswitch.conf appropriately for your environment.
o
Remember to check that Internet (or Satellite
Server) access works (e.g. yum makecache)
vi
/etc/sysconfig/network-scripts/ifcfg-eth1:
-- begin example /etc/sysconfig/network-scripts/ifcfg-eth1--
DEVICE="eth1"
BOOTPROTO="none"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.111.1
MASK=255.255.255.0
-- end example /etc/sysconfig/network-scripts/ifcfg-eth0--
Step 4) Disable iptables
o
This isn’t absolutely necessary, it’s just easier.
chkconfig iptables off
service iptables stop
Step 5) Disable selinux
·
Again, not necessary but easier.
vi /etc/selinux/config
-- begin example /etc/selinux/config--
# This file controls the state of
SELinux on the system.
# SELINUX= can take one of these
three values:
# enforcing
- SELinux security policy is enforced.
# permissive
- SELinux prints warnings instead of enforcing.
# disabled -
No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these
two values:
# targeted -
Targeted processes are protected,
# mls -
Multi Level Security protection.
SELINUXTYPE=targeted
-- end example /etc/selinux/config--
Step 6) Install required packages
yum -y install wget syslinux
syslinux-tftpboot xinetd tftp-server tftp dhcp httpd openssh-clients
Step 7) Create the anaconda directory structure
mkdir -p /export/anaconda/iso/CentOS
mkdir -p /export/anaconda/media
mkdir -p
/export/anaconda/media/CentOS-6.3-x86_64
mkdir -p
/export/anaconda/media/CentOS-6.3-i386
mkdir -p /export/anaconda/tftpboot
mkdir -p
/export/anaconda/tftpboot/pxelinux.cfg
mkdir -p
/export/anaconda/tftpboot/CentOS-6.3-x86_64
mkdir -p
/export/anaconda/tftpboot/CentOS-6.3-i386
mkdir -p
/export/anaconda/postinstall/
mkdir -p /export/anaconda/cfg/
ln -s /export/anaconda /anaconda
Step 8) Enable anaconda tftp boot via xinetd
vi /etc/xinetd.d/tftp
-- begin example /etc/xinetd.d/tftp--
# default: on
# description: The tftp server
serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot
diskless \
# workstations, download configuration
files to network-aware printers, \
# and to start the installation process
for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /export/anaconda/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
-- end example /etc/xinetd.d/tftp--
Step 9) Configure the DHCP server
o
Note that the example dhcpd.conf below is not
authoritative.
o
For PXE boot to work, you must enter the correct
hardware ethernet (MAC) address for each of the clients you want to kickstart.
o
This could be changed to authoritative for a
given subnet, but it's safer to prevent *any* client from obtaining an IP
address from this dhcp server.
o
Once a client is installed via kickstart, be
sure to remove (or change) the MAC address in dhcpd.conf so it doesn't
accidentally get re-installed.
o
Preventing fully automatic installs is generally
a good practice.
vi /etc/dhcp/dhcpd.conf
-- begin example /etc/dhcp/dhcpd.conf--
ddns-update-style ad-hoc;
not authoritative;
option domain-name "defaultdomain";
deny unknown-clients;
allow booting;
allow bootp;
option ip-forwarding false;
option mask-supplier false;
subnet 192.168.111.0 netmask
255.255.255.0 {
option
routers 192.168.111.1;
option
domain-name-servers 192.168.111.1;
option
subnet-mask 255.255.255.0;
}
group {
next-server 192.168.111.1;
filename "pxelinux.0";
max-lease-time 86400;
default-lease-time 43200;
min-lease-time 43200;
host
anaconda-dhcp-200 {
hardware
ethernet 00:0c:29:1b:f7:84; # red
fixed-address
192.168.111.200;
}
host
anaconda-dhcp-201 {
hardware
ethernet 00:0c:29:fa:74:e5; # orange
fixed-address
192.168.111.201;
}
}
-- end example /etc/dhcp/dhcpd.conf--
Step 10) Copy the CentOS DVD media
o
Use the ISOs downloaded earlier. Or,
download them again.
o
(somehow) Copy them to
/export/anaconda/iso/CentOS, e.g.
scp CentOS-6.3-x86_64-bin-DVD1.iso
root@192.168.111.1:/export/anaconda/iso/CentOS
scp CentOS-6.3-i386-bin-DVD1.iso
root@192.168.111.1:/export/anaconda/iso/CentOS
Or ...
cd /export/anaconda/iso/CentOS
# 64-bit
wget
http://www.gtlib.gatech.edu/pub/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso
# 32-bit
wget
http://www.gtlib.gatech.edu/pub/centos/6.3/isos/i386/CentOS-6.3-i386-bin-DVD1.iso
Once the ISOs exist in /export/anaconda/iso/CentOS on the
server ...
# 64-bit
cd
/export/anaconda/media/CentOS-6.3-x86_64/
mount -o loop
/export/anaconda/iso/CentOS/CentOS-6.3-x86_64-bin-DVD1.iso /mnt
cp -rp /mnt/* .
umount /mnt
# 32-bit
cd
/export/anaconda/media/CentOS-6.3-i386/
mount -o loop /export/anaconda/iso/CentOS/CentOS-6.3-i386-bin-DVD1.iso
/mnt
cp -rp /mnt/* .
umount /mnt
Step 11) Configure default boot menu
o
Adding the default option to boot to rescue mode
can avoid fully automatic (accidental) installs.
o
Manual selection of the correct installation /
kickstart configuration profile is my best practice.
vi
/export/anaconda/tftpboot/pxelinux.cfg/default
-- begin example /export/anaconda/tftpboot/pxelinux.cfg/default--
timeout 3600
default menu.c32
menu title Automatic Anaconda /
Kickstart Boot Menu
label 1
menu label ^ 1)
CentOS-6.3-x86_64 (64-bit)
kernel
CentOS-6.3-x86_64/vmlinuz
append
initrd=CentOS-6.3-x86_64/initrd.img ramdisk_size=15491 ip=dhcp ksdevice=bootif ks=http://192.168.111.1/anaconda/cfg/CentOS-6.3-x86_64-ks.cfg
IPAPPEND 2
label 2
menu label ^ 2)
CentOS-6.3-i386 (32-bit)
kernel
CentOS-6.3-i386/vmlinuz
append
initrd=CentOS-6.3-i386/initrd.img ramdisk_size=15491 ip=dhcp ksdevice=bootif ks=http://192.168.111.1/anaconda/cfg/CentOS-6.3-i386-ks.cfg
IPAPPEND 2
label 3
menu label ^ 3) Rescue CentOS-6.3-x86_64
(64-bit)
kernel
CentOS-6.3-x86_64/vmlinuz
append initrd=CentOS-6.3-x86_64/initrd.img
ramdisk_size=15491 ip=dhcp repo=http://192.168.111.1/anaconda/CentOS-6.3-x86_64
lang=en_US.UTF-8 keymap=us rescue
label 4
menu label ^ 4) Rescue CentOS-6.3-i386
(32-bit)
menu default
kernel CentOS-6.3-i386/vmlinuz
append initrd=CentOS-6.3-i386/initrd.img
ramdisk_size=15491 ip=dhcp repo=http://192.168.111.1/anaconda/CentOS-6.3-i386
lang=en_US.UTF-8 keymap=us rescue
-- end example /export/anaconda/tftpboot/pxelinux.cfg/default--
Step 12) Configure /etc/httpd/conf.d/anaconda.conf
vi /etc/httpd/conf.d/anaconda.conf
-- begin example /etc/httpd/conf.d/anaconda.conf--
# anaconda/kickstart
#
Alias /anaconda/cfg
/export/anaconda/cfg
<Directory
/export/anaconda/cfg/>
Options Indexes
FollowSymLinks
Allow from All
</Directory>
Alias /anaconda/postinstall
/export/anaconda/postinstall
<Directory
/export/anaconda/postinstall/>
Options Indexes
FollowSymLinks
Allow from All
</Directory>
Alias /anaconda
/export/anaconda/media
<Directory
/export/anaconda/media/>
Options Indexes
FollowSymLinks
Allow from All
</Directory>
-- end example /etc/httpd/conf.d/anaconda.conf--
Step 13) Customize kickstart configuration files
o
These are working examples, but you should
tailor them to your individual needs.
# 64-bit
vi
/export/anaconda/cfg/CentOS-6.3-x86_64-ks.cfg
-- begin example /export/anaconda/cfg/CentOS-6.3-x86_64-ks.cfg--
# Example kickstart configuration
file for a RHEL 6.3 x86_64 (64-bit) standard install.
#
install
# Specifies the language
lang en_US.UTF-8
# Specifies the keyboard layout
keyboard us
# Skip Red Hat subscriber key input
key --skip
# Forces the text installer to be
used (saves time)
text
# Forces the cmdline installer to be
used (debugging)
#cmdline
# Skips the display of any GUI
during install (saves time)
skipx
# Used with an HTTP install to
specify where the install files are located
url --url
http://192.168.111.1/anaconda/CentOS-6.3-x86_64
# Assign a static IP address upon
first boot & set the hostname
network --onboot yes --bootproto
dhcp --hostname rhel63
# Give the second interface a DHCP
address (if you are not using a second interface comment this line out)
#network --device eth1
--bootproto=dhcp
# Set the root password
rootpw r00tp@55w0rd
# Enable the firewall and open port
22 for SSH remote administration
firewall --enabled --port=22:tcp
# Setup security and SELinux levels
#authconfig --enableshadow
--enablemd5
authconfig --enableshadow
--passalgo=sha512
selinux --disabled
# Set the timezone
timezone --utc Etc/UTC
# Create the bootloader in the MBR
with drive sda being the drive to install it on
bootloader --location=mbr
--driveorder=sda,sdb --append=audit=1
# Wipe all partitions and build them
with the info below
clearpart --all --initlabel
#Disk partitioning information
zerombr
# Create primary partitions
part /boot --fstype ext4 --size=500
--asprimary --ondisk=sda
part swap --size=4096 --asprimary
--ondisk=sda
part pv.01 --size=100 --grow
--asprimary --ondisk=sda
# use the entire second disk for
swap
#part swap --size=100 --grow
--ondisk=sdb
# Create LVM logical volumes
volgroup system --pesize=32768 pv.01
logvol /var
--vgname=system --size=8196 --name=var_vol
logvol /tmp
--vgname=system --size=2048 --name=tmp_vol
logvol /
--vgname=system --size=100 --grow --name=root_vol
# reboot when installation completes
reboot
# Install the Core software
packages, aka "minimal", plus a couple extras
%packages
# minimal
@core
@server-policy
#@base
#@network-file-system-client
#@server-policy
%end
%pre
# redirect debugging output to tty3
#exec < /dev/tty3 > /dev/tty3
#chvt 3
%post --log=/var/tmp/install.log
# redirect debugging output to tty3
#exec < /dev/tty3 > /dev/tty3
#chvt 3
echo "Creating
CentOS-6.3-x86_64 post installation directory ..."
mkdir -p /opt/postinstall
echo "Downloading
CentOS-6.3-x86_64 post installation files ..."
cd /opt/postinstall
wget
http://192.168.111.1/kickstart/postinstall/CentOS-6.3-x86_64-postinstall.tgz
tar zxf
CentOS-6.3-x86_64-postinstall.tgz
rm CentOS-6.3-x86_64-postinstall.tgz
> /dev/null 2>&1
echo "Executing
CentOS-6.3-x86_64 post installation script ..."
./CentOS-6.3-x86_64-postinstall
>> CentOS-6.3-x86_64-postinstall.out 2>&1
echo "Done."
-- end example /export/anaconda/cfg/CentOS-6.3-x86_64-ks.cfg--
# 32-bit
vi
/export/anaconda/cfg/CentOS-6.3-i386-ks.cfg
-- begin example /export/anaconda/cfg/CentOS-6.3-i386-ks.cfg--
# Example kickstart configuration
file for a RHEL 6.3 i386 (32-bit) standard install.
#
install
# Specifies the language
lang en_US.UTF-8
# Specifies the keyboard layout
keyboard us
# Skip Red Hat subscriber key input
key --skip
# Forces the text installer to be
used (saves time)
text
# Forces the cmdline installer to be
used (debugging)
#cmdline
# Skips the display of any GUI
during install (saves time)
skipx
# Used with an HTTP install to
specify where the install files are located
url --url
http://192.168.111.1/anaconda/CentOS-6.3-i386
# Assign a static IP address upon
first boot & set the hostname
network --onboot yes --bootproto
dhcp --hostname rhel63
# Give the second interface a DHCP
address (if you are not using a second interface comment this line out)
#network --device eth1
--bootproto=dhcp
# Set the root password
rootpw r00tp@55w0rd
# Enable the firewall and open port
22 for SSH remote administration
firewall --enabled --port=22:tcp
# Setup security and SELinux levels
#authconfig --enableshadow
--enablemd5
authconfig --enableshadow
--passalgo=sha512
selinux --disabled
# Set the timezone
timezone --utc Etc/UTC
# Create the bootloader in the MBR
with drive sda being the drive to install it on
bootloader --location=mbr
--driveorder=sda,sdb --append=audit=1
# Wipe all partitions and build them
with the info below
clearpart --all --initlabel
#Disk partitioning information
zerombr
# Create primary partitions
part /boot --fstype ext4 --size=500
--asprimary --ondisk=sda
part swap --size=4096 --asprimary
--ondisk=sda
part pv.01 --size=100 --grow
--asprimary --ondisk=sda
# use the entire second disk for
swap
#part swap --size=100 --grow
--ondisk=sdb
# Create LVM logical volumes
volgroup system --pesize=32768 pv.01
logvol /var
--vgname=system --size=8196 --name=var_vol
logvol /tmp
--vgname=system --size=2048 --name=tmp_vol
logvol /
--vgname=system --size=100 --grow --name=root_vol
# reboot when installation completes
reboot
# Install the Core software
packages, aka "minimal", plus a couple extras
%packages
# minimal
@core
@server-policy
#@base
#@network-file-system-client
#@server-policy
%end
%pre
# redirect debugging output to tty3
#exec < /dev/tty3 > /dev/tty3
#chvt 3
%post --log=/var/tmp/install.log
# redirect debugging output to tty3
#exec < /dev/tty3 > /dev/tty3
#chvt 3
echo "Creating CentOS-6.3-i386
post installation directory ..."
mkdir -p /opt/postinstall
echo "Downloading
CentOS-6.3-i386 post installation files ..."
cd /opt/postinstall
wget
http://192.168.111.1/kickstart/postinstall/CentOS-6.3-i386-postinstall.tgz
tar zxf
CentOS-6.3-i386-postinstall.tgz
rm CentOS-6.3-i386-postinstall.tgz
> /dev/null 2>&1
echo "Executing CentOS-6.3-i386
post installation script ..."
./CentOS-6.3-i386-postinstall
>> CentOS-6.3-i386-postinstall.out 2>&1
echo "Done."
-- end example /export/anaconda/cfg/CentOS-6.3-i386-ks.cfg--
Step 15) Finish configuring the PXE boot environment
cp /usr/share/syslinux/pxelinux.0
/export/anaconda/tftpboot/
cp /usr/share/syslinux/menu.c32
/export/anaconda/tftpboot/
# 64-bit
cd
/export/anaconda/tftpboot/CentOS-6.3-x86_64/
cp
/export/anaconda/media/CentOS-6.3-x86_64/images/pxeboot/* .
# 32-bit
cd
/export/anaconda/tftpboot/CentOS-6.3-i386/
cp
/export/anaconda/media/CentOS-6.3-i386/images/pxeboot/* .
Step 16) Enable services
chkconfig dhcpd on
chkconfig httpd on
chkconfig xinetd on
service dhcpd restart
service httpd restart
service xinetd restart
reboot
Step 17) PXE Boot the install clients
o
Different hardware manufacturers have different
methods for invoking PXE network booting.
o
Make sure to verify the client’s MAC address is
in /etc/dhcp/dhcpd.conf and that you’ve restarted dhcpd (e.g. service dhcpd
restart).
o
If everything’s correct then you should see
screens similar to the following screen shots.
Great tutorial. I have one question though.
ReplyDeleteWhat in your postintall file and where do you get it? The directories you created in this tutorial do not include the kickstart directory referenced in the kickstart files.
Thanks and IF I correctly understand the question ...
ReplyDeleteMy 'postinstall' file is actually many files contained within a single tar.gz file (CentOS-6.3-x86_64-postinstall.tgz). It's made available to the install client via the http server (i.e. Step 13).
E.G.
This post installation directory gets created on the newly installed client (via the %post directive in the kickstart config).
echo "Creating CentOS-6.3-i386 post installation directory ..."
mkdir -p /opt/postinstall
Then, I use wget to get a copy of the tar file from the http server ...
echo "Downloading CentOS-6.3-i386 post installation files ..."
cd /opt/postinstall
wget http://192.168.111.1/kickstart/postinstall/CentOS-6.3-i386-postinstall.tgz
Finally, untar it ..
tar zxf CentOS-6.3-i386-postinstall.tgz
rm CentOS-6.3-i386-postinstall.tgz > /dev/null 2>&1
Inside the tar is the executable (now available on the client) ...
echo "Executing CentOS-6.3-i386 post installation script ..."
./CentOS-6.3-i386-postinstall >> CentOS-6.3-i386-postinstall.out 2>&1
echo "Done."
Hopefully that helps clarify what's going on with regard to the postinstall file.
very nice tutorial!
ReplyDeletejust have a question - in your kickstart file:
# Used with an HTTP install to specify where the install files are located
url --url http://192.168.1.20/anaconda/CentOS-6.3-x86_64
Don't you have the install files on 192.168.111.1? why a different host (192.168.1.20)?
Thanks. That's a copy/paste error on my part ... initially, I had everything running on a single subnet (192.168.1.0/24) and later decided that I didn't want (another) dhcp server running there. So, I set up a second interface on another subnet (192.168.111.0/24) to more freely test different dhcp options, etc (without interfering with other clients on 192.168.1.0/24).
ReplyDeleteHello Joseph,
ReplyDeleteI have my server configured and pxe booting on the client. I select option "1" 64 bit and start booting. Everything goes fine until right after "Retrieving" then I get a "No disks found" error that says:
No usable disks have been found (Try Again, or Exit Installer).
Sorry this is my first attempt at PXE booting. I assumed that I need no disks in my client machine (no HD, no USB, no CD/DVD etc.) so I assume I didn't export space somewhere? My "/" directory on the server has probably 500gig space free. What am I doing wrong? Can you please post a step by step?
Thanks,
Art
Joseph, sorry if this is a dumb question but is this setup only for installs? If so then obviously I need drives for each client etc. and in that case what I am really looking for is to setup a pxe server where clients can have diskless workstations. Any advice appreciated. I like centos 6.3!
ReplyDeleteThanks for your how to here!
BBBB
Yes, you would need a drive in each client. This HOWTO is for doing (kickstart) installs (to a machine that has a dedicated hard disk).
DeleteThough, it is possible to use PXE boot for diskless clients (E.G. DRBL). The last time I've done that was many years ago (and not with CentOS 6.x). It shouldn't be too difficult, though. You could use a Live-CD boot image (initrd) or NFS for the root disk, etc. Maybe this will help get you going ... https://en.wikipedia.org/wiki/Diskless_Remote_Boot_in_Linux
Could you tell me how it would work if you were not allowed to use DHCP for installation?
ReplyDeleteI could give it a static address but am not sure how it would work.
Thanks,
Rick
You'd have to assign a static IP (mask, default gw, etc) to the client(s) via the boot menu (Step 11) and in the Kickstart cfg (Step 13). But, you'd loose the primary benefit of dhcp (its ability to install multiple clients simultaneously (because different IPs are given based on MAC address)). That could be circumvented (somewhat) with multiple boot menu entries, though (i.e. have a different boot entry for each static IP and a separate kickstart cfg for each, too).
ReplyDeleteHallo.
ReplyDeleteErst mal ein lob an Dich, nach langen suchen mit goole habe ich auch Deine todo gefunden.
Nach dem ich ein paar schreibfehler (von mir ) besitigt hatte und noch ein paar denkfehler, funktioniert die Anleitung.
Vielleicht als Tip für Dich um die Anleitung zu verbessern.
Las mal einen Linux neuling rüber schauen ob er mit der Anleitung klar kommt.
So kannst Du noch die eine oder andre Verbesserung einfügen.
Was ich noch recht gut fand war die Versions Nr. von CentOS, viele schreiben eine todo ohne Angaben welche Version Nr. von der Distribution.
Gruß.
B.
I'm sorry. I only speak English.
DeleteHi ,
ReplyDeleteHave a small (may be dumb)doubt , if KS file is sent via HTTP to the client , how can the client understand the HTTP protocol with out any OS on it .
When the Linux kernel first boots (regardless) it loads the initrd (initial ram disk). The initrd contains a scaled down operating system capable of basic functions, such as TCP/IP (dns, http, etc.). Once the initrd loads successfully, the kernel attempts to boot the full OS from disk (e.g. load additional drivers, remount root, etc).
DeleteThanks for this great tutorial, i would have a question.
ReplyDeleteIf i wanted all the clients to have to GUI, how would i install the desktop?
Make sure the ks.cfg installs the correct packages under the %packages section. You'd probably want to add @Desktop Platform and/or @Desktop Platform Development. Using the groups convention is easiest (e.g. add them after @Base).
DeleteHere's a list of groups that should be available on the media ....
Installed Groups:
Base
Development tools
Milkymist
Networking Tools
Available Groups:
Additional Development
Backup Client
Backup Server
CIFS file server
Compatibility libraries
Console internet tools
Debugging Tools
Desktop
Desktop Debugging and Performance Tools
Desktop Platform
Desktop Platform Development
Dial-up Networking Support
Directory Client
Directory Server
E-mail server
Eclipse
Educational Software
Electronic Lab
Emacs
FCoE Storage Client
FTP server
Fedora Packager
Fonts
General Purpose Desktop
Graphical Administration Tools
Graphics Creation Tools
Hardware monitoring utilities
Haskell
Infiniband Support
Input Methods
Internet Applications
Internet Browser
Java Platform
KDE Desktop
Large Systems Performance
Legacy UNIX compatibility
Legacy X Window System compatibility
Mainframe Access
Messaging Client Support
Messaging Server Support
MySQL Database client
MySQL Database server
NFS file server
Network Infrastructure Server
Network Storage Server
Network file system client
Office Suite and Productivity
PHP Support
Performance Tools
Perl Support
PostgreSQL Database client
PostgreSQL Database server
Print Server
Printing client
Remote Desktop Clients
SNMP Support
Scientific support
Security Tools
Server Platform
Server Platform Development
Smart card support
Storage Availability Tools
System Management
System administration tools
TeX support
Technical Writing
TurboGears application framework
Virtualization
Virtualization Client
Virtualization Platform
Virtualization Tools
Web Server
Web Servlet Engine
Web-Based Enterprise Management
X Window System
Xfce
iSCSI Storage Client
Thank you for a great tutorial. I had been looking for awhile trying to find something written very well and to the point. I am not getting to far unfortunately for me. I am trying centos 6.4 and tried to change all the 6.3 -> 6.4 references but obviously I have messed something up. Once the client boots into PXE I get about 3-4 dots then get "File Not Found". I found a couple files that I hadn't edited to 6.4 from 6.3 but I am not even as far as getting the menu to load. I tried to go to the http page to make sure it can get to the kickstart config files but it's not even getting that far. I am trying to look into any logs that gives me any clue to what's wrong. Can you tell me where I should start to walk through what's it's missing? I would appreciate anyone's help.
DeleteThere are virtually no differences between 6.3 & 6.4 other than the semantics.
DeleteIt sounds like something's wrong with your httpd config, dhcpd config, or boot menu.
A few things that I'd check are the URL you're pointing to in the boot menu. Also, tail -f the httpd access & error logs while booting the client. If all's well then you should see the client try to download a bunch of files from the web server. If not, then again, verify the URL in the boot menu.
If that fails, make sure the dhcpd.conf has the correct mac address, etc.
Double check everything.
hi Joseph,
ReplyDeleteThanks for this tut! this helped me get going.
As for the pxeboot, once the installation completes, it reboots and goes back to the anaconda / kickstart menu. So If I did leave the station for awhile, this will forever loop itself by reinstalling over and over. I'm curious to learn about your method to break out of the installation once initial installation finishes.
nvm. I found the solution here. http://wiki.centos.org/HowTos/PXE/PXE_Setup/Menus
DeleteYes, that'll do. In step 9 I wrote this, too...
Deleteo Once a client is installed via kickstart, be sure to remove (or change) the MAC address in dhcpd.conf so it doesn't accidentally get re-installed.