This file is indexed.

/usr/sbin/drbl-aoe-serv is in drbl 2.6.15-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/bin/bash
# Author: Steven Shiau <steven _at_ nchc org tw>
# License: GPL
# Description: Program to start service for AoE images on DRBL server.

DRBL_SCRIPT_PATH="${DRBL_SCRIPT_PATH:-/usr/share/drbl}"

. $DRBL_SCRIPT_PATH/sbin/drbl-conf-functions
[ -e /etc/drbl/drbl-ocs.conf ] && . /etc/drbl/drbl-ocs.conf
[ -e $DRBL_SCRIPT_PATH/sbin/ocs-functions ] && . $DRBL_SCRIPT_PATH/sbin/ocs-functions

#
prog="$(basename $0)"
#
USAGE() {
   echo "Usage: $prog [OPTION] {start|stop|restart|status}"
   echo "-d, --img-dir DIR  Scan the AoE image directory DIR when starting"
   echo "Ex:" 
   echo "To start AoE service for images in default image dir $sanboot_img_dump_dir:"
   echo "  $prog start"
   echo "To start AoE service for images in /work/img/:"
   echo "  $prog -d /work/img/ start"
   echo "To start AoE service for images in /work/img1/ and /work/img2/:"
   echo "  $prog -d \"/work/img1/ /work/img2/\" start"
   echo "To stop AoE service:"
   echo "  $prog stop"
}
#
start() {
  if ! type vblade &>/dev/null; then
    [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
    echo "vblade not found!"
    [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
    echo "$msg_program_stop!!"
  fi
  sys_eth_ports="$(LC_ALL=C get-all-nic-ip --drbl-client-eth-port)"
  IP_MAC_TMP="$(mktemp /tmp/ip_mac_tmp.XXXXXX)"
  trap "[ -f "$IP_MAC_TMP" ] && rm -f $IP_MAC_TMP" HUP INT QUIT TERM EXIT
  parse_dhcpd_conf $IP_MAC_TMP
  # The output of parse_dhcpd_confi is like:
  # hostname  IP ADD       MAC ADD
  # debian101 192.168.61.1 00:02:e3:53:34:30
  # debian102 192.168.61.2 00:02:e3:54:73:39

  # image name is like: sanboot.aoe-0-0-for-00-50-56-02-01-02
  echo "The AoE image dir: $aoe_img_dir"
  for img_dir in $aoe_img_dir; do
    for i in $img_dir/*.aoe-*; do
     if [ ! -e "$i" ]; then
        echo "$i is not a normal file. Skip this."
        continue
     fi
     # If the filename is not the format, skip it
     if [ -z "$(basename $i | grep -E "for-([[:alnum:]]+-){5}[[:alnum:]]+$")" ]; then
        echo "$i is not in DRBL AoE image file name format. Skip this."
        continue
     fi
     [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
     echo "AoE image found: $i"
     [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
     shelf_no="$(echo $i | grep -Eo "aoe-[[:digit:]]+-[[:digit:]]+-for-.*" | awk -F'-' '{print $2}')"
     slot_no="$(echo $i | grep -Eo "aoe-[[:digit:]]+-[[:digit:]]+-for-.*" | awk -F'-' '{print $3}')"
     mac_address_dash="$(echo $i | grep -Eo "aoe-[[:digit:]]+-[[:digit:]]+-for-.*" | sed -e 's/^aoe-.*-for-//g')"
     mac_address_normal="$(echo $mac_address_dash | sed -e 's/-/:/g')"
     mac_name_cfg_for_pxe="01-${mac_address_dash}"
     echo "Checking if vblade service for aoe:e${shelf_no}.${slot_no} is running..."
     ps_status="$(ps -ef | grep -Ew "vblade[[:space:]]+${shelf_no}[[:space:]]+${slot_no}" | grep -v "grep")"
     if [ -n "$ps_status" ]; then
       echo "vblade service for aoe.e${shelf_no}.${slot_no} is running. Skip this one"
       continue
     fi
     # Find the right eth port instead of running on all. This can be done by parsing the dhcpd.conf if MAC addresses are used in dhcpd.conf.
     client_ip="$(grep -iEw "$mac_address_normal" $IP_MAC_TMP | awk -F' ' '{print $2}')"
     if [ -n "$client_ip" ]; then 
        # We can find the IP address from dhcpd.conf
        # The output of "ip route get 192.168.205.10" is like:
        # 192.168.205.10 dev eth2  src 192.168.205.254
        eth_ports_list="$(ip route get $client_ip | grep -iEo 'dev[[:space:]]+.*src' | awk -F' ' '{print $2}')"
        echo "This server uses ethernet port $eth_ports_list to connect client $mac_address_normal"
     else
        # "range" is used in dhcpd.conf, we have to run vblade on all the available ether port except uplink port.
        eth_ports_list="$sys_eth_ports"
        echo "No idea which ethernet port on the server connects to client $mac_address_normal. Running virtual blade on all available ethernet ports except uplink port..."
     fi
    
     if [ -z "$eth_ports_list" ]; then
       [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
       echo "No ethernet port on the server connecting to client $mac_address_normal was found!"
       [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
       echo "$msg_program_stop!!"
     fi
     echo -n "Starting virtual blade for ${i##*/} on "
     for j in $eth_ports_list; do
       echo -n "$j, "
       vbladed ${shelf_no} ${slot_no} $j $i
       rc=$?
       if [ "$rc" -gt 0 ]; then
         [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
         echo "Error when starting vbladed by: vbladed ${shelf_no} ${slot_no} $j $i"
         [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
         continue
       fi
     done
     echo
    
     # Set pxelinux config file
     cp -f $PXE_CONF_DEF $PXELINUX_DIR/$mac_name_cfg_for_pxe
     hide_reveal_pxe_img "AoE-client" reveal $PXELINUX_DIR/$mac_name_cfg_for_pxe
     set-default-pxe-img -i "AoE-client" -c $PXELINUX_DIR/$mac_name_cfg_for_pxe
     # Change the line: append aoe:e0.0
     drbl-tune-pxecfg-block AoE-client "^([[:space:]]*)append aoe:.*" "\$1append aoe:e${shelf_no}.${slot_no}" $PXELINUX_DIR/$mac_name_cfg_for_pxe
    done
  done
  [ -e "$IP_MAC_TMP" ] && rm -f $IP_MAC_TMP

  # Use gpxelinux.0 instead of pxelinux.0 in dhcpd.conf
  if ! grep -iEq '^[[:space:]]*filename[[:space:]]*=[[:space:]]*[\"]*gpxelinux.0[\"]*' $DHCPDCONF_DIR/dhcpd.conf; then
    echo "Use gpxelinux.0 instead of pxelinux.0 in dhcpd.conf..."
    perl -pi -e 's|(^filename[[:space:]]*=[[:space:]]*"*pxelinux.0"*.*)|#$1|g' $DHCPDCONF_DIR/dhcpd.conf
    perl -pi -e 's|(^[#]*[[:space:]]*filename[[:space:]]*=[[:space:]]*"*gpxelinux.0"*.*)|filename = "gpxelinux.0";|g' $DHCPDCONF_DIR/dhcpd.conf
    # Restart dhcpd service, since different distributions have different names
    for serv_st in dhcpd isc-dhcp-server dhcp3-server; do
      [ -e "/etc/init.d/$serv_st" ] && /etc/init.d/$serv_st restart
    done
  fi
} # end of start

stop() {
  local pxe_mac_files
  echo -n "Stopping vblade process... "
  pkill -9 vblade
  echo "done!"
  #
  for i in $PXELINUX_DIR/01-*; do
    [ -e "$i" ] && pxe_mac_files="$pxe_mac_files $(basename $i)" 
  done
  # Remove spaces in the line head
  pxe_mac_files="$(echo $pxe_mac_files | sed -e "s/^[[:space:]]*//g")"
  if [ -n "$pxe_mac_files" ]; then
    [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
    echo "The pxelinux config files used for AoE clients in dir $PXELINUX_DIR/ are: ${pxe_mac_files// /, }"
    echo "Do you want to remove them now ?"
    [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
    echo -n "[Y/n] "
    read ans_rm_pxelinux_cfg
    case "$ans_rm_pxelinux_cfg" in 
       n|N|[nN][oO]) true ;;
       *) 
         for i in $pxe_mac_files; do
           rm -fv $PXELINUX_DIR/$i
         done
         ;;
    esac
  fi
  # Ask if want to use gpxelinux.0 instead of pxelinux.0 in dhcpd.conf
  if grep -iEq '^[[:space:]]*filename[[:space:]]*=[[:space:]]*[\"]*gpxelinux.0[\"]*' $DHCPDCONF_DIR/dhcpd.conf; then
    [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
    echo "Since AoE booting service was stopped. Do you want to use pxelinux.0 instead of gpxelinux.0 in your dhcpd.conf ?"
    [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
    echo -n "[Y/n] "
    read ans_use_pxelinux_0
    case "$ans_use_pxelinux_0" in 
      n|N|[nN][oO]) true ;;
      *) 
        echo "Use pxelinux.0 instead of gpxelinux.0 in dhcpd.conf..."
        perl -pi -e 's|(^[#]*[[:space:]]*filename[[:space:]]*=[[:space:]]*"*pxelinux.0"*.*)|filename = "pxelinux.0";|g' $DHCPDCONF_DIR/dhcpd.conf
        perl -pi -e 's|(^filename[[:space:]]*=[[:space:]]*"*gpxelinux.0"*.*)|#$1|g' $DHCPDCONF_DIR/dhcpd.conf
        # Restart dhcpd service, since different distributions have different names
        for serv_st in dhcpd isc-dhcp-server dhcp3-server; do
          [ -e "/etc/init.d/$serv_st" ] && /etc/init.d/$serv_st restart
        done
        ;;
    esac
  fi
} # end of stop

#
restart() {
  stop
  echo -n "Wait for 2 secs..."
  sleep 2
  echo
  start
}

status() {
  ps -efw | grep -iE "vblade [[:digit:]]+ [[:digit:]]+"
}

##############
#### main ####
##############
#
while [ $# -gt 0 ]; do
  case "$1" in
    -d|--img-dir) 
            shift
            if [ -z "$(echo $1 |grep ^-.)" ]; then
              # skip the -xx option, in case 
	      aoe_img_dir="$1"
              shift
            fi
            ;;
    -*)     echo "${0}: ${1}: invalid option" >&2
            USAGE >& 2
            exit 2 ;;
    *)      break ;;
  esac
done
#
[ -z "$aoe_img_dir" ] && aoe_img_dir="$sanboot_img_dump_dir"

#
ask_and_load_lang_set

#
case $1 in
  start)   start;;
  stop)    stop;;
  restart) restart;;
  status)  status;;
  *)       echo "Usage: $0 {start|stop|restart|status}"
	   exit 1 
esac