BE:LiquidFeedback/Serverkonfiguration

Installation deepthought

Basissystem ist Debian/Lenny 64 Bit minimal wie von Hetzner bereitgestellt. Die IP-Adresse des Servers lautet 88.198.49.151.

Unnötige Dienste abschalten:

/etc/init.d/portmap stop
update-rc.d -f portmap remove

System auf aktuellen Stand bringen:

apt-get update
apt-get upgrade

Benötigte Pakete installieren:

apt-get install lighttpd postgresql libpq-dev lua5.1 liblua5.1-0-dev build-essential ghc libghc6-parsec-dev imagemagick screen sudo mercurial

LiquidFeedback mit Abhängigkeiten herunterladen

mkdir /root/install
cd /root/install

Web development environment WebMCP

wget http://www.public-software-group.org/pub/projects/webmcp/v1.0.3/webmcp-v1.0.3.tar.gz

Wiki rocketwiki (LiquidFeedback-Edition)

wget http://www.public-software-group.org/pub/projects/rocketwiki/liquid_feedback_edition/v0.1.0/rocketwiki-lqfb-v0.1.0-rc1.tar.gz

LiquidFeedback core

wget http://www.public-software-group.org/pub/projects/liquid_feedback/backend/beta10/liquid_feedback_core-beta10.tar.gz

LiquidFeedback frontend

wget http://www.public-software-group.org/pub/projects/liquid_feedback/frontend/alpha5/liquid_feedback_frontend-alpha5.tar.gz

LiquidFeedback installieren

mkdir /opt
mkdir /opt/liquid_feedback
cd /opt/liquid_feedback
tar xvzf /root/install/webmcp-v1.0.3.tar.gz
ln -s webmcp-v1.0.3 webmcp
cd webmcp

Da wir ein 64 Bit System haben Makefile.options anpassen:

CFLAGS = -fPIC -O2 -Wall -I /usr/include -I /usr/local/include -I /usr/local/include/lua51 -I /usr/include/lua5.1
make
cd /root/install
tar xvzf rocketwiki-lqfb-v0.1.0-rc1.tar.gz
cd rocketwiki-lqfb-v0.1.0
make
mkdir /opt/liquid_feedback/rocketwiki/
cp rocketwiki-lqfb rocketwiki-lqfb-compat /opt/liquid_feedback/rocketwiki/
cd /root/install
tar xvzf liquid_feedback_core-beta10.tar.gz
cd liquid_feedback_core-beta10
make
mkdir /opt/liquid_feedback/lf_update
cp lf_update /opt/liquid_feedback/lf_update
su - postgres
createuser www-data
# 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
exit
su - www-data
export INSTANCE=be
#export INSTANCE=hb
#export INSTANCE=sh
createdb liquid_feedback_$INSTANCE
cd /root/install/liquid_feedback_core-beta10/
psql --set ON_ERROR_STOP=1 -f core.sql liquid_feedback_$INSTANCE
psql --set ON_ERROR_STOP=1 -f init.sql liquid_feedback_$INSTANCE
exit
cd /opt/liquid_feedback
tar xvzf /root/install/liquid_feedback_frontend-alpha5.tar.gz
ln -s liquid_feedback_frontend-alpha5 webapp
cd webapp/fastpath
vi getpic.c
#define GETPIC_DEFAULT_AVATAR "/opt/liquid_feedback/webapp/static/avatar.jpg"
export INSTANCE=be
#export INSTANCE=hb
#export INSTANCE=sh
mkdir $INSTANCE
cd $INSTANCE
cp ../getpic.c .
vi getpic.c
#define GETPIC_CONNINFO "dbname=liquid_feedback_XX"
make -f ../Makefile
# Temporäres Verzeichnis für Webserver schreibbar machen
cd webapp
chown www-data tmp

Webserver konfigurieren

cat > /etc/lighttpd/conf-available/42-liquid_feedback.conf << EOF
server.modules += (
  "mod_cgi",
  "mod_alias",
  "mod_setenv",
  "mod_rewrite",
  "mod_redirect",
 )

# Redirect fuer /lf/ auf /be/
        url.redirect += (
      "^/lf$" => "/be/",
      "^/lf/(.*)" => "/be/$1",
)


# Enable CGI-Execution of *.lua files through lua binary
cgi.assign += ( ".lua" => "/usr/bin/lua" )

# Connect external URLs to server static files and the webmcp cgi interface
alias.url += (
  "/be/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/be/",
  "/be/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/be/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/bb/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/bb/",
  "/bb/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/bb/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/by/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/by/",
  "/by/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/by/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/hb/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/hb/",
  "/hb/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/hb/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/sh/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/sh/",
  "/sh/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/sh/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/mv/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/mv/",
  "/mv/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/mv/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/nw/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/nw/",
  "/nw/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/nw/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/hh/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/hh/",
  "/hh/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/hh/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/sn/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/sn/",
  "/sn/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/sn/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/st/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/st/",
  "/st/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/st/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/rp/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/rp/",
  "/rp/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/rp/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/"
  "/ni/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/ni/",
  "/ni/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/ni/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/int/br/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/int-br/",
  "/int/br/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/int/br/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/int/ch/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/int-ch/",
  "/int/ch/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/int/ch/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/",
  "/int/at/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/int-at/",
  "/int/at/static/"   => "/opt/liquid_feedback/webapp/static/",
  "/int/at/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/"
)

$HTTP["url"] =~ "^/be/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-be" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/bb/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-bb" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/by/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-by" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/hb/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-hb" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/sh/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-sh" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}
$HTTP["url"] =~ "^/mv/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-mv" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/nw/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-nw" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/hh/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-hh" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/sn/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-sn" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/st/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-st" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/rp/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-rp" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/ni/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-ni" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/int/br/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-int-br" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/int/ch/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-int-ch" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

$HTTP["url"] =~ "^/int/at/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-int-at" ,
    "WEBMCP_APP_BASEPATH" => "/opt/liquid_feedback/webapp",
  )
}

# URL beautification
url.rewrite-once += (
  # do not rewrite redirects from /lf/
      "^(/lf.*)" => "$1",
  # do not rewrite static URLs
      "^/([a-z][a-z])/fastpath/(.*)$" => "/$1/fastpath/$2",
      "^/([a-z][a-z])/static/(.*)$" => "/$1/static/$2",
      "^/int/([a-z][a-z])/fastpath/(.*)$" => "/int/$1/fastpath/$2",
      "^/int/([a-z][a-z])/static/(.*)$" => "/int/$1/static/$2",

  # base URL
      "^/([a-z][a-z])/(\?(.*))?$" => "/$1/webmcp-wrapper.lua?_webmcp_urldepth=0&_webmcp_module=index&_webmcp_view=index&$3",
      "^/int/([a-z][a-z])/(\?(.*))?$" => "/int/$1/webmcp-wrapper.lua?_webmcp_urldepth=0&_webmcp_module=index&_webmcp_view=index&$3",

  # module base URLs
      "^/([a-z][a-z])/([^/\?]+)/(\?(.*))?$" => "/$1/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$2&_webmcp_view=index&$4",
      "^/int/([a-z][a-z])/([^/\?]+)/(\?(.*))?$" => "/int/$1/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$2&_webmcp_view=index&$4",

  # actions
      "^/([a-z][a-z])/([^/\?]+)/([^/\.\?]+)(\?(.*))?$" => "/$1/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$2&_webmcp_action=$3&$5",
      "^/int/([a-z][a-z])/([^/\?]+)/([^/\.\?]+)(\?(.*))?$" => "/int/$1/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$2&_webmcp_action=$3&$5",

  # views without numeric id or string ident
      "^/([a-z][a-z])/([^/\?]+)/([^/\.\?]+)\.([^/\?]+)(\?(.*))?$" => "/$1/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$2&_webmcp_view=$3&_webmcp_suffix=$4&$6",
      "^/int/([a-z][a-z])/([^/\?]+)/([^/\.\?]+)\.([^/\?]+)(\?(.*))?$" => "/int/$1/webmcp-wrapper.lua?_webmcp_urldepth=1&_webmcp_module=$2&_webmcp_view=$3&_webmcp_suffix=$4&$6",

  # views with numeric id or string ident
      "^/([a-z][a-z])/([^/\?]+)/([^/\?]+)/([^/\.\?]+)\.([^/\?]+)(\?(.*))?$" => "/$1/webmcp-wrapper.lua?_webmcp_urldepth=2&_webmcp_module=$2&_webmcp_view=$3&_webmcp_id=$4&_webmcp_suffix=$5&$7",
      "^/int/([a-z][a-z])/([^/\?]+)/([^/\?]+)/([^/\.\?]+)\.([^/\?]+)(\?(.*))?$" => "/int/$1/webmcp-wrapper.lua?_webmcp_urldepth=2&_webmcp_module=$2&_webmcp_view=$3&_webmcp_id=$4&_webmcp_suffix=$5&$7",

)

# Redirects for URLs without trailing slashes
url.redirect += (
  # base URL without trailing slash
      "^/([a-z][a-z])$" => "/$1/",
      "^/int/([a-z][a-z])$" => "/int/$1/",
  # module base URL without trailing slash
      "^/([a-z][a-z])/([^/\?]+)$" => "/$1/$2/",
      "^/int/([a-z][a-z])/([^/\?]+)$" => "/int/$1/$2/",
)

$SERVER["socket"] == ":80" {
  url.redirect += (
    "^/(.*)$" => "https://lqpp.de$0"
  )
}

$HTTP["url"] =~ "^/be/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/bb/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/by/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/hb/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/sh/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/mv/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/nw/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/hh/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/sn/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/st/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/rp/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/ni/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/int/br/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/int/ch/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}
$HTTP["url"] =~ "^/int/at/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}


EOF

Die Konfiguration aktivieren:

lighttpd-enable-mod liquid_feedback

Anwendung konfigurieren

Logo einbinden:

cd /opt/liquid_feedback/webapp/static
wget http://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/Piratpartiet.svg/48px-Piratpartiet.svg.png
mv 48px-Piratpartiet.svg.png logo.png

vi /opt/liquid_feedback/webapp/config/default

config.app_version = config.app_version .. "+pt_br"

config.use_terms_checkboxes = {
  {
    name = "nutzungsbedingungen_v1",
    html = "Ich akzeptiere die Nutzungsbedingungen durch Auswahl dieser Ankreuzbox",
    not_accepted_error = "Du musst die Nutzungsbedingungen akzeptieren, um dich zu registrieren."
  }
}

--db = assert(mondelefant.connect{
--  engine='postgresql',
--  dbname='liquid_feedback'
--})
cat > /opt/liquid_feedback/webapp/config/piraten-default.lua << EOF
config.instance_path = string.gsub(config.instance_prefix, "_", "/")
if string.find(config.instance_prefix, "_") then
  config.international = true
end

config.absolute_base_url = "https://lqpp.de/" .. config.instance_path .. "/"

db = assert(mondelefant.connect{
  engine='postgresql',
  dbname='liquid_feedback_' .. config.instance_prefix
})

execute.config("default")

if not config.app_title then
  config.app_title = "LiquidFeedback (Piratenpartei " .. config.instance_name .. ")"
end
config.app_logo = "logo.png"

config.app_service_provider = 'Piratenpartei Deutschland Landesverband Berlin (PIRATEN Berlin)<br />Pflugstr. 9a<br />10115 Berlin<br /><br />E-Mail Support: <a href="mailto:support@lqpp.de">support@lqpp.de</a><br />E-Mail Administratoren: <a href="mailto:admins@lqpp.de">admins@lqpp.de</a><br /><br />Diskussion, Support & FAQ: <a href="http://wiki.piratenpartei.de/BE:LiquidFeedback">http://wiki.piratenpartei.de/BE:LiquidFeedback</a>'

config.formatting_engine_executeables = {
  rocketwiki= "/opt/liquid_feedback/rocketwiki/rocketwiki-lqfb",
  compat = "/opt/liquid_feedback/rocketwiki/rocketwiki-lqfb-compat"
}

config.mail_subject_prefix = "[lqpp.de] "
config.mail_from = { name = "lqpp.de", address = "support@lqpp.de" }

config.fastpath_url_func = function(member_id, image_type)
  return "https://lqpp.de/" .. config.instance_path .. "/fastpath/getpic?" .. tostring(member_id) .. "+" .. tostring(image_type)
end

if not international then
  config.issue_discussion_url_func = function(issue)
    return "http://wiki.piratenpartei.de/" .. string.upper(config.instance_prefix) .. ":LiquidFeedback_Themendiskussion/" .. issue.id
  end
end

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-be.lua << EOF
config.instance_prefix = "be"

config.instance_name = "Berlin"

config.api_enabled = true

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen der Piratenpartei Deutschland Berlin. Jedem Piraten, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Deutschland Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausdrücklich darauf hingewiesen, dass **alle Einträge und Einstellungen**, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbestimmte Zeit im System erhalten bleiben und auch **veröffentlicht** werden können. Dies gilt auch im Falle der Beendigung der Mitgliedschaft in der Piratenpartei Deutschland Berlin.\n# Der Nutzer muss einen frei wählbaren, öffentlich einsehbaren Namen angeben. Der Nutzer kann eine Pseudonymisierung seiner Einträge erreichen, indem er für den öffentlich einsehbaren Namen ein Pseudonym wählt.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass andere Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen können und Änderungen des gewählten Namens öffentlich dokumentiert werden. Eine nachträgliche Pseudonymisierung von Daten ist daher nicht möglich.\n# Die Weitergabe jeglicher ab dem 1.7.2010 zum Download angebotenen oder ab diesem Zeitpunkt im System einsehbaren Daten mit Ausnahme der Inhalte von Benutzerprofilseiten ist jedem Nutzer gestattet.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer, die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Vorstand der Piratenpartei Deutschland Berlin beantragen."

config.download_dir = "/opt/liquid_feedback/download/be/"

config.download_use_terms = "Es gelten die [https://lqpp.de/be/index/usage_terms.html Nutzungsbedingungen], insbesondere Punkt 6 ist zu beachten:\n\n6. Die Weitergabe jeglicher ab dem 1.7.2010 zum Download angebotenen oder ab diesem Zeitpunkt im System einsehbaren Daten mit Ausnahme der Inhalte von Benutzerprofilseiten ist jedem Nutzer gestattet."

config.public_access_issue_head = function(issue)
  if issue.state == "new" then
    message = "Dieses Thema befindet sich in der Phase „Neu“. Dies bedeutet, dass es automatisch abgebrochen wird, wenn es nicht genug Unterstützer findet oder in die Diskussionsphase kommt, wenn es genug Unterstützer findet. <b>Dieser Antrag ist keine offizielle Aussage der Piratenpartei Deutschland oder der Piratenpartei Deutschland Berlin.</b>"
  elseif issue.state == "accepted" then
    message = "Dieses Thema befindet sich in der Phase „Diskussion“. Dies bedeutet, dass sich Antragstexte noch ändern können. Die nächste Phase dieses Themas ist „Eingefroren“. <b>Dieser Antrag ist keine offizielle Aussage der Piratenpartei Deutschland oder der Piratenpartei Deutschland Berlin.</b>"
  elseif issue.state == "frozen" then
    message = "Dieses Thema befindet sich in der Phase „Eingefroren“. Dies bedeutet, dass Antragstexte sich nicht mehr ändern können. Die Anträge die ausreichend Unterstützer finden werden in der nächsten Phase abgestimmt. <b>Dieser Antrag ist keine offizielle Aussage der Piratenpartei Deutschland oder der Piratenpartei Deutschland Berlin.</b>"
  elseif issue.state == "voting" then
    message = "Dieses Thema befindet sich in der Phase „Abstimmung“. Dies bedeutet, dass die Mitglieder des Landesverbandes Berlin Momentan darüber Abstimmen, ob sie den Antrag bzw. die Anträgen annehmen oder ablehnen. <b>Dieser Antrag ist keine offizielle Aussage der Piratenpartei Deutschland oder der Piratenpartei Deutschland Berlin.</b>"
  elseif issue.state == "cancelled" then
    message = "Dieses Thema ist „Abgebrochen“. Dies bedeutet, dass es nicht genug Unterstützter fand und an einem Quorum scheiterte. <b>Dieser Antrag ist keine offizielle Aussage der Piratenpartei Deutschland oder der Piratenpartei Deutschland Berlin.</b>"
  elseif issue.state == "finished" then
    message = "Dieses Thema wurde abgestimmt. Du kannst für jeden Antrag entnehmen welchen Platz er eingenommen hat und mit wievielen Stimmen dafür und dagegen votiert wurde. Dieses Votum kann, wenn der Antrag beim zuständigen Organ der PIRATEN Berlin eingebracht wird, Berücksichtigung finden. Diese Organe sind durch die Satzung gehalten, in LiquidFeedback positiv beschiedene Anträge vorrangig zu behandeln. <b>Solange kein Organ dem Antrag zugestimmt hat stellt er keine offizielle Aussage der Piratenpartei Deutschland oder der Piratenpartei Deutschland Berlin dar.</b>"
  end
  ui.tag{
    tag = "div",
    attr = { class = "public_access_issue_head" },
    content = function() slot.put(message) end
  }
end

config.public_access = "anonymous"

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-bb.lua << EOF
config.instance_prefix = "bb"

config.instance_name = "Brandenburg"

config.app_title = "LiquidFeedback Testinstanz (Piratenpartei Brandenburg)"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen der Piratenpartei Deutschland LV Brandenburg. Jedem Piraten, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Deutschland LV Brandenburg, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausdrücklich darauf hingewiesen, dass **alle Einträge und Einstellungen**, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbestimmte Zeit im System erhalten bleiben und auch **veröffentlicht** werden können. Dies gilt auch im Falle der Beendigung der Mitgliedschaft in der Piratenpartei Deutschland LV Brandenburg.\n# Der Nutzer muss einen frei wählbaren, öffentlich einsehbaren Namen angeben. Der Nutzer kann eine Pseudonymisierung seiner Einträge erreichen, indem er für den öffentlich einsehbaren Namen ein Pseudonym wählt.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass andere Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen können und Änderungen des gewählten Namens öffentlich dokumentiert werden. Eine nachträgliche Pseudonymisierung von Daten ist daher nicht möglich.\n# Die Weitergabe jeglicher zum Download angebotenen oder im System einsehbaren Daten mit Ausnahme der Inhalte von Benutzerprofilseiten ist jedem Nutzer gestattet.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer, die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Vorstand der Piratenpartei Deutschland Berlin beantragen."

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-by.lua << EOF
config.instance_prefix = "by"

config.instance_name = "Bayern"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Bayern der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Die Weitergabe jeglicher datenschutzrelevanter Daten ist nur unter Vorraussetzung der Zustimmung aller betroffenen Nutzer gestattet. Ohne ausdrückliche Genehmigung ist die Veröffentlichung personenbezogener Daten untersagt.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-hb.lua << EOF
config.instance_prefix = "hb"

config.instance_name = "Bremen"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Bremen der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

config.api_enabled = true

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-sh.lua << EOF
config.instance_prefix = "sh"

config.instance_name = "Schleswig-Holstein"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Schleswig-Holstein der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-mv.lua << EOF
config.instance_prefix = "mv"

config.instance_name = "Mecklenburg-Vorpommern"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Mecklenburg-Vorpommern der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

execute.config("piraten-default")

config.public_access = "anonymous"

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-nw.lua << EOF
config.instance_prefix = "nw"

config.instance_name = "Nordrhein-Westfalen"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Nordrhein-Westfalen der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

-- Namespace im Wiki noch NRW
config.issue_discussion_url_func = function(issue)
  return "http://wiki.piratenpartei.de/NRW:LiquidFeedback_Themendiskussion/" .. issue.id
end

-- Ausnahme fuer About-Seite
config.app_service_provider = 'Piratenpartei Deutschland Landesverband Berlin (PIRATEN Berlin)<br />Pflugstr. 9a<br />10115 Berlin<br /><br />E-Mail Support: <a href="mailto:support@lqpp.de">support@lqpp.de</a><br />E-Mail Administratoren: <a href="mailto:admins@lqpp.de">admins@lqpp.de</a><br /><br />Diskussion, Support & FAQ: <a href="http://wiki.piratenpartei.de/NRW:LiquidFeedback">http://wiki.piratenpartei.de/NRW:LiquidFeedback</a>'
 
config.api_enabled = true

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-hh.lua << EOF
config.instance_prefix = "hh"

config.instance_name = "Hamburg"

config.api_enabled = true

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Hamburg der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-sn.lua << EOF
config.instance_prefix = "sn"

config.instance_name = "Sachsen"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Sachsen der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

execute.config("piraten-default")

config.api_enabled = true

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-st.lua << EOF
config.instance_prefix = "st"

config.instance_name = "Sachsen-Anhalt"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Sachsen-Anhalt der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

-- Namespace im Wiki ist LSA
config.issue_discussion_url_func = function(issue)
  return "http://wiki.piratenpartei.de/LSA:LiquidFeedback_Themendiskussion/" .. issue.id
end

config.api_enabled = true

execute.config("piraten-default")

config.public_access = "anonymous"

EOF


cat > /opt/liquid_feedback/webapp/config/piraten-ni.lua << EOF
config.instance_prefix = "ni"

config.api_enabled = true

config.instance_name = "Niedersachsen"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen des Landesverbandes Niedersachsen der Piratenpartei Deutschland. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Berlin, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Es ist dem Nutzer aus Gründen des Datenschutzes nicht gestattet Datenbankinhalte ganz oder teilweise Dritten zugänglich zu machen. Ausgenommen hiervon ist eine Weitergabe an Mitlieder der Piratenpartei Deutschland, die diesen Nutzungsbedingungen zustimmen.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Generalsekretär beantragen."

execute.config("piraten-default")

-- Namespace im Wiki noch NRW
config.issue_discussion_url_func = function(issue)
  return "http://wiki.piratenpartei.de/NDS:LiquidFeedback_Themendiskussion/" .. issue.id
end

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-int-br.lua << EOF
config.instance_prefix = "int_br"

config.instance_name = "Brasil"
config.app_title = "LiquidFeedback (Partido Pirata do Brasil)"

config.use_terms = "Aceito e respeito os termos de uso que recebi do Partido Pirata do Brasil no ato de recebimento do meu código de convite e cadastro no sistema."

config.download_dir = "/opt/liquid_feedback/download/int_br"

config.download_use_terms = ""

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-int-ch.lua << EOF
config.instance_prefix = "int_ch"

config.instance_name = "Schweiz"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen der Piratenpartei Schweiz. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Schweiz, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Die Weitergabe jeglicher datenschutzrelevanter Daten ist nur unter Vorraussetzung der Zustimmung aller betroffenen Nutzer gestattet. Ohne ausdrückliche Genehmigung ist die Veröffentlichung personenbezogener Daten untersagt.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Vorstand beantragen."

execute.config("piraten-default")

EOF
cat > /opt/liquid_feedback/webapp/config/piraten-int-at.lua << EOF
config.instance_prefix = "int_at"

config.instance_name = "Österreich"

config.use_terms = "=== Nutzungsbedingungen ===\nFür die Nutzung von LiquidFeedback, nachfolgend System genannt, unter der Domain lqpp.de gelten die Nutzungsbedingungen der Piratenpartei Österreichs. Jedem Pirat, der das System nutzt, sind diese bekannt; er erklärt sich durch Login in das System unter vorgenannter Domain mit ihnen einverstanden.\n\n# Jeder Pirat der Piratenpartei Österreichs, Nutzer genannt, erhält einen Zugang zum System.\n# Jeder Nutzer wird hiermit ausrdrücklich darauf hingewiesen, dass alle Einträge und Einstellungen, die er vornimmt, aus Gründen der Nachvollziehbarkeit (Transparenz) für unbegrenzte Zeit im System erhalten bleiben und auch veröffentlicht werden können. Dies gilt auch im Fall des Parteiaustritts.\n# Der Nutzer kann eine Pseudonymisierung seiner Einträge durch Verwendung eines Pseudonyms erreichen.\n# Eine Anonymisierung ist prinzipiell nicht möglich.\n# Dem Nutzer ist bekannt, dass jeder Nutzer die Datenbankinhalte zum Zwecke der Nachvollziehbarkeit herunterladen kann. Eine nachträgliche Pseudonymisierung dieser Daten ist daher nicht möglich.\n# Die Weitergabe jeglicher datenschutzrelevanter Daten ist nur unter Vorraussetzung der Zustimmung aller betroffenen Nutzer gestattet. Ohne ausdrückliche Genehmigung ist die Veröffentlichung personenbezogener Daten untersagt.\n# Der Nutzer darf seine Zugangsdaten nicht an Dritte, auch nicht an andere Piraten, weitergeben. Er darf das System nur selbst persönlich nutzen. Vollmacht zur Stimmübertragung darf ausschließlich systemintern als Delegation erfolgen. Nutzer die aus persönlichen Gründen das System nicht uneingeschränkt nutzen können, können Ausnahmen beim Vorstand beantragen."

config.issue_discussion_url_func = function(issue)
    return "http://wiki.piratenpartei.at/" .. "LiquidFeedback_Themendiskussion/" .. issue.id
end

config.download_dir = "/opt/liquid_feedback/download/int_at"

execute.config("piraten-default")

EOF

SSL aktivieren

Leider konnte uns die Bundes-IT nicht wie vereinbart das piratenpartei.de-Wildcard-Zertifikat zur Verfügung stellen. Daher mussten wir uns kurzfristig mit einem preiswerten Ersatz begnügen, ein Domain-validiertes GoDaddy Cert. Leider konnte kein Verantwortlicher der Bundes-IT zeitnah erreicht werden, um die Domain-Validierung zu bestätigen. Daher sind wir statt liquid-berlin.piratenpartei.de zu nutzen auf die Domain lqpp.de ausgewichen.

mkdir /etc/lighttpd/ssl

Zertifikat nach /etc/lighttpd/ssl/lqdd.de.pem kopieren! Cert-Chain-Bundle nach /etc/lighttpd/ssl/goDaddyBundle.crt kopieren!

chmod 600 lqpp.de.pem
chmod 600 goDaddyBundle.crt
vi /etc/lighttpd/conf-available/10-ssl.conf
$SERVER["socket"] == "0.0.0.0:443" {
                 ssl.engine                  = "enable"
                 ssl.pemfile                 = "/etc/lighttpd/ssl/lqpp.de.pem"
                 ssl.ca-file                 = "/etc/lighttpd/ssl/goDaddyBundle.crt"
}
lighttpd-enable-mod ssl

Admin Kennwort setzen

su - www-data
cd /opt/liquid_feedback/webapp
../webmcp/framework/bin/webmcp_shell piraten
member = Member:by_id(1)
member:set_password("sesam")
member:save()
CTRL-d
exit

Webserver starten

/etc/init.d/lighttpd restart

Einloggen als admin und Passwort neu setzen!

MTA installieren und konfigurieren

apt-get install exim4 courier-imap-ssl
dpkg-reconfigure exim4-config
-> internet site; mail is sent and received directly using SMTP
-> System mail name: lqpp.de
-> IP-addresses to listen on: [empty] (means any interface)
-> Other destinations: lqpp.de
-> Domains to relay mail for: [empty]
-> Machines to relay mail for: [empty]
-> Keep number of DNS-queries minimal: No
-> Delivery method for local mail: Maildir
-> Split configuration: No
-> Root and postmater receipient: admins

adduser admins
adduser support

SSL-PEM-File nach /etc/courier/imapd.pem kopieren

Relaying für via TLS/PLAIN authentifizierte Benutzer erlauben

(Single config file vorausgesetzt)

/usr/share/doc/exim4-base/examples/exim-gencert

/etc/exim4/exim.key und /etc/exim4/exim.crt durch korrektes Zertifikat ersetzen

In /etc/exim4/exim4.conf.template vor ### end main/01_exim4-config_listmacrosdefs folgende 2 Zeilen einfügen:

# enable TLS
MAIN_TLS_ENABLE = true

In /etc/exim4/exim4.conf.template Kommentarzeichen des Abschnitts plain_server entfernen. Anschließend /etc/exim4/passwd anlegen:

/usr/share/doc/exim4/examples/exim-adduser
chown root:Debian-exim /etc/exim4/passwd
chmod 640 /etc/exim4/passwd

Software updaten

WebMCP updaten

WEBMCP_VERSION=1.1.0
cd /root/install
wget http://www.public-software-group.org/pub/projects/webmcp/v$WEBMCP_VERSION/webmcp-v$WEBMCP_VERSION.tar.gz
cd /opt/liquid_feedback/
tar xvzf /root/install/webmcp-v$WEBMCP_VERSION.tar.gz
cd webmcp-v$WEBMCP_VERSION
# Da wir ein 64 Bit System haben Makefile.options anpassen: 
sed -i -e 's/-O2/-fPIC -O2/' Makefile.options
make
cd ..
rm webmcp
ln -s webmcp-v$WEBMCP_VERSION webmcp

RocketWiki updaten

ROCKETWIKI_VERSION=0.2
wget http://www.public-software-group.org/pub/projects/rocketwiki/liquid_feedback_edition/v$ROCKETWIKI_VERSION/rocketwiki-lqfb-v$ROCKETWIKI_VERSION.tar.gz
tar xvzf rocketwiki-lqfb-v$ROCKETWIKI_VERSION.tar.gz
cd rocketwiki-lqfb-v$ROCKETWIKI_VERSION
make
cp rocketwiki-lqfb rocketwiki-lqfb-compat /opt/liquid_feedback/rocketwiki/

LiquidFeedback Core updaten

# auf keinen fall vergessen: vorher backup!
export LFCORE_VERSION=v1.2.7
cd /root/install
wget http://www.public-software-group.org/pub/projects/liquid_feedback/backend/$LFCORE_VERSION/liquid_feedback_core-$LFCORE_VERSION.tar.gz
tar xvzf liquid_feedback_core-$LFCORE_VERSION.tar.gz
cd liquid_feedback_core-$LFCORE_VERSION
make
mkdir -p /opt/liquid_feedback/tmp
chown www-data /opt/liquid_feedback/tmp
cd /opt/liquid_feedback/tmp


INSTANCE=be #bb by hb hh mv ni nw sh sn st int-br
export DBNAME=liquid_feedback_$INSTANCE
export TMPFILE=tmp_$INSTANCE.sql
su www-data
# wenn noetig alte db vorbereiten fuer update
psql --set ON_ERROR_STOP=1 $DBNAME -f /root/install/liquid_feedback_core-$LFCORE_VERSION/update/prepare-beta25-beta26.sql
pg_dump --disable-triggers -a -D $DBNAME > $TMPFILE
dropdb ${DBNAME}_save
echo "alter database $DBNAME rename to ${DBNAME}_save;" | psql template1
createdb $DBNAME
psql --set ON_ERROR_STOP=1 $DBNAME -f /root/install/liquid_feedback_core-$LFCORE_VERSION/core.sql
exit
su postgres
psql --set ON_ERROR_STOP=1 $DBNAME -f $TMPFILE
exit


# jetzt alles ueberpruefen!!!1!!
su www-data
rm tmp.sql

Liquid Feedback Frontend per mercurial

cd /opt/liquid_feedback/
hg clone http://www.public-software-group.org/mercurial/liquid_feedback_frontend liquid_feedback_frontend-current

Liquid Feedback Frontend per mercurial updaten

cd /opt/liquid_feedback/liquid_feedback_frontend-current
hg pull -u
hg update

Liquid Feedback Frontend updaten (deprecated)

LF_VERSION=beta10
cd /root/install
wget http://www.public-software-group.org/pub/projects/liquid_feedback/frontend/$LF_VERSION/liquid_feedback_frontend-$LF_VERSION.tar.gz
cd /opt/liquid_feedback
tar xvzf /root/install/liquid_feedback_frontend-$LF_VERSION.tar.gz
cd liquid_feedback_frontend-$LF_VERSION
chown www-data tmp
cd fastpath
vi getpic.c
#define GETPIC_DEFAULT_AVATAR "/opt/liquid_feedback/webapp/static/avatar.jpg"
make
rm webapp
ln -s liquid_feedback_frontend-$LF_VERSION webapp

Anwendung konfigurieren: [BE:Liquid_Democracy_Test/Serverkonfiguration#Anwendung_konfigurieren]


Wichtiger Hinweis: The image accelerator fastpath/getpic.c is broken since beta1. Do not enable the fastpath mechanism for images in your config file, or copy the getpic.c file from alpha5, which works fine!

Durchgeführte Updates

2010-01-02 (Björn, Jbe): WebMCP 1.0.5, Core beta12, Frontend beta2

2010-01-02 (Björn, Jbe): Core beta13, Frontend beta3 & beta4

2010-01-04 (Björn, Jbe): Core beta14, Frontend beta5, im Rahmen des Updates wurde folgender manueller DB-Eingriff vorgenommen:

update member set created = (select used from invite_code where invite_code.member_id = member.id);
update member set created = '2010-01-01' where id = 1;

Anmerkung: In Anschluss an das Update haben wir vergessen, den Auszählungsprozess (lf_update) wieder zu starten. Daher fand für ca. 2 Stunden kein Update der Unterstützer statt, und Anträge konnten keinen Statuswechsel vollziehen. Der Hintergrundprozess läuft wieder seit 2010-01-05 01:57:12.

2010-01-11 (Björn, Jbe): Core beta15, Frontend beta6

2010-01-19 (Björn): Frontend hotfix eingespielt zur Vermeidung der Anzeige von Initatoren in der Wahlmaske, die die Einladung zum Initiator nicht angenommen haben.

2010-01-22 (Björn): Frontend hotfix eingespielt (HTML-Kodierung der Postanschrift des Mitglied)

2010-01-22 (Björn, Jbe): RocketWiki 0.2, WebMCP 1.0.6, Core beta17, Frontend beta7, Frontend beta8

2010-01-23 (Björn, Jbe): Core beta18

2010-01-25 (Björn, Jbe): Frontend hotfix eingespielt zur Verhinderung der Abstimmung ueber zurueckgezogene Initiativen, (Björn): Frontend hotfix eingespielt: Fehlende Ereignisse in der Zeitachse bei gleichzeitig gewaehlten Filtern Unterstuetzer und Potentieller Unterstuetzer

2010-02-02 (Björn, Jbe): Frontend beta9 eingespielt, Frontend hotfix eingespielt zur Verhinderung der Abstimmung ueber zurueckgezogene Initiativen, Frontend hotfix eingespielt: Fehlende Ereignisse in der Zeitachse bei gleichzeitig gewaehlten Filtern Unterstuetzer und Potentieller Unterstuetzer

2010-02-21 (Björn, Jbe): Core beta21, Frontend beta10, WebMCP 1.0.8 eingespielt. Im Initiativen-Listing name durch shortened_name ersetzt. Frontend beta11 eingespielt.

2010-02-24 (Björn): Frontend beta12, Frontend auf mercurial umgestellt. Frontend update auf beta12.1

2010-03-02 (Björn): Frontend update auf beta12.2 (cfc2b9aeca91)

2010-03-04 (Jbe): Backend-Update auf beta23 (damit kritischer Bug bezüglich Stimmenauszählung bei Anregungen behoben)

2010-03-07 (Björn, Jbe): Frontend beta12.3 (ca3a0552927f), Frontend beta13 (53a45356c107)

2010-03-15 (Björn): Frontend beta14 (aaba4d28dd53)

2010-03-26 (Björn): WebMCP 1.0.9, Frontend beta15 (a4e6f30fa84d)

2010-03-26 (Jbe): Backend-Update auf beta26

2010-04-22 (Jbe): Backend-Update auf v1.0.2 (via 1.0.0, 1.0.1)

2010-04-22 (Björn): WebMCP 1.1.0, Frontend beta17 (8e11fb45c688)

2010-04-23 (Björn): Frontend beta18 (c553898f64cb)

2010-04-27 (Björn): pt_br Sprachpaket Server-lokal hinzugefügt

2010-05-05 (Björn): Vorstandsbeschlusses bzgl. Nutzungsbedingungen technisch umgesetzt.

2010-07-28 (Björn) Frontend beta23, Backend 1.2.3

2010-08-30 (Björn) Frontend beta27, Backend 1.2.6, Backend 1.2.7

2010-09-08 (Jbe) Backend 1.2.8

2010-11-16 (Björn) Backend 1.3.0, Frontend beta30

Invite-Codes hinzufügen

Hierfür habe ich (Jbe) es ein kleines Hilfsprogramm geschrieben, welches auf deepthought im Verzeichnis /root/install/lf_piraten_utils liegt. Bischof hat sich eine Kopie davon gemacht. Ist man im richtigen Verzeichnis, kann man folgendermaßen Einladungscodes erzeugen:

./codegen.lua berlin/invitecodes.YYYY-MM-DD.NN.txt berlin/invitecodes.YYYY-MM-DD.NN.sql 854
su www-data
psql liquid_feedback
\i berlin/invitecodes.YYYY-MM-DD.NN.sql
\q
exit

TODOs

  • SSL-Zertifikat installieren (auch fuer exim und courier!)
  • lf_export als Cronjob einrichten und Datenbankdumps per HTTP veröffentlichen