Original GUI Installation Details - StanfordVLSI/Genesis2 GitHub Wiki
(A.k.a InteractiveGenesis2GUI)
There are three flavors of GUI:
- The original GUI, designed to run under an existing web server installation such as apache;
- Stewie the standalone GUI, designed to run in user space; and
- Guisada (deprecated), which for development purposes can run the GUI perl scripts directly from the unix command line.
Check out Stanford's public GUI, which lives here: http://www-vlsi.stanford.edu/genesis
It should be sufficient simply to run the INSTALL.sh script that comes with the GUI distribution. INSTALL.sh should walk you through the remaining steps enumerated below.
The original GUI will have been installed along with Genesis2 according to the Genesis2 installation instructions at http://genesis2.stanford.edu/mediawiki/index.php/Genesis2#Installing_Genesis2. The Genesis2 installation process should leave you with an environment variable "$GENESIS_HOME" such that your gui source will be found in a directory called "$GENESIS_HOME/gui".
Original-GUI installation should take place on the same machine that is running your web server. It might work better if you have root access and/or at least be running as the same user and group as the web server. Example:
% ssh webserver -l root
or
% ssh webserver -l apache
If you don't have access to the webserver account, and/or if it doesn't even have an account, you can try to do the install as yourself. It's still a good idea to be on the webserver machine, however. And you'll probably need root access (e.g. sudo) to install the files in the right place and give the correct final permissions.
If you are updating an existing installation, simply copy the new files in place of the old. For paranoia's sake, it's probably good to preserve a copy of the existing installation before overwriting it with the new update. For instance, at Stanford we would do:
% cp -r /var/www/homepage/genesis ~/genesis.old % cd $GENESIS_HOME % cp -r gui/* /var/www/homepage/genesis
or maybe just
% cp -rf gui/* /var/www/homepage/genesis
If updating, YOU ARE DONE, DO NOT PROCEED.
Otherwise, if this is a new install, move on to the next step, below.
For a new install, cd to the install directory $GENESIS_HOME/gui/configs/install. Run the install script INSTALL.sh and follow the directions. Note that you'll probably need to have full root privilege (e.g. sudo) for everything to work properly.
Okay, so here we go:
% source ~/gui/configs/setup_stanford.cshrc (I think) (to get $GENESIS_HOME etc.) % cd $GENESIS_HOME % cd gui/configs/install % sudo ./INSTALL.sh
of course, if you don't have access to sudo, you'll instead be doing something like
% su root # ./INSTALL.sh
Note: By default the installation will create a website called "genesis," e.g. its URL will be "http://your-site.com/genesis" and the cgi files will live in e.g. "http://your-site.com/cgi/genesis". If for some reason you cannot use the default install name "genesis", and/or if you want to make a separate test installation with a different name you can do that by answering "yes" when prompt for changing the server subdirectory. Only do that if you really know what you are doing. You can also use the "-test" option for INSTALL.sh, e.g.
% cd $GENESIS_HOME % cd gui/configs/install % sudo ./INSTALL.sh -test genesis_test_install
Either way, these (above) would create a web site
http://your-site.com/genesis_test_install
...instead of the default
http://your-site.com/genesis
INSTALL.sh will want to know and/or will try to guess the following information (examples are from Stanford's installation at http://www-vlsi.stanford.edu/genesis - feel free to visit there for reference purposes):
- what is your web-server URL (e.g. "http://www-vlsi.stanford.edu")
- where do cgi files live on your server (e.g. "/usr/lib/cgi_bin")
- what pathname does your server use to access cgi files (e.g. "/cgi-bin")
- where do "/" level html files live on your server (e.g. "/var/www/homepage")
- what is the username of the web server (e.g. "www-data")
- what group name (for chgrp) can the web server access(e.g. "www-data")
Note the instructions at the end of the INSTALL script, which will tell you how to set correct permissions such that the web server can use the new installation. You'll be doing something like this:
% chown -R www-data /var/www/homepage/genesis % chgrp -R www-data /var/www/homepage/genesis
% chown -R www-data /usr/lib/cgi-bin/genesis % chgrp -R www-data /usr/lib/cgi-bin/genesis
Once you've installed the gui, bots from Google, Baidu etc. will try and use it to recursively build millions of designs, generating verilog that will rapidly fill up your disk and crash your computer (oops). To prevent this, make sure you have installed a "robots.txt" file in the root of your www space. E.g. if http://yourmachine.com/ points to some directory /var/www/homepage/ you would install the robots.txt file as /var/www/homepage/robots.txt.
robots.txt should contain something like this:
User-agent: * Disallow: /administrator/ Disallow: /cache/ Disallow: /components/ Disallow: /images/ Disallow: /includes/ Disallow: /installation/ Disallow: /language/ Disallow: /libraries/ Disallow: /media/ Disallow: /modules/ Disallow: /plugins/ Disallow: /templates/ Disallow: /tmp/ Disallow: /xmlrpc/ Disallow: /genesis/cgi/ Disallow: /cgi-bin/ Disallow: /cgi-bin/genesis/ Disallow: /cgi-bin/genesis_dev_sr/ Disallow: /cgi-bin/genesis.deleteme/ Disallow: /cgi-bin/genesis*/ Disallow: /cgi_bin/ Disallow: /cgi_bin/genesis/ Disallow: /cgi_bin/genesis_dev_sr/ Disallow: /cgi_bin/genesis.deleteme/ Disallow: /cgi_bin/genesis*/
To see the bots at work:
% sudo cat /var/log/apache2/access.log | grep 'genesis.*xml' \ | sed 's/.xml.*//' | cut -d ' ' -f 4,6,7 \ | sed 's|.GET.*/designs/||' | uniq | less
or for more complete info just do:
% sudo cat /var/log/apache2/access.log | grep 'genesis.*xml'
TO CLEAN UP AFTER THE BOTS this is useful:
cd /var/www/homepage/genesis/designs/FloatingPointGen find . -mtime -4 -exec ls -lt {} \; | less mkdir deleteme sudo ls find . -mtime -4 -type f -exec sudo mv {} deleteme/ \;
In 2012 we updated vlsiweb and eventually I had to reinstall the GUI from scratch. Here are some of the problems I ran into:
Solution:
1. See what the differences are
diff -r /var/www/homepage/genesis ~/smart_memories/Smart_design/ChipGen/bin/Genesis2Tools/gui
2. Maybe copy in the missing files from "Genesis2Tools" to "homepage"
3. Consider updating the official release in "/cad/genesis2," if necessary.
Solution:
cd /var/www/html ln -s ../homepage/genesis
Cannot find "/var/www/homepage" OR Cannot find cgi directory OR Cannot find cad directory OR Directory "/var/www/homepage" does not exist
Solution (vlsiweb):
mkdir /var/www/homepage mkdir /usr/lib/cgi_bin ln -s /cad /hd/cad ln -s /var/www/homepage /var/www/html
New cgi is maybe /usr/lib/cgi-bin instead of prev /usr/lib/cgi_bin/genesis:
cd /usr/lib/cgi-bin sudo ln -s /var/www/homepage/genesis/cgi genesis
My need to enable cgi and reboot the apache web server
sudo a2enmod cgi sudo service apache2 restart
Directories must have correct permissions (root privilege)
sudo chown root /var/www/homepage/ sudo chown root /var/www/homepage/genesis/ sudo chown root /var/www/homepage/genesis/cgi
To reproduce:
% /cad/modules/3.2.6/x86/bin/modulecmd tcsh load base init.c(478):ERROR:161: Cannot initialize TCL
Solved by using correct setup.cshrc file. Old/incorrect:
source /cad/modules/init_modules.csh module load genesis2
New/correct:
source /cad/modules/tcl/init/csh module load base module load genesis2
(Also updated tcllib but may not have been necessary):
% dpkg --get-selections | grep tcl libtcl8.6:amd64 install tcl install tcl8.6 install tcllib install
Solution:
1. cgi directory must exist:
mkdir /usr/lib/cgi_bin ln -s /var/www/homepage/genesis/cgi/ /usr/lib/cgi-bin/genesis
2. cgi must be owned by root:
% ls -ld /usr/lib/cgi-bin/genesis lrwxrwxrwx 1 root root 29 Dec 17 09:22 /usr/lib/cgi-bin/genesis -> /var/www/homepage/genesis/cgi/ % ls -ld /var/www/homepage/genesis/cgi drwxr-xr-x 3 root root 4096 Dec 17 14:23 /var/www/homepage/genesis/cgi/
Solution:
Restore all the designs:
cd /var/www/homepage/genesis sudo cp -r ~/gui/designs/* designs
Make them writable:
cd /var/www/homepage/genesis sudo chown -R www-data designs sudo chgrp -R www-data designs
Can't locate XML/Simple.pm in @INC (you may need to install the XML::Simple module) (@INC contains: ...) at /var/www/homepage/genesis/cgi/updatedesign.dir/build_xml_change_file.pl line 5. BEGIN failed--compilation aborted at /var/www/homepage/genesis/cgi/updatedesign.dir/build_xml_change_file.pl line 5.
Solution:
su cpan App::cpanminus cpanm XML::Simple
Solution:
cd /var/www/homepage/genesis sudo cp -r ~steveri/gui/demo/ . sudo cp -r ~steveri/gui/designs/FloatingPointGen/ .
Solution:
- Added file-exists check to fpdemo.php.
- cd designs/FloatingPointGen; cp empty.js FPGen.js
Solution:
sudo cp /home/steveri/gui/cgi/do_anything.pl /var/www/homepage/genesis/cgi ls !$ sudo chown www-data /var/www/homepage/genesis/cgi/* sudo chgrp www-data /var/www/homepage/genesis/cgi/*
Solution:
1. If not done already, install cpanminus:
su cpan App::cpanminus
2. Install missing package (don't use sudo)
su cpanm HTTP::Server::Simple::CGI
First, you'll need a valid genesis design in a directory $DESIGNDIR that's accessible from the machine that's running your web werver. The directory should contain a valid makefile such that the GUI can make a copy of the makefile in an arbitrary clean directory, connect to that directory and do a "make" to create a new design. In particular, the makefile should produce a valid design when you do something like this:
% mkdir /tmp/tmpdir17 % cd /tmp/tmpdir17 % cp $DESIGNDIR/Makefile . % ./make gen GENESIS_HIERARCHY=new.xml
If you don't know how to do this, talk to Ofer and/or see examples. (TODO: we don't currently have any examples!)
Direct your browser to the gui installed at your site, e.g. http://www.my-machine.com/genesis, and then click on the link that takes you to the design list; currently this is labeled something like "Click here to do real work."
This will take you to a page titled something like "Welcome to the Interactive Chip Generator!" At the bottom of the page is an "edit-design" link with a label something like "Click here to edit the design database." Click on this link.
Fill in the "Design name" and "Design location" text boxes with a unique name for your design and a pathname where the web server can find the design directory, e.g.
design name: my_adder design location: /home/myname/my_adder/genesis
Design name can be anything, but I'd recommend sticking to alphanumerics plus underbars and/or hyphens for the name. The design location is the same as $DESIGNDIR discussed above, where the GUI should be able to find (using the above example) "/home/myname/my_adder/genesis/Makefile."
You shouldn't have to edit the design list file directly, but you can if you want to. The GUI uses this file to find designs it can work on. The name of the file is site-dependent. You can find the name for your site by e.g. querying your CONFIG.TXT file, like so:
% grep DESIGN_LIST /var/homepage/genesis/CONFIG.TXT DESIGN_LIST /var/www/homepage/genesis/configs/design_list_stanford.txt
To add a new Genesis2 design to the gui, simply look at the DESIGN_LIST file and then edit it in the obvious way; refer to one of the existing design-list files as an example e.g. $GENESIS_HOME/gui/configs/design_list_stanford.txt contains something like:
################################################################# # SR designs demo /home/steveri/demo design0 /home/steveri/tgt0 iterative_wallace_sr /home/steveri/iterative_wallace_sr
The first column in a row is a unique name that you choose for your design; then whitespace; then the next column tells the GUI where find the design directory.
That's it! The new design should now magically appear in the GUI.
- Short answer: "./build_release.sh"
- Long answer: see below.
- http://genesis2.stanford.edu/mediawiki/index.php/Original_GUI_Installation_Details#How_do_I_build_a_new_GUI_release.3F_.28DEVELOPERS_ONLY.29
- $GENESIS_HOME/README-packing.txt
If you just want the latest source tarball, there should be one in the development path at this location:
$CHIPGEN/gui/configs/install/latest-release/gui.tar.bz2
To build a new tarball and/or a complete new release, do this:
cd $CHIPGEN/gui/configs/install ./build_tarfile.sh ssh neva ./build_release.sh
Note that "build_release" only works on neva, because of permission problems with respect to final install location "/cad".
To be safe, we'll use a test location "homepage/genesis_text_install" to test the release, instead of the official final home "homepage/genesis".
To test the installation-package process, login to vlsiweb and erase the old installation (if one exists), as shown below. This does some scary stuff (like "sudo /bin/rm -rf"), so please make sure you know what you're doing!
ssh vlsiweb sudo /bin/rm -rf /var/www/homepage/genesis_test_install /usr/lib/cgi-bin/genesis_test_install
At Stanford:
ssh vlsiweb sudo /bin/rm -rf /tmp/unpackgui mkdir /tmp/unpackgui
cd /tmp/unpackgui cp ~/gui/configs/install/*/gui.tar.bz2 . tar xjf gui.tar.bz2
cd /tmp/unpackgui/gui/configs/install sudo ./INSTALL.sh -test
Go to "http://www-vlsi.stanford.edu/genesis_test_install"; click on "Choose a design" and then "edit the design database"; enter design name "tgt0_example" and design location "/var/www/homepage/genesis_test_install/examples/tgt0" and then click "Submit" and then click "return to choose..."