diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2021-04-28 20:21:43 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2021-04-28 20:21:43 +0100 |
commit | 40aaaa64e86ba6710bbeb31c4615a6ce80e75e11 (patch) | |
tree | 758c221bad35c9288d0bd6df9c7dfc226728e52c /www-apps/liquid_feedback_frontend/files | |
parent | 8d5dbd847cbc704a6a06405856e94b461011afe3 (diff) |
gentoo resync : 28.04.2021
Diffstat (limited to 'www-apps/liquid_feedback_frontend/files')
6 files changed, 503 insertions, 146 deletions
diff --git a/www-apps/liquid_feedback_frontend/files/liquid_feedback.initd b/www-apps/liquid_feedback_frontend/files/liquid_feedback.initd new file mode 100644 index 000000000000..0fe14172b52f --- /dev/null +++ b/www-apps/liquid_feedback_frontend/files/liquid_feedback.initd @@ -0,0 +1,16 @@ +#!/sbin/openrc-run +# Copyright 2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +name="liquid feedback daemon" +description="Liquid Feedback Frontend" +command=/usr/bin/moonbridge +command_args="-l /var/log/liquid_feedback/lqfb.log /usr/lib/webmcp/bin/mcp.lua /usr/lib/webmcp /var/lib/liquid_feedback_frontend main myconfig-3" +pidfile=/run/lqfb.pid +command_user="apache:apache" +command_background=true + +depend() { + need net + need postgresql +} diff --git a/www-apps/liquid_feedback_frontend/files/lqfb-apache.conf b/www-apps/liquid_feedback_frontend/files/lqfb-apache.conf deleted file mode 100644 index 3f1924b6ae3a..000000000000 --- a/www-apps/liquid_feedback_frontend/files/lqfb-apache.conf +++ /dev/null @@ -1,41 +0,0 @@ -RewriteEngine on - -RewriteRule ^/$ /lf/ [R] - -RewriteRule ^/lf/static/(.*)$ /lf/static/$1 [L,PT] - -RewriteCond %{QUERY_STRING} (.*)? -RewriteRule ^/lf/$ /lf/webmcp-wrapper.lua?_webmcp_urldepth=0&_webmcp_module=index&_webmcp_view=index&%1 [PT] - -RewriteCond %{QUERY_STRING} (.*)? -RewriteRule ^/lf/([^/]+)/$ /lf/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$1&_webmcp_view=index&%1 [PT] - -RewriteCond %{QUERY_STRING} (.*)? -RewriteRule ^/lf/([^/]+)/([^/\.]+)$ /lf/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$1&_webmcp_action=$2&%1 [PT] - -RewriteCond %{QUERY_STRING} (.*)? -RewriteRule ^/lf/([^/]+)/([^/\.]+)\.([^/]+)$ /lf/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$1&_webmcp_view=$2&_webmcp_suffix=$3&%1 [PT] - -RewriteCond %{QUERY_STRING} (.*)? -RewriteRule ^/lf/([^/]+)/([^/]+)/([^/\.]+)\.([^/]+)$ /lf/webmcp-wrapper.lua?_webmcp_urldepth=2&_webmcp_module=$1&_webmcp_view=$2&_webmcp_id=$3&_webmcp_suffix=$4&%1 [PT] - -Alias /lf/static /var/lib/liquid_feedback_frontend/static - -ScriptAlias /lf/ /usr/lib/webmcp/framework/cgi-bin/ - -<Directory "/var/lib/liquid_feedback_frontend/static"> - AllowOverride None - Order allow,deny - Allow from all -</Directory> - -<Directory "/usr/lib/webmcp/framework/cgi-bin"> - AllowOverride None - Options ExecCGI -MultiViews +SymLinksIfOwnerMatch - Order allow,deny - Allow from all -</Directory> - -<Location /lf> - SetEnv WEBMCP_APP_BASEPATH '/var/lib/liquid_feedback_frontend' -</Location> diff --git a/www-apps/liquid_feedback_frontend/files/lqfb.example.com.conf b/www-apps/liquid_feedback_frontend/files/lqfb.example.com.conf deleted file mode 100644 index 149084138683..000000000000 --- a/www-apps/liquid_feedback_frontend/files/lqfb.example.com.conf +++ /dev/null @@ -1,24 +0,0 @@ -<VirtualHost *:80> - ServerName lqfb.example.com - - RewriteEngine On - RewriteRule (.*) https://lqfb.example.com%{REQUEST_URI} -</VirtualHost> - -<VirtualHost *:443> - ServerName lqfb.example.com - - SSLEngine on - SSLProtocol all -SSLv2 - SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM - SSLCertificateFile /etc/ssl/apache2/wildcard/server.crt - SSLCertificateKeyFile /etc/ssl/apache2/wildcard/server.key - - include /usr/share/liquid_feedback_frontend/lqfb-apache.conf - - <Location /lf> - SetEnv WEBMCP_CONFIG_NAME 'myconfig' - </Location> - - ErrorLog /var/log/apache2/lqfb.example.com-error.log -</VirtualHost> diff --git a/www-apps/liquid_feedback_frontend/files/myconfig-3.lua b/www-apps/liquid_feedback_frontend/files/myconfig-3.lua new file mode 100644 index 000000000000..1a1c51f2ac39 --- /dev/null +++ b/www-apps/liquid_feedback_frontend/files/myconfig-3.lua @@ -0,0 +1,487 @@ +-- ======================================================================== +-- MANDATORY (MUST BE CAREFULLY CHECKED AND PROPERLY SET!) +-- ======================================================================== + +-- Name of this instance, defaults to name of config file +-- ------------------------------------------------------------------------ +config.instance_name = "Instance name" + + +-- Information about service provider (HTML) +-- ------------------------------------------------------------------------ +config.app_service_provider = "Snake Oil<br/>10000 Berlin<br/>Germany" + + +-- A HTML formatted text the user has to accept while registering +-- ------------------------------------------------------------------------ +config.use_terms = "<h1>Terms of Use</h1><p>Insert terms here</p>" + + +-- Checkbox(es) the user has to accept while registering +-- ------------------------------------------------------------------------ +--[[ +config.use_terms_checkboxes = { + { + name = "terms_of_use_v1", + html = "I accept the terms of use.", + not_accepted_error = "You have to accept the terms of use to be able to register." + }, + { + name = "extra_terms_of_use_v1", + html = "I accept the extra terms of use.", + not_accepted_error = "You have to accept the extra terms of use to be able to register." + } +} +--]] + +-- Absolute base url of application +-- ------------------------------------------------------------------------ +config.absolute_base_url = "http://example.com/" +config.localhost = false + + +-- Connection information for the LiquidFeedback database +-- ------------------------------------------------------------------------ +config.database = { engine='postgresql', dbname='liquid_feedback', user='liquid_feedback', password='xxx' } + + +-- Location of the rocketwiki binaries +-- ------------------------------------------------------------------------ +config.enforce_formatting_engine = "markdown2" +config.formatting_engines = { + { id = "markdown2", + name = "python-markdown2", + executable = "markdown2", + args = {'-s', 'escape', '-x', 'nofollow,wiki-tables'}, + remove_images = true + }, +-- { id = "markdown_py", +-- name = "Python Markdown", +-- executable = "markdown_py", +-- args = {'-s', 'escape', '-x', 'extra', '-x', 'nl2br', '-x', 'sane_lists'}, +-- remove_images = true +-- }, +-- { id = "rocketwiki", +-- name = "RocketWiki", +-- executable = "/opt/rocketwiki-lqfb/rocketwiki-lqfb" +-- }, +-- { id = "compat", +-- name = "Traditional WIKI syntax", +-- executable = "/opt/rocketwiki-lqfb/rocketwiki-lqfb-compat" +-- }, +} + + +-- Public access level +-- ------------------------------------------------------------------------ +-- Available options: +-- "none" +-- -> Closed user group, no public access at all +-- (except login/registration/password reset) +-- "anonymous" +-- -> Shows only initiative/suggestions texts and aggregated +-- supporter/voter counts +-- "authors_pseudonymous" +-- -> Like anonymous, but shows screen names of authors +-- "all_pseudonymous" +-- -> Show everything a member can see, except profile pages +-- "everything" +-- -> Show everything a member can see, including profile pages +-- ------------------------------------------------------------------------ +config.public_access = "none" + + + +-- ======================================================================== +-- OPTIONAL +-- Remove leading -- to use a option +-- ======================================================================== + +-- Disable registration +-- ------------------------------------------------------------------------ +-- Available options: +-- false: registration is enabled (default) +-- true: registration is disabled +-- ------------------------------------------------------------------------ +-- config.disable_registration = true + + +-- List of enabled languages, defaults to available languages +-- ------------------------------------------------------------------------ +-- config.enabled_languages = { 'en', 'de', 'eo', 'el', 'hu', 'it', 'ka', 'nl', 'zh-Hans', 'zh-TW' } + + +-- Default language, defaults to "en" +-- ------------------------------------------------------------------------ +-- config.default_lang = "en" + + +-- after how long is a user considered inactive and the trustee will see warning, +-- notation is according to postgresql intervals, default: no warning at all +-- ------------------------------------------------------------------------ +-- config.delegation_warning_time = '6 months' + + +-- after which time a user is advised (_soft) or forced (_hard) to check +-- unit and area delegations. default: no check at all +-- ------------------------------------------------------------------------ +-- config.check_delegations_interval_hard = "6 months" +-- config.check_delegations_interval_soft = "3 months" + + +-- default option when checking delegations +-- available options: "confirm", "revoke" and "none", default: "confirm" +-- ------------------------------------------------------------------------ +-- config.check_delegations_default = "confirm" + + +-- Prefix of all automatic mails, defaults to "[Liquid Feedback] " +-- ------------------------------------------------------------------------ +-- config.mail_subject_prefix = "[LiquidFeedback] " + + +-- Sender of all automatic mails, defaults to system defaults +-- ------------------------------------------------------------------------ +-- config.mail_envelope_from = "liquidfeedback@example.com" +-- config.mail_from = { name = "LiquidFeedback", address = "liquidfeedback@example.com" } +-- config.mail_reply_to = { name = "Support", address = "support@example.com" } + + +-- Template for digest emails +-- #{name} will be replaced by member screen name +-- #{digest} will be replaced with the digest content +-- ------------------------------------------------------------------------ +-- config.notification_digest_template = [[ +-- Hello #{name}, +-- +-- this is your personal digest. +-- +-- #{digest} +-- ]] + + +-- Configuration of password hashing algorithm (defaults to "crypt_sha512") +-- ------------------------------------------------------------------------ +-- config.password_hash_algorithm = "crypt_sha512" +-- config.password_hash_algorithm = "crypt_sha256" +-- config.password_hash_algorithm = "crypt_md5" + + +-- Number of rounds for crypt_sha* algorithms, minimum and maximum +-- (defaults to minimum 10000 and maximum 20000) +-- ------------------------------------------------------------------------ +-- config.password_hash_min_rounds = 10000 +-- config.password_hash_max_rounds = 20000 + + +-- Supply custom url for avatar/photo delivery +-- ------------------------------------------------------------------------ +-- config.fastpath_url_func = nil + + +-- Local directory for database dumps offered for download +-- ------------------------------------------------------------------------ +-- config.download_dir = nil + + +-- Special use terms for database dump download +-- ------------------------------------------------------------------------ +-- config.download_use_terms = "=== Download use terms ===\n" + + +-- Use custom image conversion, defaults to ImageMagick's convert +-- ------------------------------------------------------------------------ +--config.member_image_content_type = "image/jpeg" +--config.member_image_convert_func = { +-- avatar = function(data) return extos.pfilter(data, "convert", "jpeg:-", "-thumbnail", "48x48", "jpeg:-") end, +-- photo = function(data) return extos.pfilter(data, "convert", "jpeg:-", "-thumbnail", "240x240", "jpeg:-") end +--} + + +-- Display a html formatted public message of the day +-- ------------------------------------------------------------------------ +-- config.motd_public = "<h1>Message of the day (public)</h1><p>The MOTD is formatted with HTML</p>" + + +-- Display a html formatted internal message of the day +-- ------------------------------------------------------------------------ +-- config.motd_intern = "<h1>Message of the day (intern)</h1><p>The MOTD is formatted with HTML</p>" + + +-- Integration of Etherpad, disabled by default +-- ------------------------------------------------------------------------ +--config.etherpad = { +-- base_url = "http://example.com:9001/", +-- api_base = "http://localhost:9001/", +-- api_key = "mysecretapikey", +-- group_id = "mygroupname", +-- cookie_path = "/" +--} + + +-- Free timings +-- ------------------------------------------------------------------------ +-- This example expects a date string entered in the free timing field +-- by the user creating a poll, interpreting it as target date for then +-- poll and splits the remaining time at the ratio of 4:1:2 +-- Please note, polling policies never have an admission phase +-- The available_func is optional, if not set any target date is allowed + +--[[ +config.free_timing = { + calculate_func = function(policy, timing_string) + local function interval_by_seconds(secs) + local secs_per_day = 60 * 60 * 24 + local days + days = math.floor(secs / secs_per_day) + secs = secs - days * secs_per_day + return days .. " days " .. secs .. " seconds" + end + local target_date = parse.date(timing_string, atom.date) + if not target_date then + return false + end + local target_timestamp = target_date.midday + local now = atom.timestamp:get_current() + trace.debug(target_timestamp, now) + local duration = target_timestamp - now + if duration < 0 then + return false + end + return { + discussion = interval_by_seconds(duration / 7 * 4), + verification = interval_by_seconds(duration / 7 * 1), + voting = interval_by_seconds(duration / 7 * 2) + } + end, + available_func = function(policy) + return { + { name = "End of 2013", id = '2013-12-31' }, + { name = "End of 2014", id = '2014-12-31' }, + { name = "End of 2015", id = '2015-12-31' } + } + end +} +--]] + +-- Configuration of lf4rcs +-- ------------------------------------------------------------------------ +-- config.lf4rc = {} + +-- Example configuration for controlling a Git repository +--[[ +config.lf4rcs.git = { + + render_draft_reference = function(url, draft) + if not draft.external_reference then return end + ui.tag{ content = _"Changeset:" } + slot.put(" ") + ui.link{ + text = draft.external_reference, + external = url .. ";a=commit;h=" .. draft.external_reference + } + end, + + get_remote_user = function() + return os.getenv("REMOTE_USER") + end, + + get_branches = function(path, exec) + local branches = {} + for line in io.lines() do + local oldrev, newrev, branch = string.match(line, "([^ ]+) ([^ ]+) refs/heads/(.+)") + if not branch then + return nil, "unexpected format from git hook environment" + end + branches[branch] = { newrev } + end + return branches + end, + + commit = function(path, exec, branch, target_node_id, close_message, merge_message) + if merge_message then + exec("git", "-C", path, "checkout", "-f", "master") + exec("git", "-C", path, "merge", target_node_id, "-m", merge_message) + exec("git", "-C", path, "push", "origin", "master") + end + end + +} + +-- Example configuration for controlling a Mercurial repository +config.lf4rcs.hg = { + + working_branch_name = "work", + + render_draft_reference = function(url, draft) + if not draft.external_reference then return end + ui.tag{ content = _"Changeset graph:" } + slot.put(" ") + ui.link{ + text = draft.external_reference, + external = url .. "/graph/" .. draft.external_reference + } + end, + + get_remote_user = function() + return os.getenv("REMOTE_USER") + end, + + get_branches = function(path, exec) + local first_node_id = os.getenv("HG_NODE") + if not first_node_id then + return nil, "internal error, no first node ID available" + end + local hg_log = exec( + "hg", "log", "-R", path, "-r", first_node_id .. ":", "--template", "{branches}\n" + ) + local branches = {} + for branch in hg_log:gmatch("(.-)\n") do + if branch == "" then branch = "default" end + if not branches[branch] then + branches[branch] = {} + local head_lines = exec( + "hg", "heads", "-R", path, "--template", "{node}\n", branch + ) + for node_id in string.gmatch(head_lines, "[^\n]+") do + table.insert(branches[branch], node_id) + end + end + end + return branches + end, + + extra_checks = function(path, exec) + local result = exec("hg", "heads", "-t", "-c") + for branch in string.gmatch(result, "[^\n]+") do + if branch == lf4rcs.config.hg.working_branch_name then + return nil, "open head found for branch " .. lf4rcs.config.hg.working_branch_name + end + end + return true + end, + + commit = function(path, exec, branch, target_node_id, close_message, merge_message) + exec("hg", "up", "-R", path, "-C", "-r", target_node_id) + exec("hg", "commit", "-R", path, "--close-branch", "-m", close_message) + if merge_message then + exec("hg", "up", "-R", path, "-C", "-r", "default") + exec("hg", "merge", "-R", path, "-r", "tip") + exec("hg", "commit", "-R", path, "-m", merge_message) + end + end + +} + +-- Grace period after creating an initiative for pushing changes during verification phase +-- disabled by default (nil), use PostgreSQL interval notation +-- config.lf4rcs.push_grace_period = nil + +lf4rcs.init() +--]] + +-- External references +-- ------------------------------------------------------------------------ +-- Rendering of external references + +--[[ +config.render_external_reference = { + draft = function(draft, wrapper) + wrapper(function() + ui.tag{ content = draft.external_reference) + end) + end, + initiative = function(initiative, wrapper) + wrapper(function() + ui.tag{ content = initiative.external_reference) + end) + end +end +--]] + +-- Admin logger +-- ------------------------------------------------------------------------ +-- Logging administrative activities +-- disabled by default + +--[[ +config.admin_logger = function(params) + + local adminid = app.session.member_id + local adminname = app.session.member.name + local url = params._webmcp_path + + -- do something (e.g. calling 'logger' via extos.pfilter) + +end +--]] + + +-- Network interface to bind to +-- ------------------------------------------------------------------------ +-- Available options: +-- true: bind to localhost (default) +-- false: bind to all interface +-- ------------------------------------------------------------------------ +-- config.localhost = true + + +-- Network port to bind to +-- ------------------------------------------------------------------------ +-- config.port = 8080 + + +-- Serving content via IPV6 +-- ------------------------------------------------------------------------ +-- Available options: +-- nil or false: do not serve via IPv6 (default) +-- true: serve via IPv6 +-- ------------------------------------------------------------------------ +-- config.ipv6 = false + + +-- Application server fork configuration +-- ------------------------------------------------------------------------ +-- config.fork = { +-- pre = 2, -- desired number of spare (idle) processes +-- min = 4, -- minimum number of processes +-- max = 128, -- maximum number of processes (hard limit) +-- delay = 0.125, -- delay (seconds) between creation of spare processes +-- error_delay = 2, -- delay (seconds) before retry of failed process creation +-- exit_delay = 2, -- delay (seconds) between destruction of excessive spare processes +-- idle_timeout = 900, -- idle time (seconds) after a fork gets terminated (0 for no timeout) +-- memory_limit = 0, -- maximum memory consumption (bytes) before process gets terminated +-- min_requests = 50, -- minimum count of requests handled before fork is terminated +-- max_requests = 100 -- maximum count of requests handled before fork is terminated +-- } + + +-- HTTP server options +-- ------------------------------------------------------------------------ +-- http_options = { +-- static_headers = {} -- string or table of static headers to be returned with every request +-- request_header_size_limit = 1024*1024, -- maximum size of request body sent by client +-- request_body_size_limit = 64*1024*1024, -- maximum size of request body sent by client +-- idle_timeout = 65, -- maximum time until receiving the first byte of the request headera +-- stall_timeout = 60, -- maximum time a client connection may be stalled +-- request_header_timeout = 120, -- maximum time until receiving the remaining bytes of the request header +-- response_timeout = 3600, -- time in which request body and response must be sent +-- maximum_input_chunk_size = 16384 -- tweaks behavior of request-body parser +-- minimum_output_chunk_size = 1024 -- chunk size for chunked-transfer-encoding +-- } + + +-- WebMCP accelerator +-- ------------------------------------------------------------------------ +-- uncomment the following line to use C implementations of chosen +-- functions: +-- ------------------------------------------------------------------------ +-- require 'webmcp_accelerator' + + +-- Trace debug +-- ------------------------------------------------------------------------ +-- uncomment the following line to enable debug trace +-- ------------------------------------------------------------------------ +-- config.enable_debug_trace = true + diff --git a/www-apps/liquid_feedback_frontend/files/myconfig.lua b/www-apps/liquid_feedback_frontend/files/myconfig.lua deleted file mode 100644 index 19c259cd7cbd..000000000000 --- a/www-apps/liquid_feedback_frontend/files/myconfig.lua +++ /dev/null @@ -1,29 +0,0 @@ -config.absolute_base_url = "https://lqfb.example.com/lf" -config.instance_name = "lf" -config.database = { engine='postgresql', dbname='liquid_feedback', user='liquid_feedback', password='xxx'} -config.enable_debug_trace = true - -execute.config("init") - -config.formatting_engine_executeables = { - rocketwiki= "rocketwiki-lqfb", - compat = "rocketwiki-lqfb-compat" -} - --- Checkbox(es) the user has to accept while registering --- --- ----- --------------------------------------------------------------------------- -config.use_terms_checkboxes = { - { - name = "terms_of_use_v1", - html = "I accept the terms of use.", - not_accepted_error = "You have to accept the terms of use to be able to regi ster." - }, --- { --- name = "extra_terms_of_use_v1", --- html = "I accept the extra terms of use.", --- not_accepted_error = "You have to accept the extra terms of use to be able to register." --- } -} diff --git a/www-apps/liquid_feedback_frontend/files/postinstall-en.txt b/www-apps/liquid_feedback_frontend/files/postinstall-en.txt deleted file mode 100644 index 80758792d817..000000000000 --- a/www-apps/liquid_feedback_frontend/files/postinstall-en.txt +++ /dev/null @@ -1,52 +0,0 @@ -0. DATABASE SETUP - -To use Liquid Feedback you have to follow these -simple steps, which have to be done as the postgres system user (or -which ever is the database superuser): - -$ createuser liquid_feedback -and answer the following -Shall the new role be a superuser? (y/n) n -Shall the new role be allowed to create databases? (y/n) y -Shall the new role be allowed to create more new roles? (y/n) n - -$ psql -postgres=# ALTER USER liquid_feedback WITH PASSWORD 'the_new_password'; - -$ createdb -U liquid_feedback liquid_feedback -$ psql -U liquid_feedback liquid_feedback -liquid_feedback=# \i ${MY_INSTALLDIR}/liquid_feedback_core/core.sql -liquid_feedback=# \i ${MY_INSTALLDIR}/liquid_feedback_core/init.sql -INSERT INTO system_setting (member_ttl) VALUES ('1 year'); -INSERT INTO contingent (polling, time_frame, text_entry_limit, initiative_limit) VALUES (false, '1 hour', 20, 6); -INSERT INTO contingent (polling, time_frame, text_entry_limit, initiative_limit) VALUES (false, '1 day', 80, 12); -INSERT INTO contingent (polling, time_frame, text_entry_limit, initiative_limit) VALUES (true, '1 hour', 200, 60); -INSERT INTO contingent (polling, time_frame, text_entry_limit, initiative_limit) VALUES (true, '1 day', 800, 120); -INSERT INTO policy (index, name, admission_time, discussion_time, verification_time, voting_time, issue_quorum_num, issue_quorum_den, initiative_quorum_num, initiative_quorum_den) VALUES (1, 'Default policy', '8 days', '15 days', '8 days', '15 days', 10, 100, 10, 100); - -cd /var/lib/liquid_feedback_frontend -/usr/lib/webmcp/framework/bin/webmcp_shell myconfig -Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio -> member = Member:by_id(1) -> member:set_password("type-password-here") -> member:save() -> os.exit() - -Ensure that "lf_update dbname=liquid_feedback" and -"lf_update_suggestion_order dbname=liquid_feedback" are called -regularly! It is required to run these commands regularly -(i.e. every 5 minutes via cron) to update cached supporter counts, -to change the state of issues when neccessary, to calculate the -result of votings, etc. If you wish, copy the created lf_update -and lf_update_suggestion_order files to /usr/local/bin or a -similar directory. - -It is possible to run these two commands in parallel, if a setup -requires splitting the load to multiple processor cores. In other -cases it is recommended to run "lf_update" first, and then -"lf_update_suggestion_order". - -To create an export file, which is containing all but private data, -you may use the lf_export shell-script: -$ lf_export liquid_feedback export.sql.gz - |