72254ce79c
Note this is of little use in a PXE environment today, as MITM to the initrd or ipxe subverts all of this. This however is interesting for secure boot environments and remote media boot strap to provide an unbroken trust chain git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@12198 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
149 lines
3.8 KiB
Plaintext
149 lines
3.8 KiB
Plaintext
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
|
|
|
|
|
|
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
|
|
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):
|
|
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):
|
|
line = "installing " + line
|
|
if(not line):
|
|
line = "installing prep"
|
|
newSocket.send(line)
|
|
break
|
|
# if(command[0] == "sh"): #DEBUG purposes only, wide open root priv command here.
|
|
# newcommand = ""
|
|
# for i in command[1:]:
|
|
# newcommand = newcommand + i + " "
|
|
# output = os.popen(newcommand).read()
|
|
# newSocket.send(output)
|
|
# 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
|
|
|
|
/tmp/foo.py >/foo.log 2>&1 &
|
|
#time to ascertain fstype and PReP/UEFI/legacy
|
|
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
|
|
if [ `uname -m` = "ppc64" ]; then
|
|
echo 'part None --fstype "PPC PReP Boot" --size 8' >> /tmp/partitioning
|
|
fi
|
|
if [ -d /sys/firmware/efi ]; then
|
|
echo 'part /boot/efi --size 50 --fstype vfat' >> /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 swap --size 1024" >> /tmp/partitioning
|
|
echo "part / --size 1 --grow --fstype $FSTYPE" >> /tmp/partitioning
|
|
|