View · Search · Index


Showing 1 - 10 of 666 Postings (summary)

Installing OpenACS on Windows

Created by Maurizio Martignano, last modified by Maurizio Martignano 08 Aug 2019, at 11:04 AM

Windows-OpenACS (vers. 4.4.8 - August 2019) is a  Windows 64 port of OpenACS 5.9.1 and the latest snapshot of NaviServer and is available at Spazio IT .

This port installs and runs on the following systems:

  • Windows 10,
  • Windows Server 2012 R2,
  • Windows Server 2016 and
  • Windows Server 2019.


Installing OpenACS on Arch Linux

Created by Markus Moser, last modified by Markus Moser 29 Jul 2019, at 06:28 PM


A package for OpenACS exists in the Arch User Repository:

Several AUR helper applications exist for automating compiling and installing AUR packages. In case you are not familiar with installing AUR packages, read the documentation on the Arch Linux Wiki:


Let's start with installing postgres. Postgres is automatically pulled in as a dependency of openacs, but you should verify before installing openacs that everything is working. In case anything goes wrong with your postgres installation, OpenACS will run into errors when trying to setup the database after installation.

➤  sudo pacman -S postgresql

Let's start the service and check if it runs correctly.

➤  sudo systemctl start postgresql      
➤  sudo systemctl status postgresql                                                                                                                               
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
   Active: active (running) since ....

A fresh installation of postgres might require to run initdb first:

➤ sudo -u postgres -i
[postgres]➤ initdb --locale en_US.UTF-8 -E UTF8 -D '/var/lib/postgres/data'

Now let's install OpenACS.

Needless to say, you can replace yaourt (which is deprecated) in the following command with your preferred AUR helper application.

➤  yaourt -S openacs

In case you are wondering, this will also take care of dependencies.

After the installation we can start it conveniently with systemd:

➤  sudo systemctl start openacs

➤  sudo systemctl status openacs

Before you start the OpenACS (5.9.1 release) bootstrap installer for the first time on a system running Postgres 11, make sure the following change from the cvs is applied:

Have fun with OpenACS!


Created by Gustaf Neumann, last modified by Gustaf Neumann 27 Jul 2019, at 02:38 PM

    Type Name Last Modified By User
    Kibana-Chartde:openacs-status-codes2019-08-21 19:07Gustaf Neumann
    Kibana-Chartde:timeseries-bots-nr-requests2019-08-21 19:06Gustaf Neumann
    Wikide:3charts2019-08-21 17:44gustaf neumann
    Kibana-Chartde:timeseries-bots-runtime2019-08-21 17:44gustaf neumann
    Kibana-Chartde:unique-visitors-openacs2019-08-21 17:44gustaf neumann
    Kibana-Chartde:visitors-map-openacs2019-08-21 17:44gustaf neumann
    Kibana-Chartde:bots-tl-nr-requests-openacs2019-08-21 17:44gustaf neumann
    Kibana-Chartde:bots-tl-transferrate-openacs2019-08-21 17:44gustaf neumann

    History of OpenACS

    Created by OpenACS community, last modified by Gustaf Neumann 16 Jul 2019, at 10:13 AM

    The OpenACS project was born when Don Baccus, Ben Adida, and others decided to port ACS from Oracle to PostgreSQL, thus making it a fully open-source solution. With OpenACS 4, Oracle and PostgreSQL support were combined in one code base and with OpenACS 5, support for internationalization and localization has been added.

    A vibrant and productive community has sprung up around the OpenACS software and there are many volunteer contributors as well as a commercial companies able to provide support, hosting, and custom development. Many of the production users are actively funding and contributing work back to the project. Formal, consensus driven governance has been established (with semi-annual elections) which ensures the project serves the needs of it's constituents.

    More detailed analysis:

    • Michael Aram, Stefan Koch, Gustaf Neumann: Long-Term Analysis of the Development of the Open ACS Community Framework, in: Francisco José García-Peñalvo, Alicia García-Holgado (ed) , Open Source Solutions for Knowledge Management and Technological Ecosystems, IGI GLobal, 2017.
    • Neophytos Demetriou, Stefan Koch, Gustaf Neumann: The Development of the OpenACS Community, in: Miltiadis Lytra and Ambjörn Naeve (ed) , Open Source for Knowledge and Learning Management: Strategies Beyond Tools, Idea Group Publishing, 2006 . [BibTex, pdf]

    Original version by Ben Adida

    In the Beginning ...

    Back in the summer of 1995, Philip Greenspun, Brian Tivol and I spent a few weeks in New York working at Hearst Publishing developing the Multimedia Newsstand. The tools available at the time were pretty pathetic. Netscape was at version 1.1 (barely), and about 30% of our visitors were still using v0.9.

    Philip had done his homework, though, and had chosen NaviServer as our web server platform. NaviServer was the brainchild of Jim and Doug, two amazing hackers who immediately understood how to build server-side web technology:

    • Built-in, simple, string-oriented, scripting language: Tcl,
    • Efficient multi-threading,
    • Simple and abstracted database access and connection pooling.

    We set out to create a web site with daily editorials, magazine sales and ordering, customer tracking, and quite a few more pieces. In about 12 weeks, it was up and running and happy. The Illustra RDBMS would crap out every now and then thanks to the Elan License Manager (among other problems), but overall Hearst was happy. The numerous utility procedures that we created and used that summer came together into what is now the utilities.tcl file in your ACS installation. The information so far should allow you to guess the reason why bt_mergepiece is called bt_mergepiece.

    Driving the Idea

    It was Philip who then started to use NaviServer (later GNNserver, now AOLserver, all the same product) and Illustra to create a host of services that became, in addition to the early versions of Philip created the initial versions of bboard, classified, neighbor-to-neighbor, and many other pieces all in order to manage the growing community.

    Philip continued to push AOLserver, eventually dropping Illustra by hiring Cotton Seed, another hard-core hacker, to write an Oracle driver. Oracle brought a whole new level of scalability and reliability to the thousands of lines of Tcl code already written. At that time, in early 1998, Philip officially created ArsDigita, LLC, in order to push the consulting work he was already doing. He brought on 6 people (Philip, Olin, Cotton, Terence, Ulla, and myself) to carry the initial ArsDigita flag (although I had almost nothing to do with the setup of ArsDigita to begin with).

    Philip brought on Jin Choi, one of the only people I know who deserves the title of "monster hacker." Together they went ahead and built entirely new services based on AOLserver/Oracle. The most famous of these was, of course,, an amazing site that anyone claiming to understand web scalability should take a look at (30 db-backed hits/second on Earth day running on one Sun Ultra 2).

    And There Was A Toolkit...

    It was right around that time that Philip convinced me to come back and work full-time for ArsDigita. Jin, Eve, Tracy, Philip and I worked through the summer of 1998 on various projects (Levi Strauss, Cognet, ASME, Greentravel now, while Philip kept talking about his grand-integration goal: combining all of these pieces into the ArsDigita Community System.

    Soon enough, the ACS was real. The first release was posted on December 8th, 1998, after a huge packaging, debugging, and integration effort led by Philip. The ACS became the backbone of all ArsDigita projects, and many hackers around the world started using it.

    With the rise of open-source software and the realization that good software can still be free, many people started wondering if the ACS could be made to run on some RDBMS other than Oracle. An Interbase port of the ACS v2.1 was created, but Interbase still cost money at the time (although it should be open-source and free by end of 2000). Many cheered for MySQL, but the lack of transaction and subselects makes it unacceptable for a true ACS (or for any critical system, for that matter).


    In December 1999, a small group of ACS hackers came together on SourceForge to create the ACS port to PostgreSQL. Following true open-source methods, we gave write permissions to anyone who showed enough competence to help out. The group soon grew to more than 20 people, with about 5 active developers.

    The initial name of the project, ACS/pg, was changed to OpenACS as the group realized that there was a need to push porting to possibly other databases than PostgreSQL (Interbase?). OpenACS further represents the importance of a fully open-sourced system that truly works in symbiosis with the Open-Source community.

    Philip and his team have done a tremendous job creating the processes and data model necessary to build scalable, reliable online communities. OpenACS hopes to bring this tremendous contribution to the world of fully open-sourced systems, available to anyone interested in building their own online community.


    Other Accounts that could be incorporated

    OpenACS TODO List

    Created by Dave Bauer, last modified by Gustaf Neumann 20 Jun 2019, at 06:39 PM

    Release Status

    See openacs-release-status

    Development is taking place in the oacs-5-10 branch.

    OpenACS Version 5.10.0 Agenda/wish list

    • postponed for later releases:
      • implement subsite-singleton (in addition to the classical singleton)
      • say farewell to CVS
    • Functional improvements
      • additional page_contract filter: oneof(red|green|blue)
      • add text/markdown to the accepted text formats or rich-text widget
      • Get rid of bugging "login page expired" messages. The 17 years old construct was replaced by newer means to avoid caching of form values from the login form. Admins of existing sites should set the kernel parameter "LoginPageExpirationTime" to 0
      • new API call  category::get obtain as well category description for a category_id and locale
      • visualize code dependencies and test-coverage in API browser
      • new feature to warn site administrators about expiring certificates
      • dynamic reloading reform:
        • When reloading  apm packages, watched files, etc. the NaviServer blueprint is now updated correctly. This solves the long-standing problem that changes for scheduled procedures required a restart of the server. Furthermore the old-style reloading was based on a ever-growing list of reload operations each time a new reload was requested, causing slow-downs in long running server instances, especially, when new threads are started.
        • Now changes are applied to all NaviServer threads, including threads for
          schedules procedures, ns_jobs and the like. Note that the current job has to be finished before the changes can be applied.
        • For the transition, it is possible to switch between the classical reloading style and blueprint reloading by changing a variable in acs-tcl/tcl/apm-procs.tcl
      • new packages:
        • cookie-consent: alerting users about the use of cookies on a website
        • boomerang: performance of your website from your end user’s point of view
      • Forums reform:
        • remove hard-coded dependency with registered_users group when checking forum permissions
        • don't rely so heavily on acs_permissions to model forum configuration, as this can have unexpected consequences in convoluted multi-group/multi-subsite scenarios. Prefer simpler table attributes instead
      • Registry for .js and .css libraries: allow besides classical URLs symbolic names for loading external resources (e.g. jquery), this makes it easier to upgrade  libraries in multiple packages (without running into problems with duplicate versions) and supports  switching between CDN and local pathsURN.
        The existing implementation is based on URNs and extends the existing template-head API to
        support registration for URNs. A URN provides an abstraction and a single place for e.g updating references to external resources when switching between a CDN and a locally stored resource, or when a resource should be updated. Instead of adding e.g. a CDN URL via template::head::add_script, one can add an URN and control its content from a single place. Use common namespaces for OpenACS such as urn:ad:css:* and urn:ad:js:*.
        • Register URNs:

          Example provider (e.g. in some theme):
             template::register_urn \ 
                 -urn urn:ad:js:jquery \ 
                 -resource /resources/xowiki/jquery/jquery.min.js
        • The registered URN can be used like classical URL after registration.
          Example consumer:

             template::head::add_javascript -src urn:ad:js:jquery
        • Declare composite files: Provide an interface to define that  a .js file or a .css file contains multiple other .js/.css files in order to reduce the number of requests.
             template::head::includes -container urn:js::style.js -parts {urn:ad:js:jquery ...}
    • non-functional changes
      • Improved regression testing
        • Goal is that all packages in oacs-5-10 pass regression test
        • Include web testing in standard regression testing
      • Improved scalability:
        • Data bloat hygiene:
          • rethink package parameter and portlet parameter data models
          • parameters: include "subsite-parameters" in parameter resolution (package->subsite->global)
        • provide lock-free implementation of ad_page_contract_filters and ad_page_contract_filter_rules. This change improves parallel processing of requests and is primarily interesting for sites with a few mio page views per days. These locks were among the most frequent nsv locks

        • Reduced locks on util_memoize_cache my more invariants values into per-thread caching (acs_lookup_magic_object, ad_acs_version, .... ) and by avoiding specialized calls, which can be realized by already optimized ones ("apm_package_installed_p_not_cached ref-timezones" was most frequently used util_memoize_cache entry). These changes are necessary to avoid full still-stand on the unfortunate long-time locks on util_memoize_cache stemming from permission and user management with wild-card flush operations, which require to iterate over all cache entries (which might be a server hundred thousands)

        • Added new interface for cache partitioning to reduce lock latencies on high load websites

      • Code smell reduction: fix typos, white-space etc.
      • Security improvements:
        • strengthen page contracts
        • CSP fine tuning
      • Better exception handling based on Tcl 8.6 exception handlers ("try" and "throw", also available in Tcl 8.5)
        • a new "ad_try" implementation based on Tcl's "try" replaces now the old "ad_try", "with_catch" and "with_finally", which are marked as deprecated
        • the new "ad_try" is in essence Tcl's "try" but with predefined handling of "ad_script_abort" and should be also used instead of "catch", when the OpenACS API is used (which might use script aborts)
        • all core packages use the new "ad_try" instead of the deprecated versions
      • Connection close reform:
        • NaviServer/AOLserver continue after connection closing commands to execute a script. This is in many situation not desired, especially, when for the page as well a .adp file exists, which will try to deliver this on the already closed connection. This can lead to errors in the error.log file, which are sometimes hard to analyze
        • therefore, developers should use in most such cases cases "ad_script_abort"
        • connection closing commands are e.g. ad_returnredirect, ad_redirect_for_registration, cr_write_content, ad_page_contract_handle_datasource_error, ad_return_string_as_file, ad_return_complaint,  ad_return_error,
          ad_return_forbidden, ad_return_warning, ad_return_exception_page, ns_returnredirect, ns_return, ns_returnerror
        • The new version has made on most occasions explicit, when the script should abort.
      • SQL cleanup:
        • cleanup of obsolete non-portable SQL constructs in a way Oracle and PostgreSQL code base divergency is reduced:
          • "nvl" -> "coalesce"
          • "sysdate" / "now()" -> standard "current_date" or "current_timestamp"
          • use standard-compliant "dual" table where appropriate (required by Oracle, supported by Postgres)
          • use non-dialectal cast idioms when appropriate
          • ... (reference Oracle version will be 11.2 as is oldest version officially supported by Oracle)
        • reduce superfluous .xql queries
          • acs-subsite: delete 21 files with un-referenced .xql queries
          • acs-tcl: delete 4 files
          • news: 3 files
          • file-storage: 1 file
          • dotlrn: 9 files
      • Deprecated commands:
        • move deprecated code into separate files
        • make loading of deprecated code optional (can be controlled via parameter  "WithDeprecatedCode" in section "ns_section ns/server/${server}/acs" of the config file. By default, deprecated procs are still loaded
        • When deprecated code is not loaded, the blueprint of the interpreter is smaller. The following number of lines of code can be omitted when loading without the deprecated procs:
          • acs-tcl: 3178
          • acs-templating: 450
          • xotcl-core http-client-procs: 830
          • acs-content-repository: 1717 (including .xql files)
      • Improves handling of server implementation-specific code
        • provide *-procs-aolserver.tcl and *-procs-naviserver.tcl similar to *.postgresql.xql and *.oracle.xql where appropriate
    • require Tcl 8.6, XOTcl 2.1, PostgreSQL 9.4 (PostgreSQL 9.3 EOL: November 2018), tdom 0.9
    • Make xotcl-core a first-class citizen of the OpenACS core! (wished by Michael Aram; would probably require a successful TIP?)

    OpenACS Version 5.9.1 Agenda

    Refactoring of rich-text editor integration

    • Driving force: Debian packaging (e.g. js minified code is not allowed)
    • Moved out code from acs-templating, provided interfaces to add many different rich-text editors as separate packages
    • New OpenACS packages:
      • richtext-xinha
      • richtext-tinymce
      • richtext-ckeditor4 (has ability to choose between CDN and local installation via web interface)

    Improving admin interface

    • New theme manager:
      • Goals:
        • Make it easier to keep track of themes with local modifications
        • Make it easier to create local modification a new themes and to update these
        • Show differences between default theme parameter (in DB) and actual settings (in subsite parameters)
        • Allow to delete unused themes
        • Give site admin hints, which theme is used at which subsite
        • Ease theme switching
      • Added a subsite::theme_changed callback to be able to handle theme changes in custom themes (was also necessary for proper integration with DotLRN theming)
      • Added support for these features under subsite admin (/admin/)
      • Improved support for themed templates via [template::themed_template]


    • Improved (broken) interface to define/manage groups over web interface
    • Allow to send as well mail, when membership was rejected
    • New functions [membership_rel::get_user_id], [membership_rel::get] and [membership_rel::get_group_id] to avoid code duplication
    • Added support to let user include %forgotten_password_url% in self-registration emails (e.g. in message key acs-subsite.email_body_Registration_password)


    • Improved subsite/www/members
      • Make it possible to manage members of arbitrary groups
      • Improved performance for large groups
      • Improved configurability: when ShowMembersListTo is set to "3", show list to members only, when this is not the whole subsite


    • Improved user interface for /admin/applications for large number of applications
    • Various fixes for sitewide-admin pages (under /acs-admin)
    • Update blueprint in "install from repository" (currently just working in NaviServer)


    • Further cleanup of .xql files (like what as done for acs-subsite in OpenACS 5.9.0):
      • 36 files deleted
      • Removed more than 100 obsolete named queries
      • Stripped misleading SQL statements


    • Marked redundant / uncalled SQL functions as deprecated
    • Replaced usages of obsolete view "all_object_party_privilege_map" by "acs_object_party_privilege_map"
    • Removed type discrepancy introduced in 2002:
      • acs_object_types.object_type has type varchar(1000), while
      • acs_object_types.supertype has type varchar(100)
      • ... several more data types are involved, using acs_object_types.object_type as foreign key


    • Simplified core SQL functions by using defaults:
      • Number of functions reduced by a factor of 2 compared to OpenACS 5.9.0 (while providing compatibility for clients using old versions),
      • Reduced code redundancy
      • Affected functions:
        • Reduced content_item__new from 12 versions to 6,
        • Reduce content_revision__new from 7 to 4
        • Similar in image__new, image__new_revision, content_item__copy, content_item__get_title, content_item__move
      • PostgreSQL 9.5 supports named parameter in the same syntax as in Oracle. Further reduction of variants will be possible, once OpenACS requires at least PostgreSQL 9.5


    • Reduced usage of deprecated versions of SQL functions (mostly content repository calls)
    • Reduced generation of dead tuples by combining multiple DML statements to one (reduces costs of checkpoint cleanups in PostgreSQL)


    • Permission queries:
      • Improved performance
      • Support PACKAGE.FUNCTION notation for PostgreSQL to allow calls permission queries exactly the same way as in Oracle (e.g. "acs_permission.permission_p()"). This helps to reduce the number of PostgreSQL specific .xql files.
    • Modernize SQL:
      • Use real Boolean types instead of character(1)
        (done for new-portal, forums, faq, attachments, categories, dotlrn, dotlrn-forums, evaluation)
      • Use real enumeration types rather than check constraints (done for storage_type text/file/lob)

    CR hygienics (reduce cr bloat)

    • Provided means to avoid insert/update/delete operations in the search queue:

      OpenACS adds for every new revision often multiple entries to the search_queue, without providing any means to prevent this. This requires for busy sites very short intervals between queue sweeps (otherwise too many entries pile up). Another consequence is that this behavior keeps the PostgreSQL auto-vacuum daemons permanently active. Many of these operations are useless in cases where the content repository is used for content that should not be provided via search. The changed behavior should honors a publish-date set to the future, since it will not add any content with future publish dates to the search-queue.


    • Reduced number of insert cr_child_rels operations, just when needed:

      cr_child_rels provide only little benefit (allow to use roles in a child-rel), but the common operation is a well available in cr_items via the parent_id. cr_child_rels do not help for recursive queries either. One option would be to add an additional argument for content_item__new to omit child-rel creation (default is old behavior) and adapt the other cases.

    Security improvements

    • Added support against CSRF (cross site request forgery)
      • OpenACS maintains a per-request CSRF token that ensures that form replies are coming just from sites that received the form
      • CSRF support is optional for packages where CSRF is less dangerous, and such requests are wanted (e.g. search and api-browser)
    • Added Support for W3C "Upgrade-Insecure-Headers" (see
      For standard compliant upgrade for requests from HTTP to HTTPS

    • Added support for W3C "Subresource Integrity" (SRI; see

    • Added support for W3C "Content Security Policy" (CSP; see

      • Removed "javascript:*" links (all such urls are removed from the 90 packages in oacs-5-9, excluding js libraries (ajaxhelper) and richtext code)
      • Removed "onclick", "onfocus", "onblur", "onchange" handlers from all .adp and .tcl files in the 90 packages in oacs-5-9 (excluding js libraries (ajaxhelper) and richtext code)
      • Added optional nonces to all <script> elements with literal JavaScript content


    • Removed "generic downloader", which allowed to download arbitrary content items, when item_id was known (bug-fix)
    • Improved protection against XSS and SQL-injection (strengthen page contracts, add validators, added page_contract_filter "localurl", improve HTML escaping, and URI encoding)
    • Fixed for potential traversal attack (acs-api-documentation-procs)

    Improvements for "host-node mapped" subsites

    • Fixed links from host-node mapped subsite pages to swa-functions (must be always on main subsite)
    • Made "util_current_directory" aware of host-node-mapped subsites
    • Added ability to pass "-cookie_domain" to make it possible to use the same cookie for different domains
    • Fixed result of affected commands "util_current_location", "ad_return_url", "ad_get_login_url" and "ad_get_logout_url" for HTTP and HTTPS, when UseHostnameDomainforReg is 0 or 1.
    • Improved UI for host-node maps when a large number of site nodes exists

    Reform of acs-rels

    • Made acs-rels configurable to give the developer the option to specify, whether these are composable or not (default fully backward compatible). This is required to control transitivity in rel-segments
    • The code changes are based on a patch provided by Michael Steigman.
      For details, see:

    Improved status code handlers for AJAX scenarios

    • Don't report data source errors with status code 200 (use 422 instead)
    • Let "permission::require_permission" return forbidden (403) in AJAX calls (determined via [ad_conn ajaxp])

    Improved Internationalization

    • Extended language catalogs for
      • Russian (thanks to v v)
      • Italian (thanks to Antonio Pisano)
      • Spanish (thanks to Hector Romojaro)
      • German (thanks to Markus Moser)


    • Added (missing) message keys
    • Improved wording of entries
    • Added message keys for member_state changes, provide API via group::get_member_state_pretty

    Improved online documentation (/doc)

    • Fixed many broken links
    • Removed fully obsolete sections
    • Improved markup (modernize HTML)
    • Updated various sections

    Misc code improvements:

    • 18 issues from the OpenACS-bug-tracker fixed
    • Made code more robust against invalid/incorrect input (page_contracts, validators, values obtained from header fields such as Accept-Language)
    • Fixed quoting of message keys on many places
    • Improved exception handling (often, a "catch" swallows to much, e.g. script_aborts), introducing "ad_exception".
    • Generalized handling of leading zeros:

      • Fixed cases where leading zeros could lead to unwanted octal interpretations
      • Switch to use of " util::trim_leading_zeros" instead of "template::util::leadingTrim", "dt_trim_leading_zeros" and "template::util::leadingTrim", marked the latter as deprecated
    • URL encoding

      • "ad_urlencode_folder_path": new function to perform an urlencode operation on the segments of the provided folder path
      • "export_vars": encode path always correctly, except -no_base_encode is specified
      • Fixed encoding of the URL path in "ad_returnredirect"
    • Improvements for "ad_conn":

      • Added [ad_conn behind_proxy_p] to check, whether the request is coming from behind a proxy server
      • Added [ad_conn behind_secure_proxy_p] to check, whether the request is coming from behind a secure proxy server
      • Added [ad_conn ajax_p] to check, whether the request is an AJAX requests (assumption: AJAX request sets header-field Requested-With: XMLHttpRequest")
      • Added [ad_conn vhost_url] to obtain the url of host-node-mapped subsites


    • Added various missing upgrade scripts (missing since many years) of changes that were implemented for new installs to reduce differences between "new"-and "old" (upgraded) installations
    • Templating

      • Get rid of various pesky "MISSING FORMWIDGET: ...formbutton:ok" messages
      • Improved support for javascript event handlers in template::head
      • New functions "template::add_event_listener" and "template::add_confirm_handler"
      • Fix handling, when "page_size_variable_p" is set (was broken since ages)
    • Improved location and URL handling:

      • Refactored and commented "util_current_location" to address security issues, handle IPv6 addresses, IP literal notation, multiple drivers, "
      • Improved "security::get_secure_location" (align with documentation)


      • New functions:
        • "util::configured_location"
        • "util::join_location", "util::split_location"
        for working on HTTP locations to reduce scattered regexps handling URL components
      • Improved IPv6 support
      • Use native "ns_parseurl" when available, provide backward compatible version for AOLserver
    • MIME types:

      • Added more Open XML formats for MS-Office to allowed content types
      • Modernized entries to IANA recommendations
      • New function "cr_check_mime_type" centralizing the retrieval of the mime_type from uploaded content
    • Finalized cleanup of permissions (started in OpenACS 5.9.0):

      • Get rid of "acs_object_context_index " (and therefore on "acs_object_party_privilege_map " as well) on PostgreSQL.
        • huge table,
        • expensive maintenance, used only in a few places,
    • Misc new functions:

      • "lang::util::message_key_regexp": factor out scattered regexp for detecting message keys
      • "ns_md5" and "ns_parseurl": improve compatibility between AOLserver and NaviServer
      • "ad_dom_sanitize_html": allow to specify different sets of tags, attributes and protocols and "ad_dom_fix_html", which is a light weight tidy variant.


    • Improved HTML rendering (acs-api-browser), provide width and height to speed up rendering
    • Improved ADP files (e.g. missing doc(title))
    • Added usage of "ad_include_contract" on more occasions
    • Modernize Tcl and HTML coding
    • Reduced dependency on external programs (use Tcl functions instead)
    • Improved robustness of "file delete" operations all over the code
    • Improved documentation, fix demo pages
    • Aligned usages of log notification levels (distinction between "error", "warning" and "notice") with coding-standards


    • Cleaned up deprecated calls:
      • Removed usage of deprecated API functions (e.g. "cc_lookup_email_user", "cc_email_from_party", "util_unlist", ...)
      • Moved more deprecated procs to acs-outdated
      • Marked remaining (and unused) "cc_*" functions as well as deprecated.


    • Improved Oracle and windows support
    • Fixed common spelling errors and standardize spelling of product names all over the code (comments, documentation, ...)
    • Many more small bug fixes

    Version numbers:

    • require PG 9.2 (End Of Life of PostgreSQL 9.0 was Oct 2015)
    • require XOTcl 2.0 (presented at the Tcl conference in 2011).




    • New Package Parameters

      • acs-kernel:

        • MaxUrlLength: remove hard-coded constant in request processor for max accepted url paths
        • SecureSessionCookie: Let site admin determine, whether or not to use secured session cookies (useful, when not all requests are over HTTPS)
        • CSPEnabledP: activate/deactivate CSP
      • acs-kernel (recommended to be set via config file in section "ns/server/${server}/>acs"

        • NsShutdownWithNonZeroExitCode: tell NaviServer to return with a non-zero return code to cause restart (important under windows)
        • LogIncludeUserId: include user_id in access log
      • acs-api-browser:

        • ValidateCSRFP: make checking of CSRF optional (default 1)
      • acs-content-repository:

        • AllowMimeTypeCreationP: Decides whether we allow unknown mime types to be automatically registered (default: 0}
      • news-portlet:

        • display_item_lead_p: Should we display news leads in the portlet? (default 0)
      • search:

        • ValidateCSRFP: make checking of CSRF optional (default 1)
      • xotcl-request-monitor:

        • do_track_activity: turn activity monitoring on or off (default 0)
    • New OpenACS packages:

      • richtext-xinha
      • richtext-tinymce
      • richtext-ckeditor4 (has ability to choose between CDN and local installation via GUI)
      • openacs-bootstrap3-theme (as used on
      • dotlrn-bootstrap3-theme
    • xotcl-core:

      • Improved XOTcl 2.0 and NX support (e.g. api-browser)
      • Added "-debug", "-deprecated" to ad_* defined methods (such as e.g. "ad_instproc")
      • Make use of explicit "create" statements when creating XOTcl/NX objects (makes it easier to grab intentions and to detect typos)
      • Added parameter to "get_instance_from_db" to specify, whether the loaded objects should be initialized
      • Added support for PostgreSQL prepared statements of SQL interface in ::xo::dc (nsdb driver)
    • xowiki:

      • Named all web-callable methods www-NAME (to make it clear, what is called, what has to be checked especially carefully)
      • Moved templates from www into xowiki/resources to avoid naming conflicts
      • Improved ckeditor support
      • Added usage of prepared statements for common queries
      • Improved error handling
      • Better value checking for query parameter, error reporting via ad_return_complaint
      • Added option "-path_encode" to methods "pretty_link" and "folder_path" to allow to control, whether the result should be encoded or not (default true)


      • Form fields:
        • Improved repeatable form fields (esp. composite cases), don't require preallocation (can be costly in composite cases)
        • Added signing of form-fields
        • Added HTML5 attributes such as "multiple" (for "file") or "autocomplete"
        • Fixed generation of "orderby" attribute based on form-field names
        • richtext: allow to specify "extraAllowedContent" via options
        • Improved layout of horizontal check boxes


      • Menu bar:
        • Added dropzone (requires bootstrap): drag and drop file upload
        • Added mode toggle (requires bootstrap)
        • Extended default policies for handling e.g. dropzone (file-upload method)
        • Distinguish between "startpage" (menu.Package.Startpage) and "table of contents" (menu.Package.Toc)


      • Notifications:
        • Added support for better tailorable notifications: introduced method "notification_render" (similar to "search_render")
        • Added support for tailorable subject lines (method "notification_subject")


      • Improved bootstrap support, use "bootstrap" as PreferredCSSToolkit
      • Switched to ckeditor4 as PreferredRichtextEditor
      • Improved handling of script-abort from within the payload of ::xowiki::Object payloads
      • Added parameter to "get_all_children" to specify, whether the child objects should be initialized
    • xowf:

      • Added property "payload" to "WorkflowConstruct" in order to simplify customized workflow "allocate" actions
      • Internationalized more menu buttons
    • xotcl-request-monitor

      • Added class "BanUser" (use. e.g. ip address to disallow requests from a user via request monitor)
      • Added support for optional user tracking in database
      • Added support for monitoring response-time for certain urls via munin
      • Increased usage of XOTcl 2.0 variable resolver (potentially speed improvement 4x)
      • Performed some refactoring of response-time handling to allow site-admin to make e.g. use of NaviServer's dynamic connection pool management (not included in CVS)
      • Added support for partial times in long-calls.tcl to ease interpretation of unexpected slow calls
      • last100.tcl: Don't report hrefs to URLs, except to SWAs
    • chat:

      • Introduced new options to set chat rooms so login and/or logout message are not issued every time a user enters/exits a chat-room (important for chats with huge number of participants)
      • Parameterized viewing of chat-logs
      • Fixed cases of over-/under-quoting
      • Fixed JavaScript for IE, where innerHTML can cause problems
    • file-storage:

      • Don't show action keys, when user has no permissions
      • Added support for copying of same-named files into a folder (adding suffix)
      • Fixed old bugs in connection with "views" package

    OpenACS Version 5.9.0 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
    • 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
      • Support of expiration dates and passwords for signed variables
    • 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.
    • Misc improvements:
      • Mark unused functions of acs-tcl/tcl/table-display-procs.tcl as deprecated
      • Reduce number of muxtex locks by pre-request and per-thread caching
      • Improved development und debugging aids:
        • use "ad_log error|warning  .... " instead of "ns_log" to include information of request and callstack in error.log
        • ability to display ns_log entries caused by a request in ds-footer
        • ability to save delivered web pages in file-system for testing HTML validity (especially for admin pages, which are unaccessible for external validity testers)
      • More bug fixes
    • 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 separate 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 committed to working on it.

    Theming in OpenACS

    Created by Gustaf Neumann, last modified by Ann T 15 May 2019, at 09:52 AM

    OpenACS provides theming functionality, i.e. the customization of the site layout through so-called theme packages with customized CSS and HTML layout.

    Each subsite in OpenACS can have its own theme.

    By default, the "Openacs-Default-Theme" is activated when installing OpenACS. The "Openacs-Default-Theme" package contains a "tabbed" navigation theme and a "plain" navigation theme (without tabs in main navigation).

    OpenACS comes now with a new theme package, the "Openacs-Bootstrap3-Theme" Package, which is based on the Twitter Bootstrap Library . This new package is used on the site and available form the openacs repository. The package (and the description below) requires at least OpenACS 5.9.0.  In the following section you find some hints on how to use and customize this theme and how the theming can be customized in newer versions of OpenACS.

    Step-by-Step Installation of a Theme Package

    Installing theme packages and switching between themes can be easily done in a few steps:

    1. Obtain the theme package (e.g. from CVS or github) and install it under the package directory. You can as well "install from the respository", which makes step 2 below unnecessary.
    2. Go to /acs-admin/install and install the package
    3. Navigate to the subsite whose theme you would like to change and go to the "Configure"-Page. If you only have the default subsite set up, this is located at /admin/configure. Choose the theme you want. Klick Ok. You should see the new theme now.
      Note that a theme package can contain a number of different themes. For instance, the "Openacs-Default-Theme" Package contains a "tabbed" and a "plain" theme; the "Openacs-Bootstrap3-Theme" Package contains a "tabbed" theme in OpenACS style and a "tabbed" theme in turquoise color.
    4. DONE!

    Understanding the Basic Settings of Theme Packages

    Where are the themes of a theme package defined?

    Open /packages/openacs-bootstrap3-theme/tcl/apm-callback-procs.tcl in your editor. You see that 2 themes are defined here (subsite::new_subsite_theme), with all relevant parameters including css and js files and definition of template files. 

    You could add another subsite theme here. In order to get it listed on the "Configure"-Page of your subsite, you need to de-install and re-install the Theme Package.

    The Theming Parameters allow you to specify, how elements of your page such as forms or lists should be rendered. If the resource which you have defned in your theme is not found, the default is taken from /packages/acs-templating/resources/ as a fallback.

    The Theming Parameters

    Have a look at the parameter page of your subsite. If you only have the default subsite set up, this is located at /shared/parameters.

    In the "Theming"-Section of the subsite parameter page, you find the parameters which you have defined in the apm-callback-procs.tcl file of your theme package. You can modify the parameters here, however it is recommended that you define them in the apm-callback-procs. Why? If you switch the theme or re-install it, the settings of the parameter page are lost!


    • Defines layout of the filter options in a dimensional list. You can find an example at the Download Page  of the OpenACS Website.


    • Defines the layout of form templates


    • Defines the layout of list templates


    • Defines the general page layout. The master usually sets the framing for the page layout and places elements such as header, navigation, content area, footer.


    • The directory, from which the resources of acs-templating are loaded. The resources include the template files for dimensionals, forms, lists, masters, templates, widgets. If not set, or the required resource is not found, the default is taken from /packages/acs-templating/resources/.
      If for instance, the ResourceDir is set to /packages/openacs-bootstrap3-theme/resources, and you have a dimensional template defined in "Openacs-Bootstrap3-Theme" Package, you only need to specify the name of the -dimensional_template without giving the entire path.


    • Master used for streaming content


    • List of CSS files used in the theme


    • List of Javascript files used in the theme


    • Key of theme.

    Additional Tools to Layout in a Theme Package


    Starting with OpenACS 5.9, so-called widgets can be defined. <widget> is very similar to <include>, but uses widget specific name resolution based on themes. If the theme package contains resources/widgets/$specifiedName it is used from there. Otherwise it behaves exactly like <include> (without the resources/templates/theming).

    In the "Openacs-Bootstrap3-Theme" Package, widgets are defined e.g. for the main navigation bar and the login area.


    Sometimes, you might want a specific page or include to have a special design or layout which differs from the standard layout defined in that package. For instance, you might want to give the notification widget a new look&feel. You could go to the notification package and edit the correspondend tcl/adp files there. However, when upgrading the package, you always would have to merge your local changes with the upgraded files.

    Starting with OpenACS 5.9, you can customize your local templates in your Theme Package. These files "overrule" the tcl/adp files in the corresponding packages. This makes it easier for you to keep the overview of all your layout changes, and also to upgrade your packages with less effort.

    How does it work?

    Let's take the example from above: you want to change the lokk&feel of the notification widget. The tcl/adp files are situated in /packages/notifications/lib/notification-widget.tcl and /packages/notifications/lib/notification-widget.adp.

    Go to the "Openacs-Bootstrap3-Theme" Package. You see a folder resources/templates. Now construct a folder structure in the templates folder, just like this: resources/templates/notifications/lib and create the 2 files notification-widget.tcl/adp. Change the layout as desired.


    The "Openacs-Bootstrap3-Theme" Package contains a few such template files by default; feel free to change or complement them.

    Understanding the Openacs-Bootstrap3-Theme Package

    Different master files

    The "Openacs-Bootstrap3-Theme" Package comes with a set of master files, which are shortly explained here. 

    • The "base master" is the plain-master.tcl/adp. It defines the general page layout.
    • The tabbed-master.tcl/adp is the addition for a tabbed navigation, i.e. navigation tabs in the header bar which are defined in the parameter page. Tabs can be defined for admins (AdminNavbarTabsList), for members (MembersViewNavbarTabsList), for users (UserNavbarTabsList). You can check if you want the applications to be shown as tabs in the navigation bar.
    • The tabbed-master-turquois.tcl/adp is similar tp the tabbed-master.tcl/adp. The difference is in the logo image defined in the .tcl file. In the OpenACS website, it is currently applied in the subsite for the .LRN project .
    • The plain-streaming-head.tcl/adp, tabbed-streaming-head.tcl/adp, and tabbed-streaming-head-turquois.tcl/adp files are the corresponding master files for streaming content.

    Color css

    "Openacs-Bootstrap3-Theme" Package contains a "tabbed" theme in OpenACS style and a "tabbed" theme in turquoise color. The color stylesheets are defined in the apm-callback-procs.tcl file and located at /packages/openacs-bootstrap3-theme/www/resources/css/color/. This makes it very easy to change the color design of the theme. You could either modify one of the color stylesheets "blue.css" or "turquois.css"; or you could add your own color stylesheet and link it in the apm-callback-procs.tcl-file. In the latter case, you should de-activate and re-activate the theme in the "Configure"-Page (see above) to activate the setting.

    Twitter Bootstrap

    As the name of the package suggests, the "Openacs-Bootstrap3-Theme" Package makes use of the Twitter Bootstrap Library in version 3. The Twitter Bootstrap Library is a HTML, CSS and JAVASCRIPT library for frontend development which is based on a mobile first, responsive approach to web design.

    Much has been written about this library. However, here are a few links which should help you to make yourself familiar with the Library in case you are new to Bootstrap:

    Designing your own Theme

     The following guideline helps you to create your own theme. The easiest approach to develop your own theme is to build up on an existing one. For instance, you could modify the "Openacs-Bootstrap3-Theme" Package as a starting point.

    1. Make a local copy of the "Openacs-Bootstrap3-Theme" Package
    2. Rename the package.
    3. Take particular care of the .info file. Rename all the places where you find "openacs-bootstrap3-theme", and give a unique package key.
    4. Take particular care of the tcl/apm-callback-procs.tcl file. The subsites defined here through subsite::new_subsite_theme need to have a unique key, so give all the subsites you create here a unique key. Also, take care of the namespace.
    5. Before starting to modify the package, it is best to try to install and de-install the package on a test instance to make sure that you have all the naming right.
    6. Now feel free to modify the design as you like.

    Themes in .LRN

    When installing .LRN, the theme-zen is installed and activated by default.

    .LRN comes now with a new theme package, the "Dotlrn-Bootstrap3-Theme" Package (as of July 2016, it is in proof-of-concept state!).

    The "Dotlrn-Bootstrap3-Theme" Package builds on the "Openacs-Bootstrap3-Theme" Package and depends on both the "Openacs-Bootstrap3-Theme" Package and the "Theme-Zen" Package.

    The Theming specifics described above also apply to .LRN theming, but additionally you should consider the following points:

    Portal Pages Design

    The Design of a Portal Page is defined on 3 levels:

    • The subsite theme (which can be chosen on the "Configure"- Page, as described above)
    • The page layout: It defines whether the page has, for instance, a 1-column, 2-column or 3-column layout. In the "Dotlrn-Bootstrap3-Theme" Package, the layouts are defined at lib/layouts.
    • The portlet theme: It defines the look&feel of the single portlet. In the "Dotlrn-Bootstrap3-Theme" Package, the themes are defined at lib/themes.

    Since every portal which is created, stores the portlet theme ID in the database, and since every portal page that is created, stores the page layout ID in the database, changing a theme in .LRN requires an upgrade of the affected database tables. This is done by the tcl/theme-procs.tcl/xql in the "Dotlrn-Bootstrap3-Theme" Package.

    !!!!!! Attention: If you switch to the .LRN-bootstrap3-theme, all the portal pages are updated to the bootstrap3 layout !!!!!!

    Installing and De-Installing the "Dotlrn-Bootstrap3-Theme" Package

    If the "Dotlrn-Bootstrap3-Theme" Package is de-installed, the above described portal pages design falls back to the theme-zen design. This should make sure that the portal pages are always provided with a working layout.

    Install OpenACS with NaviServer from Scratch

    Created by Gustaf Neumann, last modified by Gustaf Neumann 14 May 2019, at 10:28 AM

    This page describes how to install OpenACS with NaviServer on Unix-like systems (e.g. Linux, macOS, 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 already installed (or obtainable via package managers), and 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 new 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 and 9.5 on Ubuntu 12.04, 13.04, 14.04, 16.04, 18.04, Raspbian GNU/Linux 9.4 (stretch), 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.

       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-9-1.tcl -u nsadmin -g nsadmin

    One can start the server manually with the mentioned command.

    Using systemd

    On Fedora/CentOS or on Ubuntu installations starting with 15.04, systemd is used. The generated startup file for RedHat/Fedora is in /lib/systemd/system/oacs-5-9.service. The startup commands for systemd are

        sudo systemctl status oacs-5-9-1
        sudo systemctl start oacs-5-9-1
        sudo systemctl stop oacs-5-9-1

    Remember, when a new systemd service is installed, systemd requires the following command to re-scan its service files:

        sudo systemctl daemon-reload

    To start OpenACS automatically on every new start of the machine, issue the following command:

        sudo systemctl enable oacs-5-9-1

    Using upstart

    Alternatively, some older Ubuntu versions (up to 15.04) use upstart. For upstart, the the generated startup file is in /etc/init/oacs-5-9-1.conf. The service can be started/managed with the following commands

        sudo initctl status oacs-5-9-1
        sudo initctl start oacs-5-9-1
        sudo initctl stop oacs-5-9-1


    When the service is running, one can use use OpenACS by browsing to http://localhost:8000/ (when the browser and server is running on the same host). The relevant files are stored under the following locations:

    Configuration file /usr/local/ns/config-oacs-5-9-1.tcl
    access.log /var/www/oacs-5-9-1/log/
    error.log /var/www/oacs-5-9-1/log/
    Source tree /var/www/openacs-5-9-1/packages/


    Tcl Thread Library

    Created by Gustaf Neumann, last modified by Gustaf Neumann 03 May 2019, at 10:39 PM

    Libthread is the standard Tcl thread library developed by Zoran Vasiljevic and provides optional functionality for OpenACS. Threads created by the Tcl thread library are executed in an event loop, which makes it easy to send commands to such threads. xotcl-core provides support for the the thread library and uses it for example for [background delivery] of large files. Also the chat package uses libthread when it is installed. The xotcl-request-monitor depends on libthread.

    The advantage of libthead over NaviServer/AOLserver threads is that the threads created by libthread are waiting in an event loop for incoming requests, which eases some types of applications.


    In case, NaviServer was installed via install-ns, one can skip the section installation steps. Also the provided configuration script is already set up correctly for usage. The instruction below is for cases, where install-ns was not used.

    1. Get and install libthread:

        download libthread e.g. from

       untar it and go to you platform specific directory (eg. thread2.8.2/unix)

        # cd unix
        # ../configure --enable-threads \
          --prefix=/usr/local/ns \
          --exec-prefix=/usr/local/ns \

    use --prefix --exec-prefix --with-naviserver with the path pointing to the directory, where NaviServer is installed.
    The setup for AOLserver is similar, but different paths are used.

      make install

    You should now have installed (check for /usr/local/ns/lib/thread*/libthread* )

    2) Adjusting the AOLserver/NaviServer configuration file to use libthread

        Open the configuration file 

    • look for modules section: ns_section ns/server/${server}/modules
    • add libthread to modules section:
      ns_param libthread thread2.8.2/

    restart nsd and check the error log, whether libthread was loaded successfully.

    Richtext CKEditor 4

    Created by Gustaf Neumann, last modified by Gustaf Neumann 25 Apr 2019, at 09:54 AM

    Package Specification Summary for Package: richtext-ckeditor4

    Summary: Richtext editor plugin for integrating CKeditor 4 with acs-templating
    Maturity: Mature
    This package depends on: acs-templating acs-tcl attachments
    Packages that depend on richtext-ckeditor4: xowiki
    Package parameters:
    Fully featured "Spell Check As You Type" based on Please note that the spellchecked words are transferred to that site, so you might be cautious to activate this feature for confidential content. (default false, type string, scope instance)

    Bug Tracker Summary for Package: richtext-ckeditor4

    There is no package with the name "richtext-ckeditor4" known to bug-tracker.

    Code Metrics Summary for Package: richtext-ckeditor4

    # Tcl Procs 9
    # Tcl Lines 611
    # Tcl Blank Lines 87
    # Tcl Comment Lines 122
    # Automated Tests 0
    # Stored Procedures PG: 0 ORA: 0
    # SQL Lines PG: 0 (blank 1 comments 0) ORA: 0 (blank 1 comments 0)
    # ADP pages 1
    # ADP lines 7
    # Include pages (richtext-ckeditor4/lib/) 1
    # Documentation pages 0
    # Documentation lines 0
    Browse Source API-browser

    In general, the CKEditor can be used via CDN (zero configuration, default) or via local files. One can use /acs-admin/ (section "Site-wide Service Administration" to download a version to your local site to reduce latency or to use local modifications. By default, the "standard" preset is downloaded. By altering the variable "ck_package" in packages/richtext-ckeditor4/tcl/richtext-procs, one can download other presets as well (see ).

    The CKEditor widget can be used at least in two scenarios: (a) as a richtext-widget or (b) within xowiki as a class of a form-field.

    • (a) Here is an example for the use of the richtext widget configured for ckeditor4, showing some options:
          {label "CKEditor"}
          {html {rows 15 cols 50}}
          {options {
              editor ckeditor4
              plugins wsc
              extraAllowedContent "u;span{color}"}

      This minimal example should work with the "standard" distribution of CKEditor and adds the "wsc" (Web Spell Checker) plugin, and allows the tag <u>u and <span style="color:...">...</span> to be used in the content. Otherwise, these flags are removed by the context filter of the editor (for details, see CKEditor documentation ). Additional "options" are "skin" and "customConfig", where the latter refers to a JavaScript file which can be used for detailed configuration (for more details, see!/guide/dev_configuration ).

      Note, that the usual constraints for richtext widgets holds like for all other richtext implementations (e.g. the editor will only be activated, if UseHtmlAreaForRichtextP is set to true).

    • (b) when used as a form-field within xowiki forms, there are detailed config options available: mode, displayMode, skin, toolbar, CSSclass, uiColor, allowedContent, customConfig, extraPlugins, extraAllowedContent, templatesFiles, templates, contentsCss, imageSelectorDialog, and additionalConfigOptions. A short introduction to form-fields is in . One should set the PreferredRichtextEditor (xowiki global parameter) to ckeditor4.

    Upgrade to OpenACS 5.9

    Created by Gustaf Neumann, last modified by Gustaf Neumann 02 Apr 2019, at 11:06 AM

    Upgrades from earlier version than OpenACS 5.8 should read upgrade-oacs-5-8.

    OpenACS 5.9 requires PostgreSQL 9.0 or newer and XOTcl 2.0 or newer (part of the nsf package). XOTcl 2.0 can be installed e.g. via install-ns, or from Debian sid , or from sources . In order to check the versions of these packages already installed in your OpenACS installation, check the output of /xotcl/version-numbers in your installation.

    Before upgrading to OpenACS 5.9, upgrade all packages in your current installation to recent versions in your OpenACS 5.8 installation (i.e. in the oacs-5-8 channel, especially if you are using edit-this-page, which has bugs in its data model that can complicate the oacs-5-9 installation).

    In general it is always recommended to backup your current installation before overwriting it. Make e.g. a tar archive of all files of the OpenACS tree and a database dump.

    After upgrading the packages in the oacs-5-8 channel,  the following steps are recommended:

    • Restart the server with OpenACS 5.8
    • Install newest version of the source files (e.g. from the OpenACS 5.9 tar distributions, or install/upgrade from the oacs-5-9 branch from cvs),
    • Upgrade the acs-core packages via package manager, restart server
    • Upgrade/install application packages via package manager as needed (from file-system or from repository)

    To upgrade from OpenACS 5.9.0 to OpenACS 5.9.1 it is recommended to upgrade via tar ball or via CVS. Upgrade from repository works for NaviServer, but leads to an error after the install steps with AOLserver (the installation is OK, after a restart, everything is OK).


    Step by step upgrade from OpenACS 5.8 directly to OpenACS 5.9.1

    The following steps assume, you have a plain, not modified version of OpenACS running.

    1. Upgrade to the latest version of OpenACS 5.8, e.g. via
         cvs -r oacs-5-8 openacs-4
      Restart the server and make sure, you have upgrade all packages;
      under /acs-admin/apm/ you should see a Kernel like 5.8.3d2 running.
    2. Get release tar file
      Get the tar file of openacs-5.9.1, unpack it (e.g. under /usr/local), copy content over your current installation
         cd openacs-4
         cp -r /usr/local/openacs-5.9.1/* .
      and restart server.
    3. Upgrade packages:
      Browse to /acs-admin/install click on "upgrade from local", select all packages, restart server - done.

    In case, you have a locally modified version of OpenACS, but you have not modified the kernel packages, then make sure to get the tar file of the core packages in step (2), proceed as described, upgrade the acs-core packages first and then the application packages of your installation.

    In case you have in your installation as well changes in the acs-core packages (which is not recommended, but it happens), then get the diffs (you local changes) between the acs-core packages of oacs-5-8 and your installation, proceed as with the unmodified acs-core packages (paragraph above) and apply/merge your local changes after upgrading.

    These steps are working also with recent versions of PostgreSQL such as 11.1.

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

    Popular tags

    17 , 5.9.0 , 5.9.1 , ad_form , ADP , ajax , aolserver , asynchronous , bgdelivery , bootstrap , bugtracker , CentOS , COMET , compatibility , CSP , CSRF , cvs , debian , emacs , engineering-standards , fedora , FreeBSD , guidelines , host-node-map , hstore , includelets , install , installation , installers , install-ns
    No registered users in community xowiki
    in last 30 minutes