GRE Setup for Bacula on a Mobile Client

The way Bacula works is:

  • A backup client runs a TCP server process bacula-fd, waiting for a backup server process bacula-dir to connect and perform backup and restore jobs.
  • There is a simple authentication mechanism, where bacula-dir presents a shared secret to bacula-fd to be granted access.

Opening the bacula-fd TCP server on an exposed network interface may be fine for static backup clients with dedicated storage networking towards the backup server, but on a mobile computer bacula-fd should be reachable by bacula-dir only if the computer is connected by Ethernet to the home network. Specifically, the TCP server port of bacula-fd should not be exposed on the Ethernet NIC.

To implement this, i have defined a GRE tunnel between mobile backup client and home network backup server.

Weiterlesen … »

Create or Append a debian/changelog Entry

Since i always have to look this up, everytime i need it, i write it down once, as „note to self“!

NAME="John Smith" EMAIL=j.smith@example.org \
    dch --create \
        --package my-package \
        --newversion 0.1 \
        "Initial release"

And that’s it! 🙂

Generate Certificate Signing Requests (CSRs) for TLS Server Certificates

Overview

In this article, a procedure is described to generate multiple certificate signing requests (CSR) for TLS servers, such as SMTP-, IMAP- or HTTP-servers, so that we can submit them to a Certificate Authority (CA). The CA will eventually perform the signature and return a public certificate to us.

A Shell and the software OpenSSL should be available.

The subject organization (the entity the request is for) is assumed to be the same on every request, and the subject alternative names are assumed to follow the same pattern (the DNS name of some service plus a „www.“ DNS alias for that service).

The procedure can easily be expanded to make more request information configurable and allow, for example, processing a CSV file into a set of requests.

Weiterlesen … »

 Disco Infernale

Trying out the Synths in my upgrade of Reason …

Methods of HTTP Caching

Preface

I find the world wide web and the spectrum of methods and instruments that make it happen full of dubiousness and opportunity alike. Caching is generally known as one of the „hard problems“ of information science, and this is not different when it comes to technologies of the web. The text presented here, as unsorted and questionable as it might be, can in the least serve to document this further.

The bulk of this text was written between December 2019 and January 2020. It contains a summarization of my experience as an administrator and developer of web-based applications, some research about current subjects (specifically browser caches and reverse-caching HTTP proxies) and references to relevant IETF standards.

Weiterlesen … »

Protokoll meines Vortrags „Bourne Shell“ bei UUGRN e.V.

Ich hatte am 5.2.2021 die Ehre, einen Vortrag zum Thema „Bourne Shell“ auf der Veranstaltung FIXME der UNIX-User-Group Rhein Neckar, UUGRN e.V. halten zu dürfen. Hier ein Link zu den schriftlichen Aufzeichnungen dazu: https://wiki.uugrn.org/Bourne_Shell

Abseits des Vortrags, den ich auch mit Live-Demos usw. durchgeführt habe, hat die Mitschrift nur begrenzten Nutzen, aber die Linkliste am Ende der Seite ist recht eigenständig. Vor allem den Vortrag von Herrn Bourne aus dem Jahre 2015 empfehle ich für alle, die sich für den geschichtlichen Hintergrund interessieren.

 Time for a Spin …

Python3 GTK3 TextView Drag-and-Drop Example

Just a small finger exercise …

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import os
import sys

class GUI:
    def __init__(self):
        self.window = Gtk.Window()
        self.window.connect('destroy', Gtk.main_quit)
        self.textview = Gtk.TextView()
        self.textview.connect("drag-data-received", self.on_drag)
        self.window.add(self.textview)
        self.window.show_all()
        self.buffer = self.textview.get_buffer()

    def on_drag(
        self,
        widget,
        drag_context,
        x,
        y,
        data,
        info,
        time
    ):
        text = data.get_text()
        print("DEBUG: text = %s" % text)
        self.buffer.set_text("")

def main():
    app = GUI()
    Gtk.main()

if __name__ == "__main__":
    sys.exit(main())