Intelligente Lösungen
in neuer Dimension

KDE-NEON installieren

Hier beschreibe ich, wie ich meinen Rechner mit KDE-Neon einrichte.

ISO herunterladen

USB-Stick erzeugen

1
2
3
# Ermitteln: Welche /dev/sdX-Datei gehört zum USB-Stick?
# -> Bei mir: /dev/sdb [WICHTIG! NICHT "RATEN"!]
dd if=neon-user-...iso of=/dev/sdb

Installation durchführen

  • Von USB starten
  • Bei UEFI-PCs: “Textoberfläche” muß sichtbar sein für das Boot-Menü! Wenn’s grafisch aussieht, dann startet der USB-Stick im BIOS-Modus, das sorgt für Probleme!
  • Installation – Komplette Platte mit verschlüsseltem LVM

Partitionierung korrigieren

  • Von USB-Stick booten
  • sudo -s
  • cryptsetup luksOpen /dev/sda5 cheer
  • vgscan
  • vgchange -a y
  • lvscan
  • lvresize --resizefs --size 20G /dev/neon-vg/root (… dauert eine ganze Weile, knapp 2 Minuten)

Die nachfolgenden Kommandos scheinen unnötig zu sein, ich habe sie auf einem Rechner ausgeführt, auf dem anderen nicht:

  • mount /dev/neon-vg/root /mnt
  • for dir in /dev /dev/pts /proc /sys /run; do sudo mount --bind $dir /mnt/$dir; done
  • chroot /mnt /bin/bash
  • grub-install /dev/sda
  • update-grub

Neustart:

  • exit
  • reboot

Pakete aktualisieren

1
2
3
4
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get clean

Zusatzpakete installieren

1
2
sudo apt-get install joe openconnect openvpn git emacs
sudo apt-get install net-tools sshuttle chromium-browser

Partitionen anlegen

1
2
3
sudo lvcreate -n root2 -L 20G neon-vg
sudo lvcreate -n home -L 20G neon-vg
sudo mkfs.ext4 /dev/neon-vg/home

Home-Partition umziehen

1
2
3
4
5
6
sudo -s
mount /dev/neon-vg/home /mnt
cd /mnt
cp -a /home/uli .
# /etc/fstab editieren
reboot

Anpassungen

  • 4 Arbeitsflächen, 1 Zeile, Wechsel mit Strg-1 … Strg-4
  • Strg-Alt-T: Konsole öffnen (… klappt mit Standard-Einstellungen oft nicht –> zusätzlich konfigurieren)

USB-Stick nicht beschreibbar

Heute habe ich versucht, einen SanDisk-USB-Stick auf meinem Laptop mit dd zu beschreiben. Das hat zunächst nicht funkioniert, es erschienen immer Fehlermeldungen der Art:

1
xxx

Diese Dinge habe ich dann ausprobiert:

  • sudo hdparm -r0 /dev/sdb … kein Erfolg
  • sudo blockdev --setrw /dev/sdb … kein Erfolg
  • Änderungen an usb-storage: Funktioniert

Sichten von /var/log/syslog zeigt sowas:

1
2
3
4
5
6
7
8
... scsi 6:0:0:0: Direct-Access     SanDisk  Cruzer Fit       1.26 PQ: 0 ANSI: 5
... sd 6:0:0:0: Attached scsi generic sg2 type 0
... sd 6:0:0:0: [sdb] 62530624 512-byte logical blocks: (32.0 GB/29.8 GiB)
... sd 6:0:0:0: [sdb] Write Protect is on
... sd 6:0:0:0: [sdb] Mode Sense: 43 00 80 00
... sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
...  sdb:
... sd 6:0:0:0: [sdb] Attached SCSI removable disk

Hier der Ablauf der Änderungen an “usb-storage”:

  • Sichten der USB-IDs: lsusb|grep -i samsung Bus 002 Device 0010: ID 0781:5571 Samsung Cruzer
  • Abklemmen von “usb-storage”: sudo modprobe -r $(lsmod | sed -n 's:,: :g ; s,^usb_storage[ 0-9]*,,p') usb_storage
  • Neues Einklinken von “usb-storage”: sudo modprobe usb_storage quirks=0781:5571:w

Nach der Korrektur sieht /var/log/syslog so aus:

1
2
3
4
5
6
7
... scsi 6:0:0:0: Direct-Access     SanDisk  Cruzer Fit       1.26 PQ: 0 ANSI: 5
... sd 6:0:0:0: Attached scsi generic sg2 type 0
... sd 6:0:0:0: [sdb] 62530624 512-byte logical blocks: (32.0 GB/29.8 GiB)
... sd 6:0:0:0: [sdb] Assuming Write Enabled
... sd 6:0:0:0: [sdb] Assuming drive cache: write through
...  sdb:
... sd 6:0:0:0: [sdb] Attached SCSI removable disk

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
...
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"

/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

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