master
parent
b2d0a940d8
commit
2aaab7db29
2
Makefile
2
Makefile
|
@ -1,5 +1,5 @@
|
||||||
all:
|
all:
|
||||||
./ikiwiki doc html --wikiname="ikiwiki" --verbose --offline
|
./ikiwiki doc html --wikiname="ikiwiki" --verbose --nosvn
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf html
|
rm -rf html
|
||||||
|
|
|
@ -8,3 +8,5 @@
|
||||||
show as just Baz there.
|
show as just Baz there.
|
||||||
* If I try to do a web commit, to a svn+ssh repo, it fails with
|
* If I try to do a web commit, to a svn+ssh repo, it fails with
|
||||||
"Host key verification failed."
|
"Host key verification failed."
|
||||||
|
I think that the setuid isn't fully taking; it should be running as me,
|
||||||
|
but commit log shows www-data. So maybe it has the wrong username?
|
||||||
|
|
|
@ -32,6 +32,8 @@ unchanged by ikiwiki as it builds your wiki. So you can check in an image,
|
||||||
program, or other special file and link to it from your wiki pages.
|
program, or other special file and link to it from your wiki pages.
|
||||||
ikiwiki also supports making one page that is a [[SubPage]] of another.
|
ikiwiki also supports making one page that is a [[SubPage]] of another.
|
||||||
|
|
||||||
|
[[Setup]] has a tutorial for setting up ikiwki.
|
||||||
|
|
||||||
[[TODO]] lists things that need to be added to ikiwiki before most people
|
[[TODO]] lists things that need to be added to ikiwiki before most people
|
||||||
would consider it a full-fledged wiki.
|
would consider it a full-fledged wiki.
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
The best way to run ikiwiki in a [[Subversion]] post-commit hook is using
|
The best way to run ikiwiki in a [[Subversion]] post-commit hook is using
|
||||||
a wrapper, which can be generated using `ikiwiki --gen-wrapper`.
|
a wrapper, which can be generated using `ikiwiki --wrapper`.
|
||||||
|
|
||||||
First, set up the subversion checkout that ikiwiki will update and compile
|
First, set up the subversion checkout that ikiwiki will update and compile
|
||||||
into your wiki at each subversion commit. Run ikiwiki a few times by hand
|
into your wiki at each subversion commit. Run ikiwiki a few times by hand
|
||||||
to get a feel for it. Now, generate the wrapper by adding "--gen-wrapper"
|
to get a feel for it. Now, generate the wrapper by adding "--wrapper"
|
||||||
to whatever command line you've been using to run ikiwiki. For example:
|
to whatever command line you've been using to run ikiwiki. For example:
|
||||||
|
|
||||||
~/wiki-checkout> ikiwiki . ~/public_html/wiki
|
~/wiki-checkout> ikiwiki . ~/public_html/wiki
|
||||||
~/wiki-checkout> ikiwiki . ~/public_html/wiki --gen-wrapper
|
~/wiki-checkout> ikiwiki . ~/public_html/wiki --wrapper
|
||||||
successfully generated ikiwiki-wrap
|
successfully generated ikiwiki-wrap
|
||||||
|
|
||||||
The generated wrapper is a C program that is designed to safely be made
|
The generated wrapper is a C program that is designed to safely be made
|
||||||
suid if necessary. It's hardcoded to run ikiwiki with the settings
|
suid if necessary. It's hardcoded to run ikiwiki with the settings
|
||||||
specified when you ran --gen-wrapper, and can only be used to update and
|
specified when you ran --wrapper, and can only be used to update and
|
||||||
compile that one checkout into the specified html directory.
|
compile that one checkout into the specified html directory.
|
||||||
|
|
||||||
Now, put the wrapper somewhere convenient, and create a post-commit hook
|
Now, put the wrapper somewhere convenient, and create a post-commit hook
|
||||||
script in your subversion repository for the wiki. All the post-commit
|
script in your subversion repository for the wiki. All the post-commit
|
||||||
hook has to do is run ikiwiki-wrap (with no parameters).
|
hook has to do is run the wrapper (with no parameters).
|
||||||
|
|
||||||
Depending on your Subversion setup, the post-commit hook might end up
|
Depending on your Subversion setup, the post-commit hook might end up
|
||||||
getting called by users who have write access to subversion, but not to
|
getting called by users who have write access to subversion, but not to
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
So you want to set up your own wiki using ikiwiki? This turorial will walk
|
||||||
|
you through setting up a wiki that is stored in [[Subversion]] and that has
|
||||||
|
optional support for commits from the web.
|
||||||
|
|
||||||
|
1. [[Install]] ikiwiki.
|
||||||
|
|
||||||
|
apt-get install ikiwiki
|
||||||
|
|
||||||
|
2. Create the subversion repository for your wiki.
|
||||||
|
|
||||||
|
svnadmin create /svn/wikirepo
|
||||||
|
svn mkdir file:///svn/wikirepo/trunk -m create
|
||||||
|
|
||||||
|
3. Check out the repository to make the working copy that ikiwiki will use.
|
||||||
|
|
||||||
|
svn co file:///svn/wikirepo/trunk ~/wikiwc
|
||||||
|
|
||||||
|
4. Create some files them into subversion.
|
||||||
|
|
||||||
|
echo "Welcome to my empty wiki." > ~/wikiwc/index.mdwn
|
||||||
|
echo "Feel free to edit this page" > ~/wikiwc/sandbox.mdwn
|
||||||
|
svn add ~/wikiwc/*.mdwn
|
||||||
|
svn commit ~/wikiwc -m add
|
||||||
|
|
||||||
|
5. Build your wiki for the first time.
|
||||||
|
|
||||||
|
ikiwiki --verbose ~/wikiwc/ ~/public_html/wiki/ \
|
||||||
|
--url=http://host/~you/wiki/
|
||||||
|
|
||||||
|
Replace the url with the right url to your wiki. You should now
|
||||||
|
be able to visit the url and see your page that you created earlier.
|
||||||
|
|
||||||
|
6. Repeat steps 4 and 5 as desired, editing or adding pages and rebuilding
|
||||||
|
the wiki. You can play around with other ikiwiki parameters such as
|
||||||
|
--wikiname too. Get conformatble with its command line.
|
||||||
|
|
||||||
|
7. Set up a Subversion [[post-commit]] hook to automatically rebuild your
|
||||||
|
wiki when you commit to it.
|
||||||
|
|
||||||
|
ikiwiki ~/wikiwc/ ~/public_html/wiki/ \
|
||||||
|
--url=http://host/~you/wiki/ --wrapper
|
||||||
|
mv ikiwiki-wrap /svn/wikirepo/hooks/post-commit
|
||||||
|
|
||||||
|
8. Set up a [[CGI]] to allow editing the wiki from the web.
|
||||||
|
|
||||||
|
ikiwiki ~/wikiwc/ ~/public_html/wiki/ \
|
||||||
|
--url=http://host/~you/wiki/ --wrapper --cgi
|
||||||
|
chmod 6755 ikiwiki-wrap
|
||||||
|
mv wrapper ~/public_html/wiki/ikiwki.cgi
|
||||||
|
|
||||||
|
Note that this assumes that your web server will run CGI scripts from
|
||||||
|
your public_html directory. You might need to put it somewhere else
|
||||||
|
depending on your web server configuration.
|
||||||
|
|
||||||
|
9. Add links to the CGI to all the pages in your wiki, and update your
|
||||||
|
post-commit hook to add such links when updating the wiki in the
|
||||||
|
future. Note the use of the [[WrapperParamsTrick]].
|
||||||
|
|
||||||
|
ikiwiki $(/svn/wikirepo/hooks/post-commit --params) --rebuild
|
||||||
|
ikiwiki $(/svn/wikirepo/hooks/post-commit --params) \
|
||||||
|
--cgiurl=http://host/~you/wiki/ikiwiki.cgi \
|
||||||
|
--wrapper
|
||||||
|
mv ikiwiki-wrap /svn/wikirepo/hooks/post-commit
|
||||||
|
|
||||||
|
Be sure to change the cgiurl to the actual url to the wiki.cgi you
|
||||||
|
installed in step 9.
|
||||||
|
|
||||||
|
10. Enjoy your new wiki!
|
|
@ -0,0 +1,20 @@
|
||||||
|
ikiwiki --wrapper can be used to generate a wrapper
|
||||||
|
program that runs ikiwiki with the specified parameters. This is used for
|
||||||
|
[[post-commit]] hooks, [[CGI]], etc, both for convenience and because these
|
||||||
|
things often need suid wrapper scripts to make ikiwiki run as the right
|
||||||
|
user.
|
||||||
|
|
||||||
|
The generated wrapper is a binary program. What if you want to regenerate
|
||||||
|
it with different parameters, or just run ikiwiki like it would but with
|
||||||
|
some parameter changed? To easily accomomplish this, the wrappers all
|
||||||
|
support being run with --params, which causes them to print out the
|
||||||
|
parameters they run ikiwiki with.
|
||||||
|
|
||||||
|
You can use this trick to regenerate a wrapper, adding or changing a
|
||||||
|
parameter:
|
||||||
|
|
||||||
|
ikiwiki $(./ikiwiki-wrap --params) --wikiname="newname" --wrapper
|
||||||
|
|
||||||
|
Or just to run ikiwiki like the wrapper would, and add a parameter:
|
||||||
|
|
||||||
|
ikiwiki $(./ikiwiki-wrap --params) --rebuild
|
33
ikiwiki
33
ikiwiki
|
@ -498,12 +498,18 @@ sub gen_wrapper ($$) {
|
||||||
error("$this doesn't seem to be executable");
|
error("$this doesn't seem to be executable");
|
||||||
}
|
}
|
||||||
|
|
||||||
my $call=qq{"$this", "$this", "$srcdir", "$destdir", "--wikiname=$wikiname"};
|
my @params=($srcdir, $destdir, "--wikiname=$wikiname");
|
||||||
$call.=', "--verbose"' if $verbose;
|
push @params, "--verbose" if $verbose;
|
||||||
$call.=', "--rebuild"' if $rebuild;
|
push @params, "--rebuild" if $rebuild;
|
||||||
$call.=', "--nosvn"' if !$svn;
|
push @params, "--nosvn" if !$svn;
|
||||||
$call.=', "--cgi"' if $cgi;
|
push @params, "--cgi" if $cgi;
|
||||||
$call.=', "--url='.$url.'"' if $url;
|
push @params, "--url=$url" if $url;
|
||||||
|
my $params=join(" ", @params);
|
||||||
|
my $call='';
|
||||||
|
foreach my $p ($this, $this, @params) {
|
||||||
|
$call.=qq{"$p", };
|
||||||
|
}
|
||||||
|
$call.="NULL";
|
||||||
|
|
||||||
my @envsave;
|
my @envsave;
|
||||||
push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI
|
push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI
|
||||||
|
@ -511,8 +517,8 @@ sub gen_wrapper ($$) {
|
||||||
my $envsave="";
|
my $envsave="";
|
||||||
foreach my $var (@envsave) {
|
foreach my $var (@envsave) {
|
||||||
$envsave.=<<"EOF"
|
$envsave.=<<"EOF"
|
||||||
if ((s=getenv("$var")))
|
if ((s=getenv("$var")))
|
||||||
asprintf(&newenviron[i++], "%s=%s", "$var", s);
|
asprintf(&newenviron[i++], "%s=%s", "$var", s);
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,17 +533,22 @@ EOF
|
||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
int main (void) {
|
int main (int argc, char **argv) {
|
||||||
/* Sanitize environment. */
|
/* Sanitize environment. */
|
||||||
char *s;
|
char *s;
|
||||||
char *newenviron[$#envsave+3];
|
char *newenviron[$#envsave+3];
|
||||||
int i=0;
|
int i=0;
|
||||||
$envsave;
|
$envsave
|
||||||
newenviron[i++]="HOME=$ENV{HOME}";
|
newenviron[i++]="HOME=$ENV{HOME}";
|
||||||
newenviron[i]=NULL;
|
newenviron[i]=NULL;
|
||||||
environ=newenviron;
|
environ=newenviron;
|
||||||
|
|
||||||
execl($call, NULL);
|
if (argc == 2 && strcmp(argv[1], "--params") == 0) {
|
||||||
|
printf("$params\\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
execl($call);
|
||||||
perror("failed to run $this");
|
perror("failed to run $this");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue