Flux multi-user server
<pageby/>
Definition
Flux multi-user server (alias Hydra) is Open Virtual Worlds Web Server made by Media Machines. Currently as on 6 July 2007 in late alpha/early beta.
For the moment, this page is only of interest to technical folks. Hydra is not ready for the masses as on 6 July 2007.
Installation
Daniel K. Schneider tried on his personal Linux Desktop (Ubuntu 6.10). Disclaimer: I am not a programmer nor a sysadmin. Also, I use root to do command-line installations (can't get myself to type sudo in repetition).
In progress so to speak ...
Downloads
- Get the Hawk Network Library version 1.7 by Phil Frisbie (LGPL). You can find it in the downloads section.
- Get Hydra, Flux Multi-User
- Get MySQL development libraries and MySQL is you don't have these (see below)
- Also install Flux Player 2.1 if you don't have it already.
Preparation of installation
- MySQL
- Install MySQL and the development libraries !
- Use Synaptic Package Manger or apt-get and install these
I took:
mysql-server libmysqlclient15-dev
If don't want to type command-lines to mysql, you also may want to install a mysql administration client. I tried (but then only used it to change the root password of the mysql server).
mysqladmin
This tool then will show up under Applications/Systems tools. First time you connect you can use 'root' without password.
Then, open a terminal and become root:
su
- Hydras (files)
Currently (July 2007) you have to compile Hydras and HawkNL it yourself.
- unzip into a folder, e.g. I used
/usr/local/flux/hydra
- Modify some source code
- I suggest to make a change to scenemodel.c (else you will have to use database, user and password for MySQL... Change line 51 from:
(&hydra_db, "localhost", "user", "password", "database", 0, NULL, 0) != NULL);
to:
(&hydra_db, "localhost", "hydrausr", "SECRET", "hydra", 0, NULL, 0) != NULL);
- Edit hydras.c, i.e. replace
char *url = "http://worlds.webers.org/content/testbed/";
by something of your own
- HawkNL
- Put it in a folder named "HawkNL" at the same level as the folder containing the Hydra sources. E.g. I used
/usr/local/flux/HawkNL
unzip HawkNL17b1src.zip [-d "flux directory"] cd "flux directory" ln -s HawkNL1.70 HawkNL
- Result is something like this
/usr/local/flux lrwxrwxrwx 1 root root 10 2007-07-06 15:28 HawkNL -> HawkNL1.70 drwxr-xr-x 7 root root 4096 2007-07-06 15:27 HawkNL1.70 drwxr-xr-x 2 root root 4096 2007-07-06 15:40 hydra drwxr-xr-x 2 root root 4096 2007-07-06 15:39 src
Compilation
- HawNL
cd HawkNL make -f makefile.linux make -f makefile.linux install
It will also copy the libraries in /usr/local/lib and header to /usr/local/include/nl.h
- Hydras
- On Windows, load the hydras.sln or hydrac.sln solution files into MSVC 2003 or later (not tested)
- On Linux (I used Ubuntu) run make on the Makefile with gcc installed.
cd hydra make
Result:
gcc -I/usr/include/mysql -DUSE_MYSQL -c scenemodel.c gcc -I/usr/include/mysql -DUSE_MYSQL -c netcontroller.c gcc -c netview.c gcc -c -ggdb swamp.c gcc -o hydras -pthread hydras.o clients.o scenemodel.o netcontroller.o netview.o swamp.o ../HawkNL/src/libNL.a -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient gcc -c -ggdb hydrac.c gcc -o hydrac -pthread hydrac.o swamp.o ../HawkNL/src/libNL.a hydrac.o: In function `printErrorExit': /usr/local/flux/hydra/hydrac.c:76: warning: the `gets' function is dangerous and should not be used. make: *** No rule to make target `hydrabot', needed by `all'. Stop.
This doesn't seem to be harmful (for the moment) since hydras (the server) is built.
MySQL database
I presuppose that both MySQL and your Hydra will run on the same machine.
- Create a hydra database and a user (same as in scenemodel.c)
I used the command line since I couldn't figure out how to use the GUI ;)
mysql -p
- You have to create a hydra_db databse called
hydra
mysql> create database hydra;
- Then create the user called hydrausr (change secret of course)
mysql> create user hydrausr identified by 'secret';
- Then give it rights to the hydra database
mysql > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON hydra.* TO 'hydrausr'@'localhost';
- Then reload the privileges
mysql > flush privileges;
- Create a User table
This is needed for avatars, else you get something like:
Client connected with yourid=1, mytoken=/MM-6-12345678, uid=6 SELECT login_name,avatar FROM users WHERE uid=6 wrote 61 bytes to 1 Segmentation fault (core dumped)
So you go:
mysql -p use hydra
Copy/paste this:
CREATE TABLE `users` ( `login_name` varchar(32) default NULL, `password_hash` varchar(128) default NULL, `uid` int(10) unsigned NOT NULL auto_increment, `avatar` varchar(128) default NULL, `email` varchar(255) default NULL, `iconurl` varchar(255) default '/users/media/defaulticon.jpg', terms smallint unsigned default 0, /* signifies which terms user agreed to, should always be > 0 */ mailings smallint unsigned default 0, /* signifies the level of mailings user agreed to, 0 is only essential */ PRIMARY KEY (`uid`) );
To check it:
mysqlshow hydra -p Enter password: Database: hydra +--------+ | Tables | +--------+ | users | +--------+
mysqlshow hydra users -p .....
Run it to test if it may work
Type: hypdras
./hydras
You may see:
port is 13214 url is http://tecfa.unige.ch/guides/x3d/ex/hydra/testbed.html connected to database Listening on 13214
Note: if you didn't edit the *.c files as told above, you will get
url is http://worlds.webers.org/content/testbed/
From another terminal you also may launch a text client.
./hydrac -d
You may see:
read 4 bytes, messlen is 6 read 6 bytes, messlen is 6 hello yourid=0, mytoken=NA
... though I can't figure out how one could use this to test other things.
Run it with your own stuff
To test, get the Flux Multi-user test files from media machines and dezip on some webserver.
Then edit files localplane.x3d and testbed.x3d etc. and change from:
url="'swmp://localhost:13214/MM-6-12345678'"/>
to the URL of your Hydra server (not the webserver !)
The try with a Flux Player. E.g. enter a URL like
http://tecfa.unige.ch/guides/x3d/ex/hydra/localplane.html http://tecfa.unige.ch/guides/x3d/ex/hydra/testbed.html
Note: The hydra URL runs on my desktop and will be mostly down ... So don't bet on the files / server I installed.
If you correctly created the MySQL users table you'll see something like:
./hydras -d port is 13214 url is http://tecfa.unige.ch/guides/x3d/ex/hydra/testbed.html connected to database Listening on 13214 Client connected from 129.194.112.101:1032 on socket 1 read 18 bytes from 1 wrote 6 bytes to 1 Client connected with yourid=1, mytoken=/MM-6-12345678, uid=6 SELECT login_name,avatar FROM users WHERE uid=6 wrote 61 bytes to 1 read 35 bytes from 1 read 35 bytes from 1 read 35 bytes from 1 .....
Conclusion
I think I got it working somewhat. But the test scene has missing files and is sluggish (even on a good Dell XPS II LapTop). I seem to wake up in the middle of an avatar etc. At some point I think I have seen 2 avatars, but it may have been a Fata Morgana.
Maybe something to do with client stuff like avatars being identical from 2 different machines or so .... will look at it again at some point. Maybe something not correctly installed.
See also
Links
- Mediamachines
- http://www.mediamachines.com
- Flux Multi-User (essential reading)
- Help for installation
- Experience installing, compiling and running Flux server and client by DragonMage, really useful !
- Developer Forums