Thanks go to Kenny House (house_at_wrksys.enet.dec.com) and Andrew
Gallatin (gallatin_at_isds.duke.edu) for pointing out the prom variables
"ewa0_inet_init" and "ewa0_protocols" - both of which need to be set
to "bootp" on the alphastation, in order to get "boot ewa0" to
generate a proper bootp-broadcast.
In retrospect, my question "how does inetd know to listen for bootp
broadcasts?" is a bit silly, now that I'm realizing that broadcasts
contain source ports and destination ports.
I've now got something that'll bootp into a ram disk and start
executing a script (based on the RIS-provided kernel, modified
slightly with the following "python" script)...
#!/dcs/bin/python
import sys
import string
# ADDRESS 0D 0E 0F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C ASCII
#==============================================================================
#006124CD 72 67 75 6D 65 6E 74 73 0A 23 0A 23 09 67 69 76 rguments.#.#.giv
#006124DD 65 6E 3A 09 6E 69 6C 0A 23 09 64 6F 65 73 3A 09 en:.nil.#.does:.
#006124ED 73 65 74 20 75 70 20 74 68 65 20 53 41 53 20 65 set up the SAS e
#006124FD 6E 76 69 72 6F 6E 6D 65 6E 74 20 73 6F 20 74 68 nvironment so th
#0061250D 61 74 20 69 6E 73 74 61 6C 6C 2E 6F 73 66 20 63 at install.osf c
#0061251D 61 6E 0A 23 09 09 72 75 6E 2E 20 52 75 6E 73 20 an.#..run. Runs
def main():
# suck in the entire kernel
file = open('vmunix.keep','r')
vmunix_old = file.read()
file.close()
print 'kernel is read'
# find a position somewhere within the /.profile, that's built-into the
# kernel. Raise an exception if it's not locatable
pos=string.index(vmunix_old,"# _at_(#)$RCSfile: .profile,v")
print 'magic string located'
# what do we want to do?
to_do = \
"set -x\n" + \
"mount -u /\n" + \
"eval `/gethost`\n" + \
"echo '128.200.34.23 autoinst.acs.uci.edu' > /etc/hosts\n" + \
"routed -q\n" + \
"mount xxx.xxx.xxx.xxx:/pathname/OSF-1-3.0 /kit\n" + \
"/kit/install\n" + \
"/bin/sh\n" + \
"exit 0\n"
length = len(to_do)
vmunix_new = vmunix_old[0:pos]
vmunix_new = vmunix_new + to_do
vmunix_new = vmunix_new + vmunix_old[pos+length:]
print 'commands entered'
# verify that the kernel's length hasn't changed
if len(vmunix_old) <> len(vmunix_new):
print 'length of kernel changed - that is bad',\
len(vmunix_new),len(vmunix_old)
sys.exit(1)
# write out the changed kernel
file = open('vmunix','w')
file.write(vmunix_new)
file.close()
print 'kernel written'
sys.exit(0)
main()
Received on Wed Feb 08 1995 - 19:46:46 NZDT