Changes in / [ecff045:f59ebbc]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src-sh/pc-thinclient/pc-thinclient

    r9788f38 r9cdc41b  
    2828# Description: Helper script to build / install the necessary bits to turn 
    2929#              a PC-BSD system into a thin-client server  
     30# 
     31# Modified for external dhcp server support by Joe Maloney 
    3032 
    3133# Source our functions 
     
    147149} 
    148150 
     151# Start configuring the base system without DHCP 
     152check_configsystem_ignore_dhcp() { 
     153        echo "Setting up system for PXE booting..." 
     154 
     155        # Setup the new pxeboot user with a default password 
     156        cat /etc/passwd | grep pxeboot >/dev/null 2>/dev/null 
     157        if [ "$?" != "0" ] ; then 
     158                echo "thinclient" | pw useradd -n "pxeboot" -h 0 -s /bin/tcsh -d ${PXEWORLD}/mnt/xorg-config -c "pxeboot" 
     159                chown -R pxeboot:pxeboot ${PXEWORLD}/mnt/xorg-config 
     160        fi 
     161 
     162        # Ask for the NIC we want to run on 
     163        while 
     164        z=1 
     165        do 
     166                echo "What NIC do you wish to listen on? (I.E. re0)" 
     167                echo -e "nic) \c" 
     168                read NIC  
     169 
     170                ifconfig $NIC >/dev/null 2>/dev/null 
     171                if [ $? -ne 0 -o -z "$NIC" ] ; then 
     172                        echo "Invalid nic entered, please try again!" 
     173                        sleep 1 
     174                else 
     175                        break 
     176                fi 
     177        done 
     178         
     179        # Ask for the IP Address to be used on the NIC for PXE booting 
     180        while 
     181        z=1 
     182        do 
     183                echo "What IP address will pc-thinclient be listening on? (I.E. 192.168.2.2)" 
     184                echo -e "ipaddr) \c" 
     185                read ipaddr 
     186        break 
     187        done 
     188                # Ask for the network id of the local subnet 
     189        while 
     190        z=1 
     191        do 
     192                echo "What is the network id for your local subnet? (I.E. 192.168.2.0)" 
     193                echo -e "netid) \c" 
     194                read netid  
     195        break 
     196        done 
     197         
     198                # Ask for the network mask of the local subnet 
     199        while 
     200        z=1 
     201        do 
     202                echo "What is the network mask for your local subnet? (I.E. 255.255.255.0)" 
     203                echo -e "netmaskid) \c" 
     204                read netmaskid 
     205        break 
     206        done 
     207 
     208        # Save the rc.conf glue 
     209        cat /etc/rc.conf | grep "# pc-thinclient" >/dev/null 2>/dev/null 
     210        if [ "$?" != "0" ] ; then 
     211                echo "# pc-thinclient configuration 
     212portmap_enable=\"YES\" 
     213nfs_server_enable=\"YES\" 
     214inetd_enable=\"YES\"" >> /etc/rc.conf 
     215        fi 
     216         
     217        # Add firewall exception 
     218        if [ -e "/etc/pf.conf" ] ; then 
     219          cat /etc/pf.conf | grep "pass in on ${NIC} all" >/dev/null 2>/dev/null 
     220          if [ "$?" != "0" ] ; then 
     221                # Setup the firewall exclusion for this NIC 
     222                echo "pass in on ${NIC} all" >> /etc/pf.conf 
     223          fi 
     224        fi 
     225 
     226        # Add some entries for /etc/exports based on manual user input 
     227        echo "$PXEWORLD -maproot=nobody -ro -network $netid -mask $netmaskid" >> /etc/exports 
     228 
     229        # Setup tftp 
     230        cat /etc/inetd.conf | grep "$PXEWORLD" >/dev/null 2>/dev/null 
     231        if [ "$?" != "0" ] ; then 
     232                echo "tftp   dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s ${PXEWORLD}" >> /etc/inetd.conf 
     233        fi 
     234         
     235        # Setup rcpbind entries 
     236        sed -i -e "s|rpcbind : ALL : deny|rpcbind : $netid/$netmaskid : allow\\ 
     237portmap : $netid/$netmaskid : allow\\ 
     238rpcbind : ALL : deny|" /etc/hosts.allow 
     239 
     240        # Start the services 
     241        cmds="/etc/rc.d/nfsd /etc/rc.d/inetd" 
     242        for _sC in $cmds 
     243        do 
     244                echo -e "Starting ${_sC}...\c" 
     245                ${_sC} restart >/dev/null 2>/dev/null 
     246                if [ "$?" != "0" ] ; then 
     247                        echo -e "FAILED! Please run try running it manually." 
     248                else 
     249                        echo -e "OK" 
     250                fi 
     251        done 
     252} 
     253 
     254 
    149255# Check if we need to install custom config 
    150256check_installconfig() { 
     
    300406} 
    301407 
     408# Function to display what information to add to external DHCP server 
     409ignore_dhcpd() { 
     410        echo "Add the following information to your external DHCP Server" 
     411        echo "Will display here when this works" 
     412} 
     413 
    302414# Function which checks and sets up the thinclient as an install server 
    303415check_installdirs() { 
     
    338450fi 
    339451 
     452echo "Do you wish to install the dhcpd server port or use an external server?" 
     453echo "If you wish to use an external server please make sure it supports adding"  
     454echo "next server and bootfile name options." 
     455echo -e "(d/e) \c" 
     456read tmp 
     457if [ "$tmp" = "D" -o "$tmp" = "d" ] ; then 
     458   DHCPTYPE="internal" 
     459else 
     460   DHCPTYPE="external" 
     461fi 
     462 
    340463echo "Do you wish to make this a remote X desktop server or install server?" 
    341464echo -e "(r/i) \c" 
     
    347470fi 
    348471 
    349 # Start by installing dhcpd 
    350 check_dhcpd 
     472 
     473if [ "$DHCPTYPE" = "internal" ] ; then 
     474  # Start by installing dhcpd 
     475  check_dhcpd 
     476else 
     477  # Install without dhcpd 
     478  ignore_dhcpd 
    351479 
    352480# Start by setting up a new buildworld 
     
    364492check_installconfig 
    365493 
    366 # Tweak the base system to enable the thinclient 
    367 check_configsystem 
     494if [ "$DHCPTYPE" = "internal" ] ; then 
     495  # Tweak the base system to enable the thinclient 
     496  check_configsystem 
     497else 
     498  # Tweak the base system to enable the thinclient without dhcpd 
     499  check_configsystem_ignore_dhcp 
     500fi 
    368501 
    369502if [ "$SYSTYPE" = "desktop" ] ; then 
     
    383516fi 
    384517 
    385 echo " " 
    386 echo "Your system is now setup to do PXE booting!" 
    387 exit 0 
     518if [ "$DHCPTYPE" = "internal" ] ; then 
     519  echo "" 
     520  echo "Your system is now setup to do PXE booting!" 
     521  exit 0 
     522else 
     523  echo "You will need to modify the following options in your dhcp server:" 
     524  echo "" 
     525  echo "filename boot/pxeboot" 
     526  echo "next-server $ipaddr" 
     527  echo "option root-path $PXEWORLD" 
     528  echo "" 
     529  echo "Then you can begin to use PXE Boot." 
     530  exit 0 
     531fi 
     532fi 
Note: See TracChangeset for help on using the changeset viewer.