mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-27 10:44:33 +00:00
ikiwiki: Data in /var/lib & setup after install
- It is conventional to store application data in /var/lib/APPDIR instead of /var/APPDIR. Change ikiwiki data folder to /var/lib/ikiwiki. - After installing and before enabling and setting up basic configuration, performing any operation such as 'create' wiki/blog lead to silent errors. Do avoid this situation, perform a separate setup() operation soon after the package is installed.
This commit is contained in:
parent
cc97304925
commit
4e42486822
196
actions/ikiwiki
196
actions/ikiwiki
@ -31,14 +31,97 @@ CONFIG_FILE = '/etc/apache2/conf-available/ikiwiki.conf'
|
|||||||
SETUP_WIKI = '/etc/ikiwiki/plinth-wiki.setup'
|
SETUP_WIKI = '/etc/ikiwiki/plinth-wiki.setup'
|
||||||
SETUP_BLOG = '/etc/ikiwiki/plinth-blog.setup'
|
SETUP_BLOG = '/etc/ikiwiki/plinth-blog.setup'
|
||||||
SITE_PATH = '/var/www/ikiwiki'
|
SITE_PATH = '/var/www/ikiwiki'
|
||||||
WIKI_PATH = '/var/ikiwiki'
|
WIKI_PATH = '/var/lib/ikiwiki'
|
||||||
|
|
||||||
|
apache_cgi_configuration = '''
|
||||||
|
Alias /ikiwiki /var/www/ikiwiki
|
||||||
|
AddHandler cgi-script .cgi
|
||||||
|
|
||||||
|
<Directory /var/www/ikiwiki>
|
||||||
|
Options +ExecCGI
|
||||||
|
</Directory>
|
||||||
|
'''
|
||||||
|
|
||||||
|
ikiwiki_setup_automator = '''
|
||||||
|
#!/usr/bin/perl
|
||||||
|
# Ikiwiki setup automator for Plinth.
|
||||||
|
|
||||||
|
require IkiWiki::Setup::Automator;
|
||||||
|
|
||||||
|
our $wikiname=$ARGV[0];
|
||||||
|
our $admin=$ARGV[1];
|
||||||
|
if (($wikiname eq "") || ($admin eq "")) {
|
||||||
|
print "Usage: ikiwiki -setup /etc/ikiwiki/plinth-wiki.setup wiki_name admin_name";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
our $wikiname_short=IkiWiki::Setup::Automator::sanitize_wikiname($wikiname);
|
||||||
|
|
||||||
|
IkiWiki::Setup::Automator->import(
|
||||||
|
wikiname => $wikiname,
|
||||||
|
adminuser => [$admin],
|
||||||
|
rcs => "git",
|
||||||
|
srcdir => "/var/lib/ikiwiki/$wikiname_short",
|
||||||
|
destdir => "/var/www/ikiwiki/$wikiname_short",
|
||||||
|
repository => "/var/lib/ikiwiki/$wikiname_short.git",
|
||||||
|
dumpsetup => "/var/lib/ikiwiki/$wikiname_short.setup",
|
||||||
|
url => "/ikiwiki/$wikiname_short",
|
||||||
|
cgiurl => "/ikiwiki/$wikiname_short/ikiwiki.cgi",
|
||||||
|
cgi_wrapper => "/var/www/ikiwiki/$wikiname_short/ikiwiki.cgi",
|
||||||
|
add_plugins => [qw{goodstuff websetup httpauth}],
|
||||||
|
rss => 1,
|
||||||
|
atom => 1,
|
||||||
|
syslog => 1,
|
||||||
|
)
|
||||||
|
'''
|
||||||
|
|
||||||
|
ikiwiki_setup_automator_blog = '''
|
||||||
|
#!/usr/bin/perl
|
||||||
|
# Ikiwiki setup automator for Plinth (blog version).
|
||||||
|
|
||||||
|
require IkiWiki::Setup::Automator;
|
||||||
|
|
||||||
|
our $wikiname=$ARGV[0];
|
||||||
|
our $admin=$ARGV[1];
|
||||||
|
if (($wikiname eq "") || ($admin eq "")) {
|
||||||
|
print "Usage: ikiwiki -setup /etc/ikiwiki/plinth-blog.setup blog_name admin_name";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
our $wikiname_short=IkiWiki::Setup::Automator::sanitize_wikiname($wikiname);
|
||||||
|
|
||||||
|
IkiWiki::Setup::Automator->import(
|
||||||
|
wikiname => $wikiname,
|
||||||
|
adminuser => [$admin],
|
||||||
|
rcs => "git",
|
||||||
|
srcdir => "/var/lib/ikiwiki/$wikiname_short",
|
||||||
|
destdir => "/var/www/ikiwiki/$wikiname_short",
|
||||||
|
repository => "/var/lib/ikiwiki/$wikiname_short.git",
|
||||||
|
dumpsetup => "/var/lib/ikiwiki/$wikiname_short.setup",
|
||||||
|
url => "/ikiwiki/$wikiname_short",
|
||||||
|
cgiurl => "/ikiwiki/$wikiname_short/ikiwiki.cgi",
|
||||||
|
cgi_wrapper => "/var/www/ikiwiki/$wikiname_short/ikiwiki.cgi",
|
||||||
|
add_plugins => [qw{goodstuff websetup comments calendar sidebar trail httpauth}],
|
||||||
|
rss => 1,
|
||||||
|
atom => 1,
|
||||||
|
syslog => 1,
|
||||||
|
example => "blog",
|
||||||
|
comments_pagespec => "posts/* and !*/Discussion",
|
||||||
|
archive_pagespec => "page(posts/*) and !*/Discussion",
|
||||||
|
global_sidebars => 0,
|
||||||
|
discussion => 0,
|
||||||
|
tagbase => "tags",
|
||||||
|
)
|
||||||
|
'''
|
||||||
|
|
||||||
def parse_arguments():
|
def parse_arguments():
|
||||||
"""Return parsed command line arguments as dictionary."""
|
"""Return parsed command line arguments as dictionary."""
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
|
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
|
||||||
|
|
||||||
|
# Setup ikiwiki site
|
||||||
|
subparsers.add_parser('setup', help='Perform first time setup operations')
|
||||||
|
|
||||||
# Get whether ikiwiki site is enabled
|
# Get whether ikiwiki site is enabled
|
||||||
subparsers.add_parser('get-enabled',
|
subparsers.add_parser('get-enabled',
|
||||||
help='Get whether ikiwiki site is enabled')
|
help='Get whether ikiwiki site is enabled')
|
||||||
@ -73,6 +156,11 @@ def parse_arguments():
|
|||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def subcommand_setup(_):
|
||||||
|
"""Perform first time setup operations."""
|
||||||
|
setup()
|
||||||
|
|
||||||
|
|
||||||
def subcommand_get_enabled(_):
|
def subcommand_get_enabled(_):
|
||||||
"""Get whether ikiwiki site is enabled."""
|
"""Get whether ikiwiki site is enabled."""
|
||||||
if os.path.isfile(CONFIG_ENABLE):
|
if os.path.isfile(CONFIG_ENABLE):
|
||||||
@ -83,13 +171,8 @@ def subcommand_get_enabled(_):
|
|||||||
|
|
||||||
def subcommand_enable(_):
|
def subcommand_enable(_):
|
||||||
"""Enable ikiwiki site."""
|
"""Enable ikiwiki site."""
|
||||||
if not os.path.isfile(CONFIG_FILE):
|
subprocess.check_call(['a2enconf', 'ikiwiki'])
|
||||||
setup()
|
subprocess.check_call(['service', 'apache2', 'reload'])
|
||||||
subprocess.check_call(['a2enconf', 'ikiwiki'])
|
|
||||||
subprocess.check_call(['service', 'apache2', 'restart'])
|
|
||||||
else:
|
|
||||||
subprocess.check_call(['a2enconf', 'ikiwiki'])
|
|
||||||
subprocess.check_call(['service', 'apache2', 'reload'])
|
|
||||||
|
|
||||||
|
|
||||||
def subcommand_disable(_):
|
def subcommand_disable(_):
|
||||||
@ -141,110 +224,29 @@ def subcommand_delete(arguments):
|
|||||||
shutil.rmtree(wiki_folder)
|
shutil.rmtree(wiki_folder)
|
||||||
shutil.rmtree(wiki_folder + '.git')
|
shutil.rmtree(wiki_folder + '.git')
|
||||||
os.remove(wiki_folder + '.setup')
|
os.remove(wiki_folder + '.setup')
|
||||||
print('Deleted %s' % arguments.name)
|
print('Deleted {0}'.format(arguments.name))
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
print('Error: %s not found.' % arguments.name)
|
print('Error: {0} not found.'.format(arguments.name))
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
def setup():
|
def setup():
|
||||||
"""Initial setup"""
|
"""Write Apache configuration and wiki/blog setup scripts."""
|
||||||
if not os.path.exists(SITE_PATH):
|
if not os.path.exists(SITE_PATH):
|
||||||
os.makedirs(SITE_PATH)
|
os.makedirs(SITE_PATH)
|
||||||
|
|
||||||
subprocess.check_call(['a2enmod', 'cgi'])
|
subprocess.check_call(['a2enmod', 'cgi'])
|
||||||
|
|
||||||
with open(CONFIG_FILE, 'w') as conffile:
|
with open(CONFIG_FILE, 'w') as conffile:
|
||||||
conffile.writelines([
|
conffile.write(apache_cgi_configuration)
|
||||||
'Alias /ikiwiki /var/www/ikiwiki\n',
|
|
||||||
'AddHandler cgi-script .cgi\n',
|
|
||||||
'\n',
|
|
||||||
'<Directory /var/www/ikiwiki>\n',
|
|
||||||
' Options +ExecCGI\n',
|
|
||||||
'</Directory>\n'
|
|
||||||
])
|
|
||||||
|
|
||||||
with open(SETUP_WIKI, 'w') as setupfile:
|
with open(SETUP_WIKI, 'w') as setupfile:
|
||||||
setupfile.writelines([
|
setupfile.writelines(ikiwiki_setup_automator)
|
||||||
'#!/usr/bin/perl\n',
|
|
||||||
'# Ikiwiki setup automator for Plinth.\n',
|
|
||||||
'\n',
|
|
||||||
'require IkiWiki::Setup::Automator;\n',
|
|
||||||
'\n',
|
|
||||||
'our $wikiname=$ARGV[0];\n',
|
|
||||||
'our $admin=$ARGV[1];\n',
|
|
||||||
'if (($wikiname eq "") || ($admin eq "")) {\n',
|
|
||||||
' print "Usage: ikiwiki -setup /etc/ikiwiki/plinth-wiki.setup ',
|
|
||||||
'wiki_name admin_name";\n',
|
|
||||||
' exit;\n',
|
|
||||||
'}\n',
|
|
||||||
'\n',
|
|
||||||
'our $wikiname_short=IkiWiki::Setup::Automator::sanitize_wikiname',
|
|
||||||
'($wikiname);\n',
|
|
||||||
'\n',
|
|
||||||
'IkiWiki::Setup::Automator->import(\n',
|
|
||||||
' wikiname => $wikiname,\n',
|
|
||||||
' adminuser => [$admin],\n',
|
|
||||||
' rcs => "git",\n',
|
|
||||||
' srcdir => "/var/ikiwiki/$wikiname_short",\n',
|
|
||||||
' destdir => "/var/www/ikiwiki/$wikiname_short",\n',
|
|
||||||
' repository => "/var/ikiwiki/$wikiname_short.git",\n',
|
|
||||||
' dumpsetup => "/var/ikiwiki/$wikiname_short.setup",\n',
|
|
||||||
' url => "/ikiwiki/$wikiname_short",\n',
|
|
||||||
' cgiurl => "/ikiwiki/$wikiname_short/ikiwiki.cgi",\n',
|
|
||||||
' cgi_wrapper => "/var/www/ikiwiki/$wikiname_short/ikiwiki.cgi",'
|
|
||||||
'\n',
|
|
||||||
' add_plugins => [qw{goodstuff websetup httpauth}],\n',
|
|
||||||
' rss => 1,\n',
|
|
||||||
' atom => 1,\n',
|
|
||||||
' syslog => 1,\n',
|
|
||||||
')\n',
|
|
||||||
])
|
|
||||||
|
|
||||||
with open(SETUP_BLOG, 'w') as setupfile:
|
with open(SETUP_BLOG, 'w') as setupfile:
|
||||||
setupfile.writelines([
|
setupfile.writelines(ikiwiki_setup_automator_blog)
|
||||||
'#!/usr/bin/perl\n',
|
|
||||||
'# Ikiwiki setup automator for Plinth (blog version).\n',
|
subprocess.check_call(['service', 'apache2', 'restart'])
|
||||||
'\n',
|
|
||||||
'require IkiWiki::Setup::Automator;\n',
|
|
||||||
'\n',
|
|
||||||
'our $wikiname=$ARGV[0];\n',
|
|
||||||
'our $admin=$ARGV[1];\n',
|
|
||||||
'if (($wikiname eq "") || ($admin eq "")) {\n',
|
|
||||||
' print "Usage: ikiwiki -setup /etc/ikiwiki/plinth-blog.setup ',
|
|
||||||
'blog_name admin_name";\n',
|
|
||||||
' exit;\n',
|
|
||||||
'}\n',
|
|
||||||
'\n',
|
|
||||||
'our $wikiname_short=IkiWiki::Setup::Automator::sanitize_wikiname',
|
|
||||||
'($wikiname);\n',
|
|
||||||
'\n',
|
|
||||||
'IkiWiki::Setup::Automator->import(\n',
|
|
||||||
' wikiname => $wikiname,\n',
|
|
||||||
' adminuser => [$admin],\n',
|
|
||||||
' rcs => "git",\n',
|
|
||||||
' srcdir => "/var/ikiwiki/$wikiname_short",\n',
|
|
||||||
' destdir => "/var/www/ikiwiki/$wikiname_short",\n',
|
|
||||||
' repository => "/var/ikiwiki/$wikiname_short.git",\n',
|
|
||||||
' dumpsetup => "/var/ikiwiki/$wikiname_short.setup",\n',
|
|
||||||
' url => "/ikiwiki/$wikiname_short",\n',
|
|
||||||
' cgiurl => "/ikiwiki/$wikiname_short/ikiwiki.cgi",\n',
|
|
||||||
' cgi_wrapper => "/var/www/ikiwiki/$wikiname_short/ikiwiki.cgi",'
|
|
||||||
'\n',
|
|
||||||
' add_plugins => [qw{goodstuff websetup comments calendar '
|
|
||||||
'sidebar trail httpauth}],\n',
|
|
||||||
' rss => 1,\n',
|
|
||||||
' atom => 1,\n',
|
|
||||||
' syslog => 1,\n',
|
|
||||||
'\n',
|
|
||||||
' example => "blog",\n',
|
|
||||||
' comments_pagespec => "posts/* and !*/Discussion",\n',
|
|
||||||
' archive_pagespec => "page(posts/*) and !*/Discussion",\n',
|
|
||||||
' global_sidebars => 0,\n',
|
|
||||||
' discussion => 0,\n',
|
|
||||||
' tagbase => "tags",\n',
|
|
||||||
')\n',
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
@ -39,10 +39,16 @@ subsubmenu = [{'url': reverse_lazy('ikiwiki:index'),
|
|||||||
'text': _('Create')}]
|
'text': _('Create')}]
|
||||||
|
|
||||||
|
|
||||||
|
def on_install():
|
||||||
|
"""Enable Ikiwiki on install."""
|
||||||
|
actions.superuser_run('ikiwiki', ['setup'])
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@package.required(['ikiwiki',
|
@package.required(['ikiwiki',
|
||||||
'libcgi-formbuilder-perl',
|
'libcgi-formbuilder-perl',
|
||||||
'libcgi-session-perl'])
|
'libcgi-session-perl'],
|
||||||
|
on_install=on_install)
|
||||||
def index(request):
|
def index(request):
|
||||||
"""Serve configuration page."""
|
"""Serve configuration page."""
|
||||||
status = get_status()
|
status = get_status()
|
||||||
@ -163,6 +169,7 @@ def delete(request, name):
|
|||||||
messages.success(request, _('%s deleted.') % name)
|
messages.success(request, _('%s deleted.') % name)
|
||||||
except actions.ActionError as err:
|
except actions.ActionError as err:
|
||||||
messages.error(request, _('Could not delete %s: %s') % (name, err))
|
messages.error(request, _('Could not delete %s: %s') % (name, err))
|
||||||
|
|
||||||
return redirect(reverse_lazy('ikiwiki:manage'))
|
return redirect(reverse_lazy('ikiwiki:manage'))
|
||||||
|
|
||||||
return TemplateResponse(request, 'ikiwiki_delete.html',
|
return TemplateResponse(request, 'ikiwiki_delete.html',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user