<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The blog of Karl Majer... &#187; os installation</title>
	<atom:link href="http://www.karlmajer.com/tag/os-installation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.karlmajer.com</link>
	<description>Life on my own terms...</description>
	<lastBuildDate>Mon, 28 Mar 2011 17:04:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Multi-OS Installation: Configuring the Solaris Environment</title>
		<link>http://www.karlmajer.com/2008/01/25/multi-os-installation-configuring-the-solaris-environment/</link>
		<comments>http://www.karlmajer.com/2008/01/25/multi-os-installation-configuring-the-solaris-environment/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 10:30:46 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[jumpstart]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/2008/01/25/multi-os-installation-configuring-the-solaris-environment/</guid>
		<description><![CDATA[This article will discuss configuring Intel and Sparc Solaris for use in the Multi-OS installer. On successful boot of the intel media, the user will be greeted by the Solaris, blue and green text installer as if they had booted off of CD or DVD media. Sparc Solaris will require a bit more work as [...]]]></description>
			<content:encoded><![CDATA[<p>This article will discuss configuring Intel and Sparc Solaris for use in the Multi-OS installer. On successful boot of the intel media, the user will be greeted by the Solaris, blue and green text installer as if they had booted off of CD or DVD media. Sparc Solaris will require a bit more work as it makes use of native boot files and images.</p>
<p>Configuring Intel Solaris is similar to Linux. The low level startup boot process is the same as Windows and Solaris, mainly the use of a PXE loader to start the process, however in order to keep the top level menuing consistent for the client, and to work around a dhcpd configuration issue, it was required to chain together Sun’s version of PXEgrub with PXELinux.</p>
<p>In both the Intel and Sparc cases, a request to boot is dropped on the wire, the dhcpd server accepts the request and issues a reply packet containing the IP address for the PXE client, the IP address of the next server to speak to, and the filename that the PXE client needs to request, still PXELinux for the first stage. For Sparc Solaris, the filename that the bootloader needs to request is not a PXE loader, but instead is the actual Solaris supplied boot file.</p>
<p>The operating system makes use of the PXE Loader configuration. Please go read that post if you have yet to do so as general configuration details are described in that article.</p>
<p>Please take note that a conscious design decision was made at this point to chain the bootloaders to present a mostly unified menu system to the end user. It is possible to create an Intel Solaris stanza in the dhcpd.conf and add the mac addresses of each host that would need to boot off of pxegrub instead of pxelinux. However, this would require the modification of the configuration and restarting of the dhcpd service for each new intel host added.</p>
<p>Since, in the environment, there were an exceptionally small number of Sparc hosts to be installed, and new Sparcs were added intermittently at best, it was considered more desirable to touch the dhcpd files only for the Sparcs rather than the often multiple installs/day required of the Intel machines. This would then allow the scheduling of dhcpd restarts during a maintenance window.</p>
<p>There was one modification made to the dhcpd.conf file which needs to be made regardless of the architecture. The following option statements need to be added to the file somewhere near the PXElinux lines that were added to support PXE booting.</p>
<blockquote><p> option SUNW.root-mount-options code 1 = text;<br />
option SUNW.root-server-ip-address code 2 = ip-address;<br />
option SUNW.root-server-hostname code 3 = text;<br />
option SUNW.root-path-name code 4 = text;<br />
option SUNW.swap-server-ip-address code 5 = ip-address;<br />
option SUNW.swap-file-path code 6 = text;<br />
option SUNW.boot-file-path code 7 = text;<br />
option SUNW.posix-timezone-string code 8 = text;<br />
option SUNW.boot-read-size code 9 = unsigned integer 16;<br />
option SUNW.install-server-ip-address code 10 = ip-address;<br />
option SUNW.install-server-hostname code 11 = text;<br />
option SUNW.install-path code 12 = text;<br />
option SUNW.sysid-config-file-server code 13 = text;<br />
option SUNW.JumpStart-server code 14 = text;<br />
option SUNW.terminal-name code 15 = text;</p></blockquote>
<p>These vendor specific lines assign human readable names to the various SUNW codes that are used to set various parameters such as the root path, the swap file, and the like.</p>
<p>The pxelinux menu entry needs to be changed to point to the location of the Sun PXEgrub file placed in the boot tree, and a menu.lst file will need to be created to support that bootloader. The single Solaris entry in my environment looks like this:</p>
<blockquote><p> label solaris<br />
kernel /boot/grub/pxegrub.0</p></blockquote>
<p>In my boot directory you can find a grub directory containing the files pxegrub.0 and menu.lst. The menu.lst file is grub’s version of the default entry. It must always be named menu.lst either via the actual filename or through a tftp filename remap. After reading through the Solaris pxegrub source it seems highly likely that this filename cannot be changed via a vendor ID code in the dhcpd.conf file despite what the manpages say.</p>
<p>The three line Solaris 10 entry in my sample menu.lst looks like:</p>
<blockquote><p> title Solaris 10 Interactive<br />
kernel /images/SOL_10_U3_x86_64/boot/multiboot kernel/unix &#8211; install nowin dhcp -B install_media=172.16.32.16:/export/install/images/SOL_10_U3_x86_64<br />
module /images/SOL_10_U3_x86_64/boot/x86.miniroot</p></blockquote>
<p>The first line is the title as it will appear in the grub menu. The second describes the kernel file to load including all switches passed to the kernel. Given the strange wrapping, please take note that the line ends with the install_media stanza found in the SOL_10_U3_x86_64 directory. Finally, the final line specifies the module the kernel will need to load in order to run properly.</p>
<p>For an Intel installation, the prep work is completed and there remains only the image to prepare. For the sparc image, the dhcpd.conf file will need to be edited each time a new sparc host is added and the following stanza will need to be added and/or updated:</p>
<blockquote><p> group {<br />
vendor-option-space SUNW;<br />
option SUNW.JumpStart-server &#8220;172.16.32.16:/export/JS/sol8/configs&#8221;;<br />
option SUNW.install-server-hostname &#8220;gorgon&#8221;;<br />
option SUNW.install-server-ip-address 172.16.32.16;<br />
option SUNW.install-path &#8220;/export/install/images/SOL_9_U8_x86&#8243;;<br />
option SUNW.root-server-hostname &#8220;gorgon&#8221;;<br />
option SUNW.root-server-ip-address 172.16.32.16;<br />
option SUNW.root-path-name &#8220;/export/install/images/SOL_9_U8_x86/Solaris_9/Tools/Boot&#8221;;<br />
next-server 172.16.32.16;</p>
<p>host solclient01 {<br />
hardware ethernet 00:0c:29:e3:e9:94;<br />
fixed-address 172.16.33.69;<br />
option host-name &#8220;solclient01&#8243;;<br />
option SUNW.sysid-config-file-server=&#8221;172.16.32.16:/export/install/jumpstart&#8221;;<br />
}<br />
}</p></blockquote>
<p>Each new sparc addition will require the addition of a new host substanza in this group. You’ll need to gather the mac address of the new host as well as assign it a static IP address. Once the configuration file has been updated, simply restart dhcpd and the configuration changes are complete. As a side note, installations were done using a small preallocated pool of statics outside the dhcpd range and then the host was reconfigured once the installation was complete.</p>
<p>Now that dhcpd has been setup, we can setup the images. Substitute x86_64 with SPARC as appropriate in the examples.  Note that the solaris media comes on DVDs and so there is only a single image to copy.</p>
<blockquote><p> mkdir /export/install/images/SOL_10_U3_x86_64 # or the path for the real vers.<br />
mkdir -p /mnt/{1,2,3,4…N} # one per ISO<br />
mount -o loop /path/to/iso/SOL_10_U3_x86.iso /mnt/1<br />
…<br />
mount -o loop /path/to/iso/SOL_10_U3_x86.iso /mnt/N<br />
.<br />
tar -C /mnt/1 cpvf &#8211; | tar -C /export/install/images/SOL_10_U3_x86_64/ -xpf -</p></blockquote>
<p>When finished, in /export/install/images/SOL_10_U3_x86/ directory you should have the following directories: boot, Solaris_10, and a Copyright and installer file. Note that there is only a single ISO released from Sun. If the host is 64 bit capable the Solaris OS will boot in 64 bit mode. If the host is only 32 bit capable the OS will boot on its 32 bit kernel. The directory naming of _64 was chosen to remain consistent with the other directory names.</p>
<p>Next confirm that the boot/ directory contains the files you supplied paths to in the grub menu.lst, mainly multiboot and x86.miniroot:</p>
<blockquote><p> ls -al /export/install/images/SOL_10_U3_x86_64/boot/<br />
grep boot /export/install/boot/menu.lst</p></blockquote>
<p>And that concludes all of the image prep necessary. The next item to configure is the apache server to ensure it can serve the http content from the /export/install mountpoint.  To do so we need to edit the configuration of apache and add a section allowing the webserver to find our content at /images/. Edit the httpd.conf and add the following in an appropriate location, or use this snippet to create a new file uniquely named along the lines of install.conf in the httpd/conf.d directory, if present.</p>
<blockquote><p> Alias /images/ /export/install/images/<br />
&lt; directory &gt;<br />
Options Indexes FollowSymLinks<br />
AllowOverride Limit<br />
Order allow,deny<br />
Allow from all<br />
&lt; /directory &gt;</p></blockquote>
<p>Apache needs to then be restarted or HUP’ed for the configuration changes to take effect.</p>
<p>Unless the entire installation is being done over HTTP, Solaris also introduces the need for an NFS server for the image shares. How this is done will be dependent on your operating system, but assuming the nfs software is installed on the machine, in order to nfs export /export/install one needs to try one of the following:</p>
<blockquote><p> Linux:<br />
edit /etc/exports and add<br />
/export/install *(ro)<br />
service nfsd restart</p>
<p>Solaris:<br />
edit /etc/dfs/dfstab and add<br />
share -F nfs -o ro -d “Image Mounts” /export/install</p></blockquote>
<p>All that is left now is to test the individual components:</p>
<p>First we need to make sure dhcpd is running:</p>
<blockquote><p> ps -ef | grep dhcpd</p></blockquote>
<p>Next we ensure apache is running:</p>
<blockquote><p> ps -ef | grep httpd</p></blockquote>
<p>Next ensure that nfsd is running:</p>
<blockquote><p> ps -ef | grep nfs</p></blockquote>
<p>Now we make sure that the repository is in proper order:</p>
<blockquote><p> ls -al /export/install/boot/pxelinux # check for pxelinux<br />
ls -al /export/install/boot/grub/pxegrub # check for pxegrub<br />
ls -al /export/install/boot/grub/menu.lst # check for pxegrub’s menu file<br />
ls -al /export/install/boot/default # check for the default menu file for your entry<br />
ls -ald /export/install/images/SOL_10_U3_x86_64 # ensure the image is there<br />
ls -ald /export/install/images/SOL_10_U3_x86_64/boot # should return 3 files: grub, multiboot, x86.miniroot</p></blockquote>
<p>Now we make sure that tftp is working as expected (remember that tftp was chrooted to /export/install so everything will be relative to that path):</p>
<blockquote><p> tftp localhost<br />
cd images/SOL_10_U3_x86_64/boot/<br />
get x86.miniroot</p></blockquote>
<p>Next we ensure the apache is serving content properly.</p>
<blockquote><p> wget http://localhost/images/SOL_10_U3_x86_64/boot/x86.miniroot</p></blockquote>
<p>if, for some reason, you dont have wget on your server you can do it manually using telnet:</p>
<blockquote><p> telnet localhost 80<br />
HEAD /images/SOL_10_U3_x86_64/boot/x86.miniroot HTTP/1.0</p></blockquote>
<p>Finally we test the NFS shares. Mount the filesystem on another machine if possible:</p>
<blockquote><p> mount -o ro yourserver:/export/install /mnt<br />
cd /mnt/images/SOL_10_U3_x86_64/boot<br />
ls -al x86.miniroot</p></blockquote>
<p>This essentially concludes the work required to net install a Solaris installation.</p>
<p>After finishing the configuration, all that is left is to reboot the machine and netboot using the F12 key, and then select the newly added menu entry from the pxelinux menu when prompted. Grub will then start and present its menu to you. From there select the entry you desire and then just wait until you reach the Solaris blue and green configuration screens.</p>
<p>Again, If you have any problems or questions, drop me a line and I’ll see what I can do to help. If there is interest in the topic, moving from an interactive installation to the configuring of jumpstart may be discussed in a later article should there be interest in the topic. If this article sounds familiar it is because I followed the guidelines I established in the Linux article. ;)</p>
<p>&gt;&gt;&gt; Karl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/25/multi-os-installation-configuring-the-solaris-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi-OS Installation: Configuring the Linux Environment</title>
		<link>http://www.karlmajer.com/2008/01/22/multi-os-installation-configuring-the-linux-environment/</link>
		<comments>http://www.karlmajer.com/2008/01/22/multi-os-installation-configuring-the-linux-environment/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 09:25:18 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[kickstart]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[os installation]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/2008/01/22/multi-os-installation-configuring-the-linux-environment/</guid>
		<description><![CDATA[This article will discuss configuring a RHEL image for use in the Multi-OS installer. On successful boot, the user will be greeted by the text installer as if they had booted off of CD or DVD media. Other Linux variants are likely easily adaptable but were out of scope for the project that was delivered [...]]]></description>
			<content:encoded><![CDATA[<p>This article will discuss configuring a RHEL image for use in the Multi-OS installer. On successful boot, the user will be greeted by the text installer as if they had booted off of CD or DVD media. Other Linux variants are likely easily adaptable but were out of scope for the project that was delivered to the client.</p>
<p>Configuring Linux is nowhere near as complex as the Windows environment.  The low level Linux boot process is the same as Windows and Solaris, mainly a PXE request is dropped onto the wire. The dhcpd server accepts the request and issues a reply packet containing the IP address for the PXE client, the IP address of the next server to speak to, and the filename that the PXE client needs to request. The filename passed to the client used is the pxelinux bootloader which has been described in detail elsewhere.</p>
<p>The operating system makes use of the <a href="http://www.karlmajer.com/2008/01/19/multi-os-installation-configuring-the-pxe-loader-environment/%E2%80%9D"> PXE Loader configuration. </a> Please go read that post if you have yet to do so as general configuration details are described in that article.</p>
<p>The pxelinux menu entry needs to be updated to point to the linux kernel and an appropriate initrd stanza needs to be added to the menu entry as well. Substitute your own directory name for all instances of RHEL_4_U5_x86_32. That said, a sample entry in my environment looks like this:</p>
<blockquote><p>label rhel4_32<br />
kernel /images/RHEL_4_U5_x86_32/install/images/pxeboot/vmlinuz<br />
append initrd=/images/RHEL_4_U5_x86_32/install/images/pxeboot/initrd.img nofb text noipv6 method=http://install/images/RHEL_4_U5_x86_32/install ksdevice=eth0</p></blockquote>
<p>Remember that the tftpd server is chrooted to /export/install, so on the filesystem, the kernel resides in the base directory /export/install/images/RHEL_4_U5_x86_32/. The nomenclature used at the customer site allows multiple variants of RHEL 4 32 and 64 bit to live in the tree concurrently. Menu entries need only be added for each desired variant to install other versions.</p>
<p>Once the PXE menu entries have been added, the image can be prepared. This is nowhere near as complex as windows and requires only a few steps:</p>
<blockquote><p>mkdir /export/install/images/RHEL_4_U5_x86_32 # or the path for the real vers.<br />
mkdir -p /mnt/{1,2,3,4&#8230;N}	# one per ISO<br />
mount -o loop /path/to/iso/RHEL4-U5-i386-AS-disc1.iso /mnt/1<br />
…<br />
mount -o loop /path/to/iso/RHEL4-U5-i386-AS-discN.iso /mnt/N<br />
# note, if you run out of loopback devices, add “options loop max_loop=256”<br />
# to /etc/modprobe.conf and reboot.<br />
tar -C /mnt/1 cpvf &#8211; | tar -C /export/install/images/RHEL_4_U5_x86_32/ -xpf -<br />
…<br />
tar -C /mnt/N cpvf &#8211; | tar -C /export/install/images/RHEL_4_U5_x86_32/ -xpf -</p></blockquote>
<p>When finished, in /export/install/images/RHEL_4_U5_x86_32/ directory you should have the following directories: RedHat, SRPMS, install, images, isolinux, and a large number of README html files.</p>
<p>Confirm that the install/images/pxeboot directory contains a file called vmlinuz and the path matches what was indicated in the pxelinux menu entry and that the initrd.img is present in the same directory and that the paths to the images match:</p>
<blockquote><p>ls -al /export/install/images/RHEL_4_U5_x86_32/install/images/pxeboot<br />
grep RHEL_4_U5_86_32 /export/install/default</p></blockquote>
<p>And that concludes all of the image prep necessary. The next item to configure is the apache server to ensure it can serve the http content as requested by the method= line of the menu entry.  To do so we need to edit the configuration of apache and add a section allowing the webserver to find our content at /images/. Edit the httpd.conf and add the following in an appropriate location, or use this snippet to create a new file uniquely named along the lines of install.conf in the httpd/conf.d directory, if present.</p>
<blockquote><p>Alias /images/  /export/install/images/<br />
&lt; directory &gt;<br />
Options Indexes FollowSymLinks<br />
AllowOverride Limit<br />
Order allow,deny<br />
Allow from all<br />
&lt; /directory &gt;</p></blockquote>
<p>Apache needs to then be restarted or HUP’ed for the configuration changes to take effect.</p>
<p>All that is left now is to test the individual components:</p>
<p>First we need to make sure dhcpd is running:</p>
<blockquote><p>ps -ef | grep dhcpd</p></blockquote>
<p>Next we ensure apache is running;</p>
<blockquote><p>ps -ef | grep httpd</p></blockquote>
<p>Now we make sure that the repository is in proper order:</p>
<blockquote><p>ls -al /export/install/boot/pxelinux	# check for pxelinux<br />
ls -al /export/install/boot/default     # check for the default menu file for your entry<br />
ls -ald /export/install/images/RHEL_4_U5_x86_32/ # make sure the RedHat dir is there<br />
ls -ald /export/install/images/RHEL_4_U5_x86_32/install/images/pxeboot # should return 4 files: initrd.img, README, TRANS.TBL, vmlinuz</p></blockquote>
<p>Now we make sure that tftp is working as expected (remember that tftp was chrooted to /export/install so everything will be relative to that path):</p>
<blockquote><p>tftp localhost<br />
cd images/RHEL_4_U5_x86_32/install/images/pxeboot<br />
get vmlinuz</p></blockquote>
<p>Next we ensure the apache is serving content properly.</p>
<blockquote><p>wget http://localhost/images/RHEL_4_U5_x86_32/install/images/pxeboot/vmlinuz</p></blockquote>
<p>if for some reason you dont have wget on your server you can do it manually using telnet:</p>
<blockquote><p>telnet localhost 80<br />
HEAD /images/RHEL_4_U5_x86_32/install/images/pxeboot/vmlinuz HTTP/1.0</p></blockquote>
<p>This essentially concludes the work required to netboot a RHEL installer to the point where the user can make their desired selections to complete the installation.</p>
<p>After finishing the configuration, all that is left is to reboot the machine and netboot using the F12 key, and then select the newly added menu entry from the pxelinux menu when prompted. When the installer loads and begins the interactive installation you will need to walk through the installer options and answer any question.</p>
<p>If you have any problems or questions, drop me a line and I’ll see what I can do to help.  If there is interest in the topic, moving from an interactive installation to the configuring of kickstart may be discussed in a later article should there be interest in the topic.</p>
<p>&gt;&gt;&gt; Karl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/22/multi-os-installation-configuring-the-linux-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi-OS Installation: Windows Final Steps</title>
		<link>http://www.karlmajer.com/2008/01/21/multi-os-installation-windows-finishing-touches/</link>
		<comments>http://www.karlmajer.com/2008/01/21/multi-os-installation-windows-finishing-touches/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 00:43:20 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[ris]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/2008/01/21/multi-os-installation-windows-finishing-touches/</guid>
		<description><![CDATA[This is my second attempt at writing this post. I was using ecto this morning for the last time while writing the first iteration of this post and when switching between html and text mode the app decided to eat the post for me. Hopefully this iteration will be as good as the first, if [...]]]></description>
			<content:encoded><![CDATA[<p>This is my second attempt at writing this post. I was using <em>ecto</em> this morning for the last time while writing the first iteration of this post and when switching between html and text mode the app decided to eat the post for me. Hopefully this iteration will be as good as the first, if not better&#8230;</p>
<p>So, there are a few things left to do before we can attempt a network boot. Primarily we need to add/create the winnt.sif configuration file, update the binl daemon files and restart the daemon, and then we need to test the components to make sure that everything is in order.</p>
<p>An absolute minimal winnt.sif created by the addnewos.sh script looks like the following:</p>
<blockquote>
<pre>[data]
floppyless = "1"
msdosinitiated = "1"
; Needed for second stage
Orisrc="\\\\172.16.32.16\REMINST\\W50AA\i386"
OriTyp = "4"
LocalSourceOnCD = 1
;DisableAdminAccountOnDomainJoin = 1
[SetupData]
OsLoadOptions = "/fastdetect"
; Needed for first stage
SetupSourceDevice = "\Device\LanmanRedirector\172.16.32.16\REMINST\\W50AA"
[UserData]
ComputerName = *
FullName = *
OrgName = *
ProductID = *</pre>
</blockquote>
<p>Briefly, the [data] section specifies where the media will be coming from and what type it is. The [SetupData] stanza contains any arguments to be passed to the kernel, as well as establishing the source device from which setup is to pull the additional datafiles. The listed path corresponds to the samba share that was setup earlier.</p>
<p>Finally, the [UserData] section allows for the customization of the computer name, the user name, and the company name, as well as provide a slot to prefill the appropriate license key obtained from Microsoft.</p>
<p>This sif file will allow setup to execute in a fully interrogative mode, asking the user performing the install the same series of questions as if they&#8217;d used the CD media for the installation. There are quite a few options available for the sif file allowing for the full unattended installation of windows. If there is an interest I can expand on it in a future piece.</p>
<p>Once the w50aa.sif file is in place, we can go refresh the binlsrv.py database. Assuming the copies of <a href="http://www.karlmajer.com/files/binl/binlsrv.py.txt">binlsrv.py</a>, <a href="http://www.karlmajer.com/files/binl/infparser.py.txt">infparser.py</a>, and <a href="http://www.karlmajer.com/files/binl/windirs.conf.sampl">windirs.conf.sample</a> were obtained from this site, this is accomplished by doing the following:</p>
<ul>
<li>edit windirs.conf and add the new directory name, i.e. W50AA</li>
<li>run infparser.py</li>
<li>run binlsrv.py</li>
</ul>
<p>With the binlsrv.py script running, we can begin to do the testing on the system. Of course you could at this point simply reboot the box you wish to install, cross your fingers, and hit F12 to netboot while hoping for the best. Those of you willing to use some methodology in their testing, please read on. Please note: I&#8217;m assuming the path to your install tree is /export/install/ and you have the windows image in images/W50AA. You&#8217;ll need to adjust it for your environment otherwise.</p>
<p>First we need to make sure dhcpd is running:</p>
<pre>ps -ef | grep dhcpd</pre>
<p>Next we ensure binlsrv.py is running;</p>
<pre>ps -ef | grep binl</pre>
<p>Now we make sure that the repository is in proper order:</p>
<pre>ls -al /export/install/pxelinux	   # check for pxelinux
ls -al /export/install/default     # check for the default menu file for pxelinux
ls -ald /export/install/images/W50AA/i386 # make sure the i386 dir is there
ls -ald /export/install/images/W50AA/w50aa* # we should get 3 files back, w50aa, w50aa.0, w50aa.sif.</pre>
<p>Now we make sure that tftp is working as expected (remember that tftp was chrooted to /export/install so everything will be relative to that path):</p>
<pre>tftp localhost
cd images/W50AA/boot
get w50aa.sif</pre>
<p>Now we ensure that the rewriting rules for the tfpd map files worked properly</p>
<pre>grep W50AA /var/log/messages  # on linux
grep W50AA /var/adm/messages  # on solaris</pre>
<p>You should have seen several log lines spit out as a match to the grep statement. If not, there is the possibility that the mapping isn&#8217;t working. Try a tail -f on the logfile and run a few tftp fetches by hand looking for the matches.</p>
<p>At this point the only thing left to do is the actual boot of the computer. So, reboot the test machine, netboot it, and if all goes well you will be greeted by the pxelinux menu. From there pick the entry you created for the windows installation and you will soon be greeted by the windows setup program.</p>
<p>Hopefully there is enough in here to allow you to troubleshoot any issues which you may run into. If this is not the case, please post in the comments and I&#8217;ll do what I can to assist you.</p>
<p>&gt;&gt;&gt; Karl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/21/multi-os-installation-windows-finishing-touches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi-OS Installation: Configuring the PXE Loader Environment</title>
		<link>http://www.karlmajer.com/2008/01/19/multi-os-installation-configuring-the-pxe-loader-environment/</link>
		<comments>http://www.karlmajer.com/2008/01/19/multi-os-installation-configuring-the-pxe-loader-environment/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 08:28:52 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[pxe boot]]></category>
		<category><![CDATA[tftpd]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/2008/01/19/multi-os-installation-configuring-the-pxe-loader-environment/</guid>
		<description><![CDATA[This article is one in a series detailing the implementation of a Multi-OS boot environment. While the article should stand on its own, it may be generally helpful to read the other articles in the series for the highest level of understanding. The configuration of the PXE environment requires several components: dhcpd server tftpd server [...]]]></description>
			<content:encoded><![CDATA[<p>This article is one in a series detailing the implementation of a Multi-OS boot environment. While the article should stand on its own, it may be generally helpful to read the other articles in the series for the highest level of understanding.</p>
<p>The configuration of the PXE environment requires several components:</p>
<ul>
<li>dhcpd server</li>
<li>tftpd server</li>
<li>PXE bootloader</li>
</ul>
<p>Each of these items has customized configuration files which will be described below.</p>
<p>At the lowest level there is a dhcpd server listening for initial boot requests. ISC&#8217;s dhcpd server, specifically version 3.0.6 which was the current version at the time. On the production RHEL machine, version 3.0.5 from the RPM was used.</p>
<p>The full intricacies of configuring the dhcpd file can be found in the manpage, however at a minimum one needs to specify the following pxelinux entries and create a single subnet stanza for basic functionality.</p>
<blockquote><p># pxelinux settings<br />
option space pxelinux;<br />
option pxelinux.magic code 208 = string;<br />
option pxelinux.configfile code 209 = text;<br />
option pxelinux.pathprefix code 210 = text;<br />
option pxelinux.reboottime code 211 = unsigned integer 32;</p>
<p>#and</p>
<p># Servers subnet<br />
subnet 172.16.32.0 netmask 255.255.254.0 {<br />
authoritative;<br />
option routers 172.16.32.1;<br />
option subnet-mask 255.255.254.0;<br />
option broadcast-address 172.16.33.255;<br />
option domain-name &#8220;dhcp.karlmajer.com karlmajer.com&#8221;;<br />
range dynamic-bootp 172.16.33.201 172.16.33.251;</p>
<p>ddns-domainname &#8220;dhcp.karlmajer.com&#8221;;<br />
ddns-rev-domainname &#8220;dhcp.33.30.172.in-addr.arpa.&#8221;;</p>
<p>next-server 172.16.32.16;</p>
<p>filename &#8220;boot/pxelinux.0&#8243;;<br />
site-option-space &#8220;pxelinux&#8221;;<br />
option pxelinux.magic f1:00:74:7e;<br />
option pxelinux.configfile &#8220;pxelinux.cfg&#8221;;<br />
option pxelinux.pathprefix &#8220;/tftpboot/pxelinux/files/&#8221;;<br />
option pxelinux.reboottime 30;<br />
}</p></blockquote>
<p>Several assumptions are made by that configuration snippet that will need updating:</p>
<ol>
<li>*There is no other dhcpd server on the network*</li>
<li>The tftpd server is at 172.16.32.16</li>
<li>The default router is at 172.16.32.1</li>
<li>You&#8217;ve placed your pxelinux and configuration files in $TFTPROOT/boot directory</li>
<li>Your network spans 2 class Cs, i.e. the 255.255.254 (/23) netmask and 33.255 broadcast.</li>
</ol>
<p>After making these changes in the dhcpd.conf file, start up the daemon using the method of your choice, i.e., service dhcpd start, svcadm enable dhcpd, or even simply &#8216;dhcpd&#8217; from the command line.</p>
<p>At this point there should be a functioning dhcpd server on the network. The next thing to configure is the tftpd server. Tftp-hpa version 0.42 was chosen as the tftp server of choice as it supported the remapping of file paths in requests, and offered tcp wrappers as an added bonus. Edit the tftpd.map file, often sought by tftpd at /etc/tftpd.map, and add the following lines to it:</p>
<blockquote><p> rgi ^pxelinux.0 /boot/pxelinux.0<br />
rgi ^pxelinux.cfg/ /boot/<br />
rgi ^boot/pxelinux.cfg/ /boot/<br />
rgi ^boot// /</p></blockquote>
<p>This sets up the location of the boot files relative to the tftpd root which is specified on startup. In the environment that was built, all provisioning related items were placed in /export/install and the tftpd daemon was chrooted to this path. Therefore the pxelinux related files were in /export/install/boot, the menu files were in /export/install/hostmenu.</p>
<p>Now the tftpd server can be run from either inetd or as a standalone. Given the low usage of the install system, it was decided that tftpd would run from xinetd on RHEL ignoring the startup/shutdown costs of the daemon which may be noticeable were the install frequency several installs per hour rather than week.</p>
<p>Configuration of the inetd process will differ depending on the flavor of unix employed. On RHEL one need simply add a service definition to the xinetd.d directory and the xinetd daemon will pick it up on the next invocation. A sample RHEL stanza looks as follows:</p>
<blockquote><p># default: off<br />
# description: The tftp server serves files using the trivial file transfer \<br />
# protocol. The tftp protocol is often used to boot diskless \<br />
# workstations, download configuration files to network-aware printers, \<br />
# and to start the installation process for some operating systems. service tftp<br />
{<br />
socket_type = dgram<br />
protocol = udp<br />
wait = yes<br />
user = root<br />
server = /usr/sbin/in.tftpd<br />
server_args = -m /etc/tftpd.map -v -v -v -s /export/install -t 10<br />
disable = no<br />
per_source = 11<br />
cps = 100 2<br />
flags = IPv4<br />
}</p></blockquote>
<p>Note the explicit paths to the tftpd.map as well as the chroot to /export/install.</p>
<p>At this point we have a daemon to respond to our PXE requests, and we have a daemon to serve the content using the tftp protocol for the PXE requests. Now we need to supply the file to be served.</p>
<p>PXELinux from <a href="http://syslinux.zytor.com/pxe.php">http://syslinux.zytor.com/pxe.php</a> was used as the bootloader. The files were unbundled and placed into /export/install/boot. A menu file was created for pxelinux, the contents of which look like:</p>
<blockquote><p>#Note, this menu starts the local disk, a memtest utility, and a Windows 2000 RIS #Installation.<br />
default local<br />
prompt 1<br />
timeout 0<br />
display /boot/install.msg<br />
F1 /boot/install.msg</p>
<p>label local<br />
localboot 0</p>
<p>label w50aa<br />
kernel /images/W50AA/boot/w50aa.0</p>
<p>label memtest<br />
kernel /boot/memtest<br />
append -</p></blockquote>
<p>For safety the default configuration chosen is to always favor the internal drives and only attempt to boot from the w50aa stanza on request. Now copy the menu containing the described data into the /export/install/boot/ (adjusted appropriately for your filesystem layout) and either name the file default, or name the file something else and symlink it to default.</p>
<p>At this point you should have the basic workings of a PXE loader environment. To test it first make sure that dhcpd is running:</p>
<p>ps -ef | grep dhcpd</p>
<p>Next use tftp to connect to localhost and request the file pxelinux:</p>
<p>tftp localhost<br />
get pxelinux</p>
<p>Finally, reboot a host with a PXEboot capable network adapter and hit F12 to netboot.</p>
<p>Please let me know if you have any questions or comments.</p>
<p>&gt;&gt;&gt; Karl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/19/multi-os-installation-configuring-the-pxe-loader-environment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multi-OS Installation:  Configuring the Windows Image &#8211; Part 2</title>
		<link>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-2/</link>
		<comments>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-2/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 22:50:59 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[ris install]]></category>
		<category><![CDATA[slipstream]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-2/</guid>
		<description><![CDATA[Continuing from where we left off in Part 1. In the /export/install/images/W51AA directory there are several directories: boot, i386, inf, amd64, and sys. The directories contain the following: boot/ &#8211; the collection of bootloader files and the sif file. inf/ &#8211; the driver information files. The contents of this dir is read by the python [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing from where we left off in Part 1.  In the /export/install/images/W51AA directory there are several directories: boot, i386, inf, amd64, and sys. The directories contain the following:</p>
<blockquote><p>boot/ &#8211; the collection of bootloader files and the sif file.</p>
<p>inf/ &#8211; the driver information files. The contents of this dir is read by the python RIS implementation processes.</p>
<p>sys/ &#8211; the drivers themselves</p>
<p>i386/ &#8211; the cab files and other files found on the i386 directory on the media</p>
<p>amd64/ &#8211; on 64 bit OSes, this contains 64b versions of the i386 files.</p></blockquote>
<p>The boot directory is populated as follows. Modifications need to be made to the actual windows binaries using your binary editor of choice. There are several strings, such as &#8220;winnt&#8221;,  prevalent throughout all of the binaries and they each need to be replaced with a new string. This is done to create uniqueness across all of the windows install variants all of which request the same files such as winnt.sif, ntdetect.com, and whatnot. Using your binary or hex editor of choice, and substitute the following strings:</p>
<ul>
<li> startrom.n12 &#8211; NTDLR to w50aa
<ul>
<li>rename this file to w50aa.0</li>
</ul>
</li>
<li> setupldr.exe &#8211; winnt.sif to w50aa.sif; ntdetect to ntdw50aa;
<ul>
<li>rename this file to w50aa</li>
</ul>
</li>
<li> ntdetect.com &#8211; no string replacement
<ul>
<li>rename this file to ntw50aa.com</li>
</ul>
</li>
</ul>
<p>Alternatively, the following script snippet can be adopted to use. In the example below let ${Lwhich}=&#8221;w50aa&#8221;. The full script can be found at <a href="http://www.karlmajer.com/files/addnewos/addnewos.sh">http://www.karlmajer.com/files/addnewos/addnewos.sh</a>. Note, if using the script, the script assumes you&#8217;ve created the directory w50aa/i386 and/or w50aa/amd64 depending on the bitness of the OS and copied the files from the install media to those locations.</p>
<blockquote><p>echo &#8220;Preparing boot directory.&#8221;<br />
echo &#8220;&#8230;cabextracting files&#8230;&#8221;<br />
cabextract -d boot/ i386/startrom.n1_<br />
cabextract -d boot/ i386/setupldr.ex_</p>
<p>echo &#8220;&#8230;copying files&#8230;&#8221;<br />
cp i386/ntdetect.com boot/</p>
<p>echo &#8220;&#8230;editing binaries&#8230;&#8221;<br />
echo &#8220;&#8230;..startrom.n12&#8230;&#8221;</p>
<p>cat &gt; /tmp/${Lwhich}.startrom.$$ &lt;&lt; EOF<br />
:%s/NTLDR/${Lwhich}/g<br />
:wq!<br />
EOF<br />
vim -b -s /tmp/${Lwhich}.startrom.$$ boot/startrom.n12</p>
<p>echo &#8220;&#8230;..setupldr.exe&#8230;&#8221;</p>
<p>cat &gt; /tmp/${Lwhich}.setupldr.$$ &lt;&lt; EOF<br />
:%s/winnt.sif/${Lwhich}.sif/g<br />
:%s/ntdetect/ntd${Lwhich}/g<br />
:wq!<br />
EOF<br />
vim -b -s /tmp/$Lwhich.setupldr.$$ boot/setupldr.exe</p>
<p>echo &#8220;&#8230;renaming binaries&#8230;&#8221;<br />
mv boot/ntdetect.com boot/ntd${Lwhich}.com<br />
mv boot/setupldr.exe boot/${Lwhich}<br />
mv boot/startrom.n12 boot/${Lwhich}.0</p></blockquote>
<p>You&#8217;ll note the vim is being used in binary mode (-b) in order to do the edits. The stubfiles simply create regex expressions for vim that are used to handle the search and replace. The script also handles the renames for you as well.</p>
<p>When it is all said and done, you will have the following files in the boot directory: w50aa, w50aa.0, and ntdw50aa.com. If you&#8217;re using the full version of the script then a w50aa.sif configuration file will have been created also. Those files map to the old ntldr, ntdetect, and then the setup specific files, setupldr.exe and the winnt.sif file.</p>
<p>To populate the i386 directory all that is required is to copy the i386 directory off the media directly into the tree.</p>
<p>For the inf and sys directories, the following needs to be done. Note that ${BIT} denotes 32 or 64 bit and pulls files from the appropriate directories accordingly. Again, this is included in the script linked above.</p>
<blockquote><p>echo &#8220;Preparing inf and sys directories.&#8221;</p>
<p>if [ ${BIT} ];<br />
then<br />
echo &#8220;&#8230;extracting inf files&#8230;&#8221;<br />
cabextract -d inf amd64/[Nn][Ee][Tt]*.[Ii][Nn]_<br />
echo &#8220;&#8230;extracting sys files&#8230;&#8221;<br />
cabextract -d sys -F *.sys amd64/driver.cab<br />
else<br />
echo &#8220;&#8230;extracting inf files&#8230;&#8221;<br />
cabextract -d inf i386/[Nn][Ee][Tt]*.[Ii][Nn]_<br />
echo &#8220;&#8230;extracting sys files&#8230;&#8221;<br />
cabextract -d sys -F *.sys i386/driver.cab<br />
fi</p>
<p>echo &#8220;Complete.&#8221;</p></blockquote>
<p>That takes care of the directories. The only remaining things to do are to update the tftpd.map file and to create a few symlinks to fix bizarre windows naming conventions as well as update the windirs.conf which is the binl parser configuration file and update it to include this new OS we&#8217;ve added. Both of these are covered in detail in the script.</p>
<p>That concludes the preparation of the windows image. The next section will discuss setting up the low level boot and PXE environment.</p>
<p>&gt;&gt;&gt; Karl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi-OS Installation:  Configuring the Windows Image &#8211; Part 1</title>
		<link>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-1/</link>
		<comments>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-1/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 08:33:10 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[ris]]></category>
		<category><![CDATA[slipstream]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-1/</guid>
		<description><![CDATA[It takes a bit of work to prepare the contents of a windows CD image for use with the installation system. There is nothing terribly complicated about the process but it is a somewhat tedious, and after the 20th or so image that is being prepared, you may find yourself wishing for a script or [...]]]></description>
			<content:encoded><![CDATA[<p>It takes a bit of work to prepare the contents of a windows CD image for use with the installation system. There is nothing terribly complicated about the process but it is a somewhat tedious, and after the 20th or so image that is being prepared, you may find yourself wishing for a script or two to simplify things. This is not to worry, I will provide those as well.</p>
<p>First a bit of background on the windows boot process. As a windows machine starts the boot process, the following things happen approximately in this order (1):</p>
<ol>
<li>The MBR is queried for the boot sector, and Ntldr is read.</li>
<li> Ntldr is loaded into memory. Its reads the Boot.ini file to present the menu and loads the kernel.
<ol>
<li>Ntldr will eventually load Ntoskernl.exe, Bootvid.dll Hal.dll and the boot-start device drivers.</li>
</ol>
</li>
<li>Ntdetect.com then runs and performs a basic hardware detection for Ntldr.</li>
<li>Ntbootdd.sys is loaded for I/O.</li>
<li>Ntoskrnl.exe is initialized and starts the system-start device drivers then kicks off smss.exe</li>
<li>Hall.dll is loaded and is used to speak to the hardware in the machine.</li>
<li>Smss starts the windows subsystem.</li>
<li>Winlogon is started.</li>
<li>SCM (service control manager) is started for windows services/drivers.</li>
</ol>
<p>The boot process across the network is somewhat similar:</p>
<ol>
<li>The pxeclient on the network interface in computer drops a boot request onto the wire.</li>
<li> The dhcp server catches this request and gives the pxeclient an IP address, the IP address of the next server in the process, and the name of the file to fetch. .
<ol>
<li>pxelinux was used for the windows installs.</li>
</ol>
</li>
<li>The pxeclient then fetches pxlinux via tftp from the bootserver and presents the menu to the user and waits for entry.</li>
</ol>
<p>Up until this point the pxe boot procedure is the same regardless of what OS is being loaded.</p>
<ol>
<li>The user selects the desired windows installation and pxelinux tftps back to the server and asks for the appropriate file, typically startrom.n12, the network bootloader for the MS boot process.</li>
<li>startrom.n12 then calls for setupldr.exe</li>
<li>setupldr.exe, actually named ntldr on the filesystem,  is the pre-installation setup loader for windows.</li>
<li>as before ntldr calls ntdetect.com for hardware detection,</li>
<li>similarly, ntdetect.com handles hardware detection for the ntldr process as for the disk based boot</li>
<li>finally the file winnt.sif is loaded which contains the instructions for the setup/RIS based installation.</li>
</ol>
<p>Now, in order to make this all work a bit of filename manipulation magic needs to be undertaken. This is accomplished in the tftpd.map file which is loaded by the tftp server and additionally by making a few changes to both the names of the binaries and to the binaries themselves.</p>
<p>The naming convention chosen at the site was based on the fact that NTLDR is five characters. A method to encode OS names/types into the five characters was devised such that any OS/SP level could be encoded. The first letter was either W for 32 bit or X for 64 bit. The next two characters were the Microsoft OS version number, W50 for Windows 2000 32bit, X51 for Windows XP Pro 64 Bit. Finally the last two characters were used to denote patch level and any other desired information. For example, at the client site, X51AA was an unpatched XP Pro 64 Bit. While X51BA was SP2.</p>
<p>The path used on the filesystem to contain the filesystem images was /export/install/images. The tftp root is  /export/install. The mapfile contained:</p>
<blockquote><p># windows to unix pathing<br />
rgi \\ /</p>
<p># anything asking for /IMAGES is broken and likely a Microsoft client.<br />
rge ^/IMAGES/ /images/</p>
<p># rehome 32 and 64 2k and 2k3 to /images<br />
rgi ^/X5.* /images\0<br />
rgi ^/W5.* /images\0<br />
# Windows 2000 32 bit &#8211; W50AA</p>
<p>rgi ^/boot/pxelinux.0ntdw50aa.com /images/W50AA/boot/ntdw50aa.com<br />
rgi ^boot/pxelinux.0ntdw50aa.com /images/W50AA/boot/ntdw50aa.com<br />
rgi ^/boot/pxelinux.0w50aa.sif /images/W50AA/boot/w50aa.sif<br />
rgi ^boot/pxelinux.0w50aa.sif /images/W50AA/boot/w50aa.sif<br />
rgi ^w50aa /images/W50AA/boot/w50aa<br />
rgi ^/images/W50AA/i386/W50AA/sys/(.*) /images/W50AA/sys/\1</p>
<p># Windows XP Professional 64bit &#8211; X51AA<br />
rgi ^x51aa /images/X51AA/boot/x51aa<br />
rgi ^ntdx51aa.com /images/X51AA/boot/\0<br />
rgi ^x51aa.sif /images/X51AA/boot/\0<br />
rgi X51AA/i386 X51AA/amd64<br />
rgi ^/images/X51AA/amd64/X51AA/sys/(.*) /images/X51AA/sys/\1<br />
rgi ^/images/X51AA/i386/X51AA/sys/(.*) /images/X51AA/sys/\1</p></blockquote>
<p>First off we need to rewrite dos paths to unix paths. Next we need to send anything asking for just /[WX]5 to /images. That allows the client to find the files its going to request next. The next section addresses some bugs in windows 2000 in which it tacks on the file its looking for onto the file it loaded previously, ie the pxelinux bootloader. Thankfully XP lacks this bug. You&#8217;ll notice that the filenames are not those mentioned in the process flow earlier, but are instead files based on the new naming convention. Any additional OSes based on 2000 need to simply copy the 2000 stanza and adjust the w50aa to the new 5 digit code. The same holds true for XP. These mappings allow the pxeclient to find the contents of the appropriate boot directory.</p>
<p>Configuring the directories in the W51AA tree will be covered in the next post.</p>
<p>&gt;&gt;&gt; Karl</p>
<p>(1. This disk based bootup process was adapted from &#8220;Table 5-1, Microsoft Windows Internals, Fourth Edition, p252&#8243;. Any typos are mine. I&#8217;d recommend the original version of this from the text if possible. Its one of the few windows reference books on my shelf.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-image-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi-OS Installation:  Configuring the Windows Environment.</title>
		<link>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-environment/</link>
		<comments>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-environment/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 08:32:41 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[ris]]></category>
		<category><![CDATA[slipstream]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-environment/</guid>
		<description><![CDATA[Ah, the wonderful world of MS Windows. An environment ripe with complexities and peculiarities unique to the GUI based world loved and scorned by many. Traditionally, the windows installation procedure requires a windows RIS server to handle the duties of the installation server. The production Multi-OS install server was ultimately a Redhat EL 5 64bit [...]]]></description>
			<content:encoded><![CDATA[<p>Ah, the wonderful world of MS Windows. An environment ripe with complexities and peculiarities unique to the GUI based world loved and scorned by many. Traditionally, the windows installation procedure requires a windows RIS server to handle the duties of the installation server. The production Multi-OS install server was ultimately a Redhat EL 5 64bit host, however all of my development work and the prototype were built on an intel Solaris 10 64 bit installation.</p>
<p>The system built for the client, however, made use of both a single box running tftp, samba, and the python RIS implementation from <a title="Python RIS Implementation" href="http://oss.netfarm.it/guides/pxe.php" target="_blank">http://oss.netfarm.it/guides/pxe.php</a>. The basic setup is as follows:</p>
<p>TFTP &#8211; tftp-hpa 0.42 &#8211; With remap and with tcpwrappers was chosen as the tftp server to be used. The using of tcpwrappers is generally a good practice, but the remap function was the desired functionality in this version of tftpd. RHEL 5 ships with this binary as an rpm. The map file will be explained in further detail in when the image preparation is discussed.</p>
<p>SAMBA &#8211; samba 3.023c-2 &#8211; Was selected as the version of samba to run. Again, this was available as an rpm on RHEL 5 and made the selection easy. The following lines were added to the smb.conf configuration file to support the RIS installation environment:</p>
<blockquote><p><em>encrypt passwords = yes<br />
null passwords = yes<br />
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192<br />
idmap uid = 16777216-33554431<br />
idmap gid = 16777216-33554431<br />
template shell = /bin/false<br />
winbind use default domain = no<br />
guest account = nobody<br />
map to guest = Bad User</em></p></blockquote>
<p>The last line allows any user that fails authentication to map to the guest account. If the samba server is setup on a different domain than the rest of the organization, as it was in the case on this network, the desktop computers will have access to the CIFS shares to pull cabs, or other files, from the CD images available on the shares. Note: While testing on unix using smbclient, the share name is \\\\HOST\\SERVICE. If you happen to add a trailing \\ on the end, the service name wont match and the connection will fail with a &#8220;tree connect failed: NT_STATUS_BAD_NETWORK_NAME.&#8221;</p>
<p>RIS &#8211; The UDA v 1.4 provided the foundation binlsrv.py and infparser.py files that were used to initialize the 32 bit OSes. As written, the core binl code needed to be refactored and extended for the intelligent inclusion of additional operating systems, both 32 and 64 bit. The biggest change was made to the infparser and allows it to read the list of operating systems to be parse from a text file. A link to my updated versions of the files can be found here: <a title="binlsrv.py" href="http://www.karlmajer.com/files/binl/binlsrv.py.txt">binlsrv.py</a>, <a title="infparser.py" href="http://www.karlmajer.com/files/binl/infparser.py.txt">infparser.py</a>, and <a title="windirs.conf.sample" href="http://www.karlmajer.com/files/binl/windirs.conf.sample">windirs.conf.sample.</a></p>
<p>Once the requisite software has been installed, the image will need to be prepared. This will be covered in the next section entitled &#8220;Multi-OS Installation: Configuring the Windows Image.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/16/multi-os-installation-configuring-the-windows-environment/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The General Infrastructure</title>
		<link>http://www.karlmajer.com/2008/01/15/the-general-infrastructure/</link>
		<comments>http://www.karlmajer.com/2008/01/15/the-general-infrastructure/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 19:34:50 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[jumpstart]]></category>
		<category><![CDATA[kickstart]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[ris]]></category>
		<category><![CDATA[smbd]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[tftpd]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/?p=12</guid>
		<description><![CDATA[The production system and the prototype were built on differing operating systems. Solaris 10 was initially used to allow for native Solaris Jumpstart procedures for Jumpstarting Solaris 9 on both Intel and Sparc. While migrating the completed prototype to RHEL 5.0 64, the Sparc Solaris issues, Sparc lacking  pxe boot loader capabilities to boot the [...]]]></description>
			<content:encoded><![CDATA[<p>The production system and the prototype were built on differing operating systems. Solaris 10 was initially used to allow for native Solaris Jumpstart procedures for Jumpstarting Solaris 9 on both Intel and Sparc. While migrating the completed prototype to RHEL 5.0 64, the Sparc Solaris issues, Sparc lacking  pxe boot loader capabilities to boot the operating system, were addressed by adding the appropriate stanzas to the dhcpd configuration files.</p>
<p>Unless otherwise specified, the Solaris installation was built from the source tarball, whereas the Linux installation came from an official RedHat RPM. This typically accounts for any version differences found between the two operating systems.</p>
<p>The network services required to fully netboot and install a machine are as follows:</p>
<ul>
<li>At the lowest level there is a dhcp server listening for initial boot requests. ISC&#8217;s dhcpd server, specifically version 3.0.6 which was the current version at the time. On the RHEL machine, version 3.0.5, was used.</li>
<li>A tftp server is required to make the necessary files available. The files in question could be either pxe bootloaders for Linux and Solaris 10, the actual boot files in the case of Solaris 9, and the WINNT bootloader in the case of Windows. Tftp-hpa version 0.42 was chosen as the tftp server of choice as it supported the remapping of file paths in requests, and offered tcp wrappers as an added bonus.</li>
<li>An HTTP server is made available on the network to support Solaris jumpstart and Linux kickstart. The server offers media for both of the installation processes. The Apache that shipped with Solaris 10, Apache/2.0.58, and the Apache that shipped with RHEL 5, Apache/2.2.3, worked without a problem.</li>
<li>An NFS server is made available on the network to support Solaris installations including jumpstart. The server offers the entire media tree to any client that may desire it. Linux NFS servers may have problems with Solaris clients on anything other than NFSv2. The converse is not true.</li>
<li>To support windows, a CIFS needed to be offered. Samba was picked as it is the primary software of choice. Version 3.023c-2 was used on RHEL, 3.025c on Solaris.</li>
<li>RIS Services are required to properly net install a Windows machine. The software used was a python implementation of the binl server and is covered in greater detail in the Windows section.</li>
<li>Additionally, OS ISOs for every operating system to be installed must be obtained for both the Windows and Unix environments. This must be done in accordance to appropriate licensing for each respective OS.</li>
</ul>
<p>The delivered product was capable of installing: Linux RHEL 3,4,5 32 and 64 bit variants, Solaris 9, 10, both intel and sparc at multiple releases, Windows 200[03], XP, both 32 and 64 bit including the unpatched and last two service pack levels. All in all a total of 27 windows offerings, 6 Solaris offerings, and 6 Linux offerings were available to any server or desktop that supported pxe booting.</p>
<p>More to come&#8230;</p>
<p>&gt;&gt;&gt; Karl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/15/the-general-infrastructure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a Multi-OS Installation Host</title>
		<link>http://www.karlmajer.com/2008/01/15/building-a-multi-os-installation-host/</link>
		<comments>http://www.karlmajer.com/2008/01/15/building-a-multi-os-installation-host/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 17:20:57 +0000</pubDate>
		<dc:creator>Karl Majer</dc:creator>
				<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[jumpstart]]></category>
		<category><![CDATA[kickstart]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[os installation]]></category>
		<category><![CDATA[ris]]></category>
		<category><![CDATA[smbd]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[tftpd]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.karlmajer.com/?p=11</guid>
		<description><![CDATA[Recently a client expressed interest in having me build an installation environment wholly contained on a single, preferably unix, server. The client had a requirement of being able to Kickstart any RedHat/Fedora Linux distribution they chose, Jumpstart Solaris 9 &#38; 10 for Sparc and Intel, and net install a wide range of windows installations. The [...]]]></description>
			<content:encoded><![CDATA[<p>Recently a client expressed interest in having me build an installation environment wholly contained on a single, preferably unix, server. The client had a requirement of being able to Kickstart any RedHat/Fedora Linux distribution they chose, Jumpstart Solaris 9 &amp; 10 for Sparc and Intel, and net install a wide range of windows installations. The unix installation environments were straightforward, both taking advantage of the pxe bootloader environment. Linux uses pxelinux, and Solaris uses a Sun modified version of pxegrub. Windows was an entirely different issue.</p>
<p>After a bit of research I decided to use a combination of the theory behind the Ultimate Deployment Appliance (UDA) VM, available from <a href="http://www.vmware.com/appliances/directory/232">http://www.vmware.com/appliances/directory/232</a> , VMWare&#8217;s appliances directory, as well as the information found on the RIS for Linux site located at <a href="http://oss.netfarm.it/guides/pxe.php">http://oss.netfarm.it/guides/pxe.php</a> around which the UDA is built.UDA v1.4 was already capable of booting a considerable variety of 32 bit windows images, however it lacked the ability to easily add 64 bit images. Additionally, there was no need for the pretty HTML GUI that the package offered and so they were omitted in favor of a pxelinux and pxegrub menu system.</p>
<p>This series of articles will describe how the system was built as well as provide examples on how to build your own. It will be written in several parts, at least one for each of Solaris, Linux, and Windows, and the Windows article may be further subdivided into several more.</p>
<p>More will follow as time permits.</p>
<p>&gt;&gt;&gt; Karl</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlmajer.com/2008/01/15/building-a-multi-os-installation-host/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

