this is obsolete doc -- see instead

unattended@sf usage and configuration on RHEL5 


Update: this guide is considered obsolete, we're now using WinPE ( 




We don't like unattended@sf, we prefer to use our own scripts ( to install Windows XP automaticly. But here's the guide for using it with RHEL5 anyway. 



Applications only 

If you only want to install applications on an existing Windows sytem, follow only tose parts: 

- Installation 

- Scripts 

- Samba configuration 

then map Z: to \\server\install, add z:\bin to your path, define winlang and run the batch scripts from z:\scripts. 




Here's a few hints: 

- best is to configure two network interfaces, one on your local network and one for serving PXE separately. 

- normally we should configure a dns record so that 'ntinstall' points to the samba share. But you can also skip this step, here we simply force the samba server IP in the PXE configuration (z_path). 

- you'll need quite a large mount point store the third-parity install packages (~7GB if you want all of them). 

- be careful, depending on your level of automation (see below) you have to be careful to what subnet of yours you'll plug this PXE monster in. 




Make sure you've got those available, 

rpm -q \
xinetd \
tftp-server \
syslinux \
dhcp \
samba \
samba-client \
perl \

Note. no need for 'named', as mentioned in the introduction here. 




Note. we're assuming quite a large moint point at /srv/ (see specifications above). 


Fetch Unattended ( and extract the archives, 

cd /srv/
ln -sf unattended-4.9 unattended


Make a symlink to easyness, 

cd ~/
ln -s /srv/unattended/install



Preparing the i386 folder 

Copy the i386 directory from the Windows XP Pro SP2 or SP3 CDrom or ISO to the install/os share, 

cd /srv/
cp path/to/share/winxp_pro_fr_sp2.iso .
mkdir -p winxp/
mount -o loop winxp_pro_fr_sp2.iso winxp/
mkdir -p ~/install/os/winxp/
cp -R winxp/i386/ ~/install/os/winxp/
umount winxp/




Unattended provides way to much application scripts (and you feel it when you download the packages) so get rid of everything but Perl, 

cd ~/install/
mv scripts/ scripts.dist/
mkdir -p scripts/
cd scripts/
cp ../scripts.dist/perl.bat .

and define precisely the applications you want e.g., 

cp ../scripts.dist/firefox.bat .
cp ../scripts.dist/putty.bat .
cp ../scripts.dist/spybot.bat .
cp ../scripts.dist/thunderbird.bat .
wget -O - \
| sed '/^{{{/d; /^}}}/d; /^==/d' > filezilla.bat
wget -O - \
| sed '/^{{{/d; /^}}}/d; /^==/d' > WinRar.bat

Ref. the last ones come from 


Update the scripts you selected (otherwise you might have lots of 404's while fetching them), 

cd ~/install/tools/


Now download the language specific (here French) packages for the choosed applications, 

cd ~/install/tools/
./prepare FRA

Note. ENU (English) is the default 


See if some packages are missing (they shouldn't, since we updated the scripts), 

cd ~/install/tools/
./check FRA

Note. ENU (English) is the default 



Samba configuration 

Configure Samba to share the install folder with login and password 'guest' e.g., 

cd /etc/samba/
mv smb.conf smb.conf.dist
#sed '/^[[:space:]]*#/d; /^[[:space:]]*;/d; /^[[:space:]]*$/d' smb.conf.dist > smb.conf

like (Samba 3.0.33 on RHEL), 

        server string = Samba Server Version %v
        security = SHARE
        passdb backend = tdbsam
        load printers = No
        cups options = raw


        comment = unattended
        path = /srv/unattended/install
        guest only = Yes
        guest ok = Yes

Note. 'public = yes' is the same as 'guest ok = yes' 

Note. 'security = yes' plus 'guest only = yes' skips authentication (see the smb.conf manual) 


Create and setup a password for the guest account, 

groupadd guest
useradd -s /sbin/nologin -g guest guest
smbpasswd -a guest
smbpasswd -n guest

Note. we're not using 'username map' (/etc/samba/smbusers) 


Start and enable the daemon at boot, 

testparm -s
tail -F /var/log/samba/*
service smb restart
service smb status
chkconfig smb on


Check you're able to connect with as guest user, 

smbclient -U guest -L

also check from a windows XP host, 

start > execute



PXE configuration 

Proceed with a usual PXE configuration (, 

cd /etc
vi dhcpd.conf


allow bootp;
ddns-update-style none;
allow unknown-clients;


subnet netmask {
  filename "pxelinux.0";


Serve the Unattended kernel and initrd. Copy the templates, 

cp -R /srv/unattended/linuxboot/tftpboot/* /tftpboot
cd /tftpboot

change the boot options to point directly to your windows share w/o DNS and define your keyboard, 

cd /tftpboot/pxelinux.cfg
vi default


default menu.c32
prompt 0
menu title PXE
kbdmap fr.kbd


label unattended
        menu label unattended
        kernel bzImage
        append initrd=initrd z_user=guest z_pass=guest z_path=//


Enable TFTP, 

cd /etc/xinetd.d
vi tftp


        server_args             = -s /tftpboot
        disable                 = no



Unattended configuration 

For a fully automated installation, we will simply use untattend.txt for most of the settings, then just for a few other ones. 


First unattend.txt, 

cd ~/install/site
vi unattend.txt

note. unattend.txt in DOS text format (dos2unix...) 

note. it installs various applications : firefox, putty, ... (unattended scripts called with middle=) 

note. w/o winamp.bat, it has troubbles removing eMusic 

note. w/o winzip.bat, it also has troubbles, using 7-zip instead 

note. this examples needs that custom script (called with top=), 

cd ~/install/scripts

note. 0custom.bat in DOS text format (dos2unix...) 


Manually download missing packages. As for 0.49 with our untattend.txt, PuTTY is missing, 

cd ~/install/packages/putty


Then (worgroup doesn't work into untattend.txt, donno why), 

cd ~/install/site
mv unattend.csv unattend.csv.dist


$u->{'Identification'}->{'JoinWorkgroup'} = 'WORKGROUP';


$u->{'UserData'}->{'ProductKey'} =
    sub {
        my $media_obj = Unattend::WinMedia->new ($u->{'_meta'}->{'OS_media'});
        my $os_name = $media_obj->name ();
        if ($os_name =~ /Windows XP/) {
            return 'XP KEY';
        elsif ($os_name =~ /Windows Server 2003/) {
            return '2K3 KEY';
        return undef;


$u->{'UserData'}->{'ProductID'} =
    sub {
        my $media_obj = Unattend::WinMedia->new ($u->{'_meta'}->{'OS_media'});
        my $os_name = $media_obj->name ();
        if ($os_name =~ /Windows 2000/) {
            return '2K KEY';
        elsif (defined $u->{'UserData'}->{'ProductKey'}) {
            # It is OK for us to return undef as long as there is a
            # ProductKey.
            return undef;
        die "No ProductKey nor ProductID!";

Note. change XX KEY accordingly 



Additional drivers 

Add third-parity drivers to your windows installation, 

#cd ~/install/tools
#chmod +x
#./ /srv/unattended/install/os/winxp


cd ~/install/os/winxp/I386
mkdir -p \$oem\$/\$1/drivers
cd ..
ln -s I386/\$oem\$/\$1/drivers


mkdir -p drivers/nic
mv ~/nic/Netrtle.inf drivers/nic
mv ~/nic/Rtenic.sys drivers/nic
mv ~/nic/Rtenic64.sys drivers/nic
mv ~/nic/Rtenicxp.sys drivers/nic
mv ~/nic/ drivers/nic


Also edit unattend.txt, 

       DriverSigningPolicy = Ignore
       OemPreinstall = Yes
       OemFilesPath = "..\$OEM$"
       OemPnPDriversPath = Drivers\NIC



Ready to go 

Start and enable the daemons, 

service dhcpd restart
service smb restart
service xinetd restart
#service named restart
chkconfig dhcpd on
chkconfig smb on
chkconfig xinetd on
#chkconfig named on


Boot the workstation(s) with PXE -- be careful -- it will automaticly erase everything and install Windows without even asking. Once the installations are finished, don't forget to unplug the PXE server from your network. 



Update procedure 

Just like for installation but overwrite the symlink, 

cd /srv
ln -sf unttended-new unattended

move the install/os share AND FREE SOME SPACE, 

mv unattended-old/install/os/* unattended/install/os
rm -rf unattended-old

and proceed with the script updates. 


Update the linuxboot kernel, initrd and syslinux, 

cd /tftpboot
rm -f bzImage initrd menu.c32 pxelinux.0
cd /srv/unattended/linuxboot/tftpboot
cp -f bzImage initrd menu.c32 pxelinux.0 /tftpboot


No further changes are required. 





References (application only) 


References (other) 


References (mail archive) 


References (M$)