mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-30 17:46:38 +00:00
so that it's easier for the admin who is debugging the install to know which files are created by xCAT
240 lines
6.4 KiB
Plaintext
240 lines
6.4 KiB
Plaintext
export XCATDEBUGMODE="#TABLEBLANKOKAY:site:key=xcatdebugmode:value#"
|
|
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
|
|
set -x
|
|
fi
|
|
|
|
if grep n8r /proc/cmdline > /dev/null 2>&1;
|
|
then
|
|
stty crtscts
|
|
fi
|
|
for x in 0 1 2 3 4 5 6 7 8
|
|
do
|
|
mknod /dev/vcs$x c 7 $x
|
|
mknod /dev/vcsa$x c 7 $[$x+128]
|
|
done
|
|
chmod 644 /dev/vcs*
|
|
chown root /dev/vcs*
|
|
if [ -r /tmp/updates/etc/pki/tls/certs/ca-bundle.crt ]; then
|
|
cp -f /tmp/updates/etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/
|
|
fi
|
|
|
|
|
|
#there is no boot option to set dns search domain in kickstart file,
|
|
#the search domain in /etc/resolv.conf is set in the pre installation script
|
|
export MANAGEDADDRESSMODE=#MANAGEDADDRESSMODE#
|
|
export SEARCHDOMAIN=#GETNODEDOMAIN:THISNODE#
|
|
|
|
if [ "$MANAGEDADDRESSMODE" == "static" ]; then
|
|
echo "#appended by %pre " >> /etc/resolv.conf
|
|
echo "search $SEARCHDOMAIN" >> /etc/resolv.conf
|
|
fi
|
|
|
|
|
|
|
|
cat >/tmp/baz.py <<EOF
|
|
#!/usr/bin/python
|
|
import socket
|
|
import sys
|
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
sock.connect(('#XCATVAR:XCATMASTER#',#TABLE:site:key=xcatiport:value#))
|
|
|
|
print sys.argv[1]
|
|
response = sock.recv(100)
|
|
if(response == "ready\n"):
|
|
sock.send(sys.argv[1]+"\n")
|
|
response = sock.recv(100)
|
|
|
|
sock.close()
|
|
EOF
|
|
|
|
|
|
|
|
cat >/tmp/foo.py <<EOF
|
|
#!/usr/bin/python
|
|
|
|
import socket
|
|
import os
|
|
import linecache
|
|
import re
|
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
sock.connect(('#XCATVAR:XCATMASTER#',#TABLE:site:key=xcatiport:value#))
|
|
|
|
response = sock.recv(100)
|
|
if(response == "ready\n"):
|
|
sock.send("installmonitor\n")
|
|
response = sock.recv(100)
|
|
|
|
sock.close()
|
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
|
port = 3001
|
|
sock.bind(('', port))
|
|
|
|
sock.listen(5)
|
|
|
|
try:
|
|
while 1:
|
|
newSocket, address = sock.accept()
|
|
while 1:
|
|
received = newSocket.recv(200)
|
|
if not received:
|
|
break
|
|
command = re.split('\s+',received)
|
|
if(command[0] == "stat"):
|
|
ilog = ""
|
|
firstline = ""
|
|
line = ""
|
|
post = 0
|
|
percent = 0
|
|
count = 0
|
|
numpack = 0
|
|
pre = 0
|
|
if(os.path.isfile('/tmp/xcatpre.log')):
|
|
ilog = '/tmp/xcatpre.log'
|
|
pre = 1
|
|
if(os.path.isfile('/tmp/packaging.log')):
|
|
ilog = '/tmp/packaging.log'
|
|
if(os.path.isfile('/mnt/sysimage/root/install.log')):
|
|
ilog = '/mnt/sysimage/root/install.log'
|
|
if(os.path.isfile('/mnt/sysimage/tmp/install.log')):
|
|
ilog = '/mnt/sysimage/tmp/install.log'
|
|
if(os.path.isfile('/mnt/sysimage/root/post.log')):
|
|
ilog = '/mnt/sysimage/root/post.log'
|
|
post = 1
|
|
if(ilog):
|
|
count = len(open(ilog).readlines())
|
|
firstline = linecache.getline(ilog,1)
|
|
line = linecache.getline(ilog,count)
|
|
linecache.clearcache()
|
|
if(line and not post and not pre):
|
|
r1 = re.compile("^Installing (\d+) ")
|
|
m1 = r1.search(firstline)
|
|
if m1:
|
|
numpack = int(m1.group(1))
|
|
if(numpack > 0):
|
|
percent = int(((count - 2) * 100)/numpack + .5)
|
|
if(percent > 100):
|
|
percent = 100
|
|
if(percent < 0):
|
|
percent = 0
|
|
r2 = re.compile("^Installing (.*)\.")
|
|
m2 = r2.search(line)
|
|
if m2:
|
|
newline = m2.group(1)
|
|
newline = newline + " ("
|
|
newline = newline + str(percent)
|
|
newline = newline + "%)"
|
|
# newline = newline + " ["
|
|
# count = count - 2
|
|
# newline = newline + str(count)
|
|
# newline = newline + "/"
|
|
# newline = newline + str(numpack)
|
|
# newline = newline + "]"
|
|
else:
|
|
newline = "prep"
|
|
line = "installing " + newline
|
|
if(line and post and not pre):
|
|
line = "installing " + line
|
|
if(not line):
|
|
line = "installing prep"
|
|
newSocket.send(line)
|
|
break
|
|
#UNCOMMENTOENABLEDEBUGPORT# if(command[0] == "sh"): #DEBUG purposes only, wide open root priv command here.
|
|
#UNCOMMENTOENABLEDEBUGPORT# newcommand = ""
|
|
#UNCOMMENTOENABLEDEBUGPORT# for i in command[1:]:
|
|
#UNCOMMENTOENABLEDEBUGPORT# newcommand = newcommand + i + " "
|
|
#UNCOMMENTOENABLEDEBUGPORT# output = os.popen(newcommand).read()
|
|
#UNCOMMENTOENABLEDEBUGPORT# newSocket.send(output)
|
|
#UNCOMMENTOENABLEDEBUGPORT# break
|
|
if(command[0] == "screendump"):
|
|
newcommand = "cat /dev/vcs"
|
|
for i in command[1:]:
|
|
newcommand = newcommand + i
|
|
output = os.popen(newcommand).read()
|
|
newSocket.send(output)
|
|
break
|
|
|
|
newSocket.close()
|
|
|
|
finally:
|
|
sock.close()
|
|
EOF
|
|
|
|
chmod 755 /tmp/foo.py
|
|
chmod 755 /tmp/baz.py
|
|
|
|
NODESTATUS=#TABLEBLANKOKAY:site:key=nodestatus:value#
|
|
|
|
if [ -z "$NODESTATUS" ] || [ "$NODESTATUS" != "0" -a "$NODESTATUS" != "N" -a "$NODESTATUS" != "n" ]; then
|
|
/tmp/baz.py "installstatus installing" &
|
|
fi
|
|
|
|
|
|
|
|
/tmp/foo.py >/foo.log 2>&1 &
|
|
|
|
|
|
|
|
#time to ascertain fstype and PReP/UEFI/legacy
|
|
#also, find first available block device (sda or vda likely)
|
|
#TODO: pick a likely non-SAN target if possible
|
|
shopt -s nullglob
|
|
|
|
#
|
|
# The getinstdisk script is common for RHEL/SLES/PowerKVM/Ubuntu.
|
|
# It will attempt to select the install disk and write the selection to /tmp/xcat.install_disk
|
|
#
|
|
#INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/getinstdisk#
|
|
if [ -e "/tmp/xcat.install_disk" ]; then
|
|
instdisk=`cat /tmp/xcat.install_disk`
|
|
fi
|
|
|
|
|
|
modprobe ext4 >& /dev/null
|
|
modprobe ext4dev >& /dev/null
|
|
if grep ext4dev /proc/filesystems > /dev/null; then
|
|
FSTYPE=ext3
|
|
elif grep ext4 /proc/filesystems > /dev/null; then
|
|
FSTYPE=ext4
|
|
else
|
|
FSTYPE=ext3
|
|
fi
|
|
BOOTFSTYPE=ext3
|
|
EFIFSTYPE=vfat
|
|
|
|
if [ `uname -m` = "ppc64" ]; then
|
|
echo 'part None --fstype "PPC PReP Boot" --ondisk '$instdisk' --size 8' >> /tmp/partitioning
|
|
fi
|
|
if [ -d /sys/firmware/efi ]; then
|
|
echo 'bootloader --driveorder='$instdisk >> /tmp/partitioning
|
|
echo 'part /boot/efi --size 50 --ondisk '$instdisk' --fstype '$EFIFSTYPE >> /tmp/partitioning
|
|
else
|
|
echo 'bootloader' >> /tmp/partitioning
|
|
fi
|
|
|
|
#TODO: ondisk detection, /dev/disk/by-id/edd-int13_dev80 for legacy maybe, and no idea about efi. at least maybe blacklist SAN if mptsas/mpt2sas/megaraid_sas seen...
|
|
echo "part /boot --size 256 --fstype $BOOTFSTYPE --ondisk $instdisk" >> /tmp/partitioning
|
|
echo "part swap --recommended --ondisk $instdisk" >> /tmp/partitioning
|
|
echo "part / --size 1 --grow --ondisk $instdisk --fstype $FSTYPE" >> /tmp/partitioning
|
|
|
|
#XCA_PARTITION_SCRIPT#
|
|
|
|
|
|
# The following code is to generate the repository for the installation
|
|
cat /proc/cmdline
|
|
|
|
NEXTSERVER=`cat /proc/cmdline | grep http | head -n 1`
|
|
NEXTSERVER=${NEXTSERVER#*http://}
|
|
NEXTSERVER=${NEXTSERVER%%:*}
|
|
|
|
export nextserver=$NEXTSERVER
|
|
#INSTALL_SOURCES_IN_PRE#
|
|
|
|
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
|
|
set +x
|
|
fi
|