From f28b57526ce7a4fe1337dda07533862d918f59b6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 27 Jul 2008 01:39:11 -0400 Subject: [PATCH] setup automator "ikiwiki -setup /etc/ikiwiki/simple.setup" can be used set up a new wiki in seconds --- IkiWiki/Setup/Automator.pm | 95 ++++++++++++++++++++++++++++++++++++++ debian/changelog | 2 + doc/setup.mdwn | 14 ++++++ simple.setup | 13 ++++++ 4 files changed, 124 insertions(+) create mode 100644 IkiWiki/Setup/Automator.pm diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm new file mode 100644 index 000000000..8cf158db2 --- /dev/null +++ b/IkiWiki/Setup/Automator.pm @@ -0,0 +1,95 @@ +#!/usr/bin/perl +# Ikiwiki setup automator. + +package IkiWiki::Setup::Automator; + +use warnings; +use strict; +use IkiWiki; +use Term::ReadLine; +use File::Path; + +sub ask ($$) { #{{{ + my ($question, $default)=@_; + + my $r=Term::ReadLine->new("ikiwiki"); + $r->readline($question." ", $default); +} #}}} + +sub import (@) { #{{{ + my %setup=@_; + + # Sanitize this to avoid problimatic directory names. + $setup{wikiname}=~s/[^-A-Za-z0-9_] //g; + if (! length $setup{wikiname}) { + die "you must enter a wikiname\n"; + } + + # Avoid overwriting any existing files. + foreach my $key (qw{srcdir destdir repository setupfile}) { + next unless exists $setup{$key}; + my $add=""; + while (-e $setup{$key}.$add) { + $add=1 if ! $add; + $add++; + } + $setup{$key}.=$add; + } + + print "\n\nSetting up $setup{wikiname} ...\n"; + + # Set up the repository. + mkpath($setup{srcdir}) || die "mkdir $setup{srcdir}: $!"; + delete $setup{repository} if ! $setup{rcs} || $setup{rcs}=~/bzr|mercurial/; + if ($setup{rcs}) { + my @params=($setup{rcs}, $setup{srcdir}); + push @params, $setup{repository} if exists $setup{repository}; + if (system("ikiwiki-makerepo", @params) != 0) { + die "failed: ikiwiki-makerepo @params"; + } + } + + # Generate setup file. + my @params=( + "--dumpsetup", $setup{setupfile}, + "--wikiname", $setup{wikiname}, + "--url", $setup{url}, + "--cgiurl", $setup{cgiurl} + ); + push @params, "--rcs", $setup{rcs} if $setup{rcs}; + if (exists $setup{add_plugins}) { + foreach my $plugin (@{$setup{add_plugins}}) { + push @params, "--plugin", $plugin; + } + } + if (exists $setup{disable_plugins}) { + foreach my $plugin (@{$setup{disable_plugins}}) { + push @params, "--disable-plugin", $plugin; + } + } + foreach my $key (keys %setup) { + next if $key =~ /^(disable_plugins|add_plugins|setupfile|wikiname|url|cgiurl||srcdir|destdir|repository)$/; + push @params, "--set", "$key=$setup{$key}"; + } + if (system("ikiwiki", @params, $setup{srcdir}, $setup{destdir}) != 0) { + die "failed: ikiwiki @params"; + } + + # Build the wiki. + mkpath($setup{destdir}) || die "mkdir $setup{destdir}: $!"; + if (system("ikiwiki", "--setup", $setup{setupfile}) != 0) { + die "ikiwiki --setup $setup{setupfile} failed"; + } + + # Done! + print "\n\nSuccessfully set up $setup{wikiname}:\n"; + foreach my $key (qw{url srcdir destdir repository setupfile}) { + next unless exists $setup{$key}; + my $value=$setup{$key}; + $value=~s/^\Q$ENV{HOME}\E\//~\//; + print "\t$key: ".(" " x (10 - length($key)))." $value\n"; + } + exit 0; +} #}}} + +1 diff --git a/debian/changelog b/debian/changelog index 982c55796..e146bf8d4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,7 @@ ikiwiki (2.60) UNRELEASED; urgency=low + * Starting with this version, "ikiwiki -setup /etc/ikiwiki/simple.setup" + can be used set up a new wiki in seconds. * Add getsetup hook, all plugins that add fields to %config should use it. * ikiwiki --dumpsetup can generate a nice setup file snapshotting ikiwiki's current configuration. diff --git a/doc/setup.mdwn b/doc/setup.mdwn index 9c67c2a6c..bc93da7b3 100644 --- a/doc/setup.mdwn +++ b/doc/setup.mdwn @@ -7,6 +7,20 @@ This tutorial will walk you through setting up a wiki with ikiwiki. If you're using Debian or Ubuntu, ikiwiki is an `apt-get install ikiwiki` away. If you're not, see the [[download]] and [[install]] pages. +## Quick start + +If you'd like to set up a wiki now, and learn more later, just run this command +and answer a couple of questions. + + % ikiwiki -setup /etc/ikiwiki/simple.setup + What will the wiki be named? mywiki + What revision control system to use? git + +Wait for it to tell you an url for your new wiki.. Done! + +(If the CGI doesn't seem to let you edit pages, you might need to +[[configure_apache|apache_cgi]]).) + ## Decide where your wiki's files will go. As a wiki compiler, ikiwiki builds a wiki from files in a source directory, diff --git a/simple.setup b/simple.setup index c7be9a7f3..7c2e635c8 100644 --- a/simple.setup +++ b/simple.setup @@ -16,6 +16,7 @@ our $wikiname=IkiWiki::Setup::Automator::ask( "What will the wiki be named?", "wiki"); our $rcs=IkiWiki::Setup::Automator::ask( "What revision control system to use?", "git"); +our $hostname=`hostname -f`; chomp $hostname; IkiWiki::Setup::Automator::import( wikiname => $wikiname, @@ -24,4 +25,16 @@ IkiWiki::Setup::Automator::import( destdir => "$ENV{HOME}/public_html/$wikiname", repository => "$ENV{HOME}/$wikiname.$rcs", setupfile => "$ENV{HOME}/$wikiname.setup", + url => "http://$hostname/~$ENV{USER}/$wikiname", + cgiurl => "http://$hostname/~$ENV{USER}/$wikiname/ikiwiki.cgi", + cgi_wrapper => "$ENV{HOME}/public_html/$wikiname/ikiwiki.cgi", + adminemail => "$ENV{USER}\@$hostname", + add_plugins => [qw{ goodstuff }], + disable_plugins => [qw{ }], + libdir => "$ENV{HOME}/.ikiwiki", + rss => 1, + atom => 1, + syslog => 1, + prefix_directives => 1, + hardlink => 1, ); -- 2.26.2