Intelligente Lösungen
in neuer Dimension

KeeWeb - Passwort-Management für Linux, Windows, Mac

Dieses Dokument bezieht sich auf KeeWeb, Version 1.7.2.

Browser-Version

Die Browser-Version ist erreichbar über diesen Link: KeeWeb@DP. Die Browser-Version muß nur einmalig auf dem DP-Server installiert werden und kann dann von jedem Client direkt verwendet werden.

Die Kennworte werden auch von der Browser-Version lokal auf dem Arbeitsplatzrechner gespeichert!

Installation

  • GitHub-Zweig gh-pages herunterladen
  • … und auspacken auf internal.daemons-point.com, Verzeichnis /var/www/html
  • … und umbenennen: mv keeweb-gh-pages keeweb

Damit ist die Installation abgeschlossen. Falls auf dem Rechner noch kein Apache2 installiert ist, muß dies noch nachgeholt werden.

Nachteile

  • Kein Auto-Type

Desktop-Version

Die Desktop-Version steht unter https://github.com/keeweb/keeweb/releases zum Herunterladen bereit.

Installation

Die nachfolgende Beschreibung funktioniert unter Linux.

  • KeeWeb-1.7.2.linux.x64.zip herunterladen
  • … und auspacken in /opt/keeweb (bspw. mit unzip -d /opt/keeweb KeeWeb-1.7.2.linux.x64.zip)

Damit ist die Installation abgeschlossen.

Start

Zum Starten:

1
2
cd {pfad-der-kdbx-Datei}
/opt/keeweb/KeeWeb

Auto-Type

Die nachfolgende Beschreibung funktioniert unter Linux.

1
sudo apt-get install xdotool

Danach können Benutzername und Kennwort automatisch in Webseiten eingefügt werden:

  • In KeePass: Eintrag anwählen
  • Browser: Anmeldeseite der Webseite anwählen
  • Shift-Alt-T

Probleme

Öffnen von KDBX-Dateien aus anderem Verzeichnis klappt nicht mit Desktop-Version

Wenn ich in’s Verzeichnis “/opt/keepass” wechsle und ./KeePass ausführe, scheitert danach das Öffnen einer KDBX-Datei unter /tmp.

Abhilfe: Wechsle nach “/tmp” und starte /opt/keepass/KeePass.

Quellen

Cache-Konfiguration für Octopress

Einleitung

Bei der Änderung für das feste Navigationsmenü ist mir aufgefallen, dass diese Änderung teilweise nicht wirksam wird. Hypothese: Das liegt am Browser-Cache. Abhilfe: Wir setzen die Cache-Headers.

Detailanalyse

Mittels curl führe ich einige Abfragen unserer Octopress-Seiten durch. Die für das Caching relevanten HTTP-Header liste ich nachfolgend auf.

Beispielabfrage

Abfrage mit Curl:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uli@ulinuc:~/git/dpserver/servers$ curl -kv http://daemons-point.com
* Rebuilt URL to: http://daemons-point.com/
* Hostname was NOT found in DNS cache
*   Trying 138.201.16.240...
* Connected to daemons-point.com (138.201.16.240) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: daemons-point.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Thu, 10 Jan 2019 04:34:33 GMT
* Server Apache/2.4.18 (Ubuntu) is not blacklisted
< Server: Apache/2.4.18 (Ubuntu)
< Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
< ETag: "fd2-57ef5c8fce836"
< Accept-Ranges: bytes
< Content-Length: 4050
< Vary: Accept-Encoding
< Content-Type: text/html
< 
</body>
</html>

<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
...
</body>
</html>
* Connection #0 to host daemons-point.com left intact

Cache-Header

  • /
    • Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
    • ETag: “fd2-57ef5c8fce836”
    • Content-Type: text/html
  • /stylesheets/screen.css
    • Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
    • ETag: “960a-57ef5c8fd45f6”
    • Content-Type: text/css
  • /atom.xml
    • Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
    • ETag: “1a43f-57ef5c8fcd896”
    • Content-Type: application/xml

Fazit: Es sind keine “speziellen” Cache-Header gesetzt, es gibt kein “Cache-Control” und auch kein “Expires”. Damit “ziehen” die Defaults der verschiedenen Browser.

Soll-Zustand

Wir wollen erreichen, dass der Cache für maximal eine Stunde verwendet wird. Das sollte via “Cache-Control: maxage=3600” erreichbar sein.

Mit “public” erlauben wir das Caching für eventuell vorhandene Proxy-Server.

Aktionen

Alle Aktionen betiezen sich auf den vorgeschalteten Apache HTTPD:

  1. “mod_headers” aktivieren: a2enmod headers
  2. Header “Cache-Control” aktivieren via konfig-Datei: Header setifempty Cache-Control "max-age=3600, public
  3. Prozess durchstarten: service apache2 restart

Test

Vorher

1
2
$ curl -kv https://daemons-point.com/ 2>&1|grep -i cache
* Hostname was NOT found in DNS cache

Nachher

1
2
3
$ curl -kv https://daemons-point.com/ 2>&1|grep -i cache
* Hostname was NOT found in DNS cache
< Cache-Control: max-age=3600, public

Quellen

Festes Navigationsmenü in Octopress

Seitenaufbau

Auf unserer Webseite zeigen wir

  • oben links: Das DP-Logo
  • oben rechts: Das DP-Motto
  • darunter: Das Navigationsmenü
  • darunter: Den Nutzinhalt
  • rechts: Den Scrollbalken (… falls der Nutzinhalt nicht auf den Bildschirm passt)

Bisheriges Verhalten

Wenn der Nutzinhalt nicht auf den Bildschirm passt und man nach unten scrollt, dann verschwinden DP-Logo, DP-Motto und Navigationsmenü.

Wunschverhalten

Das Navigationsmenü soll immer sichtbar bleiben!

Festes Navigationsmenu

Umsetzung

Die Umsetzung erfolgt mit CSS. Es muß das Styling für die Navigationsleiste angepasst werden:

  • position – bislang:relative, künftig:sticky
  • top – neu:0px
  • z-index – neu:10

Hier die Änderungen im Detail:

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/sass/partials/_navigation.scss b/sass/partials/_navigation.scss
index 30fa011..fec8061 100644
--- a/sass/partials/_navigation.scss
+++ b/sass/partials/_navigation.scss
@@ -1,5 +1,7 @@
 body > nav {
-  position: relative;
+  position: sticky;
+  top: 0px;
+  z-index: 10;
   background-color: $nav-bg;
   @include background($nav-bg-front, $nav-bg-back);
   border: {

Probleme

Navigationsmenü verschwindet beim Scrollen

Beschreibung

Die in diesem Dokument beschriebene Änderung funktioniert überhaupt nicht, das Navigationsmenü verschwindet beim Scrollen nach oben außerhalb des Bildschirms!

Analyse

Die zugehörige CSS-Datei ist im Browser-Cache und wird nicht immer sofort aktualisiert!

Abhilfe

Link /stylesheets/screen.css im Browser öffnen und “F5 – Refresh” betätigen!

Quellen

Probleme mit Gitbucket-Benutzern - Fehlermeldung bei GIT PUSH

Vorbereitung

  • Sicherstellen: JDK-8 ist verfügbar (java -version)
  • Gitbucket-Repo clonen: git clone https://github.com/gitbucket/gitbucket
  • In den Clone wechseln: cd gitbucket
  • Version 4.7.1 auschecken: git checkout -b v4.7.1 4.7.1
  • Version 4.7.1 bauen: ./sbt.sh executable
  • Gitbucket starten: java -jar target/executable/gitbucket.war
  • Gitbucket im Browser öffnen: Gitbucket@localhost
    • Oben links: 4.7.1
    • Linke Leiste: Keinerlei repositories

Ablauf

Test mit 4.7.1

  • Anmelden (Sign in): root/root
  • Oben rechts: System administration – User Management
  • New user: u/u/u/u@dummy.de/Administrator – Create User
  • Abmelden (Sign out)
  • Anmelden (Sign in): u/u
  • Oben rechts: System administration – User Management
    • root – Edit – Disable – Update User
    • New Group: d
      • Members: u – Add – Manager
      • Create Group
    • New Group: m
      • Members: u – Add – Manager
      • Create Group
    • New Group: p
      • Members: u – Add – Manager
      • Create Group
  • Oben rechts: New repository
    • p/pwb
    • private
    • Initialize … with a README
    • Create repository
  • Oben rechts: System administration – User Management
    • New user: s/s/s/s@dummy.de/Normal – Create User
  • Oben rechts: New repository
    • d/pa
    • private
    • Initialize … with a README
    • Create repository
  • Oben recht: Gitbucket – d/pa – Settings
    • Danger Zone
      • Transfer Ownership – p – Transfer
  • Oben rechts: New repository
    • p/pl
    • private
    • Initialize … with a README
    • Create repository
  • Oben rechts: System administration – User Management
    • New user: n/n/n/n@dummy.de/Normal – Create User
  • Oben rechts: New repository
    • d/na
    • private
    • Initialize … with a README
    • Create repository
  • Oben rechts: System administration – User Management
    • d – Edit
      • Members – s – Add
      • Members – n – Add
      • Update Group
    • m – Edit
      • Members – s – Add
      • Members – n – Add
      • Update Group
    • p – Edit
      • Members – s – Add
      • Members – n – Add
      • Update Group
  • Sicherung: issue-1363.01.tar.xz
    • tar --exclude ".gitbucket/tmp/*" -cvf - .gitbucket|xz -c9 >git/forked/gitbucket/issue-1363.01.tar.xz
    • Besser wär’s natürlich, wenn gitbucket gestoppt wäre…
  • Clone-Tests
    • for u in u n s; do git clone http://${u}@localhost:8080/git/d/na.git ${u}-na; done
    • for u in u n s; do git clone http://${u}@localhost:8080/git/p/pa.git ${u}-pa; done
    • for u in u n s; do git clone http://${u}@localhost:8080/git/p/pl.git ${u}-pl; done
  • Repos verändern: for u in u n s; do for r in na pa pl; do ( cd ${u}-${r}; date>"${u}-${r}.txt"; git add .; git commit -m "${u}-${r}" .); done; done
  • Push-Tests
    • Benutzer: u, Repo: na
      • cd u-na
      • git push –> klappt
      • cd ..
    • Benutzer: u, Repo: pa
      • cd u-pa
      • git push –> klappt
      • cd ..
    • Benutzer: u, Repo: pl
      • cd u-pl
      • git push –> klappt
      • cd ..
    • Benutzer: n, Repo: na
      • cd n-na
      • git push –> klappt nicht
      • git pull --rebase
      • git push –> klappt
      • cd ..
    • Benutzer: n, Repo: pa
      • cd n-pa
      • git pull --rebase
      • git push –> klappt (hätte eigentlich nicht klappen sollen)
      • cd ..
    • Benutzer: n, Repo: pl
      • cd n-pl
      • git pull --rebase
      • git push –> klappt (hätte eigentlich nicht klappen sollen)
      • cd ..
  • Sicherung: issue-1363.02.tar.xz
    • Gitbucket gestoppt
    • tar --exclude ".gitbucket/tmp/*" -cvf - .gitbucket|xz -c9 >git/forked/gitbucket/issue-1363.02.tar.xz

Test mit 4.6

  • Anmelden (Sign in): root/root
  • Oben rechts: System administration – User Management
  • New user: u/u/u/u@dummy.de/Administrator – Create User
  • Abmelden (Sign out)
  • Anmelden (Sign in): u/u
  • Oben rechts: System administration – User Management
    • New Group: d
      • Members: u – Add – Manager
      • Create Group
    • New Group: m
      • Members: u – Add – Manager
      • Create Group
    • New Group: p
      • Members: u – Add – Manager
      • Create Group
  • Oben rechts: New repository
    • p/pwb
    • private
    • Initialize … with a README
    • Create repository
  • Oben rechts: System administration – User Management
    • New user: s/s/s/s@dummy.de/Normal – Create User
  • Oben rechts: New repository
    • d/pa
    • private
    • Initialize … with a README
    • Create repository
  • Oben recht: Gitbucket – d/pa – Settings
    • Danger Zone
      • Transfer Ownership – p – Transfer
  • Oben rechts: New repository
    • p/pl
    • private
    • Initialize … with a README
    • Create repository
  • Oben rechts: System administration – User Management
    • New user: n/n/n/n@dummy.de/Normal – Create User
  • Oben rechts: New repository
    • d/na
    • private
    • Initialize … with a README
    • Create repository
  • Oben rechts: System administration – User Management
    • d – Edit
      • Members – s – Add
      • Members – n – Add
      • Update Group
    • m – Edit
      • Members – s – Add
      • Members – n – Add
      • Update Group
    • p – Edit
      • Members – s – Add
      • Members – n – Add
      • Update Group
  • Sicherung: issue-1363.03.tar.xz
    • Gitbucket stoppen
    • tar --exclude ".gitbucket/tmp/*" -cvf - .gitbucket|xz -c9 >git/forked/gitbucket/issue-1363.03.tar.xz
    • Gitbucket starten
  • Clone-Tests
    • for u in u n s; do git clone http://${u}@localhost:8080/git/d/na.git ${u}-na; done
    • for u in u n s; do git clone http://${u}@localhost:8080/git/p/pa.git ${u}-pa; done
    • for u in u n s; do git clone http://${u}@localhost:8080/git/p/pl.git ${u}-pl; done
  • Repos verändern: for u in u n s; do for r in na pa pl; do ( cd ${u}-${r}; date>"${u}-${r}.txt"; git add .; git commit -m "${u}-${r}" .); done; done
  • Push-Tests
    • Benutzer: u, Repo: na
      • cd u-na
      • git push –> klappt
      • cd ..
    • Benutzer: u, Repo: pa
      • cd u-pa
      • git push –> klappt
      • cd ..
    • Benutzer: u, Repo: pl
      • cd u-pl
      • git push –> klappt
      • cd ..
    • Benutzer: n, Repo: na
      • cd n-na
      • git push –> klappt nicht
      • git pull --rebase
      • git push –> klappt
      • cd ..
    • Benutzer: n, Repo: pa
      • cd n-pa
      • git pull --rebase
      • git push –> klappt (hätte eigentlich nicht klappen sollen)
      • cd ..
    • Benutzer: n, Repo: pl
      • cd n-pl
      • git pull --rebase
      • git push –> klappt (hätte eigentlich nicht klappen sollen)
      • cd ..
  • Sicherung: issue-1363.04.tar.xz
    • Gitbucket gestoppt
    • tar --exclude ".gitbucket/tmp/*" -cvf - .gitbucket|xz -c9 >git/forked/gitbucket/issue-1363.04.tar.xz
  • Aktualisierung auf 4.7.1
  • Gitbucket gestartet
  • Repos verändern: for u in u n s; do for r in na pa pl; do ( cd ${u}-${r}; date>"${u}-${r}-471.txt"; git add .; git commit -m "${u}-${r}" .); done; done
  • Push-Tests
    • Benutzer: u, Repo: na
      • cd u-na
      • git pull --rebase –> klappt
      • git push –> klappt
      • cd ..
    • Benutzer: u, Repo: pa
      • cd u-pa
      • git pull --rebase –> klappt
      • git push –> klappt
      • cd ..
    • Benutzer: u, Repo: pl
      • cd u-pl
      • git pull --rebase –> klappt
      • git push –> klappt
      • cd ..
    • Benutzer: n, Repo: na
      • cd n-na
      • git pull --rebase –> klappt
      • git push –> klappt
      • cd ..
    • Benutzer: n, Repo: pa
      • cd n-pa
      • git pull --rebase –> klappt
      • git push –> klappt
      • cd ..
    • Benutzer: n, Repo: pl
      • cd n-pl
      • git pull --rebase –> klappt
      • git push –> klappt (hätte eigentlich nicht klappen sollen)
      • cd ..

Nachbereitung

  • Gitbucket-Clone löschen: rm -rf gitbucket

Ausgaben

Sicherstellen: JDK-8 ist verfügbar
1
2
3
4
uli@ulinuc:~/tmp$ java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
Gitbucket-Repo clonen
1
2
3
4
5
6
7
uli@ulinuc:~/tmp$ git clone https://github.com/gitbucket/gitbucket
Klone nach 'gitbucket' ...
remote: Counting objects: 33977, done.
remote: Compressing objects: 100% (74/74), done.
remote: Total 33977 (delta 28), reused 0 (delta 0), pack-reused 33891
Empfange Objekte: 100% (33977/33977), 26.16 MiB | 1.56 MiB/s, Fertig.
Löse Unterschiede auf: 100% (17621/17621), Fertig.
Version 4.7.1 auschecken
1
2
uli@ulinuc:~/tmp/gitbucket$ git checkout -b v4.7.1 4.7.1
Zu neuem Branch 'v4.7,1' gewechselt
Version 4.7.1 bauen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Listening for transport dt_socket at address: 5005
[info] Loading global plugins from /home/uli/.sbt/0.13/plugins
...
[info] Resolving jline#jline;2.12.1 ...
[info] Resolving org.eclipse.jetty#jetty-continuation;9.3.9.v20160517 ...
[info] Done updating.
[info] Compiling 231 Scala sources and 3 Java sources to /home/uli/tmp/gitbucket/target/scala-2.11/classes...
[warn] there were two feature warnings; re-run with -feature for details
[warn] one warning found
[info] Packaging /home/uli/tmp/gitbucket/target/scala-2.11/gitbucket_2.11-4.7.1.jar ...
[info] Done packaging.
[info] Packaging /home/uli/tmp/gitbucket/target/scala-2.11/gitbucket_2.11-4.7.1.war ...
[info] Done packaging.
[info] building executable webapp in /home/uli/tmp/gitbucket/target/executable
[info] built executable webapp /home/uli/tmp/gitbucket/target/executable/gitbucket.war
[success] Total time: 113 s, completed 03.12.2016 07:22:01
Gitbucket starten
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uli@ulinuc:~/tmp/gitbucket$ java -jar target/executable/gitbucket.war
2016-12-03 07:30:45.725:INFO::main: Logging initialized @117ms
2016-12-03 07:30:45.880:INFO:oejs.Server:main: jetty-9.3.z-SNAPSHOT
2016-12-03 07:30:46.979:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
SLF4J: Class path contains multiple SLF4J bindings.
...
07:30:48.923 [main] INFO  o.quartz.impl.DirectSchedulerFactory - Quartz scheduler 'QuartzScheduler~job
07:30:48.923 [main] INFO  o.quartz.impl.DirectSchedulerFactory - Quartz scheduler version: 2.2.1
07:30:48.924 [main] INFO  org.quartz.core.QuartzScheduler - Scheduler QuartzScheduler~job_$_job started.
[INFO] [12/03/2016 07:30:48.933] [main] [[QuartzScheduler~job]] Setting up scheduled job 'Daily', with 'com.typesafe.akka.extension.quartz.QuartzCronSchedule@4fe875be'
07:30:48.950 [main] INFO  o.scalatra.servlet.ScalatraListener - The cycle class name from the config: ScalatraBootstrap
07:30:48.953 [main] INFO  o.scalatra.servlet.ScalatraListener - Initializing life cycle class: ScalatraBootstrap
2016-12-03 07:30:49.587:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@6daf7d37{/,file:///home/uli/.gitbucket/tmp/webapp/,AVAILABLE}{file:/home/uli/tmp/gitbucket/target/executable/gitbucket.war}
2016-12-03 07:30:49.596:INFO:oejs.AbstractConnector:main: Started ServerConnector@2410d378{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2016-12-03 07:30:49.597:INFO:oejs.Server:main: Started @3993ms

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
uli@ulinuc:/tmp$ for u in u n s; do for r in na pa; do ( cd ${u}-${r}; date>"${u}-${r}.txt"; git add .; git commit -m "${u}-${r}" .); done; done
[master f44998e] u-na
 1 file changed, 1 insertion(+)
 create mode 100644 u-na.txt
[master 12d7f08] u-pa
 1 file changed, 1 insertion(+)
 create mode 100644 u-pa.txt
[master 3311009] n-na
 1 file changed, 1 insertion(+)
 create mode 100644 n-na.txt
[master 696ea6c] n-pa
 1 file changed, 1 insertion(+)
 create mode 100644 n-pa.txt
[master 7748586] s-na
 1 file changed, 1 insertion(+)
 create mode 100644 s-na.txt
[master f572379] s-pa
 1 file changed, 1 insertion(+)
 create mode 100644 s-pa.txt
[master 3a78afa] u-pl
 1 file changed, 1 insertion(+)
 create mode 100644 u-pl.txt
[master 9e7c466] n-pl
 1 file changed, 1 insertion(+)
 create mode 100644 n-pl.txt
[master be4155f] s-pl
 1 file changed, 1 insertion(+)
 create mode 100644 s-pl.txt

Inhaltsverzeichnis für Artikel erzeugen

Umstellungen an Octopress

Die für die automatische Erzeugung von Inhaltsverzeichnissen erforderlichen Umstellungen an Octopress stammen von hier:

http://brizzled.clapper.org/blog/2012/02/04/generating-a-table-of-contents-in-octopress/

Einige Variationen habe ich daran aber vorgenommen:

  • Es wird die JQuery-Version von Octopress verwendet
  • Das JQuery-Plugin zur Erzeugung des Inhaltsverzeichnisses wird in “javascripts/libs” eingespielt (… neben JQuery)
  • Das Erscheinungsbild ist übersetzt auf Deutsch (“Inhalt” statt “Table of Contents”)
  • Hintergrundfarbe wie bei der Navigationsleiste

Aktivierung im Artikel

Damit ein Artikel mit einem Inhaltsverzeichnis versehen wird, muß im Artikelkopf die Zeile

toc: true

auftauchen. Bei diesem Artikel sieht der Vorspann momentan also ungefähr so aus:

Vorspann mit automatischer Erzeugung des Inhaltsverzeichnisses
1
2
3
4
5
6
7
8
9
10
11
---
layout: post
title: "Inhaltsverzeichnis für Artikel erzeugen"
date: 2013-05-02 18:00
updated: 2013-05-04 10:00
comments: false
author: Uli Heller
toc: true
categories: 
- Octopress
---

Aktualisieren der Web-Seite

Unsere auf Octopress basierende Web-Seite wird üblicherweise ja in Form von einer lokalen Kopie modifiziert und dann mittels

gesichtet. Wer die notwendigen Berechtigungen hat, kann danach die Web-Seite auf unserem offiziellen Web-Server auf die modifizierte Version aktualisieren.

In diesem Artikel steht, wie das funktioniert.