Install Profiles Packing on Drupal.org - Funding obtained, feedback welcome
Note: this has now been deployed on drupal.org. See the announcement post: Fully packaged Drupal distributions now deployed on drupal.org.
Since the 5.0 release, Drupal core has included an installer that supports installation profiles to setup and configure a site for a certain use-case. In theory this allows for people to create a better "out of the box" solution by configuring Drupal like a wiki, a conference, or a publishing site. If done right, installation profiles have the potential to help end-users get sites done faster and accelerate the adoption of Drupal. However, this promise has yet to be realized, and this core Drupal feature is currently being vastly underutilized.
As part of their grants from the John S. and James L. Knight Foundation, Deproduction and Quiddities want to help realize the benefit that install profiles have to offer. The Drupal Association, with the support of individual and corporate sponsors, has put forth a matching grant to help see that it meets its mission of supporting the Drupal project. The potential to help address the usability problems of people trying to get started with Drupal is truly enormous.
Read on for details on how installation profiles work, why they are important, how packaging them will help, and the technical decisions behind the way the packaging scripts will work. Now is the chance to provide feedback which might make it into the code before it goes live by the end of November.
Why do installation profiles need help?
The main problem holding back the full potential of installation profiles is the lack of a packaging tool for contributed modules. Unless the profile is built on core alone, using an installation profile involves: downloading core, downloading an installation profile, unpacking both and putting the installation profile into a very specific directory inside the core directory tree, trying to find all the required modules in the documentation of the installation profile (if that is even complete), going back to drupal.org to download some set of requirements, placing those in the right directories inside your core installation, and finally visiting the installer page to "start". This totally cuts off the "ease of use" that installation profiles aimed to address.
To fix this usability problem, we're going to provide a mechanism for the authors of installation profiles to include some metadata about the dependent modules and themes. The drupal.org packaging scripts would then do all of this work automatically and create a single file containing the latest copy of Drupal core, the installation profile itself, and all the required modules and themes that it depends on. This would give end-users a three-step process for getting started with a site that was configured specifically for their use-case: 1) find an installation profile that suits their needs, 2) download one file and unpack it in their web root, 3) visit install.php.
About the funders
Deproduction and Quiddities are contributing $2,500 each to develop a Packaged Install Profile in Drupal and the Drupal Association will match those contributions.
With support from the Knight Foundation, both organizations are working on projects that use Drupal to help community media organizations improve their services:
Quiddities is working with public radio stations to create a Drupal install, Radio Engage, with features that can support the online web presence of radio stations. The Radio Engage toolset consists of existing Drupal modules that will create dynamic station sites that integrate internal and external station content and provide a platform for user engagement. The platform will launch this fall at KUSP in Santa Cruz and KALW in San Francisco and then be available as a install profile.
Deproduction has been building up the Open Media Project for a year and has successfully installed the Open Media Project toolset in seven public access stations through their Knight-funded beta test. Those television stations include Amherst Community Television, Boston Neighborhood Network, channelAustin, Davis Media Access, Denver Open Media, Portland Community Television and Urbana Public Television. Pioneering an initiative to leverage Public Access TV stations to close the digital divide, the Open Media Project, openmediaproject.org, seeks to put the power of the media in the hands of the people by making it easier for all communities to share and distribute content online.
The Packaged Install Profile will make it easier to complete the install process for new users in public radio and public access TV. This project will create a sustainable solution on Drupal.org for updating the core features of the toolset used by the Open Media Project and Radio Engage.
- Funders: Quiddities, Margaret Rosas; Deproduction, Tony Shawcross
- Matching organization: Drupal Association, represented by Greg Knaddison, Boris Mann.
- Service providers: 3281d Consulting, Derek Wright and Chad Phillips.
Scope of work
To realize the full potential of installation profiles, the following tasks are necessary:
- Finalize the structure and contents of the packaging metadata files used by installation profiles. A lot of thought and community input has already gone into this problem via discussions on groups.drupal.org, the developer mailing list, and the issue queue.
- Modify the packaging script to parse the packaging metadata files, checkout all of the required code and assemble it into the right directory structure, package it into a single file, etc.
- Writing better error-propagation and recovery when maintainers incorrectly define their package. This problem already exists for translation packages, where bugs in the .po files cause the packaging script to refuse to create a translation package. However, there's no way for maintainers to fix these errors without creating a whole new release. We're going to face the same problem with installation profile maintainers that have bugs in their packaging meta data files, so we'll want a way for them to validate their install profile before creating the release, or a way to fix these sorts of bugs and let the packaging script re-try.
- Documentation on how installation profile metadata files are defined, and how to use the resulting bundled packages.
- Identifying and mentoring a subset of the Drupal community who will deeply understand this system, and train them to be able to support the rest of the installation profile maintainer community. Once the system goes live, there will inevitably be questions and problems with it, and it's vital that there be a pool of people who can support the system going forward.
Limitations of Installation Profiles and related work
Even once installation profiles are packaged into single distributions with all the resulting usability benefits, there are still limitations in their usefulness. For example, you can not run an installation profile on an existing site to enable a set of functionality. However, the proposal above would immediately (and retroactively) improve functionality already present in Drupal core dating all the way back to Drupal 5. There are a lot of efforts to address this other need among Drupal contributions (spaces + features, patterns, etc. However, something like this will not be included in Drupal 7 core before the code freeze to address this need, so we should improve on the usability of the technology we already have. None of this would prevent another solution (in addition to installation profiles) in Drupal 8 or later that bundled code and configuration for various feature sets which could be enabled on existing sites. In fact, most of the technical solutions (files containing packaging meta info) would be reused.
Where to provide feedback and follow progress
Most of the discussions around all of this have been taking place in the Distribution profiles group on groups.drupal.org. Although most of the technical questions have already been answered, there might be other discussions posted there, so that'd be the place to watch.
Drupal version: Drupal 5.xDrupal 6.xDrupal 7.x