There are a few ways to install Ubuntu without a CD. The following worked for me using an ISO:
1. Create a directory named ubuntu on a spare partition
2. Download the alternate cd ISO via http://releases.ubuntu.com and place in ubuntu directory
3. Download vmlimuz and initrd.gz from http://archive.ubuntu.com/ubuntu/dists/intrepid/main/installer-i386/current/images/hd-media/ to ubuntu dir
4. Add the following to grub:
Note: hd0,2 = /dev/sda3, my spare partition
For some reason this only worked for 8.10 intrepid, not 8.04 hardy. I had to use https://help.ubuntu.com/community/Installation/NetbootInstallFromInternet for 8.04.
The following is how I used Drupal 5, the popular CMS, to create the website for the Tampa Bay Independent Media Center in 2007. While my goal was a community-based news site, I believe this can be useful for anyone looking to create a dynamic yet simple and clean website. No knowledge of HTML, CSS, PHP or other markup/programming language is basically necessary, as I was able to build this entire website by simply configuring Drupal from the graphical administrative interface (besides some small optional hacks for aesthetical purposes).
Installing Drupal is very straightforward. Many hosts even come with Fantastico, which can automatically install Drupal. Many times it does come with an outdated version however, so I would recommend just installing manually. This can be easily done by checking out this brief how-to (if you don’t want to mess with SSH or don’t have shell access, you can skip step 1 and simply unpack the files on your local computer with WinRAR and upload them with a FTP client to your host).
I use A2hosting.com, which has been around for a while, seems to have decent prices and good support (I have since used the “Walmarts” of hosting, Godaddy and Dreamhost, and found that while A2hosting.com is a few bucks more expensive, it is noticeably better in terms of server response and tech support). I also found this 20% discount coupon, “20PERCENTOFF,” which can be entered at checkout. For Windows, I recommend the free FTP client FileZilla for uploading files to your host and HTML-Kit for editing files once you upload them to your host (to edit files on your host go to Workspace>>Add Folder / FTP Server in HTML-Kit).
A Brief Introduction to Drupal Terminology
Drupal appeared a little overwhelming at first. Not only does it have a myriad of options and potential customizations, but it also uses a lot of proprietary terms. Below I will attempt some clarification, but don’t worry about immediately mastering these:
- Nodes: a unit of generated content, like a page or post
- Modules: plugins that are created by the Drupal community and hosted on Drupal’s website
- Theme: a “skin” that affects the graphical rendering of the site (colors, layout, etc.)
- Block: a section of the website that is able to contain content; by default there is a navigation sidebar and a top menu
- Taxonomy: Drupal’s implementation of categories, featuring customizable hierarchy (like sub-categories or mere lists) and symmetry (related categories)
Selecting a Theme
A theme that is simple and well-coded will make future customizations much easier. Since Drupal is continually being updated to fix bugs and add new features, an up to date theme is important as well. Themes are hosted at drupal.org/project/themes and themegarden.org has live previews of many themes. Once you have a selected theme, upload it to /public_html/sites/all/themes/themename on your host.
One of the strongest points of Drupal is its customizability. There are hundreds of community-developed modules, extending many features and allowing much flexibility. I would recommend using the latest dev version of modules if available, since they usually include the most recent bug fixes. When you download a module, make sure you check the README.txt so you don’t miss any required installation or configuration instructions (like enabling permissions, see the next section). The modules I am currently using are:
- Actions: automatically executes an action, like sending an email, when certain conditions are met
- Administration Menu: rather than using the default navigation menu to access the administrative back end, this creates a small and fast AJAX version of the administration menu located on the top of your site. To enable with my theme, I had edit my theme’s page.tpl.php file per the module’s instructions.
- Calendar: used with the Views and Event module for a calendar of events
- Content Construction Kit: aka CCK, allows custom content types (like articles and events) and custom fields (like a “source” text box for users to provide the original link from where they got an article)
- Comment Upload: provides the ability to add attachments in a comment
- Date: necessary for the Event module
- Embedded Field: builds off of CCK to allow media like You Tube videos to be embedded
- Event: creates a custom “event” content type
- Form Store: used with MyCaptcha to put those annoying tests on custom content types (events and articles) to stop automated spam bots
- Form Filter: removes unwanted things from forms without hacking code
- Hidden: rather than deleting unwanted user-submitted content, this “hides” (i.e. moves) content either by filters, user reporting, or manually. Since the content remains accessible via a “Hidden” link in the navigation menu, it’s a good way to ensure transparency and prevent abuse of admin privileges.
- Location: allows location info to be entered for an event (or any other content type) and then generates a link to a google map
- Login Menu: adds a Login link on the navigation menu that shows just for users that are not logged in
- MyCaptcha: see the Form Store module above
- Override Node Options: creates a permission for a special class of users (defined via roles) to publish a story to the front page, which is disabled for all users except admins by default
- Pathauto: automatically generates a custom URL alias based on the title of the content, i.e. rather than http://sitename.com/node/234/ a story titled “U.S. Government Crumbles” will be http://sitename.com/article/us-government-crumbles
- Persistent Login: adds a “Remember me” option
- Safe HTML: filters posts to make them look nice
- Search 404: automatically performs a search and redirects to a match rather than display 404 error for pages not found
- Similar by Terms: creates a “Similar” block below articles
- Taxonomy Manager: uses AJAX to overhaul the clunky interface for managing Taxonomy
- TinyMCE: a rich text editor replacement (I now like FCKeditor better for its easier setup and customizations)
- Update Status: checks for updates for most modules
- Upload Preview: adds a preview when attaching images and then displays the preview rather than just listing attachments
- Views: creates all kinds of custom blocks and pages. I use it for the Eventlist and Newswire
- Vote Up Down Package: adds digg-like voting. I use this to automatically promote a story to the front page if it receives a certain number of yes votes.
- Voting Actions: used in conjunction with the above
- XML Sitemap: creates a sitemap to for better interaction with search engines
Creating Content Types and Taxonomy
After installing the modules, I created an ‘article’ and ‘event’ content type in Content management>>Content type. I changed “Default options” under “Workflow” to “Published” and “Create new revision” so when an article or event is submitted it will go to the Newswire/Eventlist on the side and create a new revision by default when it is edited, allowing anyone with the “view revisions” permission to see any changes.
In Content management>>Categories, I created a ‘topic’ and ‘issue’ categories for articles and events. Using the Taxonomy Manager module in Content management>>Taxonomy Manager (if you can’t see this see below for adding the proper permissions), I added terms or sub-categories for each. See my list here.
Roles and Permissions
Many modules require the correct permissions to administer or even just work. The first thing I did was create an admin role in User management>>Roles and checked all available permissions in User management>>Access control. I also gave anonymous users all the available view/access permissions (except “access administration pages” of course) and create permissions for articles, events, and forum topics, except for editing their own content. This is because Drupal does not distinguish between one unauthenticated user from the next (there is a hack somewhere to fix this if you really want to though). I gave all the same permissions for authenticated users plus allowing them to edit their own content.
Using Views to Create Dynamic Blocks
I created the Newswire, a list of incoming user-submitted stories, by going to Site building>>Views>>Add. In the page view of the Newswire, I set view type to teaser list and used a pager so it would not list all the stories on a single page. For the block, I used a list view with a ‘more link’ as well as fields set to node: title, filters to node: front page equals no, node type is article, and node: published equals yes, and sort criteria set to descending.
For the Eventlist, I just provided a block, setting the page view as a calendar separately. View type is list view with a ‘more link’ as well as fields set to node: title and event: start time as short date, arguments to calendar: year display all values, filters to node: type is event and event: start date is greater than now, and sort criteria set to event: start time ascending. To properly display the calendar of events, I enabled the default calendar view located under “Default Views” in Site building>>Views>>List, adding the field event: start time as short date and node: type is event filter, removing the filter node: published equals yes.
Keeping the site well-oiled can prevent potential interruptions and headaches. Cron must be ran every so often to index all the content for Search and Aggregator (used for RSS feeds). If caching is enabled, cron will also refresh this. Through my host’s cPanel, I set cron to run every 4 hours with the command "curl –silent –compressed http://tampabay.indymedia.org/cron.php".
Keeping modules up to date is key to ensure the site is always performing well and necessary to patch bugs. The Update Status module automatically checks for updates after cron runs, which can be viewed in Logs>>Available updates.
When updating a module, simply delete the old version’s folder (ensuring any customizations are backed up) and upload the new version with a FTP client. Be sure to check Logs>>Status report in case Drupal’s database needs to be updated by running update.php.
There are many more minor settings and customizatons I did to get Tampabay Indymedia up to its current state, but many of these are unique to the site’s purpose and my aesthetical tastes. The above guide should be sufficient to get a nice site up and running. If not, please feel free to comment below. Also, I have found the documentation and many people in the community at drupal.org to be extremely helpful. Good luck and have fun with Drupal!