Search · Index


Showing 1 - 10 of 822 Postings (summary)

Install OpenACS with NaviServer from Scratch

Created by Gustaf Neumann, last modified by Gustaf Neumann 15 Nov 2015, at 11:23 AM

This page describes how to install OpenACS with NaviServer on Unix-like systems (e.g. Linux, Mac OS X, Solaris, OmniOS) by compiling all but PostgreSQL from scratch, guided by script that collects the components from various sources, compiles it, etc.

The installation is done in two steps:

  • : Install NaviServer and its components for a PostgreSQL installation from scratch by obtaining the relevant sources and compiling it. The script assumes PostgreSQL to be installed (or obtainable via package managers), but installs all other components by obtaining it from the source repositories and compiling it from scratch (e.g. Tcl, tcllib, tDOM, libthread, nsf/XOTcl 2).
  • : Install OpenACS from CVS/git. This script configures a (pre-installed) PostgreSQL installation for
    OpenACS, adds hstore, installs OpenACS core, basic OpenACS packages, xowiki, xowf and optionally dotlrn from CVS/git and generates a config file and startup files (for Ubuntu and Fedora Core). The script assumes a pre-existing NaviServer installation, installed e.g. via

 These install scripts are frequently updated when now components are released or problems are detected (commit log ).

If you open the links above, use save-as in the browser to save the files. Alternatively, download the files as .zip file or clone the repository via GitHub .

   cd /usr/local/src
   git clone
   cd install-ns

The scripts work under a typical Linux installation (e.g. Ubuntu, Fedora Core) as well as on Mac OS X or on OmniOS. The scripts are tested with PostgreSQL 9.1, 9.2, 9.3, 9.4 on Ubuntu 12.04, 13.04, 14.04, Fedora Core 18 and CentOS 7.

On a a fresh Ubuntu installation, you should be able to download the two scripts from this page and install OpenACS with NaviServer in the following steps:

   sudo bash

   bash build

   bash build

After running both scripts in the default configuration you will see e.g. on Ubuntu 14.04

Congratulations, you have installed OpenACS with NaviServer on your machine.
You might start the server manually with
    sudo /usr/local/ns/bin/nsd -t /usr/local/ns/config-oacs-5-8.tcl -u nsadmin -g nsadmin

or you can manage your installation with upstart (Ubuntu/Debian). In this case, you might use the following commands

    initctl status oacs-5-8
    initctl start oacs-5-8
    initctl stop oacs-5-8

To use OpenACS, point your browser to http://localhost:8000/ The configuration file is /usr/local/ns/config-oacs-5-8.tcl and might be tailored to your needs. The generated startup file is in /etc/init/oacs-5-8.conf. The access.log and error.log of this instance are in /var/www/oacs-5-8/log

On Fedora, the startup commands for systemd are

    systemctl status oacs-5-8
    systemctl start oacs-5-8
    systemctl stop oacs-5-8

The generated startup file for RedHat/Fedora is in /lib/systemd/system/oacs-5-8.service


Created by Dave Bauer, last modified by Gustaf Neumann 26 Oct 2015, at 10:21 AM

Release Status

See openacs-release-status

Development is taking place in the oacs-5.9 branch.

OpenACS Version 5.9 Agenda

  • Slimming pg SQL core:
    • Part 1: improve performance of object deletion
      • remove manual delete operations from acs_object__delete()
    • Part 2: content-repository - manual referential integrity management
      • handle referential integrity via pg's integrity constraints rather by functions cr_revision_del_ri_tr, cr_revision_ins_ri_tr, cr_revision_up_ri_tr, cr_revision_del_rev_ri_tr, and cr_revision_del_rev_ri_tr
      • fix broken/missing upgrade scripts from earlier updates
    • Part 3: content-repository - manual deletions and nulling
      • Removed manual nulling of live_revision and latest_revision
      • Removed manual deletion of old_revision and new_revision in cr_item_publish_audit
      • Removed manual deletion of item_id in cr_item_publish_audit, cr_release_periods, cr_item_template_map, and cr_item_keyword_map
      • Removed manual deletion of direct permissions
      • Added missing index for child_id to cr_child_rels.
    • Part 4: get rid of tree_sortkey in acs-objects
      • Check/fix dependencies in oacs-5-8 packages
      • Get rid of broken/uncalled functions using the column
      • Check/fix dependencies in other packages
      • Remove tree_sortkey and max_child_sortkey
    • Wishlist (unclear, if we are able to do this for OpenACS 5.9):
      • Final cleanup of permissions:
        • Get rid of acs_object_context_index on pg: huge table,
        • expensive maintenance, used only in a few places,
        • used as well by Oracle (effort has to be determined)
      • mark redundant / uncalled sql functions as deprecated
      • simplify core sql functions by using defaults.
      • say farewell to CVS.
  • Web interface:
    • Improve client performance
      • moving core.js from head to body
      • provide kernel parameter to control expiration date for /resources/
    • Protect against more XSS attacks
    • Improved HTML validity (see oacs-5-9-html-validity for the checklist)
    • Add lightweight support for ckeditor4 for templating::richtext widget (configurable via package parameter "RichTextEditor" of acs-templating. ckeditor4 supports mobile devices (such as iPad, ...).
    • New kernel parameter ResourcesExpireInterval to control expiration dates of resources
  • Templating:
    • Improve theme-ability
      • Move more information into theme packages in order to create responsive designs
      • Reduce hard-coding of paths, HTML etc.
    • Dimensional slider reform (ad_dimensional):
      • Remove hard-coded table layout from dimensional slider
      • Add backwards compatible templates
      • Move hard-coded styles into theme styling
      • Remove obsolete comments from ad_dimensional
    • Complete template variable controls (adding noi18n, addressing bug #2692):
      • @foo@: perform html quoting and internationalization
      • @foo;noquote@: perform internationalization
      • @foo;noi18n@: perform html quoting
      • @foo;literal@: perform neither html quoting nor internationalization
    • Improved Russian nationalization
  • Documentation:
    • Use ACS templating for the (static) OpenACS documentation to provide a more consistent layout and user experience.
    • Make pretty-naming of acs-core packages more consistent.
  • Cleanup:
    • Mark unused functions of acs-tcl/tcl/table-display-procs.tcl as deprecated
  • Version numbers:
    * require PG 9.0 (End Of Life of PostgreSQL 8.4 was July 2014)
    * require XOTcl 2.0 (presented at the Tcl conference in 2011).

OpenACS Version 5.8 Agenda

  • PostgreSQL 9.2+:
    • Get rid of nonstandard backslash escapes in function definitions
    • Change quote syntax in sql files (single quotes around the functions) to recommended PostgreSQL quoting using (recommended since pg8.0, jan 2005). li>Drop aliases in favor of named function arguments (recommended since pg8.0)
    • Fix wrong function_args, add missing function_args, align default semantics with the defaults in pg (providing "null" as default means the argument is optional)
    • Make OpenACS loadable without any tweaks in the pg config files
  • Use recursive queries for e.g. permission lookup to avoid performance problems in pg 8.4 and newer)
  • ADP: Use byte-compiled function wherever possible in compiled adp-code, support "@var;literal@" when neither quotes nor localization is needed in compiled adp-code
  • Improve support of NaviServer
  • Switch to Tcl 8.5 (TIP #143)
  • Improve scalability: Reduce mutex-stress on util-memoize cache and for cache maintenance in general
  • Code cleanup:
    • Get rid of calls to deprecated code (e.g. ad_tables, ad_parameter, ... in acs-core and main packages)
    • Improve awareness of usage of deprecated code (complain to error.log)
    • Use Tcl 8.5 idioms
    • cleanup of various http-client approaches and introduce a common implementation util::http::get and util::http::post; get rid of other usages, mark these as deprecated
    • page-contracts: Perform checking of all ids in acs-core and main packages to improve error messages and to improve security
  • OpenACS 5.8.1 should be released with main packages

OpenACS Version 5.7 Agenda

  • Support for object management in core 
  • Postgresql 9.0
  • TinyMCE update (fix for random JS injection issue, affecting Safari)
  • Fix for "remember me" issue
  • WCAG2-AA

OpenACS Version 5.6 Agenda

  • global parameters
  • package "embeds" 
  • fix search by package_id
  • core works on Postgresql 8.4

OpenACS Version 5.5 Agenda

  • DONE: Postgresql 8.3 support: especially regarding tsearch2
  • DONE: acs-authentication:
    • fix upgrade, add conditional logic into site wide tcl library so that you can login to perform the rest of the upgrade
  • DONE: tinymce:
    • upgrade to 3.1.1 + language packs
    • HTML Strict cleanup
    • create appropriate parameters for its config in acs-templating
  • acs-mail-lite:
    • DONE: cleanup duplicated procs (bounce)
    • review the parsing of bouncing messages (case user_id 0)
    • DONE: rollout support
  • Documentation improvements as discussed at the Guatemala conference:
    • Make current source for static files included in the release and provide ease means to achieve this for the release manager
      • DONE (CVS HEAD): Provide in XoWiki an alternative table of contents by nested UL/LI (without JavaScript) for static output
      • DONE (CVS HEAD): Provide in XoWiki a prototype page similar to "book" without edit-buttons etc., using the new table of contents
    • Update where necessary (incomplete list):
      • DONE: Fix the page ordering for the higher chapters (the original document  had no 3rd. level numbering)
      • update pages in /test-doc which are more recent in openacs/xowiki
      • bump version numbers of OpenACS, where appropriate (some places talk about openacs-5-0, others about openacs-5-1, oacs-5-2-3rc1 or 5-3) 
      • some version numbers of the required components are quite a mess. e.g. some parts say that Postgres 7.3 is required,  some examples talks about postgres 7.4.7 and 8.2.4 in the same listing.
      • also the dotlrn version numbers are old dotrln-2.0
      • Tcl version numbers should be 8.4.19
      • The install section for XOTcl is missing in II.3.4
      • remove ChangeLog from documentation
      • find some other prominent place for the ChangeLog
      • Fix indenting in examples  (e.g. in Rocael's robust web    development framework)
      • overthink Win2000 guidelines.  There are the native compiled packages from Maurizio, including everything from postgres, xotcl ....
    • It is desired to find a single person responsible for overworking the documentation, however, funding is unclear.

OpenACS Version 5.4 Agenda

  • DONE: HTML Strict (openacs core)
  • DONE: finish template::head (daveb)
  • DONE: test acs-mail-lite (complex send)
  • DONE: test notifications (complex send)
  • DONE: new XinHA release, get rid of RTE & HTMLarea, test on Safari
  • DONE: Form builder: add the ID attribute  to the form tag
  • DONE: acs-lang - keepLocalTranslationP to be removed
  • DONE search and intermedia-driver: move intermedia specific stuff to its package
  • DONE: acs-mail-lite - patch for mime::qp_encode bug


  • Split Xinha and TinyMCE into seperate packages see:
  • Usability ("my account" page)
  • XHTML ?
  • Testing and documentation for recording automated tests using the firefox plugin and the upload feature for it new in automated testing. Probably needs some polishing and should be talked to with Quest who are getting into this.
  • Parameter Scope Patch 
  • Remove obsolete master template stuff (default and site master template in openacs-4/www, acs-subsite's group-master, and related CSS and images).  Probably in the version which follows 5.5 (probably 5.6).  Also remove the compat master stuff at the same time.

Things to merge into this page

Old 5.0 Roadmap  discussion 

Roadmap discussion 1 

 [Ideas for Boston 2006 Future of OpenACS discussion]

My previous attempt at collaborative roadmap 

A .LRN Roadmap 

Another .LRN Roadmap discussion 


What's on this page?

This page should include work that is planned on and has someone comitted to working on it.

Installing OpenACS

Created by OpenACS community, last modified by Gustaf Neumann 19 Oct 2015, at 08:23 PM

There are many ways to get OpenACS working for you quickly and/or easily. See Try OpenACS for demonstrations and hosting solutions.

Packaged installations

For platforms like Linux/Ubuntu, Linux/Debian, FreeBSD or Windows, one can use the packaged solutions:

Generic installation scripts

For many Linux platforms (e.g. Ubuntu, Debian, Fedora), one can use the generic installer that compiles all base components (using Naviserver) and creates users/groups as needed; which works with Postgres 9.2 or newer. These install scripts can be as well used on Mac OS X, when MacPorts  are installed. These installer scripts are regularly updated.

The following alternative script installs aolserver and the contained modules from sources. It assumes, that PostgreSQL is already installed:

  1. Install AOLserver: 
  2. Install OpenACS: en:openacs-subsystem-install

Manually installing OpenACS:

These are the steps involved in setting up OpenACS. Before beginning, read about ways of getting help (en:docs-admin-help) during installation. Also, read the documentation completely before beginning, to minimize the chance of any surprises during installation.

  1. Prerequisites to installing OpenACS
  2. OpenACS reference platform
  3. Install a *nix based operating system
  4. Get the code
  5. Install Oracle
  6. Install PostgreSQL
  7. Install Tcl
  8. Install AOLserver
  9. Install OpenACS distribution

These pages contain notes where installing OpenACS on a specific OS different from the *nix standard installation instructions (above).  These notes also refer to helper scripts and automated installers that can really simplify installation:


Created by Emmanuelle Raffenne, last modified by Gustaf Neumann 19 Oct 2015, at 08:48 AM

.LRN Project

.LRN Home Page - The Official .LRN Home Page

.LRN bug tracker - Use the Open ACS bug tracker to report and check status on bugs for all sections of .LRN. If you need to report a bug and you are not sure what code is causing it, use the "2-dotLRN General" category. Otherwise select the package. Note that all the dotLRN packages are at the bottom of the list.

Get Involved! - how to participate in the community

.LRN Versions

Last stable release: 2.5.0

Next release: see .LRN 2.5 Release Management 

Download from .LRN download page

.LRN Installation

To install .LRN follow the instructions at .LRN_Installation

.LRN Governance

This .LRN Governance page is a proposal based on a meeting by Carl Blesius, Carlos Kloos, Roceal Hernandez and Caroline Meeks.  

Useful Resources

Site Specific Documentation

Official test servers

Page Information

  • Last modified: 2015-10-19 08:48:56.668188+02

OpenACS Home

Created by Dave Bauer, last modified by Gustaf Neumann 13 Oct 2015, at 01:18 PM

OpenACS (Open Architecture Community System) is a toolkit for building scalable, community-oriented web applications. OpenACS is the foundation for many products and websites, including the .LRN e-learning platform. OpenACS is open source and is available under the GNU General Public License.

Why use OpenACS?

OpenACS is unique in the breadth of services it offers developers and administrators. Millions of dollars and decades of developer time have gone into the maturation of OpenACS.

You can read the technical reasons to use OpenACS.

How do I install OpenACS?

The installation documentation contains all the necessary steps to install OpenACS on a large variety of systems. There is also a Windows Installer (detailed information) and a Debian Package. Additionally you can use our FreeBSD Port or follow the short instruction for Darwinport. Last but not least you can try out OpenACS using one of our Knoppix CDs that have been built for .LRN.

A full list of ports for OpenACS can be found on our OpenACS Installers section. Also Check the installation requirements before installing. The current stable release is OpenACS 5.2.3 (cvs aliases).

How do I work with OpenACS?

You can start by reading the documentation, specifically tips on customizing, the developer's tutorial, and
the FAQs. There is a OpenACS Wiki and a list of packages that extend OpenACS.

For professional help, contact one of the OpenACS companies.

OpenACS Community

One of the strengths of the OpenACS project is the community surrounding it:


NewsSubscribe via RSS

OpenACS 5.8.1 final released

We are proud to announce the release of OpenACS 5.8.1.
The new release differs from OpenACS 5.8.1 in the following points:
  • Compatibility of OpenACS core and 78 application packages with PostgreSQL 9.1+:
    The new version installs without any need for special parameter settings in all recent PostgreSQL versions.
  • Major cleanup: removal of calls to deprecated code, using recent Tcl byte compiled instructions rather than legacy constructs, following more closer to Postgres recommendations.
  • Functional improvements in core and application packages
  • Various performance and scalability improvements
  • Various bug fixes
  • The packages can be installed online from the OpenACS repository. The list of network-installable packages contains also DotLRN (for the full list of packages, see the full announcement).
  • Altogether, OpenACS 5.8.1 differs from OpenACS 5.7.1 in about 100,000 modifications (6145 commits) contributed by 5 committers.
Many thanks to all who helped in this effort via direct contributions, bug-reports or testing!

Release Announcement, ChangeLog, Download

Published on Oct 25, 2014

Recent Posts

OpenACS Development




Monitoring Naviserver

Created by Gustaf Neumann, last modified by Gustaf Neumann 10 Oct 2015, at 02:42 PM

Munin  is a popular web-based tool to monitor several website. Munin provides a simple plugin mechanism for adding new kinds of sources, such as e.g. the NaviServer plugins  for monitoring NaviServer.

The monitoring information collected by munin can be placed at different web servers, one finds usually information about apache and friends. In general older versions of munin (before 2.0) supported only static pages, whereas newer version support as well dynamic information (with additional features such as zooming).

For static munin pages, it is the easiest to place in OpenACS sites the output directory either under the main www directory, or under the subsite admin directory (packages/acs-subsite/www/admin/).

For the cgi-setup, one has to make sure to load nscgi in the statup files of NaviServer and to point the urls to the appropriate directories. The sample setup below uses the directories of munin as provided by a standard munin setup on an Ubuntu system.

ns_section ns/server/${server}/modules
   ns_param   nscgi

ns_section "ns/server/${server}/module/nscgi"
   ns_param map  "GET /munin-cgi/munin-cgi-graph /var/www/cgi-bin/munin-cgi-graph"
   ns_param map  "GET /munin-cgi/static /etc/munin/static/"
   ns_param map  "GET /munin-cgi /var/www/cgi-bin/munin-cgi-html"


Created by gustaf neumann, last modified by Gustaf Neumann 05 Oct 2015, at 09:03 PM

Welcome to the OpenACS Wiki!

This is the OpenACS Wiki system, built with the xowiki package. This wiki contains user documentation, how-tos, and tips and tricks related to OpenACS. It also serves as a collaboration area for OpenACS contributors.

Quick Links:

OpenACS Handbook: openacs-handbook
OpenACS Packages: packages
OpenACS Installation: openacs-system-install

Recent Wiki Page Edits:

Subsystems Documentation

Install OpenACS with NaviServer from Scratch (2 weeks ago)
Installing OpenACS (1 month ago)
Monitoring Naviserver (1 month ago)
Vi as an OpenACS IDE (1 month ago)
Tcl Thread Library (1 month ago)
Postgres 8.1.x and later versions (1 month ago)
XOTcl (1 month ago)
OpenACS/.LRN for Ubuntu (1 month ago)
OpenACS/.LRN for Debian (1 month ago)
Emacs as an OpenACS IDE (1 month ago)
OpenACS Debian Install quicksheet (1 month ago)
Next Steps After Installation, Debian Specific (1 month ago)
Nagios Monitoring (1 month ago)
Installing OpenACS on RPM-based systems (1 month ago)
Installing OpenACS on Mac OS X (1 month ago)
Installing OpenACS on FreeBSD with ports (1 month ago)
Install OpenACS on debian unstable / Ubuntu 7.10 (1 month ago)
Install AOLserver 4.5 (1 month ago)
Get the Code! (1 month ago)
Upgrade to OpenACS 5.9 (2 months ago)
Upgrade to OpenACS 5.8 (2 months ago)
Tcl (7 months ago)

OpenACS Projects

Core Documentation

Installing OpenACS (1 month ago)


.LRN (1 month ago)
.LRN Installation (7 months ago)
Plataforma Elearning (7 months ago)


OpenACS Home (1 month ago)
Wiki (1 month ago)

Package Documentation

Aliases at CVS (1 month ago)

Tutorials for Programmers

Coding Standards

Vi as an OpenACS IDE (1 month ago)
Emacs as an OpenACS IDE (1 month ago)
ADP Files (4 months ago)


Tutorials for Administrators

F. A. Q.

Documentation Non-Core Packages

File Storage Portlet (1 month ago)

Non-Core Packages

News (1 month ago)


Try Openacs (7 months ago)

Aliases at CVS

Created by Rocael Hernández Rizzardini, last modified by Monika Andergassen 05 Oct 2015, at 04:37 PM

Useful aliases for

  • acs-core *
  • dotlrn-all *
  • dotlrn-extras *
  • contrib
  • project-manager-all
  • xotcl-all
  • dotngo
  • dotwrk

 * These aliases are controlled by OCT and .LRN honchos groups, the packages that belong to these aliases are the ones that are maintained by both groups. They are not to be changed unless approved by OCT and / or .LRN technical comittee.

Below the packages details for each alias:

# OpenACS Core

acs-core -a openacs-4/packages/acs-admin

# .LRN aliases

dotlrn-all -a acs-datetime acs-events
attachments bulk-mail calendar faq file-storage
forums general-comments news lars-blogger
weblogger-portlet rss-support trackback oacs-dav
xml-rpc categories dotlrn dotlrn-syllabus new-portal
profile-provider user-profile bm-portlet dotlrn-bm
calendar-portlet dotlrn-calendar dotlrn-portlet
dotlrn-dotlrn faq-portlet dotlrn-faq forums-portlet
dotlrn-forums fs-portlet dotlrn-fs news-portlet
dotlrn-news static-portlet dotlrn-static
dotlrn-homework dotlrn-weblogger evaluation
evaluation-portlet dotlrn-evaluation assessment
assessment-portlet dotlrn-assessment theme-selva
theme-zen dotlrn-random-photo random-photo-portlet

dotlrn-extras -a lors lorsm lorsm-portlet dotlrn-lorsm
photo-album photo-album-portlet dotlrn-photo-album
survey-portlet dotlrn-survey survey chat
dotlrn-chat chat-portlet xotcl-core imsld
imsld-portlet dotlrn-imsld

# Project Manager aliases

project-manager-all -a calendar acs-events acs-datetime
acs-mail-lite categories logger
project-manager general-comments

# xoTCL Stuff + required

xotcl-all -a xotcl-core xotcl-request-monitor xowiki categories
acs-events acs-datetime file-storage oacs-dav
rss-support general-comments

Webinar - Part 1 - Basics

Created by Marcin Kuczkowski, last modified by Monika Andergassen 05 Oct 2015, at 04:36 PM

OpenACS Basics - Part 1

On 2006-10-15 Tracy Adams gave a webinar for developers on OpenACS basics. Here are notes, that might be of use for people who are starting to learn the toolkit. For example for easy copy-n-paste during learning sessions.

We assume the reader has a working instance of OpenACS at hand. If not, there are other sections of xowiki, that cover the installation and configuration of OACS.

Configuration for the turorial 

The default config puts the files of the toolkit to:


In this case, the dir of our interest for now, will be:


 We will edit all our tutorial files in that directory.

Hello, world! 

 OACS uses combination of TCL and ADP pages for clear separation of logic and presentation. TCL pages are just a TCL scripts and ADP are HTML pages with some extra tags. However the early versions of the toolkit rendered pages within TCL. We will use some of the earlier features of the toolkit.

Open a file "helo-1.tcl" in the path:


and put there:

# helo-1.tcl # return standard HTTP headers ReturnHeaders ns_write "hello, world!"

 now, open Your FireFox and go to:


or maybe with the port number: 


instead of "yourhost" put the name or IP of the host of the edited instance of OACS. It also refers to all examples which follow.

Note the lack of .tcl extension at url. OACS has a Request Processor, that figures out the right extension and fetches the file.

ReturnHeaders - returns HTTP headers to the browser ns_write - just writes string to the browser

The docs for the entire system can be found at:


Note also very useful API browser and search boxes at:


( maybe the URL will need also the port number, depending on Your config, for example:



Set a value

 To use a variable just put a value in it:

# helo-2.tcl
# first, set the value for a
set a 10

# then use it
ns_write "value of a is $a"

The value of the var can also be a string:

# helo-3.tcl
# first, set the value for a
set name "John"

# then use it
ns_write "My name is $name"

To get the value of the var:

# helo-4.tcl ReturnHeaders set a 10 # let's use the value of a for new var: set b $a ns_write "<br/> value of b is $b" # we can also do this like that: set c [set b] ns_write "<br/> value of c is $c"

The form [set varname] form of getting the value of the var seems at first a bit too long, but it comes in handy when doing some metadata manipulations.

Call a func

To evaluate the function ( or call a procedure ) use [ ] as follows:

# helo-4b.tcl ReturnHeaders set a 10 # let's use the value of a for new var: # expr is a func that returns the result of the math expression given # as the argument. using square braces we call this func set b [ expr $a + 5 ] ns_write "<br/> value of b is $b"

 Lists are simple

To create a list:

# helo-5.tcl
set mylist [ list "red" "green" "blue" ] 
ns_write "<p> mylist is: $mylist"

( TODO: more on the lists - creation, adding, deleting, finding, etc...)

More complex structures: ns_set  

See the docs on ns_set:

# helo-6.tcl ReturnHeaders

# create a new set with a name "the_name_of_the_set": set vars_by_names [ ns_set create the_name_of_the_set ] # the name of the set is different that the name of the # variable, that contains that set # put some variables into the set: ns_set put $vars_by_names red   $red ns_set put $vars_by_names green $green ns_set put $vars_by_names blue  $blue # how many things do we have in the bag? set size [ ns_set size $vars_by_names ] ns_write "size of the set:  $size " # let's show them: ns_write "<br>red:   [ ns_set get $vars_by_names red   ]" ns_write "<br>green: [ ns_set get $vars_by_names green ]" ns_write "<br>blue:  [ ns_set get $vars_by_names blue  ]" # the same, but better: ns_write "<hr/>" set size [ ns_set size $vars_by_names ]

#     counter     condition      change the counter for { set i 0 } { $i < $size } { incr i } {     set key   [ns_set key   $vars_by_names $i]     set value [ns_set value $vars_by_names $i]     ns_write "<br/> $key: $value " }

Parameters for the page

It is very simple to control the way the parameters from query string go to our page:

ad_page_contract {
    demonstrates using of ad_page_contract
} {

ns_write "id is: $id"

1. try to reach the page http://yourhost/helo-7 without the query string     the page should display the message about input problems

2. try the same with the url: http://yourhost/helo-7?id=123    the page should write the message: "id is 123"

3. try the same with the url: http://yourhost/helo-7?id=asdf    the page should display the message about id not being the integer

The parameter can be optional:

#helo-8.tcl ad_page_contract {     demonstrates using of ad_page_contract } {     id:integer,optional }

set id "<b>not necessary but optional</b>" ReturnHeaders ns_write "id is: $id"

Access control 

Using ad_conn, we can discover many useful info: 

# helo-9.tcl

# check if the user is logged in, redirect if not ad_maybe_redirect_for_registration ReturnHeaders # id of the user set user_id [ad_conn user_id] ns_write "user_id: $user_id" # peer's IP set user_ip [ad_conn peeraddr] ns_write "<p> user's IP: $user_ip"

Logic and Presentation

Now let's get to TCL + ADP stuff which allows to separate the work of the designer from the work of the developer.

Most of the pages in OACS consist of at least TCL and ADP componetns. Here is how:

In most cases TCL and ADP pages are named the same, exept for the extension. It is possible to explicitly call the presentation page from the script. See the docs for ad_return_template.

In the following example we will use helo-10.tcl and helo-10.adp.

in TCL we do some data manipulation

# helo-10.tcl ad_page_contract {     demonstrates TCL and ADP combination     and multirow } {     id:integer,optional } -properties {     a:onevalue     alist:multirow }

set a 10 # create the multirow multirow create alist no name      color # add rows multirow append alist 1  Adam      red multirow append alist 2  Ben       blue multirow append alist 3  Catherine green multirow append alist 4  Danae     black

then we present it in ADP. Put the script below into helo-10.adp: ( note: remove the space between @ and the name of the variable below; I do not know how to escape the @ )

<master> <p>     the value of a is @ a@ </p> <blockquote>     <multiple name="alist">         <li> @ - @ ( color: @ alist.color@ )

</li>     </multiple> </blockquote>

 now open the page in browser:


That's all.

The webinar took place on sunday 2006-10-15 at 2:30 P.M. Eastern time.

Many thanks to Tracy Adams, who was presenting the material.  

( corrections welcome, especially of my english )

OpenACS Packaging for Debian and Ubuntu

Created by Dirk Gomez, last modified by Monika Andergassen 05 Oct 2015, at 04:24 PM


Get all required software to run OpenACS into the next release of Ubuntu Server and Debian 


  • Debian: Dates are not published. Release cycle ~2 years. The required packages mostly exist already in unstable
  • Ubuntu: Next Debian Import Freeze for the Hardy Heron (Ubuntu 8.04) release is December 13th 2007 at which point new versions of packages will be automatically imported from Debian unstable. After this date, packages will only be imported from Debian in this way by explicit request from a developer.

Prior Work 

As far as we know to this point, there are several bodies of work, including Dirk Gomez's, Jim Lynch's, and some others. While our goal is to combine, for now I'll just put a list and as we begin to work together, we'll combine how we decide to. 

  • work of Dirk Gomez
    • There's a working shell script to package OpenACS or .LRN. It's available here: This package is version-independent and should work for any new release of OpenACS or .LRN. Open issues: no Oracle package (unlikely anyway), upgrading of local installs
  • work of Jim Lynch
    • A pair of scripts and some other stuff available as an arch repository (see applicable documentation on gnu arch and below for specifics on this project). Essentially, the plan is to package by taking everything in an openacs tarball except the packages/ dir, put that into a package called openacs-base, put each openacs package into its own package whose name is specified in the .info file and make a metapackage called openacs-core which installs all of the above.
    • Overall, I want to be able to:
      • feed an openacs tarball to one of these scripts and have it then generate a pile of debian packages which represent the entire tarball, and
      • be able to package any openacs package that wouldn't otherwise come in (say) an openacs core tarball.
    • Upon installation, there will be a script which builds a service by copying all of core into a dir specified in part by the user and in part based on the service name. In this process, the config file and startup scripts are established as well as the daemontools "run" script. A database for the service is created, and the service is started. From there, the new site admin will visit the site with the browser, fill out the form and hit "install data model" as is normal, and you end up with a running service after aolserver is hammered.
    • All non-core packages can be built into debian packages as well, identically to the packaging of core packages.
    • To get: (HI! Can someone besides me (jiml at cvs.openacs) see if this works?)
      • the archive's physical location is{archives}/

        the archive name (valid once you register the archive) is

        and the category, branch and version is specified as

        so you would feed the physical location to "tla register-archive", and then you can "tla get".
  • other work: [Debian%2fUbuntu_installer_developing] and [Debian%2fUbuntu_installation]
  • combination (eventual goal hopefully)

List of Packages

The following table list the packages, and version, needed to install OpenACS 5.3/5.4 or .LRN 2.3/2.4

 Package Version in debian/etch  Version in debian/sid (unstable) Recommended Version 
 4.0.10-7 4.5.0-14 -- 
 4.0-3 4.0-4+b1  --
 0.1-1 0.1-1.0.1  --
1.5-1.0.1 NONE don't use nsxml
3.0beta22-3+b1 --
1.5-1.0.1 --
4.5.0-14 --
N.A. 0.8.2 ??
1.8.27-2+b1 --
1.10-dfsg-2 1.10
0.76-9.2 [contrib] --
postgresql-8.1 (8.1.10-1) AND postgresql (8.2.5-4) I think Ubuntu has 8.2 now

postgresql-client-8.1 (8.1.10-1) AND postgresql-client (8.2.5-4)
postgresql-contrib-8.1 (8.1.10-1) AND postgresql-contrib (8.2.5-4) --
1.6.1 1.6.1
20030827-2 2.6.5 2.6.5

Verifying installability on Debian 4rc3 sid/unstable

Basic installation steps for oacs-5-4 based on Debian 4rc3 unstable/sid:
  1. Existing binary dependencies in Debian 4rc3 unstable/sid repository (Feb 26, 2008)

    ~$ aptitude install tcllib postgresql-8.2 aolserver4 aolserver4-nscache aolserver4-nssha1 aolserver4-nspostgres tclthread tcllib

  2. Missing binary dependencies in Debian 4rc3 unstable/sid repository (Feb 26, 2008: tdom 0.8.x, xotcl):

    a) tdom

    # build dependencies: tdom
    aptitude install tcl-dev aolserver4-dev
    # fetch tdom 0.8.3
    cd /tmp
    cvs -z3 co tdom
    cd tdom/unix
    # build tdom 0.8.3
    ../configure --enable-threads --disable-tdomalloc --prefix=/usr/lib/aolserver4 --exec-prefix=/usr/lib/aolserver4 --with-aolserver=/usr/include/aolserver4 --with-tcl=/usr/lib
    make install
    b) xotcl (based on forthcoming Debian distribution )

    # fetch temporary i386 builds from
    # package install
    dpkg -i xotcl_1.6.0-1_i386.deb
    dpkg -i aolserver4-xotcl_1.6.0-1_i386.deb
  3. OpenACS as such ...

useradd oacs-5-4 mkdir /home/oacs-5-4 chown -R oacs-5-4.www-data /home/oacs-5-4 usermod -g web oacs-5-4 usermod -d /home/oacs-5-4 oacs-5-4

cd /home/oacs-5-4 cvs -d co -r oacs-5-4 openacs-4 mv openacs4/* . su - postgres createuser -U postgres -s oacs-5-4 exit su - oacs-5-4 createdb -E UNICODE -U oacs-5-4 oacs-5-4

4. Set PostgreSQL backward compatibility flags (in postgresql.conf)

5. Whatever remains to be done (aolserver instance, edit config.tcl, ...)

Findings/ Issues related to dependency ensemble

  • Need for Debian OpenACS policy document?
    • config.tcl prototypes for debian/ubuntu (debian defaults might not be adequate, address and hostname settings etc.)
    • environment spec (user, group names, ...)
    • Distribution support roadmap
  • PostgreSQL version support / version parallelism in Debian 4rc3 sid/unstable and Ubuntu 8.04+. To some extend, there is flexibility with respect to the OpenACS compatibility roadmap (whatever it looks like in the near future). Both Debian sid/unstable and, therefore, Ubuntu preserve postgresql-8.x versions in parallel (including 8.1, 8.2, and more recently 8.3). Two issues remain:
    1. Debian sid/unstable sets older PostgreSQL 8.x versions (for now < 8.3) to deprecated and issues an upgrade notification upon fetching and installing. Ubuntu 8.04+ is more silent in this respect.
    2. PostgreSQL Compatibility flags: In either case, OpenACS package will have to change the backward-compatibility settings of the Debian PostgreSQL installation on the target system.
  • AOLServer deb installation (aolserver4 in Debian sid/unstable + Ubuntu 7.10 Gutsy): There is a permission issue in the post-installation routine of the aolserver4 package:

    ... Setting up aolserver4 (4.5.0-10ubuntu2) ... * Starting web server aolserver4 [21/Feb/2008:20:31:00][5197.3083830960][-main-] Notice: prebind: bound:    ...done. [21/Feb/2008:20:31:00][5198.3083830960][-main-] Error: log: failed to re-open log file '/var/log/aolserver4/aolserver4.log': 'Permission denied' [21/Feb/2008:20:31:00][5198.3083830960][-main-] Fatal: log: failed to open server log '/var/log/aolserver4/aolserver4.log': 'Permission denied' ...

    This only shows in post-installation phase, manual start|stop|restart work fine ... TODO: Verify again and report to package maintainer
  • aolserver4-nspostgres package: The issue with ns*.so and libns*.so files specific to Aolserver 4.5 has been resolved in the aolserver4-* family of packages:
    • In Debian sid/unstable: since patch version 4.5-1 on Jan 6, 2008 
    • In Ubuntu 8.04 Hardy before the Feature Freeze, on December 12, 2007 
    • Post 8.04 will import fixed version from Debian unstable (TODO: Verify with aolserver4-nspostgres maintainer)
    • Issue of backport to Gutsy (depending on Distribution support plan)

Resurrecting tDOM Debian Package

Access to Debian source package (via svn/svn-buildpackage)

  • SVN Browser at Debian Tcl/Tk Repository 
  • Steps to get your local working copy and build it using svn-buildpackage:

    # 1. svn checkout to <current_dir>/tdom svn co svn:// # 2. create a dir for the original tarballs mkdir tarballs (<current_dir>/tarballs) cd tarballs # grab the orig tarball from the link:


    mv tdom_0.8.3.orig.tar.gz?m=download tdom_0.8.3.orig.tar.gz # 3. make sure you have svn-buildpackage and pbuilder installed and set-up # 4. build binaries from source package on trunk cd ../tdom/trunk

    # When building the package, you have to use --svn-ignore when you have local changes that haven't been committed; otherwise you will get an error.

    svn-buildpackage --svn-builder="pdebuild --buildresult `pwd`/../build-area" --svn-override=origDir=../../tarballs --svn-ignore

    # voilà

    # When you're ready to see lintian warning/errors, add --svn-lintian to the build package command:

    svn-buildpackage --svn-builder="pdebuild --buildresult `pwd`/../build-area" --svn-override=origDir=../../tarballs --svn-ignore --svn-lintian

    # For linda warnings/erros, add --svn-linda to the build package command

    svn-buildpackage --svn-builder="pdebuild --buildresult `pwd`/../build-area" --svn-override=origDir=../../tarballs --svn-ignore --svn-linda

  • References on svn-buildpackage

  • Auxiliary stuff

    The orig file 

Issues of legacy source package

  • [Fixed] [carl] lintian warnings: "tdom: changelog should mention nmu"
    W: tdom source: changelog-should-mention-nmu
    W: tdom source: source-nmu-has-incorrect-version-number 0.8.3-1
    The maintainer should be Avni Khatri and Carl Blesius <>. Modify debian/changelog to reflect this. This has been fixed temporarily, but since a few us of will be committing, we will have to review the uploader/maintainer names later.
  • [Fixed] [avni] lintian warnings: "tdom: bad distribution in changes file"
    E: tdom_0.8.3-1_source.changes: bad-distribution-in-changes-file UNRELEASED
    modify debian/changelog: change UNRELEASED to unstable on line 1
  • [Fixed (local issue)][avni] lintian warnings: "tdom: directory pwd/../build-area does not exist"
    W: Build-result Directory pwd/../build-area does not exist
    Fix: To avoid using the --buildresult flag, you might put the following
    line into your ~/.pbuilderrc:


    (make sure you replace the "..." by your directory walk to the actual
    build-area dir)

  • [Fixed by geoxito] [avni] lintian warnings: "tdom: package-contains-empty-directory *"
    W: tdom: package-contains-empty-directory usr/bin/
    W: tdom: package-contains-empty-directory usr/sbin/
    the answer/ solution is simple. you have, simplisticly speaking, two ways of creating the "virtual" directory structures. By virtual, I refer to the the paths created under debian/tdom which then go into the binary (*.deb) packages. Either do it manually in the debian/rules file or use template files under debian. look at debian/dirs ... it contains two entries: usr/bin, usr/sbin ... voilà ... these are default settings, created the first time the original author debianized the package. but tdom is a so-called "internal library" package in debian jargon, there will never be anything in bin or sbin. so, simply remove the file or empty it!!!!
  • [Fixed] Which version to package: 0.8.2 / 0.8.3? it is going to be CVS Head/ 0.8.3
  • [Fixed] [geoxito] Installation paths not compliant with Debian Tcl/Tk policy
    and make sure that you change debian/rules etc. accordingly.
    Most importantly, tcl package reside under /usr/lib/tcltk and not /usr/lib/ directly.
  • [Fixed] [mr_calvin] Dedicated tdom-dev binary package. There needs to be a dedicated development binary package.
    1. Add tdom-dev entry in debian/control
    2. debian/rules needs to copy following files into tdom-dev paths:
    3. Btw. change the include path to /usr/include/tdom/*
      and subsequently change the path settings in through search/replace operations in debian/rules
      (see my xotcl examples in watch out for perl commands in there ...
  • [Fixed] [avni] Further lintian clean-up:

    > W: tdom: manpage-has-errors-from-man usr/share/man/man3/dom.3.gz  invalid option -wmac
    > W: tdom: manpage-has-errors-from-man usr/share/man/man3/domDoc.3.gz  invalid option -wmac
    > W: tdom: manpage-has-errors-from-man usr/share/man/man3/domNode.3.gz  invalid option -wmac
    > W: tdom: manpage-has-errors-from-man usr/share/man/man3/expat.3.gz  invalid option -wmac
    > W: tdom: manpage-has-errors-from-man usr/share/man/man3/expatapi.3.gz  invalid option -wmac
    > W: tdom: manpage-has-errors-from-man usr/share/man/man3/tdomcmd.3.gz  invalid option -wmac
    > W: tdom: manpage-has-errors-from-man usr/share/man/man3/tnc.3.gz  invalid option -wmac

    Fix: seems to be fixed now.
  • [Fixed] [mr_calvin] Expat integration: Using internal (expat 2.0.1 or 1.95) or external (1.95) libexpat (as provided by Debian); comment by Debian Tcl/Tk maintainers:
    "As far as I understand, the current version uses internal expat. I
    think it's unacceptable. We should use libexpat from Debian. An
    example of patches which allow to use system-wide expat could be found
    at svn://"
  • [Fixed] [geoxito] Create tdom-doc package if possible. Fix: Not really needed, because there is no other tdom documentation apart the manpages.

Installing packages

 These are instructions for installing the alpha dotlrn and openacs packages on debian (and ubuntu).

  1. Build and install tdom packages (see above, on "Resurrecting tdom").
  2. Set up a postgresql 8.2 server, and allow access for postgresql administrator user and openacs/dotlrn user from the machine where you are installing dotlrn/openacs (no need to create the dotlrn/openacs user and database).
  3. Modify your /etc/apt/sources.list file:

    # debian sid deb sid main # Ubuntu Hardy deb hardy main

  4. Update the package list and install:

    # apt-get update - dotLRN # apt-get install dotlrn

    - OpenACS # apt-get install openacs

 After that, just follow the instructions on the install ant have fun!

Next Page
Previous Month November 2015
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
(1) 15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5

Popular tags

ad_form , ADP , ajax , aolserver , asynchronous , bgdelivery , bugtracker , CentOS , COMET , cvs , debian , emacs , fedora , FreeBSD , hstore , includelets , install , installation , installers , install-ns , javascript , libthread , linux , monitoring , munin , NaviServer , nginx , nx , oacs-5-8 , OmniOS
No registered users in community xowiki
in last 30 minutes