Intelligente Lösungen
in neuer Dimension

LXC-Container Ubuntu-18.04

Hier beschreibe ich, wie ich meinen Basiscontainer erzeuge.

Basiscontainer via LXD herunterladen und aktualisieren

1
2
3
4
5
6
7
8
9
10
11
# Auf dem Host...
lxc launch ubuntu:18.04 ubuntu-1804
lxc exec ubuntu-1804 /bin/bash

# Im Container...
apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get autoremove
apt-get clean
poweroff

Nacharbeiten

Zusatzpakete installieren

Für meine tägliche Arbeit brauche ich

  • joe
  • apt-transport-https
  • openssh-server (scheint bei 18.04 bereits per Standard installiert zu sein)
  • net-tools (für ifconfig und netstat)

Diese Pakete installiere ich im Container so:

1
2
3
4
5
apt-get install joe
apt-get install apt-transport-https
apt-get install openssh-server
apt-get install net-tools # ... provides ifconfig and netstat
apt-get clean

OpenSSH aktivieren

1
systemctl enable ssh

SSH-Zugriff via PubKey

1
2
3
4
5
6
7
mkdir /root/.ssh
chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
cat >>/root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1cd... Uli's SSH Key
^D

Ewige Protokollierung mit Zeitstempel

Siehe StackOverflow -Unlimited Bash History.

/etc/bash.bashrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
HISTFILESIZE=
HISTSIZE=
HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; ${PROMPT_COMMAND:-true}"
# Log last command to syslog
log_command () {
 echo "${USER} $(HISTTIMEFORMAT='' builtin history 1|cut -c8-)" |  logger -t shell -p user.info
}
PROMPT_COMMAND="${PROMPT_COMMAND:-true};log_command"

/etc/skel/.bashrc und /root/.bashrc und /home/ubuntu/.bashrc

Bislang:

1
2
3
4
...
HISTSIZE=1000
HISTFILESIZE=2000
...

Neu:

1
2
3
4
...
#HISTSIZE=1000
#HISTFILESIZE=2000
...

Zeitzone korrigieren

1
2
3
4
5
root@ubuntu-1804:~# date
Mon Apr  8 04:59:43 UTC 2019
root@ubuntu-1804:~# timedatectl set-timezone Europe/Berlin
root@ubuntu-1804:~# date
Mon Apr  8 07:00:21 CEST 2019

Änderungshistorie

  • 2019-04-29: Bash-Historie in /var/log/syslog speichern

Linux-Kommandozeile: Farbe von Ordnern ändern

Ich verwende eine Kommandozeile mit schwarzem Hintergrund. Wenn ich mir Ordnernamen anzeigen lasse, so werden diese “dunkelblau” dargestellt. Ich kann sie kam erkennen:

dunkelblau

Hier beschreibe ich, wie ich die Farbe der Ordnernamen in “hellpink” wandle:

  1. Farbcode ermitteln: AskUbuntu kennt alle Varianten – 1;35
  2. Datei ~/.bashrc editieren
    • PS1-Zeile editieren: “01;34m” –> “01;35m”
    • Ganz unten neue Zeile: LS_COLORS=$LS_COLORS:'di=1;35:' ; export LS_COLORS

Neue Kommandozeile öffnen und neue Farben genießen!

pink

Hier noch die Änderungen an ~/.bashrc als DIFF:

Änderungen an ~/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--- .bashrc_dunkelblau  2019-04-06 06:29:35.311364698 +0000
+++ .bashrc     2019-04-06 06:30:12.583362700 +0000
@@ -57,7 +57,7 @@
 fi

 if [ "$color_prompt" = yes ]; then
-    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;35m\]\w\[\033[00m\]\$ '
 else
     PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
 fi
@@ -115,3 +115,4 @@
     . /etc/bash_completion
   fi
 fi
+LS_COLORS=$LS_COLORS:'di=1;35:' ; export LS_COLORS

Aktualisierung von MariaDB

Bei meinen Ubuntu-Containern kommt es immer wieder vor, dass die Aktualisierung von MariaDB mit folgenden Ausgaben hängen bleibt:

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo apt-get update
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
...
Setting up kmod (22-1ubuntu5.2) ...
Installing new version of config file /etc/modprobe.d/blacklist.conf ...
Setting up mariadb-client-core-10.0 (10.0.38-0ubuntu0.16.04.1) ...
Setting up mariadb-client-10.0 (10.0.38-0ubuntu0.16.04.1) ...
Setting up mariadb-server-core-10.0 (10.0.38-0ubuntu0.16.04.1) ...
Setting up mariadb-server-10.0 (10.0.38-0ubuntu0.16.04.1) ...

Manchmal hilft SEHR langes Warten!

Manchmal muß auch manuell nachgeholfen werden:

1
2
3
4
5
6
7
8
9
10
$ sudo service mysql stop
$ ps waux|grep dpkg|grep -v grep|cut -c10-15|xargs sudo kill
$ ps waux|grep dpkg|grep -v grep|cut -c10-15|xargs sudo kill -15
$ ps waux|grep dpkg|grep -v grep|cut -c10-15|xargs sudo kill -9
$ ps waux|grep mysql|grep -v grep|cut -c10-15|xargs sudo kill
$ ps waux|grep mysql|grep -v grep|cut -c10-15|xargs sudo kill -15
$ ps waux|grep mysql|grep -v grep|cut -c10-15|xargs sudo kill -9
$ sudo apt-get upgrade
$ sudo dpkg --configure -a
$ sudo apt-get upgrade

Bislang hat danach dann immer alles funktioniert!

Server-Zertifikat anzeigen mit OPENSSL

Gelegentlich muß ich mir ein Server-Zertifikat von der Konsole aus ansehen. Das geht am besten mit OPENSSL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Mit TLS-SNI
$ openssl s_client  -showcerts -connect {hostname}:443 -servername {hostname}|openssl x509 -text|less
...
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
        Validity
            Not Before: Feb  8 00:00:00 2019 GMT
            Not After : Feb  7 23:59:59 2021 GMT
        Subject: OU = Domain Control Validated, OU = PositiveSSL Multi-Domain
...
            X509v3 Subject Alternative Name: 
                DNS:{hostname}, DNS:{alias1}, DNS: {alias2}
...

# Ohne TLS-SNI
$ openssl s_client  -showcerts -connect {hostname}:443|openssl x509 -text|less
...

ImageMagick - SVG nach PNG wandeln

Manchmal muß ich SVG-Dateien nach PNG wandeln. Das Werkzeug meiner Wahl hierfür ist ImageMagick und davon das Werkzeug convert. Ich verwende Version 6.7.7:

1
2
3
4
$ convert --version
Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP    

Einfachste Variante

Im Grunde genommen muß man nur dies ausführen:

1
2
# convert {svg-datei} {png-datei}
$ convert mypicture.svg mypicture.png

Danach hat man die PNG-Datei.

Transparenter Hintergrund

Meine SVG-Datei hat einen weißen Hintergrund. Der wird mit der einfachsten Variante auch so in die PNG-Datei übernommen. Oft ist mir’s lieber, wenn der Hintergrund transparent ist, das erreiche ich so:

1
convert -background transparent mypicture.svg mypicture.png

Treppen entfernen

Die Option “+antialias” soll die Treppenbildung reduzieren. Ich kann keine Auswirkung feststellen, eventuell ist die bei mir per Standard aktiv:

1
2
$ convert +antialias -background transparent\
   mypicture.svg mypicture.png

Größe anpassen

Mit file mypicture.png kontrolliere ich die Größe der PNG-Datei:

1
2
$ file mypicture.png
mypicture: PNG image data, 744 x 1053, 16-bit gray+alpha, non-interlaced

Die Größe gefällt mir nicht, ich hätte gerne eine Höhe von einem Achtel dieser Größe.

1
2
3
$ convert -density 72  mypicture.svg mypicture.png
$ file mypicture.png
mypicture: PNG image data, 744 x 1053, 16-bit gray+alpha, non-interlaced

Mit 72 kommt die Größe 744x1053 heraus. Versuchen wir’s mit der Hälfte davon:

1
2
3
$ convert -density 36  mypicture.svg mypicture.png
$ file mypicture.png
mypicture: PNG image data, 149 x 210, 16-bit gray+alpha, non-interlaced

Folgende Optionen haben nicht funktioniert:

  • -size (breite)x(hoehe) … scheint einfach ignoriert zu werden
  • -resize (breite)x(hoehe) … verschlechtert die Qualität, weil erst gerastert und dann umgerechnet wird

Inkscape - Rand bei SVG-Grafiken

Ich habe einige SVG-Grafiken, bei denen die Objekte scheinbar “zufällig” mitten im Arbeitsbereich stehen. Ein Beispiel ist dies:

dp-logo-mit-rand

Für die Weiterverarbeitung und Einbindung ist das relativ ungeschickt. Ich hätte gerne eine SVG-Grafik, die “bündig” mit den enthaltenen Objekten abschließt.

Hilfsmittel hierfür: Inkscape!

Hier der genaue Ablauf:

  1. Inkscape starten: inkscape mypicture.svg
  2. Datei – Dokumenteneinstellungen
  3. Seitengröße – Seitengröße an Inhalt anpassen …
  4. Alle Umrandungen bei 0 belassen (oder auf 0 setzen)
  5. Seite in Auswahl einpassen
  6. Speichern

Danach ist die SVG-Grafik randlos:

dp-logo-ohne-rand

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