xcat-core/xCAT-server/share/xcat/install/scripts/pre.rh
jbjohnso 72254ce79c Provide a hook for TLS cert delivery by updates.img.
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
2012-04-11 13:39:51 +00:00

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