LQPP/Installation

LiquidFeedback Komponenten Installieren

#########################################################
##
## Festlegen der zu installierenden Versionen:
##
export VERSION_WEBMCP="v1.1.1"
export VERSION_ROCKETWIKI="v0.2"
export VERSION_CORE="v1.1.0"
export VERSION_FRONTEND="beta19"
##
#########################################################


# Install dependencies and utilities:
apt-get install lighttpd postgresql libpq-dev lua5.1 liblua5.1-0-dev build-essential ghc libghc6-parsec-dev imagemagick sudo

# Make sure we do not overwrite a running instance
if test -e /opt/liquid_feedback
then   
        echo "ERROR: /opt/liquid_feedback already exists. EXIT."
        exit 1
fi


# Download von WebMCP, RocketWiki, Core und Frontend:
mkdir -p /usr/src/liquid_feedback
cd /usr/src/liquid_feedback || exit 1
wget http://www.public-software-group.org/pub/projects/webmcp/${VERSION_WEBMCP}/webmcp-${VERSION_WEBMCP}.tar.gz || exit 1
wget http://www.public-software-group.org/pub/projects/rocketwiki/liquid_feedback_edition/${VERSION_ROCKETWIKI}/rocketwiki-lqfb-${VERSION_ROCKETWIKI}.tar.gz || exit 1
wget http://www.public-software-group.org/pub/projects/liquid_feedback/backend/${VERSION_CORE}/liquid_feedback_core-${VERSION_CORE}.tar.gz || exit 1
wget http://www.public-software-group.org/pub/projects/liquid_feedback/frontend/${VERSION_FRONTEND}/liquid_feedback_frontend-${VERSION_FRONTEND}.tar.gz || exit 1


# Erstellen des Betriebsverzeichnisses:
mkdir -p /opt/liquid_feedback


# ACHTUNG:   Alle weiteren Befehle erwarten, dass sie aus
# ========   diesem Verzeichnis heraus ausgefuehrt werden.


# Installieren von WebMCP:
cd /opt/liquid_feedback || exit 1
tar xvzf /usr/src/liquid_feedback/webmcp-${VERSION_WEBMCP}.tar.gz
mv webmcp-${VERSION_WEBMCP} webmcp || exit 1
  # OPTIONALER Schritt (nur für 64bit Systeme):
  #sed -i webmcp/Makefile.options -e 's/^CFLAGS = -O2/CFLAGS = -fPIC -O2/g'
  # OPTIONALER Schritt ENDE
make -C webmcp || exit 1


# Installieren von RocketWiki:
cd /opt/liquid_feedback || exit 1
tar xvzf /usr/src/liquid_feedback/rocketwiki-lqfb-${VERSION_ROCKETWIKI}.tar.gz
mv rocketwiki-lqfb-${VERSION_ROCKETWIKI} rocketwiki || exit 1
make -C rocketwiki || exit 1


# Installieren von LiquidFeedback-Core:
cd /opt/liquid_feedback || exit 1
tar xvzf /usr/src/liquid_feedback/liquid_feedback_core-${VERSION_CORE}.tar.gz
mv liquid_feedback_core-${VERSION_CORE} core || exit 1
make -C core


# Installieren des LiquidFeedback-Frontends:
cd /opt/liquid_feedback || exit 1
tar xvzf /usr/src/liquid_feedback/liquid_feedback_frontend-${VERSION_FRONTEND}.tar.gz
mv liquid_feedback_frontend-${VERSION_FRONTEND}/ webapp || exit 1
sed -i webapp/fastpath/getpic.c -e 's|/liquid_feedback_testing/app/|/liquid_feedback/webapp/|g' || exit 1
#mkdir webapp/pp
#cp webapp/fastpath/getpic.c webapp/pp/
#sed -i webapp/pp/getpic.c -e 's|dbname=liquid_feedback"|dbname=liquid_feedback_pp"|g'
#make -C webapp/pp -f ../fastpath/Makefile


# TMP-Verzeichnis beschreibbar machen:
chown /opt/liquid_feedback/www-data webapp/tmp/


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

Webconfig fuer LiquidFeedback erstellen:

Datei '/etc/lighttpd/conf-available/42-liquid_feedback.conf' mit folgendem Inhalt erstellen:

server.modules += (
  "mod_cgi",
  "mod_alias",
  "mod_setenv",
  "mod_rewrite",
  "mod_redirect",
)

# Redirect fuer /lf/ auf /pp/
       url.redirect += (
     "^/lf$" => "/pp/",
     "^/lf/(.*)" => "/pp/$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 += (
 "/pp/fastpath/" => "/opt/liquid_feedback/webapp/fastpath/pp/",
 "/pp/static/"   => "/opt/liquid_feedback/webapp/static/",
 "/pp/"          => "/opt/liquid_feedback/webmcp/framework/cgi-bin/"
)

$HTTP["url"] =~ "^/pp/" {
  setenv.add-environment += (
    "WEBMCP_CONFIG_NAME"  => "piraten-pp",
    "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",

  # base URL
      "^/([a-z][a-z])/(\?(.*))?$" => "/$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",

  # actions
      "^/([a-z][a-z])/([^/\?]+)/([^/\.\?]+)(\?(.*))?$" => "/$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",

  # 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",
)

# Redirects for URLs without trailing slashes
url.redirect += (

  # base URL without trailing slash
      "^/([a-z][a-z])$" => "/$1/",

  # module base URL without trailing slash
      "^/([a-z][a-z])/([^/\?]+)$" => "/$1/$2/",
)

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

$HTTP["url"] =~ "^/pp/fastpath/" {
  cgi.assign = ( "" => "" )
  setenv.add-response-header = ( "Cache-Control" => "private; max-age=86400" )
}

Und als Modul aktivieren:

lighttpd-enable-mod liquid_feedback


LiquidFeedback konfigurieren

Die Datei '/opt/liquid_feedback/webapp/config/pp.lua' mit dem folgendem Inhalt erzeugen:

-----------------------------------------------------
-- GENERAL
-----------------------------------------------------

config.app_name = "Liquid Feedback"
config.app_version = "beta19"

config.instance_name = "Piratenpartei"
config.instance_prefix = "pp"

config.absolute_base_url = "https://lqfb.piratenpartei.de/".. config.instance_prefix .. "/"

config.app_title = config.app_name .. " der Piratenpartei Deutschland"
config.app_logo = "logo.png"

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

request.set_404_route{ module = 'index', view = '404' }

config.member_image_default_file = {
  avatar = "avatar.jpg",
  photo = nil
}

config.member_image_content_type = "image/jpeg"
config.member_image_convert_func = {
  avatar = function(data) return os.pfilter(data, "convert", "-define", "jpeg:size=48x48"  , "-", "-flatten", "-thumbnail",   "48x48", "-interlace", "Line", "jpeg:-") end,
  photo =  function(data) return os.pfilter(data, "convert", "-define", "jpeg:size=240x240", "-", "-flatten", "-thumbnail", "240x240", "-interlace", "Line", "jpeg:-") end
}


-----------------------------------------------------
-- DATABASE
-----------------------------------------------------

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

at_exit(function() 
  db:close()
end)

function mondelefant.class_prototype:get_db_conn() return db end

-- enable output of SQL commands in trace system
function db:sql_tracer(command)
  return function(error_info)
    local error_info = error_info or {}
    trace.sql{ command = command, error_position = error_info.position }
  end
end

-- TODO abstraction
-- get record by id
function mondelefant.class_prototype:by_id(id)
  local selector = self:new_selector()
  selector:add_where{ 'id = ?', id }
  selector:optional_object_mode()
  return selector:exec()
end


-----------------------------------------------------
-- FEATURES
-----------------------------------------------------

config.issue_discussion_url_func = function(issue)
  return "http://piratenpad.de/" .. string.upper(config.instance_prefix) .. ":LiquidFeedback_Themendiskussion_" .. issue.id
end

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

config.public_access = "pseudonym"  -- Available options: "anonymous", "pseudonym"

config.api_enabled = true

config.feature_rss_enabled = false   -- currently broken

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

-----------------------------------------------------
-- LEGAL STUFF
-----------------------------------------------------

 config.app_service_provider = "Piratenpartei Deutschland (PIRATEN)<br />Pflugstr. 9a<br />10115 Berlin<br /><br />E-Mail Support: <a href='mailto:support@lqfb.piratenpartei.de'>support@lqfb.piratenpartei.de</a><br /><br \>E-Mail Administratoren: <a href='mailto:admins@lqfb.piratenpartei.de'>admins@lqfb.piratenpartei.de</a><br /><br />Weitere Informationen & FAQ: <a href='http://wiki.piratenpartei.de/LQPP'>http://wiki.piratenpartei.de/LQPP</a>"
 
 config.use_terms = "=== Nutzungsbedingungen ===\n1. Wenn man keine Ahnung hat, einfach mal Kresse halten."
 
 config.download_use_terms = "Es gelten die [https://lqfb.piratenpartei.de/pp/index/usage_terms.html Nutzungsbedingungen], insbesondere Punkt 1 ist zu beachten:\n\n"


-----------------------------------------------------
-- PERFORMANCE
-----------------------------------------------------

--FIXME: Fastpath ist momentan defekt (Rücksprache Dark) !

--config.fastpath_url_func = function(member_id, image_type)
--  return "https://lqfb.piratenpartei.de/" .. config.instance_prefix .. "/fastpath/getpic?" .. tostring(member_id) .. "+" .. tostring(image_type)
--end

--TODO: Können wir das folgende aktivieren ?

-- uncomment the following two lines to use C implementations of chosen
-- functions and to disable garbage collection during the request, to
-- increase speed:
--
-- require 'webmcp_accelerator'
-- collectgarbage("stop")



-----------------------------------------------------
--  What's that
-----------------------------------------------------

--TODO: Können wir den OpenID Kram rausschmeißen ?

-- OpenID authentication is not fully implemented yet, DO NOT USE BEFORE THIS NOTICE HAS BEEN REMOVED!
config.auth_openid_enabled = false
config.auth_openid_https_as_default = true
config.auth_openid_identifier_check_func = function(uri) return false end



--TODO: Braucen wir das ?

request.set_allowed_json_request_slots{ "title", "actions", "support", "default", "trace", "system_error" }

if request.get_json_request_slots() then
  request.force_absolute_baseurl()
end

request.set_absolute_baseurl(config.absolute_base_url)

Adminaccount erstellen

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