Difference between revisions of "Virtual Appliance FAQ"

From NCBO Wiki
Jump to navigation Jump to search
(41 intermediate revisions by 3 users not shown)
Line 1: Line 1:
= Ontology Management =
+
[[Category:NCBO Virtual Appliance]]
  
== How do I identify version numbers for ontologies stored in the system? ==
+
= NCBO VIRTUAL APPLIANCE v2.0 FAQ =
NCBO Ontology Web Services can be used with either the ontology identifier (sometimes referred to as the virtual identifier) or the ontology version identifier (sometimes referred to as the version id). The ontology identifier is used to identify and ontology and all of its versions. The ontology version identifier represents a single ontology version. The following screenshot shows how to identify these version numbers using the BioPortal Web UI.
+
This FAQ now covers the NCBO Virtual Appliance v2.0. The FAQ for v1.0 is available in the [http://www.bioontology.org/wiki/index.php?title=Virtual_Appliance_FAQ&oldid=12621 archive]
<br>[[Image:Bioportal_internal_ontology_ids.png|200px|x]]
 
  
== How do I add or change categories? ==
 
<ol>
 
  <li>Download the Protégé client '''(Version Protégé 3.4.4)'''</li>
 
  <ol>
 
    <li>[http://protege.stanford.edu/download/download.html http://protege.stanford.edu/download/download.html]<br>
 
    </li>
 
  </ol>
 
  <li>Download a copy of the [http://www.bioontology.org/wiki/images/e/ef/Bioportal_metadata.pprj.zip BioPortal Metadata Protégé project file] and modify as follows</li>
 
  <ol>
 
    <li>Line 639: make sure this matches your BioPortal Ontology Services database (ip address or domain of the virtual appliance)</li>
 
    <li>Line 649: this should be your MySQL username (bp_protege)</li>
 
    <li>Line 654: this should be your MySQL password (bioportalprotege)</li>
 
    <li>'''Note:''' These are the default username/password which should be changed for security purposes. If you have already changed them, please use the new username/password.</li>
 
  </ol>
 
  <li>Open the project file using Protégé</li>
 
  <li>Go to the "Individuals" tab</li>
 
  <li>Look for OMV:OntologyDomain and click it</li>
 
  <li>A list of "Asserted Instances" should show up, these are the defaults</li>
 
  <li>You can create or delete instances by clicking on the buttons</li>
 
  <li>Instances should have the following properties:</li>
 
  <ol>
 
    <li>id = unique integer value</li>
 
    <li>omv:name = display name for the category</li>
 
    <li>omv:isSubDomainOf = you can create hierarchies by making
 
      categories subDomains of one another</li>
 
  </ol>
 
</ol>
 
  
== How can I migrate ontologies from BioPortal or previous NCBO Virtual Appliance versions into a new Appliance? ==
+
= Ontology Management =
NCBO developers have created a script that can be used to automatically import ontologies from BioPortal or previous versions of the Virtual Appliance. The script was written in Ruby and is included on the Appliance. To use the script, do the following (requires knowledge of Linux command-line tools):
 
  
* Edit the script, located here: <code>/var/rails/BioPortal/current/util/import_ontologies/import_ontologies.rb</code>
+
== How do I add or change categories or groups? ==
** Make sure you have valid API keys for the FROM and TO systems.
+
There is currently no UI administrator interface (though this will likely be added in future versions). Categories and groups can be added using a console after logging into the Appliance as the root user.
** Assign the $FROM and $TO variables and ports as appropriate. The default configuration points to NCBO's BioPortal but can be changed to the location of your Virtual Appliance instance.
+
<pre>
** The $ONTOLOGY_OWNER is the user id of the user who should own the ontologies on the TO system.
+
# from the bash shell:
** $INCLUDE_ONTOLOGIES can be uncommented and used to import specific ontologies only. Otherwise all ontologies from the FROM system will be imported.
+
cd /srv/ncbo/ncbo_cron
** Save your edits and continue below.
+
bin/ncbo_cron --console
* Run the script using this command: <code>sh /var/rails/BioPortal/current/util/import_ontologies/import_ontologies.rb</code>
+
# once in the ruby console:
* The script will take some time to complete, updating the console as it runs. If automatic parsing is enabled, the ontologies should get parsed when the process next runs.
+
category = LinkedData::Models::Category.new
 +
category.name = "My Category"
 +
category.acronym = "MY_CAT"
 +
category.save
 +
group = LinkedData::Models::Group.new
 +
group.name = "My Group"
 +
group.acronym = "MY_GRP"
 +
group.save
 +
</pre>
  
'''Please Note:''' The import script will attempt to use category and group IDs assigned to ontologies on the FROM system if they exist on the TO system as well. Ontology artifacts, such as notes, views, and mappings, are not imported. Only the most recent version of ontologies are imported; there is no method to import multiple versions of the same ontology using a common virtual id.
+
== How can I migrate ontologies from BioPortal or previous NCBO Virtual Appliance versions into a new Appliance? ==
 +
Programmatic migrations are currently unsupported. Ontologies can be manually downloaded and added using the Web UI.
  
 
= Ontology Parsing =
 
= Ontology Parsing =
 
== When are new ontologies parsed? ==
 
== When are new ontologies parsed? ==
The BioPortal Ontology Services application uses a scheduler to run a process that collects newly submitted ontologies and parses them, adds them to the search index, and calculates metrics. You can also parse ontologies manually, but you will need to index them for search and calculate metrics manually to have that information available.
+
The ncbo_cron project uses a scheduler to run a process that collects new ontology submissions and parses them, adds them to the search index, calculates metrics, and processes them for use with the annotator. You can also parse ontologies manually.
 
 
The default schedule can be disabled by doing the following:
 
* Open /ncbo/sources/bioportal/tags/1030/build.properties
 
* Look for the section that starts with "# Ontology Parse Scheduler properties"
 
* Set <code>ontology.parse.scheduler.enabled</code> to 'false'
 
* From the /ncbo/sources/bioportal/tags/1030/ directory, run 'ant clean deploywar'
 
  
 
== How do I manually parse an ontology? ==
 
== How do I manually parse an ontology? ==
To manually parse an ontology, visit the admin interface at http://example:8080/bioportal_admin and select "Parse Ontologies" from the list at the right. You must enter the version id, or a comma-separated list of ids, and then click "Run". The process will return with errors if it encounters any.
+
To manually parse an ontology, you will need to interact with the code using the console:
 +
<pre>
 +
# from the bash shell:
 +
cd /srv/ncbo/ncbo_cron
 +
bin/ncbo_cron --console
 +
# once in the ruby console:
 +
ontology = LinkedData::Models::Ontology.find("MY_ACRONYM").first
 +
submission = ontology.latest_submission(status: :any)
 +
logger = Logger.new(STDOUT)
 +
submission.process_submission(logger)
 +
# make available in annotator
 +
annotator = Annotator::Models::NcboAnnotator.new
 +
annotator.create_cache_for_submission(logger, submission)
 +
annotator.generate_dictionary_file()
 +
</pre>
  
== How do I manually add an ontology to the search index? ==
+
== How can I process a UMLS ontology? ==
To manually add an ontology to the search index, go to the admin interface and select "Index Ontologies". You can provide a single version id for an ontology or a comma-separated list of ids. You can also choose to index all ontologies currently stored in the Appliance (this may take some time if you have many terms in the system).
+
 
 +
The BioPortal UI currently lacks the ability to select UMLS as a format. To get around this, add the ontology as OWL, then do the following from the command line after logging into the Appliance:
 +
<pre>
 +
# from the bash shell:
 +
cd /srv/ncbo/ncbo_cron
 +
bin/ncbo_cron --console
 +
# once in the ruby console:
 +
ontology = LinkedData::Models::Ontology.find("MY_ACRONYM").first
 +
submission = ontology.latest_submission(status: :any)
 +
submission.bring_remaining
 +
umls = LinkedData::Models::OntologyFormat.find("UMLS").first
 +
submission.hasOntologyLanguage = umls
 +
submission.save
 +
logger = Logger.new(STDOUT)
 +
submission.process_submission(logger)
 +
# make available in annotator
 +
annotator = Annotator::Models::NcboAnnotator.new
 +
annotator.create_cache_for_submission(logger, submission)
 +
annotator.generate_dictionary_file()
 +
</pre>
  
 
== How do I know if an ontology has parsed? ==
 
== How do I know if an ontology has parsed? ==
Because the BioPortal Web UI uses aggressive caching, it may not immediately reflect the status of an ontology once it's been submitted. By default the ontology status on the Web UI is updated once every four or 12 hours (depending where you are viewing the information). You can change these default options by doing the following:
+
The BioPortal Web UI will cache information about ontologies for 60 seconds. After parsing is complete, just refresh the ontology summary page to see the status for the most recent submission listed under the "Submissions" table.
* Open /var/rails/BioPortal/current/app/models/data_access.rb
 
* Change the following in the getOntologyList method:
 
** <code>return self.cache_pull("ont_list", "getOntologyList", nil, MEDIUM_CACHE_EXPIRE_TIME)</code>
 
** <code>return self.cache_pull("ont_list", "getOntologyList", nil, 60*15)</code>
 
* Change the following in the getOntology method:
 
** <code>return self.cache_pull("#{ontology_id}::_details", "getOntology", { :ontology_id => ontology_id })</code>
 
** <code>return self.cache_pull("#{ontology_id}::_details", "getOntology", { :ontology_id => ontology_id }, 60*15)</code>
 
* This will change the Web UI so that it refreshed information about ontologies every 15 minutes
 
* You will need to run /sbin/service httpd restart to have the change take affect
 
* '''NOTE:''' You will need to make this change again if you update the Web UI code. In addition, if you have a large list of ontologies this could slow down the Web UI for users as it will be required to retrieve more information more often.
 
  
 
In addition, you can look at the REST service directly, which will always give you the most updated information. To do this, visit the following URL:
 
In addition, you can look at the REST service directly, which will always give you the most updated information. To do this, visit the following URL:
* http://example:8080/bioportal/ontologies/{ontology_version_id}
+
* http://example:8080/ontologies/{ontology_acronym}/latest_submission?include=all
* You can look for the statusId element to get the status, the codes are as follows:
+
* You can look for the submissionStatus attribute to get the status
** 1 - Waiting
 
** 2 - Parsing
 
** 3 - Ready
 
** 4 - Error
 
** 5 - Not Applicable (for metadata-only ontologies)
 
  
 
== Is there a log file for parsing? ==
 
== Is there a log file for parsing? ==
Parsing progress is logged in the BioPortal Ontology Services log files.
+
Parsing progress is logged in the ontology submission repository folder:
 
+
/srv/ncbo/repository/{ontology acronym}/{submission id}
There is a separate log file for OBO ontologies that can be monitored:  
 
<code>tail -f /var/log/tomcat6/lexgrid/LexBIG_load_log.txt</code>
 
 
 
OWL and Protege-based ontologies are logged into the general log file:
 
<code>tail -f /var/log/tomcat6/bioportal.log</code>
 
 
 
== How can I manually remove the hierarchy information from an ontology like NCI Metathesaurus? ==
 
* Find the database prefix of the ontology by looking up the ontology in the LexEVS registry.xml file.
 
* Connect to the database that stores the LexEVS tables.
 
* Find the set of tables that stores the ontology using the table prefix.
 
* The table called codingSchemeSupportedAttrib needs to be updated to disable the hierarchy. To do so, find the row that has the column supportedAttributeTab that has a value called Hierarchy. Update that column to value HierarchyDisabled so that the loaded hierarchy is ignored.
 
* Restart Tomcat so that the new values are read in and the cache gets cleared.
 
 
 
= Systems Administration =
 
 
 
== How do I increase the Java heap size that Tomcat uses? ==
 
* By default we use a 512MB initial heap with a 2GB maximum. You can change these values by editing this file:
 
** <code>/usr/local/tomcat6/conf/tomcat6.conf</code>
 
* Change the following line to match your requirements. -Xms is initial size, -Xmx is maximum size.
 
** <code>JAVA_OPTS="${DEBUG} -Xms512m -Xmx2G -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"</code>
 
* Restart Tomcat by running the following command:
 
** <code>/sbin/service tomcat6 restart</code>
 
 
 
[[Category:NCBO Virtual Appliance]]
 
  
 
= Web User Interface =
 
= Web User Interface =
Line 118: Line 86:
  
 
== How can I use widgets with my Virtual Appliance? ==
 
== How can I use widgets with my Virtual Appliance? ==
 
=== Working with Javascript-based widgets (Form Autocomplete, Quick Jump/Jump To) ===
 
 
In addition to the [http://www.bioontology.org/wiki/index.php/NCBO_Widgets#How_to_use_NCBO_Widgets existing instructions], you must define an additional Javascript variable in order to have the widgets communicate with your instance of the Virtual Appliance.
 
In addition to the [http://www.bioontology.org/wiki/index.php/NCBO_Widgets#How_to_use_NCBO_Widgets existing instructions], you must define an additional Javascript variable in order to have the widgets communicate with your instance of the Virtual Appliance.
 
<code>
 
<code>
Line 126: Line 92:
 
Replace the '{your_appliance_ip_or_domain_name}' text with the IP address or domain name that's assigned to your Virtual Appliance.
 
Replace the '{your_appliance_ip_or_domain_name}' text with the IP address or domain name that's assigned to your Virtual Appliance.
  
=== Working with Flex/Flash-based widgets (FlexViz, Ontology Tree Widget) ===
+
= Virtualization Environments =
  
When working with Flash widgets, you'll need to modify the [http://www.bioontology.org/wiki/index.php/NCBO_Widgets#How_to_use_NCBO_Widgets existing instructions] to change and add your ip address or domain name. See below and look for '{your_appliance_ip_or_domain_name}' and '{ontology_id}'. The '{ontology_id}' is the numerical id for the ontology you want to use with the widget, sometimes called a virtual id. You can find this via the REST service by looking for the <ontologyId> element, or looking in the Web UI on the Browse page. The links for ontologies contain a number that should be the virtual id.
+
== How can I use the OVF image with my virtualization software? <br/><span style="font-size: smaller;">(VMware, VirtualBox, KVM, Xen, etc)</span> ==
  
This example is for the Tree Browser.
+
=== VMware ===
 +
You can use [http://communities.vmware.com/community/vmtn/vsphere/automationtools/ovf VMware's ovftool] to convert the appliance to work with your VMware product. For example, to convert the appliance for use in VMware Player or Workstation, you would run the command:
  
 
<pre>
 
<pre>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+
ovftool ncbo-appliance.ovf ncbo-appliance.vmx
  id="OntologyTree" width="300" height="100%"
 
  codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
 
  <param name="movie" value="http://{your_appliance_ip_or_domain_name}/flex/OntologyTree.swf" />
 
  <param name="quality" value="high" />
 
  <param name="bgcolor" value="#ffffff" />
 
  <param name="allowScriptAccess" value="always" />
 
  <param name="flashVars" value="ontology=<%= @ontology.ontologyId%>&alerterrors=false&canchangeontology=false&virtual=true&server=http://{your_appliance_ip_or_domain_name}:8080/bioportal" />
 
  <embed src="http://{your_appliance_ip_or_domain_name}/flex/OntologyTree.swf" quality="high" bgcolor="#ffffff"
 
    width="300" height="100%" name="OntologyTree" align="middle"
 
    play="true"
 
    loop="false"
 
    allowScriptAccess="always"
 
    type="application/x-shockwave-flash"
 
    flashVars="ontology={ontology_id}&alerterrors=false&canchangeontology=false&virtual=true&server=http://{your_appliance_ip_or_domain_name}:8080/bioportal"
 
    pluginspage="http://www.adobe.com/go/getflashplayer">
 
  </embed>
 
</object>
 
 
</pre>
 
</pre>
  
In addition, there is a bug in existing versions of the Virtual Appliance that is scheduled to be fixed for the .5 version release in March 2012. Until then, you will need to run the following SQL commands to insert records into the 'bioportal' database:
+
=== VirtualBox ===
 +
VirtualBox supports importing OVF images directly. Simply start your VirtualBox software, then select '''File->Import Appliance''' and select the OVF file included in the NCBO Virtual Appliance download.
 +
 
 +
=== KVM ===
 +
First, convert the OVF to VMX format as mentioned in the VMware section above.
 +
 
 +
Next, ensure that the <code>kvm-qemu-img</code> RPM (or <code>qemu-kvm</code> DEB) is installed. Then, convert the [new] VMDKs (from the VMX conversion step) to raw disk images via the following command:
 +
 
 +
<pre>for disk in `ls -1 *.vmdk`; do diskbase=`basename $disk .vmdk`; qemu-img convert -O raw ${diskbase}.vmdk ${diskbase}.img; done</pre>
 +
 
 +
Create <code>/etc/libvirt/qemu/ncbo-appliance.xml</code> with the following contents:
  
 
<pre>
 
<pre>
INSERT INTO `ncbo_user` (`id`, `username`, `api_key`, `open_id`, `password`, `email`, `firstname`, `lastname`, `phone`, `date_created`)
+
<domain type='kvm'>
VALUES
+
  <name>ncbo-appliance</name>
(39108, 'annotator_flex', X'32626535656235352D383665622D343164362D386238312D653238653532356163633063', NULL, '8qQ8v8cjUZBCs99voQ2+i4mR1VhyFuj70ZCQUV9caXrPQv4K9FuDIfsfrn+ICoXp\r\n', 'example@domain.org', X'', X'', NULL, '2011-06-28 12:09:32'),
+
  <memory>4194304</memory>
(39109, 'search_flex', X'39626437366335382D323230642D346337662D386164302D306135363731313634313939', NULL, '/jj4oWOmI1SXbfczyReBZI9z4DSzRoZP/iX9WJe9lb/7vm1owez/yAh6lIRpNOyj\r\n', 'example@domain.org', X'', X'', NULL, '2011-06-28 12:10:18'),
+
  <vcpu>2</vcpu>
(39110, 'recommender_flex', X'35636564383837322D646636342D343838372D613338652D376338653736333935633830', NULL, 'RBmX8e1X2oUEEcqdp73/X7P7JkrfA7lbK8+svGPEojYmcmxDoHui3gC011Pg1cRF\r\n', 'example@domain.org', X'', X'', NULL, '2011-06-28 12:11:16'),
+
  <os>
(39111, 'flexviz', X'34363832396130352D386331632D343232622D393530642D313836373633616530663763', NULL, 'uivHblEQJII216fGfG0No4RGELzBtY7Bo14IQulDsQOJY4cLUItYuTtU+TkPs1ln\r\n', 'example@domain.org', X'', X'', NULL, '2011-06-28 12:13:18');
+
    <type arch='x86_64' machine='rhel5.4.0'>hvm</type>
 +
    <boot dev='hd'/>
 +
  </os>
 +
  <features>
 +
    <acpi/>
 +
    <apic/>
 +
    <pae/>
 +
  </features>
 +
  <clock offset='utc'>
 +
    <timer name='pit' tickpolicy='delay'/>
 +
  </clock>
 +
  <on_poweroff>destroy</on_poweroff>
 +
  <on_reboot>restart</on_reboot>
 +
  <on_crash>restart</on_crash>
 +
  <devices>
 +
    <emulator>/usr/libexec/qemu-kvm</emulator>
 +
    <disk type='file' device='disk'>
 +
      <driver name='qemu' type='raw'/>
 +
      <source file='/var/lib/libvirt/images/ncbo-appliance/ncbo-appliance-disk1.img'/>
 +
      <target dev='hda' bus='ide'/>
 +
      <address type='drive' controller='0' bus='0' unit='0'/>
 +
    </disk>
 +
    <disk type='file' device='disk'>
 +
      <driver name='qemu' type='raw'/>
 +
      <source file='/var/lib/libvirt/images/ncbo-appliance/ncbo-appliance-disk2.img'/>
 +
      <target dev='hdb' bus='ide'/>
 +
      <address type='drive' controller='0' bus='0' unit='1'/>
 +
    </disk>
 +
    <controller type='ide' index='0'/>
 +
    <interface type='network'>
 +
      <source network='default'/>
 +
      <model type='virtio'/>
 +
    </interface>
 +
    <serial type='pty'>
 +
      <target port='0'/>
 +
    </serial>
 +
    <console type='pty'>
 +
      <target port='0'/>
 +
    </console>
 +
    <input type='mouse' bus='ps2'/>
 +
    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
 +
    <video>
 +
      <model type='cirrus' vram='9216' heads='1'/>
 +
    </video>
 +
  </devices>
 +
</domain>
 
</pre>
 
</pre>
  
= How can I use the OVF image with my virtualization software? <br/><span style="font-size: smaller;">(VMWare, VirtualBox, KVM, Xen, etc)</span> =
+
Finally, make any necessary edits to the above file, and run:
  
== VMWare ==
+
<pre>
You can use [http://communities.vmware.com/community/vmtn/vsphere/automationtools/ovf VMWare's ovftool] to convert the appliance to work with your VMWare product. For example, to convert the appliance for use in VMWare Player or Workstation, you would run the command: <code>ovftool ncbo-appliance.ovf ncbo-appliance.vmx</code>
+
virsh start ncbo-appliance
 +
</pre>
  
== VirtualBox ==
+
=== Xen ===
VirtualBox supports importing OVF images directly. Simply start your VirtualBox software, then select '''File->Import Appliance''' and select the OVF file included in the NCBO Virtual Appliance download.
+
First, convert the VMDKs to raw disk images as mentioned in the KVM section above.
 +
 
 +
Create <code>/etc/xen/ncbo-appliance.cfg</code> with the following contents:
 +
 
 +
<pre>
 +
name = "ncbo-appliance"
 +
memory = 4096
 +
vcpus = 2
 +
builder = "hvm"
 +
kernel = "/usr/lib/xen/boot/hvmloader"
 +
boot = "c"
 +
pae = 1
 +
acpi = 1
 +
apic = 1
 +
localtime = 0
 +
on_poweroff = "destroy"
 +
on_reboot = "destroy"
 +
on_crash = "destroy"
 +
device_model = "/usr/lib64/xen/bin/qemu-dm"
 +
sdl = 0
 +
vnc = 1
 +
vncunused = 1
 +
keymap = "en-us"
 +
disk = [ "file:/var/lib/xen/images/ncbo-appliance/ncbo-appliance-disk1.img,hda,w", "file:/var/lib/xen/images/ncbo-appliance/ncbo-appliance-disk2.img,hdb,w" ]
 +
vif = [ "bridge=xenbr0,script=vif-bridge,vifname=vif41.0" ]
 +
parallel = "none"
 +
serial = "pty"
 +
</pre>
 +
 
 +
Finally, make any necessary edits to the above file, and run:
 +
 
 +
<pre>
 +
xm create ncbo-appliance
 +
</pre>
 +
 
 +
== How can I use the Appliance on Amazon EC2? ==
 +
 
 +
* Login to AWS Console, go to EC2 and select US West (Oregon) region from the top right corner: https://console.aws.amazon.com/ec2/home?region=us-west-2
 +
 
 +
* Click on Launch Instances which will bring up Launch Instance Wizard with multiple tabs.
 +
 
 +
* 1. Choose AMI:
 +
** Select Community AMIs and search of “NCBO Appliance” and choose the latest version
 +
* 2. Choose Instance Type Tab
 +
** Instance Type = General Purpose  m1.xlarge (or any other type with at least 4 vCPUs and ~8 GB of RAM)
 +
* 3. Configure Instance Tab
 +
** Availability Zone = No preference
 +
** Termination Protection = Prevention against accidental termination
 +
** Shutdown Behavior = Stop
 +
* 5. Instance Tags:
 +
** Name = Name this instance something meaningful
 +
* 6. Configure Security Group
 +
** Choose (you may need to create one first) a Security Group that has ports 22, 80, and 8082 open. It is recommended that you only allow the networks you need. We accept no responsibility/liability for machines getting compromised.
 +
Click "Launch"
 +
You will have to create or choose an existing Key Pairs or Create a Key Pair.
 +
 
 +
* Click on Instances (left hand side of the screen):
 +
** Once the instance State has changed from Pending to Running and Status Checks is “2/2 checks passed”, login to the instance via the public hostname provided.
 +
** Now you can SSH into the machine using your key-pair and '''ec2-user''' as the user name:
 +
***  <code>ssh -i yourkey_pair ec2-user@{amazon public domain name}</code>
 +
** The domain name can be retrieved by clicking on the instance and looking at the details that appear at the bottom of the screen. It should look similar to this but with a different set of numbers in the subdomain: ec2-10-0-0-1.us-west-1.compute.amazonaws.com

Revision as of 15:43, 11 March 2014


NCBO VIRTUAL APPLIANCE v2.0 FAQ

This FAQ now covers the NCBO Virtual Appliance v2.0. The FAQ for v1.0 is available in the archive


Ontology Management

How do I add or change categories or groups?

There is currently no UI administrator interface (though this will likely be added in future versions). Categories and groups can be added using a console after logging into the Appliance as the root user.

# from the bash shell:
cd /srv/ncbo/ncbo_cron
bin/ncbo_cron --console
# once in the ruby console:
category = LinkedData::Models::Category.new
category.name = "My Category"
category.acronym = "MY_CAT"
category.save
group = LinkedData::Models::Group.new
group.name = "My Group"
group.acronym = "MY_GRP"
group.save

How can I migrate ontologies from BioPortal or previous NCBO Virtual Appliance versions into a new Appliance?

Programmatic migrations are currently unsupported. Ontologies can be manually downloaded and added using the Web UI.

Ontology Parsing

When are new ontologies parsed?

The ncbo_cron project uses a scheduler to run a process that collects new ontology submissions and parses them, adds them to the search index, calculates metrics, and processes them for use with the annotator. You can also parse ontologies manually.

How do I manually parse an ontology?

To manually parse an ontology, you will need to interact with the code using the console:

# from the bash shell:
cd /srv/ncbo/ncbo_cron
bin/ncbo_cron --console
# once in the ruby console:
ontology = LinkedData::Models::Ontology.find("MY_ACRONYM").first
submission = ontology.latest_submission(status: :any)
logger = Logger.new(STDOUT)
submission.process_submission(logger)
# make available in annotator
annotator = Annotator::Models::NcboAnnotator.new
annotator.create_cache_for_submission(logger, submission)
annotator.generate_dictionary_file()

How can I process a UMLS ontology?

The BioPortal UI currently lacks the ability to select UMLS as a format. To get around this, add the ontology as OWL, then do the following from the command line after logging into the Appliance:

# from the bash shell:
cd /srv/ncbo/ncbo_cron
bin/ncbo_cron --console
# once in the ruby console:
ontology = LinkedData::Models::Ontology.find("MY_ACRONYM").first
submission = ontology.latest_submission(status: :any)
submission.bring_remaining
umls = LinkedData::Models::OntologyFormat.find("UMLS").first
submission.hasOntologyLanguage = umls
submission.save
logger = Logger.new(STDOUT)
submission.process_submission(logger)
# make available in annotator
annotator = Annotator::Models::NcboAnnotator.new
annotator.create_cache_for_submission(logger, submission)
annotator.generate_dictionary_file()

How do I know if an ontology has parsed?

The BioPortal Web UI will cache information about ontologies for 60 seconds. After parsing is complete, just refresh the ontology summary page to see the status for the most recent submission listed under the "Submissions" table.

In addition, you can look at the REST service directly, which will always give you the most updated information. To do this, visit the following URL:

Is there a log file for parsing?

Parsing progress is logged in the ontology submission repository folder: /srv/ncbo/repository/{ontology acronym}/{submission id}

Web User Interface

How can I clear the memcached-based UI cache?

  • If you are logged in as the admin user, simply visit http://example/admin and click the "Flush Memcache" button. There should be a response indicating success or failure.

How can I use widgets with my Virtual Appliance?

In addition to the existing instructions, you must define an additional Javascript variable in order to have the widgets communicate with your instance of the Virtual Appliance.

 var BP_SEARCH_SERVER = "http://{your_appliance_ip_or_domain_name}";

Replace the '{your_appliance_ip_or_domain_name}' text with the IP address or domain name that's assigned to your Virtual Appliance.

Virtualization Environments

How can I use the OVF image with my virtualization software?
(VMware, VirtualBox, KVM, Xen, etc)

VMware

You can use VMware's ovftool to convert the appliance to work with your VMware product. For example, to convert the appliance for use in VMware Player or Workstation, you would run the command:

ovftool ncbo-appliance.ovf ncbo-appliance.vmx

VirtualBox

VirtualBox supports importing OVF images directly. Simply start your VirtualBox software, then select File->Import Appliance and select the OVF file included in the NCBO Virtual Appliance download.

KVM

First, convert the OVF to VMX format as mentioned in the VMware section above.

Next, ensure that the kvm-qemu-img RPM (or qemu-kvm DEB) is installed. Then, convert the [new] VMDKs (from the VMX conversion step) to raw disk images via the following command:

for disk in `ls -1 *.vmdk`; do diskbase=`basename $disk .vmdk`; qemu-img convert -O raw ${diskbase}.vmdk ${diskbase}.img; done

Create /etc/libvirt/qemu/ncbo-appliance.xml with the following contents:

<domain type='kvm'>
  <name>ncbo-appliance</name>
  <memory>4194304</memory>
  <vcpu>2</vcpu>
  <os>
    <type arch='x86_64' machine='rhel5.4.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'>
    <timer name='pit' tickpolicy='delay'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/ncbo-appliance/ncbo-appliance-disk1.img'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' unit='0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/ncbo-appliance/ncbo-appliance-disk2.img'/>
      <target dev='hdb' bus='ide'/>
      <address type='drive' controller='0' bus='0' unit='1'/>
    </disk>
    <controller type='ide' index='0'/>
    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
    </video>
  </devices>
</domain>

Finally, make any necessary edits to the above file, and run:

virsh start ncbo-appliance

Xen

First, convert the VMDKs to raw disk images as mentioned in the KVM section above.

Create /etc/xen/ncbo-appliance.cfg with the following contents:

name = "ncbo-appliance"
memory = 4096
vcpus = 2
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "c"
pae = 1
acpi = 1
apic = 1
localtime = 0
on_poweroff = "destroy"
on_reboot = "destroy"
on_crash = "destroy"
device_model = "/usr/lib64/xen/bin/qemu-dm"
sdl = 0
vnc = 1
vncunused = 1
keymap = "en-us"
disk = [ "file:/var/lib/xen/images/ncbo-appliance/ncbo-appliance-disk1.img,hda,w", "file:/var/lib/xen/images/ncbo-appliance/ncbo-appliance-disk2.img,hdb,w" ]
vif = [ "bridge=xenbr0,script=vif-bridge,vifname=vif41.0" ]
parallel = "none"
serial = "pty"

Finally, make any necessary edits to the above file, and run:

xm create ncbo-appliance

How can I use the Appliance on Amazon EC2?

  • Click on Launch Instances which will bring up Launch Instance Wizard with multiple tabs.
  • 1. Choose AMI:
    • Select Community AMIs and search of “NCBO Appliance” and choose the latest version
  • 2. Choose Instance Type Tab
    • Instance Type = General Purpose m1.xlarge (or any other type with at least 4 vCPUs and ~8 GB of RAM)
  • 3. Configure Instance Tab
    • Availability Zone = No preference
    • Termination Protection = Prevention against accidental termination
    • Shutdown Behavior = Stop
  • 5. Instance Tags:
    • Name = Name this instance something meaningful
  • 6. Configure Security Group
    • Choose (you may need to create one first) a Security Group that has ports 22, 80, and 8082 open. It is recommended that you only allow the networks you need. We accept no responsibility/liability for machines getting compromised.

Click "Launch" You will have to create or choose an existing Key Pairs or Create a Key Pair.

  • Click on Instances (left hand side of the screen):
    • Once the instance State has changed from Pending to Running and Status Checks is “2/2 checks passed”, login to the instance via the public hostname provided.
    • Now you can SSH into the machine using your key-pair and ec2-user as the user name:
      • ssh -i yourkey_pair ec2-user@{amazon public domain name}
    • The domain name can be retrieved by clicking on the instance and looking at the details that appear at the bottom of the screen. It should look similar to this but with a different set of numbers in the subdomain: ec2-10-0-0-1.us-west-1.compute.amazonaws.com