[Back] |
---|
Q: I'm glad to hear about the public release of SPIN. But a couple of questions. Is there any chance of an alpha version being released soon? What about any of the many projects that have been done using SPIN?
A: The code for most of the projects done using SPIN is included in the release. |
[Back] |
Q: I am doing an advanced operating systems course and after we read the SPIN paper, we are quite interested in installing SPIN here. Up to now, we have installed everything and ready to boot it, which I thought is not as easy as just install and compile it. I am wondering what kind of message we should get for the "build world". I have encountered several warning message and once it stopped saying one file is permission denied so I changed the permission explicitly and the last sentence I got is like "make[1]: leaving ../user directory". I don't know whether it's ready to be booted or not, would you please tell me is there something like "compiled completely, ready to boot"?
A: |
[Back] |
Q: Thanks you very much for your prompt response and I hope I won't bother you too much. We are only using two machines, one as the crashbox and the other one(SPIN tree is there) as NFS, bootp server. We don't have the rconsole service cause we think it's not nessacery. But now we run into corner when we want to boot it. Does this mean we must have a rconsole to start boot? Also I think the guide you provided for installing and setting up are very helpful, but the boot part is not that clear. If you could give me more detailed info on boot part, it will be great, Would you please also tell me why SPIN need to be remote booted and what's DOS here used for?
A: I'm not sure what information you need for booting. Could you tell me exactly what you have done and what part of the guide is confusing? The DOS partition on the crashbox is merely used for running the salboot.com program. salboot.com is a network kernel loader program that is a DOS program. It uses bootp to discover its IP address and the server that will serve the kernel file. All of this is for remote booting. |
[Back] |
Q: We are trying to install SPIN in UBC. Currently, we followed the instructions on the web page and came to the Bootpd part. When we run rconsole on server, we got the ">>>", but when we type "bootpd", we can not get the right ip-address as it said in the instruction(they are all 0.0.0.0). There is no response on the crashbox if we type "halt"(the crashbox should rebooting, right?). We have tried "bootptest" on these two machines, and it works well. Our server and crashbox are in different subnet (server:142.103.14.170; crashbox:142.103.10.32). Does this have some relation with the problem? Do you think we should make the server and crashbox in the same subnet? Does the salboot.com broadcast in its subnet when it need to communicate with the server? Otherwise, how can it know the server's address? Thanks.
A:
Also, at the salboot.com prompt, you can set your IP addr by hand with
the ip command: Note that these commands must be run via rconsole because once salboot.com starts, all of its output goes through the serial line. |
[Back] |
Q: Is it possible to split SPIN distribution into several chunks ? I can't download 27Mb in one go. Each time my ISDN connection is broken after about 9Mb download (both FTP & HTTP) with various error codes. BTW. I never met such difficulties with other sites.
A: |
[Back] |
Q: We have put the crashbox and server in one subnet. But the error is the same. Our bootptest is working well. And we are sure that the serial port is connected, because we can use it to copy files between the two machines. The error message we got in rconsole is: Message Text
Can you tell us what is reason for these error messages? Maybe we can try to boot SPIN locally. Could you send us the instruction of local boot? Thanks a lot. We are looking forward to your reply.
A: |
[Back] |
Q: What should I see when I restart the crash-machine using rconsole? A: Here is an example of output generated by restarting a crash-machine running salboot.com |
[Back] |
Q: Is it necessary to remotely boot SPIN?
A: |
[Back] |
Q: We already changed the network card to 3Com. And it can boot now, but still have problem. We guess it is because of short of memory. How much memory does SPIN need? There is 32MB on our crashbox. Is it enough?
The error message is:
A: We have booted spin with only 32MB, but some hard-coded constants have to be changed. It will crash as is. You probably won't be able to run many services with only 32MB. All our hosts have at least 64MB. |
[Back] |
Q: What does the rconsole output show in between SALBOOT.COM and the >>> prompt?
A: Here is the serial output after a restart. |
[Back] |
Q: We are a group of students interested in your operating system SPIN We would like to use it as our platform of developing a project We have some inquiries concerning SPIN Can we setup SPIN on a PC with less than 64 MB of memory? Is there a C compiler for SPIN? What other programming languages are available? Are all the 220MB space of SPIN required? ie, are there any parts of the operating system that can be removed after setting it up? (This is because we want something small)
A: You could just download C code into the SPIN kernel but the idea was to build SPIN using the type-safe properties of Modula-3. For the most part the code under spin/kernel is required. The code under spin/user provides certain services that you may or may not want. The code under spin/local provides the Modula-3 runtime and compilers. The answer here is no, all 220 MB are not required, but what you remove will depend on what you plan on using SPIN for. Please note that SPIN is not self-hosting. Everything you build for it will have to be cross-developed from a Linux PC. |
[Back] |
Q: We would like to explain our project more. We are interested in writing a microkernel based firewall. We studied several operating systems and we are interested in SPIN. Do you think we will need to write code into the kernel for this purpose or writing some code and compiling it normally will do?
Is SPIN stable for this purpose and does the stability depend on the stablity of Linux on which SPIN is built?
A: |
[Back] |
Q: We are getting ready to setup SPIN on an x86 PC We have been reading about the setup from the installation guide found on your internet site Can the operating system work for one computer or do we have to setup all these servers found on the Set-up for Build page Thank you
A: You will compile/build SPIN on one machine say Machine-A. Machine-A is running Linux. Machine-A also can run the file servers nfs, http or both. You must at least run an nfs server in order to boot SPIN. After you have built your SPIN kernel you need a second machine, Machine-B. We call this machine the crashbox or crashmachine in the User Guide. Machine-B must have a FreeBSD file partition loaded on it along with a DOS partition. This is described in the User Guide. When you boot SPIN, the kernel is fetched from Machine-A via either http or nfs depending on how you configure this in spin/make.conf. The message here is that you need a minimum of two machines. One is the development machine where you build SPIN and also serve the files required by SPIN(nfs and/or http). The other machine actually runs the SPIN OS. |
[Back] |
Q: I have a couple of question. Can we setup SPIN only on one machine with the entire tree on this machine. I was thinking of using 127.0.0.1 as the IP of the tree. Would this work? Another question concerning our project. We are going to be implementing a packet filter on SPIN. Is there anything extra thing we need to do during our setup of SPIN for our project?
A: Once you have a fully built kernel, you will have to boot it up on a different machine from the one you built it on. Does this make sense? How do you plan to boot SPIN? Are you planning to remotely boot using rconsole? You need at least two machines in order to build and boot SPIN. One on which to build SPIN, the other machine is where you will actually boot and run SPIN. Forgive me if I seem redundant on this issue but I want this to be clear to you. Are you planning on implementing the packet filter as a SPIN extension? If so then there is nothing special you need to do during setup. |
[Back] |
Q: The FreeBSD setup asks us for the media to install FreeBSD from, we will get the required files them from the net, what do you recommend that we download specifically ? Concerning setting up rconsole for SPIN, can we use the ethernet (eth0) instead of a serial connection (ttyS0)? Why do we need this rconsole when there is another protocol used (nfs) ? Thanks alot
A: rconsole is designed to run over a serial connection, not ethernet. rconsole allows you to have an interface with your SPIN machine from a remote machine. We found this to be useful for such things as restarting etc. if the SPIN machine happens to have problems. nfs is used to transfer files between the machine where you build SPIN and the machine where you boot SPIN. |
[Back] |
Q: Concerning FreeBSD setup what files exactly do we need? Because we are not connected on a network, we are using a private phone line to download the required files to the Linux development machine then ues this as ftp for the crashbox So can you tell us which files are needed and of what version so we can download them from the net? Thanks alot
A: Is the problem that it takes too long to install over the network via your phone line? You may have to acquire a FreeBSD CD in order to perform the install properly. I'm sorry I can't be of more help on this. Let me know if I misunderstand your problem and please feel free to send more questions. |
[Back] |
Q: 1- When we run the rconsole from the development linux machine, should the crashbox be running salboot or freebsd? 2- Does the salboot just load and halt the machine or should it stop and do something? 3- We read in the documentation of the rconsole that we need to be running rconsole daemon on the other machine. How can we do this if it is the salboot that is running on it?
A: When salboot starts up it merely provides a user prompt and then waits for a boot command. The rconsole daemon doesn't run on the machine where salboot runs. In the user guide I describe a two machine scenario. Machine_1 is the build machine. This machine is where you compile SPIN. This machine also runs these services: rconsoled, httpd, nfsd. (Note that it isn't absolutely necessary to run httpd, this is described in the user guide). Machine_2 is your SPIN machine, the crashbox. This machine has a minimal install of FreeBSD for the file system. This machine also runs salboot.com. This is the machine where you will actually boot your SPIN kernel. You will connect to Machine_2 from Machine_1 using rconsole. Be sure you edit the /etc/rconsoles file on Machine_1. o Connect the two machines through their COM ports using a null modem cable. |
[Back] |
Q: to get this point clear -> the crashbox after running salboot does absolutely nothing but wait for the rconsole from the development machine... so visually we get "c:\salboot.com" and the prompt never returns.... is that what is supposed to happen on the crashbox?? this raises a question in my mind.... how does the ethernet interface of the crashbox know it's ip?? or does it just wait for what is comming on the serial interface?? we tried to run rconsole from our development machine while running salboot on the crashbox but it doesn't connect.... we r sure the physical link is working and the linux settings look fine... this is why we r looking for the source of the problem of the failure in connection... can u think of something that would make us sure that the salboot is intact... when installing FreeBSD, choosing "None" in the bootloader choice does not allow us to pick between F1 to boot the dos partition or F2 to boot BSD, however choosing the BootEasy allowed us to do that... is that ok or does it defeat the purpose of what we need... another thing the FreeBSD makes itself the active partition after the installation is complete.. is that ok or should we make the dos partition active again...
A: The IP addr salboot uses comes from bootp protocol, or by hand via salboot prompt on the serial line. I forgot to mention in the last mail that you also need to run bootp on the development machine, Machine_1 in the last mail. Once you get to the salboot prompt using rconsole, you can type help and get a list of commands. These commands allow you to set various things such as the ip addresses etc. Does the serial line work with other OSes running on the crash box? What do you see when you type "rconsole" at at the prompt? Be sure that you have edited your /etc/rconsoles file correctly and that the rconsoled is running. Make the DOS partition bootable so salboot runs at startup. You can do this by running fdisk. |
[Back] |
Q: we'll try again later however we were wondering if u had any idea of the source of the following error (which bugged us over night)... "rconsole: est_conn(); server host not in network database" also would u know the number corresponding to baud 9600... we read somewhere that this number is not the one which is actually written... (for instance 9 instaed of 10NN "sorry can't remember the last 2 figures")...
A: Do you mean the baud number in the /etc/rconsoles file? I'm afraid I don't quite understand this question. Do you see the rconsoled process running on your machine before you try to connect using rconsole?
|
[Back] |
Q: we are working on com2 .. the connections are totally working .. we are sure about that .. cause we tried them on linux to linux .. what do you think we should investigate ..
A: Can you run nslookup for ozz and get an ip address? (nslookup ozz) |
[Back] |
Q: well some good news r here.... rconsole finally works... there is a reason however we don't think it's good enough.... we used to do name resolution through /etc/hosts file however rconsole was not convinced by it.... we decided after u'r suggestion of checking out nslookup to shift to bind dns although it didn't make must sense for a network of two computers... however it works.... we got some errors in the rconsole booting however we'r suspecting some problems in bootp and we'r still investigating it... we don't have a question this time but we'r just telling u the good news of passing the obstacle of rconsole.... |
[Back] |
Q: >>> server 208.160.131.103 server: Served by 208.160.131.103, default kernel "" >>> ip 208.160.131.10 11 ip: 208.160.131.111. Served by 208.160.131.103, default kernel "" >>> b /home/myspin/kernel mount 208.160.131.103:/home salnet_getlocalroute: warning no if 00000000 00000000 salnet_devsend: bad args 0008DD6C 00000000 000566D4 salnet_devrecv: bad args 0008DD44 00000000 00000000 salnet_devrecv: bad args 0008DD44 00000000 00000000 salnet_devrecv: bad args 0008DD44 00000000 00000000 salnet_devrecv: bad args 0008DD44 00000000 00000000 salnet_devrecv: bad args 0008DD44 00000000 00000000 salnet_devrecv: bad args 0008DD44 00000000 00000000 salnet_devrecv: bad args 0008DD44 00000000 00000000 arp: SALNET_TIMEOUT fetch: SALNET_TIMEOUTwe tried many variants in trying with rconsole... even halt and plain bootp at the rconsole prompt gives us the same errors.... we read the faq provided and we tried it but still it doesn't work.... we are pretty confident in our mount and nfs settings however we are in doubt of bootpd... do you share this doubt with us??
a different approach we tried was: when typing "bootpd -d4" to get debug information from a static bootpd session we would get: bootpd: info(6): bootptab mtime: Tue Feb 16 21:56:37 1999 bootpd: info(6): reading "/etc/bootptab" bootpd: info(6): read 3 entries (1 hosts) from "/etc/bootptab" bootpd: error(3): bind: Address already in useour bootptab file has three entries: allhost, spindefaults and yehia (crashbox) which seem correct and are read successfully.... would you have a clue where this error is comming from??? we added tftp functionality to our linux server as it is conventionally needed by bootp however it didn't work either.... do we really need tftp?? one last question... we don't have NIS on our server.. do we need to run NIS especially for the physical ether addresses or is the bootptab enough??
A: When you boot up the crashbox salboot.com should print out some information about your ethercard before displaying the >>> prompt. If you don't see this then salboot may not be recognizing your card. |
[Back] |
Q: another question .. that worried us again .. is there the plexus networking architecture on pcs rather than dec alpha .. or at least is there a tcp/ip implementation on pcs .. we are concerned aout this because we are working on pcs over here and we need a tcp/ip implementation at least to continue with our project .. is the plexus or the tcp/ip implementation provided with the distribution .. thanks again ..
A: The TCP/IP implementation is hardware independent so it runs on PC and alpha. |
[Back] |
Q:
- Does a precompiled version of SPIN's kernel exist?
A: A kernel that is compiled from the source distribution is configured to dynamically fetch(retrieve) extensions over the network. If you have a Linux computer you can build your own kernel and set of extensions. It is possible to configure the kernel so that the extensions are contained within the kernel itself. This would remove the network boot dependencies. The documentation on this process is not up to date so in order to do this you would have to become familiar with the build procedure. I do not know how this would be done myself either. I hope this answers your questions. Feel free to send more questions as the come up. |
[Back] |
Q:
SALBOOT.COM
A: |
[Back] |
Q: no .. we dont have a problem booting spin .. it boots .. the problem is .. we need to get two network cards running on the machine .. because we are implementing a router .. we are sure this works .. because we read somewhere that a packet forwarder has been implemented on spin .. which means that two network cards have been properly setup on a spin machine .. what do you think we should do??
A: |
[Back] |
Q: Once created the kernel and its extensions in the build tree under the Linux machine, can I move this build tree on the SPIN machine and boot the kernel from there? My problem is that I could not have root access on the Linux machine in order to set up it as a boot server.
A: |
[Back] |
Q: I'm sorry for my insistence, but I have still some questions: 1) after the installation of SPIN, is it possible to use it as a stand-alone machine not connected to any network? 2) In your installation instructions you use rconsole. I can't use it because the two machines are very distant. Is this a problem?
A: Also, since your machine running SPIN doesn't have a network connection nor can be connected via rconsole I still don't see how you are going to boot SPIN. I suppose it could just boot off of disk and then implement some fixed function, but we've never done something like that. It probably would be best if you get SPIN to work in a networked/rconsoled environment to start out with. With any other scenario we won't be able to provide help other than just conjecture. |
[Back] |
Q: I have some problem with the compilation of the spin kernel. The development machine runs a RedHat 4.1 (Vanderbilt), Linux 2.0.27 libc 5.3.12 gcc 2.7.2.1 The file log.txt attached to this email report the compilation output. It seems that the linker could not find libc, but I had no problems compiling the modula-3 compiler and the bsd-tools.
A: My guess is that the static libc.a is not installed, and this host only has the dynamic libc.so. All the missing symbols are libc functions and our M3 build makes static programs. I've seen linux boxes before that never had the static libc installed so this is my first thought. |
[Back] |
Q: this is the problem we are facing and the directories ... one of the extensions that we have written imports FileWr and FileRd. Both those two files are assumed to be provided be the fs extension, (the documentation is found at /spin/libm3_sa/src/rw/doc/rw.html) However, our extension can't import those files. We have tried to include these files in the /spin/libm3_sa/src/rw/ directory along with the files it imports. We then recompiles the libm3_sa library. Every thing worked fine, bet we had a linking error. We also tried to add the FileWr to the fs project under the directory /spin/user/fs/fscore/src/ and we tried to recompile the fs, but it didn't work for some reason. Actually we tried to find any object files in the spin tree for FileWr (ie, FilwWr.io or FilwWr.mo) but there is no such files.
A: There is a thing called extent file system (efs). It's in user/fs/efs. Efs allows you to create files with fixed sizes and delete them. Take a look at spin/user/fs/efs/doc/index.html. No one here has done much work that involves creating, reading, and writing files so you are exploring new areas in your work. The easiest way to create a file is through a script that executes shell commands. Here is how you can create a file on efs. nanny touch Extent nanny touch efs extent mkdev $EDISKDEV efsextent -size 167772160 mkdir /efs mount efs efsextent /efs mkfile /efs/foo 23886080.. do something rm /efs/fooYou can bypass Extent and do nanny touch Extent mkdir /efs mount efs $EDISKDEV /efs mkfile /efs/foo 23886080 Once you have a file I believe you can utilize the methods under spin/user/fs/fscore/src/ to lookup, write, and read the files created using the shell commands. NOTE: These series of shell commands resulted in an error that hasn't been tracked down. A work-around is to insert an extra command prior to the mkfile command that will add the filename to the nameserver. touch /efs/foo |
[Back] |
Q: I still have some questions about SPIN installation: 1) When salboot.com starts, the system seems blocked: nothing appears on the screen. I guess that salboot is waiting for a connection via the serial line. Is this behavior normal? 2) After FreeBSD Release 3.1 installation, if I try to boot FreeBSD, the boot process prints something about hostname setup; at this point the system is blocked. Is it normal?
A: This I am not familiar with. I don't believe this is normal. Perhaps your installation of FreeBSD did not complete correctly? What is the exact message that you see at boot time? |
[Back] |
Q: we have a question over here .. now .. you run an extension .. easy and clear .. how do you deactivate it .. i mean .. when we change it .. and make it once again .. and then need to load it again .. what do we do with the previously existing extension .. to this point of time we have been rebooting the system .. and we think ... that there surely is another way to do that .. can you help us .. as for the file system problem .. we are working on it .. and will be keeping you updated with it soon enough ..
A: In practice, most extensions had a shell command as part of the extension. We often added a 'zap' argument that would delete the command from the shell, clean up any dispatcher handlers that were installed, and anything else needed to make way for a re-installation. After the 'zap', we installed the next version of the extension in the typical manner. So the memory with the first version of the extension is still there, but there are no more links to it so it does not interfere with the new version of the extension. See "user/shell/basiccmds/src/Show.m3" for an example of zap. I looked at this myself and was confused because of the call to ShowCmd.Uninstall(). I couldn't find ShowCmd.m3. ShowCmd.*3 are autogenerated files under user/shell/basiccmds/IX86_SPIN/, you won't see them because Show.m3 is not built by default, see user/shell/basiccmds/src/m3makefile.
Anyway, you can add a 'zap' command to your extension and that will allow
you to reload it. Follow the example in Show.m3 and be sure to list your
extension in the m3makefile like this: Also be aware that the Uninstall method removes the extensionName.Run handler from the Shell.Run event. This is all for just the shell command itself. Your extension proper will have to remove whatever other events handlers it installs. |
[Back] |
Q: Now about the errors of nanny // Actually, no errors come out ... >bdev ........ 41 KB urtcore .... vxread: abort > ................... 75 KB vxread: abort >netdev .................vxread:abort >vxread: abort >........ 92 KB link complete. > link complete > link complete >SpinUnixRunTime init done. > link complete >attaching clock devices ... >extent ..... 33kb link complete. > link complete. >Exported disk extents ... >$EDISKDEV ewd0b and this is the output of the command: nanny touch efs: >efs ....... 43 kb link complete. > link complete.Now, the following commands produce no output: >extent mkdev $EDISKDEV efsextent -size 167772160 >mkdir /efsthen, the command: mounting efs efsetent /efs .. it says: >Mounted efs at /efsand finally mkfile /efs/foo 23886080 >mkfile: manipulating /efs/foo >ERROR >>> mkfile namespace error
A: A work-around is to first create a file using "touch" and then set the size to to be whatever you like. Alter the above command sequence like this: extent mkdev $EDISKDEV efsextent -size 167772160 mkdir /efs mount efs efsextent /efs touch /efs/foo mkfile /efs/foo |
[Back] |
Q: The last mail that I sent you had a report of our trial to use the interfaces of the tmpfs ( /spin/user/fs/tmpfs ). Actually, it is clear that tmpfs does not deal with physical storage, as fas as I understand ... Also, I noticed that tmpfs is loaded at boot time.. What if we just used the Extent file system ( /spin/user/fs/efs ). Actually I tried using the interfaces of this extension, but it keeps giving me a linking error ... I feel that some thing is missing in the file system implementation, but I can't find out what it is ...
A: |
[Back] |
Q: the problem is that we get a packet (Mbuf.T) from a network ip 208.160.131.0 directed to a 10.10.10.0 network... one of the modes of our firewall is to automatically route this packet through... our two NIC's are working.... since a long time ago... what we need to do is to split the packet into a header and data part in order to send it using the IpGen.PacketSend() function... we do not need to change anything in the packet... however this doesn't seem to work... we are guessing that the problem is that we mess up the packet data while splitting it... probably the data part... this is because the interfaces for Mbuf are quite obscure and we can't really understand them... if u have a simpler way to just split the packet into two parts to directly use Packet Send we would greatly appreciate it.... or at least some kind of guide on how to use the Mbuf interface... by the way the firewall does work on spin however if we can't fix this problem we will get the packets... filter them but not send them across to the other network... which would be a great problem in our project.... one last question... which is not really crucial for our problem but related... does the icmpClient allow pings across networks... cause we think (by reading the code and trying it) that whenever an icmp packet arrives.. it flips the ip in the packet and resends it.... this has been the source of confidence that the IpGen.PacketSend() really works... cause it calls it at the end of the IcmpGen.PacketSend() function... so we would want to know if what we have just mentioned is true.... this is the code fragemant that supposidly copies the data part from the original Mbuf.T into this.pkt which is also Mbuf.T
A: Are you successful in sending a packet, but that packet is corrupt? |
[Back] |
Q: the problem is that we send a telnet request through the SPIN machine... to a host on the other network... we tcpdump the telnet traffic to find out what is happening... the first telnet request from tcpdump is 208.160.131.111 (linux) -->> 10.10.10.7 (linux) but that doesn't reach it the cause it's on a different network... the SPIN machine is our gateway so it takes the packet throught it's 208.160.131.103 (SPIN) interface and sends it through the other 10.10.10.10 (SPIN) interface and sends it so we get a second tcpdump packet 10.10.10.10 (SPIN) -->> 10.10.10.7 (linux) but then the linux never replies so we are guessing that the telnet packet regenerated by spin is corrupt and the linux machine did not make out of it that it is a telnet request.. another problem that we have is that the total length of the packet using the ip header tot_len is claimed to be 11281 (aprox can't remember exact one) however the Mbuf using m_length() is 46.... which one is more truthful???
A: Another reason why your linux box might not accept the packet is if the tcp checksum values aren't right. I am assuming that your firewall code recalculates the tcp checksum value correctly when you change the IP address in order to redirect the packet. |
[Back] |
Q: the situation seems very simple... we have a packet (Mbuf.T) and we need to resend it... how do we do this?? we are very confused with the semantics of Mbuf, TcpGen and IpGen... if u can just tell us how to send this packet again we would be very grateful...
A: The networking code will implicitly free the MBuf.T once the packet is sent. You should not keep a pointer to it. Instead, you should keep a pointer to the data embodied in the MBuf. That way, you can always create a new MBuf wrapped around the same chunk of data, and thus resend an identical packet. You can check out the web server to see how the web server caches data pages corresponding to web pages, and reuses them by wrapping new mbufs around them. This is in user/httpd/src as I mentioned to you before. |
[Back] |