Ignore:
Timestamp:
06/16/10 20:08:51 (2 years ago)
Author:
tschmitt
Message:
  • linuxmuster-setup:
    • Cdrom-Handling bei Erstinstallation verbessert.
    • obsolete Tivoli Konfigurationsvorlagen entfernt.
  • eject zu Paketabhängigkeiten hinzugefügt.
  • helperfunctions.sh:
    • Funktion get_room_ip() hinzugefügt, gibt IP-Adresse eines Raums zurück.
    • Funktion validhostname() hinzugefügt, prüft ob Hostnamen RFC 952 entsprechen.
  • wimport.sh:
    • Hostnamensprüfung verwendet nun validhostname() (schließt #245).
    • Maschinepasswort wird nun für jeden Host gesetzt, nicht mehr nur für neue.
  • import_printers: verwendet nun get_room_ip() um das Raumsubnetz zu ermitteln (schließt #244).
  • paedml50-upgrade: entfernt nun /etc/apache2/conf.d/nagios2.conf.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/linuxmuster-base/branches/testing/share/scripts/wimport.sh

    r666 r762  
    3838# check for unique entry 
    3939check_unique() { 
    40         local found="" 
    41         local s 
    42         for s in $2; do 
    43     if [ "$s" = "$1" ]; then 
    44                         [ -n "$found" ] && return 1 
    45                         found=yes 
    46     fi 
    47         done 
    48         return 0 
     40 local found="" 
     41 local s 
     42 for s in $2; do 
     43  if [ "$s" = "$1" ]; then 
     44   [ -n "$found" ] && return 1 
     45   found=yes 
     46  fi 
     47 done 
     48 return 0 
    4949} 
    5050 
    5151# cancel with message 
    5252exitmsg() { 
    53         echo "$1" 
    54         rm $WDATATMP 
    55         rm -f $locker 
    56         RC=1 
    57         exit $RC 
     53 echo "$1" 
     54 rm $WDATATMP 
     55 rm -f $locker 
     56 RC=1 
     57 exit $RC 
    5858} 
    5959 
    6060# checking for valid host/machine account 
    6161check_account() { 
    62         echo "$HOSTS_LDAP" | grep -qw "$hostname" || return 1 
    63         echo "$MACHINES_LDAP" | grep -qw "${hostname}\\$" || return 1 
    64         echo "$HOSTS_DB" | grep -qw "$hostname" || return 1 
    65         echo "$MACHINES_DB" | grep -qw "${hostname}\\$" || return 1 
    66         return 0 
     62 echo "$HOSTS_LDAP" | grep -qw "$hostname" || return 1 
     63 echo "$MACHINES_LDAP" | grep -qw "${hostname}\\$" || return 1 
     64 echo "$HOSTS_DB" | grep -qw "$hostname" || return 1 
     65 echo "$MACHINES_DB" | grep -qw "${hostname}\\$" || return 1 
     66 return 0 
    6767} 
    6868 
     
    8585  return 1 
    8686 fi 
    87         if [ -e "$SOPHOMORIXLOCK" ]; then 
    88                 echo "Fatal! Sophomorix lockfile $SOPHOMORIXLOCK detected!" 
    89                 return 1 
    90         fi 
    91         echo -n "  * Creating exam account $hostname ... " 
    92         if sophomorix-useradd --examaccount $hostname --unix-group $room 2>> $TMPLOG 1>> $TMPLOG; then 
    93                 echo "Ok!" 
    94         else 
    95                 echo "sophomorix error!" 
    96                 return 1 
    97         fi 
    98         echo -n "  * Setting random password for $hostname ... " 
    99         if sophomorix-passwd -u $hostname --pass $HOST_PASSWORD 2>> $TMPLOG 1>> $TMPLOG; then 
    100                 echo "Ok!" 
    101         else 
    102                 echo "sophomorix error!" 
    103                 return 1 
    104         fi 
    105         [ -d "$WSHOME/$room/$hostname" ] || mkdir -p $WSHOME/$room/$hostname 
    106         chown $hostname:$TEACHERSGROUP $WSHOME/$room/$hostname 
    107         chmod 775 $WSHOME/$room/$hostname 
    108         if [ "$QUOTA" = "yes" ]; then 
    109                 echo -n "  * Setting quota for $hostname ... " 
    110                 if sophomorix-quota -u $hostname 2>> $TMPLOG 1>> $TMPLOG; then 
    111                         echo "Ok!" 
    112                 else 
    113                         echo "sophomorix error!" 
    114                         return 1 
    115                 fi 
    116         fi 
    117         echo -n "  * Creating machine account ${hostname}$ ... " 
    118         if sophomorix-useradd --computer ${hostname}$ 2>> $TMPLOG 1>> $TMPLOG; then 
    119                 echo "Ok!" 
    120         else 
    121                 echo "sophomorix error!" 
    122                 return 1 
    123         fi 
    124         echo -n "  * Setting machine password for ${hostname}$ ... " 
    125         if sophomorix-passwd --force -u ${hostname}$ --pass $MACHINE_PASSWORD 2>> $TMPLOG 1>> $TMPLOG; then 
    126                 echo "Ok!" 
    127         else 
    128                 echo "sophomorix error!" 
    129                 return 1 
    130         fi 
     87 if [ -e "$SOPHOMORIXLOCK" ]; then 
     88  echo "Fatal! Sophomorix lockfile $SOPHOMORIXLOCK detected!" 
     89  return 1 
     90 fi 
     91 echo -n "  * Creating exam account $hostname ... " 
     92 if sophomorix-useradd --examaccount $hostname --unix-group $room 2>> $TMPLOG 1>> $TMPLOG; then 
     93  echo "Ok!" 
     94 else 
     95  echo "sophomorix error!" 
     96  return 1 
     97 fi 
     98 if ! sophomorix-passwd -u $hostname --pass $HOST_PASSWORD 2>> $TMPLOG 1>> $TMPLOG; then 
     99  echo "  * Error: Cannot set password for $hostname!" 
     100  return 1 
     101 fi 
     102 [ -d "$WSHOME/$room/$hostname" ] || mkdir -p $WSHOME/$room/$hostname 
     103 chown $hostname:$TEACHERSGROUP $WSHOME/$room/$hostname 
     104 chmod 775 $WSHOME/$room/$hostname 
     105 if [ "$QUOTA" = "yes" ]; then 
     106  echo -n "  * Setting quota for $hostname ... " 
     107  if sophomorix-quota -u $hostname 2>> $TMPLOG 1>> $TMPLOG; then 
     108   echo "Ok!" 
     109  else 
     110   echo "sophomorix error!" 
     111   return 1 
     112  fi 
     113 fi 
     114 echo -n "  * Creating machine account ${hostname}$ ... " 
     115 if sophomorix-useradd --computer ${hostname}$ 2>> $TMPLOG 1>> $TMPLOG; then 
     116  echo "Ok!" 
     117 else 
     118  echo "sophomorix error!" 
     119  return 1 
     120 fi 
    131121} 
    132122 
    133123# remove workstation and machine accounts 
    134124remove_account() { 
    135         if [ -e "$SOPHOMORIXLOCK" ]; then 
    136                 echo "Fatal! Sophomorix lockfile $SOPHOMORIXLOCK detected!" 
    137                 return 1 
    138         fi 
    139         echo -n "  * Removing exam account $hostname ... " 
    140         if sophomorix-kill --killuser $hostname 2>> $TMPLOG 1>> $TMPLOG; then 
     125 if [ -e "$SOPHOMORIXLOCK" ]; then 
     126  echo "Fatal! Sophomorix lockfile $SOPHOMORIXLOCK detected!" 
     127  return 1 
     128 fi 
     129 echo -n "  * Removing exam account $hostname ... " 
     130 if sophomorix-kill --killuser $hostname 2>> $TMPLOG 1>> $TMPLOG; then 
    141131  [ -d "$i" ] && rm -rf $i 2>> $TMPLOG 1>> $TMPLOG 
    142                 echo "Ok!" 
    143         else 
    144                 echo "sophomorix error!" 
    145                 return 1 
    146         fi 
    147         echo -n "  * Removing machine account ${hostname}$ ... " 
    148         if sophomorix-kill --killuser ${hostname}$ 2>> $TMPLOG 1>> $TMPLOG; then 
    149                 echo "Ok!" 
    150         else 
    151                 echo "sophomorix error!" 
    152                 return 1 
    153         fi 
     132  echo "Ok!" 
     133 else 
     134  echo "sophomorix error!" 
     135  return 1 
     136 fi 
     137 echo -n "  * Removing machine account ${hostname}$ ... " 
     138 if sophomorix-kill --killuser ${hostname}$ 2>> $TMPLOG 1>> $TMPLOG; then 
     139  echo "Ok!" 
     140 else 
     141  echo "sophomorix error!" 
     142  return 1 
     143 fi 
    154144} 
    155145 
    156146# remove room or host from $PRINTERS 
    157147remove_printeraccess() { 
    158         local toremove=$1 
    159         local PRINTERSTMP=/var/tmp/printers.$$ 
    160         [ -e "$PRINTERSTMP" ] && rm -rf $PRINTERSTMP 
    161         echo "  * Removing $toremove from $PRINTERS ..." 
    162         while read line; do 
    163                 if [ "${line:0:1}" = "#" ]; then 
    164                         echo "$line" >> $PRINTERSTMP 
    165                         continue 
    166                 fi 
    167                 if ! echo "$line" | grep -qw $toremove; then 
    168                         echo "$line" >> $PRINTERSTMP 
    169                         continue 
    170                 fi 
    171                 printer=`echo $line | awk '{ print $1 }'` 
    172                 [ -z "$printer" ] && continue 
    173                 roomlist=`echo $line | awk '{ print $2 }'` 
    174                 [ -z "$roomlist" ] && continue 
    175                 hostlist=`echo $line | awk '{ print $3 }'` 
    176                 roomlist=${roomlist/$toremove/} 
    177                 roomlist=${roomlist//,,/,} 
    178                 roomlist=${roomlist%,} 
    179                 roomlist=${roomlist#,} 
    180                 [ -z "$roomlist" ] && roomlist="-" 
    181                 hostlist=${hostlist/$toremove/} 
    182                 hostlist=${hostlist//,,/,} 
    183                 hostlist=${hostlist%,} 
    184                 hostlist=${hostlist#,} 
    185                 [ -z "$hostlist" ] && hostlist="-" 
    186                 echo -e "$printer\t$roomlist\t$hostlist" >> $PRINTERSTMP 
    187         done <$PRINTERS 
    188         mv $PRINTERSTMP $PRINTERS 
    189         update_printers="yes" 
     148 local toremove=$1 
     149 local PRINTERSTMP=/var/tmp/printers.$$ 
     150 [ -e "$PRINTERSTMP" ] && rm -rf $PRINTERSTMP 
     151 echo "  * Removing $toremove from $PRINTERS ..." 
     152 while read line; do 
     153  if [ "${line:0:1}" = "#" ]; then 
     154   echo "$line" >> $PRINTERSTMP 
     155   continue 
     156  fi 
     157  if ! echo "$line" | grep -qw $toremove; then 
     158   echo "$line" >> $PRINTERSTMP 
     159   continue 
     160  fi 
     161  printer=`echo $line | awk '{ print $1 }'` 
     162  [ -z "$printer" ] && continue 
     163  roomlist=`echo $line | awk '{ print $2 }'` 
     164  [ -z "$roomlist" ] && continue 
     165  hostlist=`echo $line | awk '{ print $3 }'` 
     166  roomlist=${roomlist/$toremove/} 
     167  roomlist=${roomlist//,,/,} 
     168  roomlist=${roomlist%,} 
     169  roomlist=${roomlist#,} 
     170  [ -z "$roomlist" ] && roomlist="-" 
     171  hostlist=${hostlist/$toremove/} 
     172  hostlist=${hostlist//,,/,} 
     173  hostlist=${hostlist%,} 
     174  hostlist=${hostlist#,} 
     175  [ -z "$hostlist" ] && hostlist="-" 
     176  echo -e "$printer\t$roomlist\t$hostlist" >> $PRINTERSTMP 
     177 done <$PRINTERS 
     178 mv $PRINTERSTMP $PRINTERS 
     179 update_printers="yes" 
    190180} 
    191181 
    192182# remove deleted rooms or hosts from $ROOMDEFAULTS 
    193183remove_defaults() { 
    194         local toremove=$1 
    195         local RC_REMOVE=0 
    196         echo -n "  * Removing $toremove from $ROOMDEFAULTS ... " 
    197         backup_roomdefaults=yes 
    198         grep -v ^$toremove[[:space:]] $ROOMDEFAULTS > $ROOMDEFAULTS.tmp; RC_REMOVE=$? 
    199         mv $ROOMDEFAULTS.tmp $ROOMDEFAULTS; RC_REMOVE=$? 
    200         if [ $RC_REMOVE -ne 0 ]; then 
    201                 echo "Error!" 
    202                 return 1 
    203         else 
    204                 echo "Ok!" 
    205                 return 0 
    206         fi 
     184 local toremove=$1 
     185 local RC_REMOVE=0 
     186 echo -n "  * Removing $toremove from $ROOMDEFAULTS ... " 
     187 backup_roomdefaults=yes 
     188 grep -v ^$toremove[[:space:]] $ROOMDEFAULTS > $ROOMDEFAULTS.tmp; RC_REMOVE=$? 
     189 mv $ROOMDEFAULTS.tmp $ROOMDEFAULTS; RC_REMOVE=$? 
     190 if [ $RC_REMOVE -ne 0 ]; then 
     191  echo "Error!" 
     192  return 1 
     193 else 
     194  echo "Ok!" 
     195  return 0 
     196 fi 
    207197} 
    208198 
    209199 
    210200if [ "$imaging" = "linbo" ]; then 
    211  
    212         # adding new host entries from LINBO's registration 
    213         if ls $LINBODIR/*.new 2>> $TMPLOG 1>> $TMPLOG; then 
    214                 for i in $LINBODIR/*.new; do 
    215                         echo "Adding new host data:" 
    216                         cat $i 
    217                         echo 
    218                         cat $i >> $WIMPORTDATA 
    219                         rm $i 
    220                 done 
    221         fi 
    222  
    223 fi 
    224  
    225  
    226 # Check if workstation data file is empty 
     201 # adding new host entries from LINBO's registration 
     202 if ls $LINBODIR/*.new 2>> $TMPLOG 1>> $TMPLOG; then 
     203  for i in $LINBODIR/*.new; do 
     204   echo "Adding new host data:" 
     205   cat $i 
     206   echo 
     207   cat $i >> $WIMPORTDATA 
     208   rm $i 
     209  done 
     210 fi 
     211fi 
     212 
     213 
     214# only if workstation data file is filled 
    227215if [ -s "$WIMPORTDATA" ]; then 
    228216 
    229         # create a clean workstation data file 
    230         echo "Checking workstation data:" 
    231         while read line; do 
    232  
    233                 [ "${line:0:1}" = "#" ] && continue 
    234  
    235                 # strip spaces from $line 
    236                 line=${line// /} 
    237  
    238                 room=`echo $line | awk -F\; '{ print $1 }'` 
    239                 [ -z "$room" ] && continue 
    240  
    241                 hostname=`echo $line | awk -F\; '{ print $2 }'` 
    242                 tolower $hostname 
    243                 hostname=$RET 
    244                 [ -z "$hostname" ] && continue 
    245  
    246                 hostgroup=`echo $line | awk -F\; '{ print $3 }'` 
    247                 [ -z "$hostgroup" ] && continue 
    248  
    249                 mac=`echo $line | awk -F\; '{ print $4 }'` 
    250                 toupper $mac 
    251                 mac=$RET 
    252                 [ -z "$mac" ] && continue 
    253  
    254                 ip=`echo $line | awk -F\; '{ print $5 }'` 
    255                 [ -z "$ip" ] && continue 
    256  
    257                 pxe=`echo $line | awk -F\; '{ print $11 }'` 
    258                 [ -z "$pxe" ] && continue 
    259  
    260                 echo "$room;$hostname;$hostgroup;$mac;$ip;$internmask;1;1;1;1;$pxe" >> $WDATATMP 
    261  
    262         done <$WIMPORTDATA 
    263  
    264         # check hostnames 
    265         hostnames=`awk -F\; '{ print $2 }' $WDATATMP` 
    266         for i in $hostnames; do 
    267                 case $i in 
    268                         *[!a-z0-9-]*) 
    269                                 exitmsg "Invalid Hostname: $i!" 
    270                                 ;; 
    271                         *) 
    272                                 ;; 
    273                 esac 
    274                 check_unique "$i" "$hostnames" || exitmsg "Hostname $i is not unique!" 
    275         done 
    276  
    277         # check macs 
    278         macs=`awk -F\; '{ print $4 }' $WDATATMP` 
    279         for i in $macs; do 
    280                 validmac $i || exitmsg "Invalid MAC address: $i!" 
    281                 check_unique "$i" "$macs" || exitmsg "MAC address $i is not unique!" 
    282         done 
    283  
    284         # check ips 
    285         ips=`awk -F\; '{ print $5 }' $WDATATMP` 
    286         for i in $ips; do 
    287                 validip $i || exitmsg "Invalid IP address: $i!" 
    288                 check_unique "$i" "$ips" || exitmsg "IP address $i is not unique!" 
    289         done 
    290  
    291         echo "  * Workstation data are Ok! :-)" 
     217 # create a clean workstation data file 
     218 echo "Checking workstation data:" 
     219 while read line; do 
     220 
     221  [ "${line:0:1}" = "#" ] && continue 
     222 
     223  # strip spaces from $line 
     224  line=${line// /} 
     225 
     226  room=`echo $line | awk -F\; '{ print $1 }'` 
     227  [ -z "$room" ] && continue 
     228 
     229  hostname=`echo $line | awk -F\; '{ print $2 }'` 
     230  tolower $hostname 
     231  hostname=$RET 
     232  [ -z "$hostname" ] && continue 
     233 
     234  hostgroup=`echo $line | awk -F\; '{ print $3 }'` 
     235  [ -z "$hostgroup" ] && continue 
     236 
     237  mac=`echo $line | awk -F\; '{ print $4 }'` 
     238  toupper $mac 
     239  mac=$RET 
     240  [ -z "$mac" ] && continue 
     241 
     242  ip=`echo $line | awk -F\; '{ print $5 }'` 
     243  [ -z "$ip" ] && continue 
     244 
     245  pxe=`echo $line | awk -F\; '{ print $11 }'` 
     246  [ -z "$pxe" ] && continue 
     247 
     248  echo "$room;$hostname;$hostgroup;$mac;$ip;$internmask;1;1;1;1;$pxe" >> $WDATATMP 
     249 
     250 done <$WIMPORTDATA 
     251 
     252 # check hostnames 
     253 hostnames=`awk -F\; '{ print $2 }' $WDATATMP` 
     254 for i in $hostnames; do 
     255  validhostname "$i" || exitmsg "Hostname $i does not comply with RFC 952!" 
     256  check_unique "$i" "$hostnames" || exitmsg "Hostname $i is not unique!" 
     257 done 
     258 
     259 # check macs 
     260 macs=`awk -F\; '{ print $4 }' $WDATATMP` 
     261 for i in $macs; do 
     262  validmac $i || exitmsg "Invalid MAC address: $i!" 
     263  check_unique "$i" "$macs" || exitmsg "MAC address $i is not unique!" 
     264 done 
     265 
     266 # check ips 
     267 ips=`awk -F\; '{ print $5 }' $WDATATMP` 
     268 for i in $ips; do 
     269  validip $i || exitmsg "Invalid IP address: $i!" 
     270  check_unique "$i" "$ips" || exitmsg "IP address $i is not unique!" 
     271 done 
     272 
     273 echo "  * Workstation data are Ok! :-)" 
    292274 
    293275else 
    294276 
    295         touch $WDATATMP 
    296         echo "  * No workstation data found! Skipping workstation import!" 
     277 touch $WDATATMP 
     278 echo "  * No workstation data found! Skipping workstation import!" 
    297279 
    298280fi 
     
    302284[ -z "$DHCPDCONF" ] && exitmsg "Variable DHCPDCONF is not set!" 
    303285if [ -e "$DHCPDCONF" ]; then 
    304         backup_file $DHCPDCONF 2>> $TMPLOG 1>> $TMPLOG || exitmsg "Unable to backup $DHCPDCONF!" 
    305         rm -rf $DHCPDCONF 2>> $TMPLOG 1>> $TMPLOG || exitmsg "Unable to delete $DHCPDCONF!" 
     286 backup_file $DHCPDCONF 2>> $TMPLOG 1>> $TMPLOG || exitmsg "Unable to backup $DHCPDCONF!" 
     287 rm -rf $DHCPDCONF 2>> $TMPLOG 1>> $TMPLOG || exitmsg "Unable to delete $DHCPDCONF!" 
    306288fi 
    307289touch $DHCPDCONF 2>> $TMPLOG 1>> $TMPLOG || exitmsg "Unable to create $DHCPDCONF!" 
     
    319301 
    320302 
    321 # Check if workstation data file is empty 
     303# only if workstation data file is filled 
    322304if [ -s "$WIMPORTDATA" ]; then 
    323305 
    324         # write configuration files and create host accounts 
    325         while read line; do 
    326  
    327                 RC_LINE=0 
    328  
    329                 # read in host data 
    330                 room=`echo $line | awk -F\; '{ print $1 }'` 
    331                 tolower $room 
    332                 room=$RET 
    333                 hostname=`echo $line | awk -F\; '{ print $2 }'` 
    334                 hostgroup=`echo $line | awk -F\; '{ print $3 }'` 
    335                 [ "$imaging" = "rembo" ] || hostgroup=`echo $hostgroup | awk -F\, '{ print $1 }'` 
    336                 mac=`echo $line | awk -F\; '{ print $4 }'` 
    337                 ip=`echo $line | awk -F\; '{ print $5 }'` 
    338                 pxe=`echo $line | awk -F\; '{ print $11 }'` 
    339                 echo "Processing host $hostname:" 
    340  
    341                 # create workstation and machine accounts 
    342                 if check_account; then 
    343                         get_pgroup $hostname 
    344                         strip_spaces $RET 
    345                         pgroup=$RET 
    346                         if [ "$pgroup" != "$room" ]; then 
    347                                 echo "  * Host $hostname is moving from room $pgroup to $room!" 
    348                                 remove_account; RC_LINE=$? 
    349                                 if [ $RC_LINE -eq 0 ]; then 
    350                                         create_account; RC_LINE=$? 
    351                                 fi 
    352                         fi 
    353                 else 
    354                         create_account; RC_LINE=$? 
    355                 fi 
    356  
    357                 if [ $RC_LINE -ne 0 ]; then 
    358                         RC=$RC_LINE 
    359                         continue 
    360                 else 
    361                         # disable password change 
    362                         smbldap-usermod -A0 -B0 ${hostname}$ 
    363                 fi 
    364  
    365                 # linbo stuff, only if pxe host 
    366                 if [[ "$pxe" != "0" && "$imaging" = "linbo" ]]; then 
    367  
    368                         # use the default start.conf if there is none for this group 
    369                         if [ ! -e "$LINBODIR/start.conf.$hostgroup" ]; then 
    370                                 echo -n "  * LINBO: Creating new start.conf.$hostgroup in $LINBODIR ... " 
    371                                 if cp $LINBODEFAULTCONF $LINBODIR/start.conf.$hostgroup; then 
    372                                         sed -e "s/^Server.*/Server = $serverip/ 
    373                                                 s/^Description.*/Description = Windows XP/ 
    374                                                 s/^Image.*/#Image =/ 
    375                                                 s/^BaseImage.*/BaseImage = winxp-$hostgroup.cloop/" -i $LINBODIR/start.conf.$hostgroup 
    376                                         echo "Ok!" 
    377                                 else 
    378                                         echo "Error!" 
    379                                         RC=1 
    380                                 fi 
    381                         fi 
    382  
    383                         echo -n "  * LINBO: Linking $ip to group $hostgroup ... " 
    384  
    385                         # remove start.conf links but preserve start.conf file for this ip 
    386                         if [[ -e "$LINBODIR/start.conf-$ip" && -L "$LINBODIR/start.conf-$ip" ]]; then 
    387                                 rm $LINBODIR/start.conf-$ip 
    388                         fi 
    389  
    390                         # create start.conf link if there is no file for this ip 
    391                         if [ ! -e "$LINBODIR/start.conf-$ip" ]; then 
    392                                 ln -sf start.conf.$hostgroup $LINBODIR/start.conf-$ip 
    393                         fi 
    394  
    395                         # if there is no pxelinux boot file for the group 
    396                         if [ ! -s "$LINBODIR/pxelinux.cfg/$hostgroup" ]; then 
    397                                 # create one 
    398                                 sed -e "s/initrd=linbofs.gz/initrd=linbofs.$hostgroup.gz/g" $PXELINUXCFG > $LINBODIR/pxelinux.cfg/$hostgroup 
    399                         fi 
    400  
    401                         echo "Ok!" 
    402  
    403                 fi 
    404  
    405                 # write dhcpd.conf entry 
    406                 echo -n "  * DHCP/BIND: Writing config ... " 
    407                 echo "host $hostname {" >> $DHCPDCONF 
    408                 echo "  hardware ethernet $mac;" >> $DHCPDCONF 
    409                 echo "  fixed-address $ip;" >> $DHCPDCONF 
    410                 echo "  option host-name \"$hostname\";" >> $DHCPDCONF 
    411                 if [[ "$pxe" != "0" && "$imaging" = "linbo" ]]; then 
    412                         # assign group specific pxelinux config 
    413                         echo "  option pxelinux.configfile \"pxelinux.cfg/$hostgroup\";" >> $DHCPDCONF 
    414                 fi 
    415                 echo "}" >> $DHCPDCONF 
     306 # write configuration files and create host accounts 
     307 while read line; do 
     308 
     309  RC_LINE=0 
     310 
     311  # read in host data 
     312  room=`echo $line | awk -F\; '{ print $1 }'` 
     313  tolower $room 
     314  room=$RET 
     315  hostname=`echo $line | awk -F\; '{ print $2 }'` 
     316  hostgroup=`echo $line | awk -F\; '{ print $3 }'` 
     317  [ "$imaging" = "rembo" ] || hostgroup=`echo $hostgroup | awk -F\, '{ print $1 }'` 
     318  mac=`echo $line | awk -F\; '{ print $4 }'` 
     319  ip=`echo $line | awk -F\; '{ print $5 }'` 
     320  pxe=`echo $line | awk -F\; '{ print $11 }'` 
     321  echo "Processing host $hostname:" 
     322 
     323  # create workstation and machine accounts 
     324  if check_account; then 
     325   get_pgroup $hostname 
     326   strip_spaces $RET 
     327   pgroup=$RET 
     328   if [ "$pgroup" != "$room" ]; then 
     329    echo "  * Host $hostname is moving from room $pgroup to $room!" 
     330    remove_account; RC_LINE=$? 
     331    if [ $RC_LINE -eq 0 ]; then 
     332     create_account; RC_LINE=$? 
     333    fi 
     334   fi 
     335  else 
     336   create_account; RC_LINE=$? 
     337  fi 
     338 
     339  if [ $RC_LINE -ne 0 ]; then 
     340   RC=$RC_LINE 
     341   continue 
     342  else 
     343   if ! sophomorix-passwd --force -u ${hostname}$ --pass $MACHINE_PASSWORD 2>> $TMPLOG 1>> $TMPLOG; then 
     344    echo "  * Error: Cannot set machine password for ${hostname}$!" 
     345    RC=1 
     346    continue 
     347   fi 
     348   # disable password change 
     349   smbldap-usermod -A0 -B0 ${hostname}$ 
     350  fi 
     351 
     352  # linbo stuff, only if pxe host 
     353  if [[ "$pxe" != "0" && "$imaging" = "linbo" ]]; then 
     354 
     355   # use the default start.conf if there is none for this group 
     356   if [ ! -e "$LINBODIR/start.conf.$hostgroup" ]; then 
     357    echo -n "  * LINBO: Creating new start.conf.$hostgroup in $LINBODIR ... " 
     358    if cp $LINBODEFAULTCONF $LINBODIR/start.conf.$hostgroup; then 
     359     sed -e "s/^Server.*/Server = $serverip/ 
     360             s/^Description.*/Description = Windows XP/ 
     361             s/^Image.*/Image =/ 
     362             s/^BaseImage.*/BaseImage = winxp-$hostgroup.cloop/" -i $LINBODIR/start.conf.$hostgroup 
     363     echo "Ok!" 
     364    else 
     365     echo "Error!" 
     366     RC=1 
     367    fi 
     368   fi 
     369 
     370   echo -n "  * LINBO: Linking $ip to group $hostgroup ... " 
     371 
     372   # remove start.conf links but preserve start.conf file for this ip 
     373   if [[ -e "$LINBODIR/start.conf-$ip" && -L "$LINBODIR/start.conf-$ip" ]]; then 
     374    rm $LINBODIR/start.conf-$ip 
     375   fi 
     376 
     377   # create start.conf link if there is no file for this ip 
     378   if [ ! -e "$LINBODIR/start.conf-$ip" ]; then 
     379    ln -sf start.conf.$hostgroup $LINBODIR/start.conf-$ip 
     380   fi 
     381 
     382   # if there is no pxelinux boot file for the group 
     383   if [ ! -s "$LINBODIR/pxelinux.cfg/$hostgroup" ]; then 
     384    # create one 
     385    sed -e "s/initrd=linbofs.gz/initrd=linbofs.$hostgroup.gz/g" $PXELINUXCFG > $LINBODIR/pxelinux.cfg/$hostgroup 
     386   fi 
     387 
     388   echo "Ok!" 
     389 
     390  fi 
     391 
     392  # write dhcpd.conf entry 
     393  echo -n "  * DHCP/BIND: Writing config ... " 
     394  echo "host $hostname {" >> $DHCPDCONF 
     395  echo "  hardware ethernet $mac;" >> $DHCPDCONF 
     396  echo "  fixed-address $ip;" >> $DHCPDCONF 
     397  echo "  option host-name \"$hostname\";" >> $DHCPDCONF 
     398  if [[ "$pxe" != "0" && "$imaging" = "linbo" ]]; then 
     399   # assign group specific pxelinux config 
     400   echo "  option pxelinux.configfile \"pxelinux.cfg/$hostgroup\";" >> $DHCPDCONF 
     401  fi 
     402  echo "}" >> $DHCPDCONF 
    416403                 
    417                 # write bind config 
    418                 okt2="$(echo $ip | awk -F. '{ print $2 }')" 
    419                 okt3="$(echo $ip | awk -F. '{ print $3 }')" 
    420                 okt4="$(echo $ip | awk -F. '{ print $4 }')" 
     404  # write bind config 
     405  okt2="$(echo $ip | awk -F. '{ print $2 }')" 
     406  okt3="$(echo $ip | awk -F. '{ print $3 }')" 
     407  okt4="$(echo $ip | awk -F. '{ print $4 }')" 
    421408  echo "$okt4.$okt3.$okt2 PTR $hostname.`dnsdomainname`." >> $DB10TMP 
    422409  echo "$hostname A $ip" >> $DBREVTMP 
    423410 
    424                 echo "Ok!" 
    425                 echo 
    426  
    427         done <$WDATATMP 
     411  echo "Ok!" 
     412  echo 
     413 
     414 done <$WDATATMP 
    428415 
    429416fi 
     
    439426# creating/updating group specific linbofs 
    440427if [ "$imaging" = "linbo" -a -e "$LINBOUPDATE" ]; then 
    441         $LINBOUPDATE; RC_LINE=$? 
    442         [ $RC_LINE -ne 0 ] && RC=1 
     428 $LINBOUPDATE; RC_LINE=$? 
     429 [ $RC_LINE -ne 0 ] && RC=1 
    443430fi 
    444431 
     
    446433# myshn groups 
    447434if [ "$imaging" = "rembo" ]; then 
    448         echo "Processing mySHN groups:" 
    449         FOUND=0 
    450         for i in `awk -F\; '{ print $3 " " $11 }' $WDATATMP | grep -v -w 0 | awk '{ print $1 }' | sort -u`; do 
    451             OIFS="$IFS" 
    452             IFS="," 
    453             for g in $i; do 
    454                 if [ ! -e "$MYSHNDIR/groups/$g/config" ]; then 
    455                         echo -n "  * Copying default config for group $g ... " 
    456                         FOUND=1; RC_LINE=0 
    457                         if [ ! -d "$MYSHNDIR/groups/$g" ]; then 
    458                                 mkdir -p $MYSHNDIR/groups/$g 2>> $TMPLOG 1>> $TMPLOG 
    459                         fi 
    460                         cp $MYSHNCONFIG $MYSHNDIR/groups/$g/config 2>> $TMPLOG 1>> $TMPLOG; RC_LINE="$?" 
    461                         if [ $RC_LINE -eq 0 ]; then 
    462                                 echo "Ok!" 
    463                         else 
    464                                 echo "failed!" 
    465                                 RC=1 
    466                         fi 
    467                 fi 
    468             done 
    469             IFS="$OIFS" 
    470         done 
    471         [ "$FOUND" = "0" ] && echo "  * Nothing to do!" 
     435 echo "Processing mySHN groups:" 
     436 FOUND=0 
     437 for i in `awk -F\; '{ print $3 " " $11 }' $WDATATMP | grep -v -w 0 | awk '{ print $1 }' | sort -u`; do 
     438  OIFS="$IFS" 
     439  IFS="," 
     440  for g in $i; do 
     441   if [ ! -e "$MYSHNDIR/groups/$g/config" ]; then 
     442    echo -n "  * Copying default config for group $g ... " 
     443    FOUND=1; RC_LINE=0 
     444    if [ ! -d "$MYSHNDIR/groups/$g" ]; then 
     445     mkdir -p $MYSHNDIR/groups/$g 2>> $TMPLOG 1>> $TMPLOG 
     446    fi 
     447    cp $MYSHNCONFIG $MYSHNDIR/groups/$g/config 2>> $TMPLOG 1>> $TMPLOG; RC_LINE="$?" 
     448    if [ $RC_LINE -eq 0 ]; then 
     449     echo "Ok!" 
     450    else 
     451     echo "failed!" 
     452     RC=1 
     453    fi 
     454   fi 
     455  done 
     456  IFS="$OIFS" 
     457 done 
     458 [ "$FOUND" = "0" ] && echo "  * Nothing to do!" 
    472459fi 
    473460 
     
    483470if ls $WSHOME/*/* &> /dev/null; then 
    484471 
    485         for i in $WSHOME/*/*; do 
    486  
    487                 hostname=${i##*/} 
    488                 if ! grep -qw $hostname $WDATATMP; then 
    489                         FOUND=1 
    490                         remove_account ; RC_LINE="$?" 
    491                         [ $RC_LINE -eq 0 ] || RC=1 
    492                         if [ -z "$HOSTS_REMOVED" ]; then 
    493                                 HOSTS_REMOVED=$hostname 
    494                         else 
    495                                 HOSTS_REMOVED="$HOSTS_REMOVED $hostname" 
    496                         fi 
    497  
    498                         if grep -v ^# $PRINTERS | grep -qw $hostname; then 
    499                                 remove_printeraccess $hostname ; RC_LINE="$?" 
    500                                 [ $RC_LINE -eq 0 ] || RC=1 
    501                         fi 
    502  
    503                         if grep -q ^$hostname[[:space:]] $ROOMDEFAULTS; then 
    504                                 remove_defaults $hostname ; RC_LINE="$?" 
    505                                 [ $RC_LINE -eq 0 ] || RC=1 
    506                         fi 
    507                 fi 
    508  
    509         done 
     472 for i in $WSHOME/*/*; do 
     473 
     474  hostname=${i##*/} 
     475  if ! grep -qw $hostname $WDATATMP; then 
     476   FOUND=1 
     477   remove_account ; RC_LINE="$?" 
     478   [ $RC_LINE -eq 0 ] || RC=1 
     479   if [ -z "$HOSTS_REMOVED" ]; then 
     480    HOSTS_REMOVED=$hostname 
     481   else 
     482    HOSTS_REMOVED="$HOSTS_REMOVED $hostname" 
     483   fi 
     484 
     485   if grep -v ^# $PRINTERS | grep -qw $hostname; then 
     486    remove_printeraccess $hostname ; RC_LINE="$?" 
     487    [ $RC_LINE -eq 0 ] || RC=1 
     488   fi 
     489 
     490   if grep -q ^$hostname[[:space:]] $ROOMDEFAULTS; then 
     491    remove_defaults $hostname ; RC_LINE="$?" 
     492    [ $RC_LINE -eq 0 ] || RC=1 
     493   fi 
     494  fi 
     495 
     496 done 
    510497 
    511498fi 
     
    518505for room in $rooms; do 
    519506 
    520         if ! grep -qw $room $WDATATMP; then 
    521                 FOUND=1 
    522                 echo -n "  * Removing room: $room ... " 
    523                 if sophomorix-groupdel --room $room 2>> $TMPLOG 1>> $TMPLOG; then 
    524                         echo "Ok!" 
    525                 else 
    526                         echo "sophomorix error!" 
    527                         RC=1 
    528                 fi 
    529  
    530                 if grep -qw ^$room $CLASSROOMS; then 
    531                         echo -n "  * Removing $room from $CLASSROOMS ... " 
    532                         backup_classrooms=yes 
    533                         grep -wv ^$room $CLASSROOMS > $CLASSROOMS.tmp 
    534                         mv $CLASSROOMS.tmp $CLASSROOMS 
    535                         echo "Ok!" 
    536                 fi 
    537  
    538                 grep -q ^$room[[:space:]] $ROOMDEFAULTS && remove_defaults $room 
    539  
    540                 if grep -v ^# $PRINTERS | grep -qw $room; then 
    541                         remove_printeraccess $room ; RC_LINE="$?" 
    542                         [ $RC_LINE -eq 0 ] || RC=1 
    543                 fi 
    544         fi 
     507 if ! grep -qw $room $WDATATMP; then 
     508  FOUND=1 
     509  echo -n "  * Removing room: $room ... " 
     510  if sophomorix-groupdel --room $room 2>> $TMPLOG 1>> $TMPLOG; then 
     511   echo "Ok!" 
     512  else 
     513   echo "sophomorix error!" 
     514   RC=1 
     515  fi 
     516 
     517  if grep -qw ^$room $CLASSROOMS; then 
     518   echo -n "  * Removing $room from $CLASSROOMS ... " 
     519   backup_classrooms=yes 
     520   grep -wv ^$room $CLASSROOMS > $CLASSROOMS.tmp 
     521   mv $CLASSROOMS.tmp $CLASSROOMS 
     522   echo "Ok!" 
     523  fi 
     524 
     525  grep -q ^$room[[:space:]] $ROOMDEFAULTS && remove_defaults $room 
     526 
     527  if grep -v ^# $PRINTERS | grep -qw $room; then 
     528   remove_printeraccess $room ; RC_LINE="$?" 
     529   [ $RC_LINE -eq 0 ] || RC=1 
     530  fi 
     531 fi 
    545532 
    546533done 
Note: See TracChangeset for help on using the changeset viewer.