Unix tools introduced. Today: FHS

The Filesystem Hierarchy Standard (FHS) defines a standard layout to organize various kinds of application and OS related data in a predictable and common way [1].

A basic knowledge of the FHS will help you to find application or OS related data more easily. If you are a developer, it also provides a good orientation for organizing your own applications in a maintainable way, e.g. as ubuntu package.

/bin – essential user commands

/boot – OS boot loader

/dev – devices (everything is a file principle)

/etc – system configuration

/home – user data

/lib – essentail shared libraries

/media – mount point for removable media

/mnt – mount point for temporarily mounted filesystems

/opt – add-on applications

/root – home of root

/run – run time variable data

/sbin – system binaries

/srv – data for services provided by the system

/tmp – temporary data

/proc – is a virtual filesystem

/usr – secondary hierarchy

bin – Most user commands
lib – Libraries
local – Local hierarchy (empty after main installation)
sbin – Non-vital system binaries
share – Architecture-independent data

/var – variable data

cache  – Application cache data
lib  – Variable state information
local  – Variable data for /usr/local
lock –  Lock files
log – Log files and directories
opt – Variable data for /opt
run – Data relevant to running processes
spool – Application spool data
tmp  -Temporary files preserved between system reboots

Find more

What about – /init.d ?

What does the .d stand for in directory names?

FHS in Debian

 

A stopwatch in bash

Is it possible to implement a stopwatch in bash? Here is my try:

https://github.com/jschnasse/stopwatch/blob/master/stopwatch

The script uses some interesting features like:

  1.  read -s -t.1 -n1 c to read exactly one character (-n1) into a variable c only waiting 0.1 seconds for user input.
  2. sleep .1 to delay further processing for 0.1 seconds
  3. secs=$(printf "%1d\n" ${input: 0 : -9})Create a digit from all but the last 9 characters lead by a zero if string is empty. This is used to separate seconds from a nano seconds. 

Java Properties: Part 2

Load a properties file from current directory.

Properties properties = new Properties();
properties.load(new FileReader(new File(".").getCanonicalPath() + File.separator + "java.properties"));

Write a start script

#! /bin/bash
scriptdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $scriptdir
java -jar MyExecutable.jar
cd -

Now you can start your configurable java program from any location, e.g. by linking the startscript to /usr/bin/ .

Java Properties: Part 1

Printing

printProperties(System.getProperties());

private static void printProperties(Properties properties) {
  new TreeSet<>(properties.keySet()).forEach((k) -> {
    System.out.println(k + " : " + properties.get(k));
  });
}

 

Unix tools introduced. Today: date

The unix tool date can be used to print the current date. It also can be used to calculate time spans or to reformat time strings.

Examples:
1. Print the current date in a conventional form

date +"%d. %B %Y"

2. Use certain locale. Find supported list in /usr/share/i18n/SUPPORTED

LANG=de_DE.UTF-8 date +"%d. %B %Y"

3. Print an arbitrary (but valid) timestring in a conventional form

date -d 2003-11-22 +"%d. %B %Y"

4. Print the current date as seconds since 1970 (unix epoche)

date +%s

5. Calculate the difference of two dates in days. Explanation can be found here.

A="2002-10-20"
B="2003-11-22"
echo $(( ($(date -d $B +%s) - $(date -d $A +%s)) / 86400 )) days

6. Print seconds after 1970 (unix epoche) in a conventional form.

TZ=UTC LANG=en_EN.UTF-8  date -d@0 +"%H:%M:%S %d. %B %Y"

Note: if TZ=UTC is left out, date will add or subtract an offset in accordance to systems timezone.

7. Find timezone offset

OFF_1=$(date -d '1 Jan' +%z)
OFF_7=$(date -d '1 Jul' +%z)
echo $OFF_1 $OFF_7

 

Kubernetes, Docker, vSphere und Co.

Software Development Process

Als Entwickler sucht man möglichst einfache Wege, seine Software zu veröffentlichen und zu installieren. Idealerweise kann die Installation und Veröffentlichung der Software in den normalen Entwicklungsprozess integriert werden, so dass nach erfolgreichem Durchlaufen der Testprozeduren ein fertiges Paket zur Installation bereit liegt.

Serverless

Der Entwickler übernimmt dabei die Verantwortung seine Software als lauffähiges Paket bereit zu stellen. Damit dies gelingen kann, müssen Kenntnisse über die siginifikanten Eigenschaften der Zielplattform bekannt sein. Je weniger solcher Eigenschaften der Entwickler beim Paketieren berücksichtigen muss, desto besser.

Aus ihrer Tätigkeit heraus, haben Entwickler nur über einige Aspekte Ihrer Software überhaupt Kenntnisse. Idealerweise reichen diese natürlichen Kenntnisse aus, um ein lauffähiges Paket für die Zielplattform zu erzeugen.

zum Beispiel:

  • benötigte Bibliotheken
  • benötigte Systempfade
  • benötigte Drittdienste
  • benötigte Ports

Infrastructure as a Service

Dabei sind eine Vielzahl von Aspekten, die im Entwicklungsprozess keine Rolle spielen, für den erfolgreichen Betrieb der Software von höchster Wichtigkeit.

zum Beispiel:

  • benötigte  Systemgröße – CPUs, RAM, Storage
  • benötigte Instanzen – Loadbalancing
  • Sicherheitsaspekte – Netzkonfiguration, DNS, SSL
  • Caching
  • Systembenutzer/Gruppen
  • Start/Stop Skripte
  • Monitoring

Über diese Aspekte können Entwickler oft nur wenig sagen. Eine aus Entwicklersicht ideale Umgebung, würde sich einfach den Erfordernissen der Software anpassen, bzw. mit einigen Handgriffen leicht anzupassen sein.

Eine solche Umgebung bereit zu stellen, ist die Triebfeder hinter Technologien wie Docker, Kubernetes, und/oderVMWare.  Durch den Einsatz dieser Technologien sollen alle Aspekte des Softwarebetriebs erfolgreich verwaltet werden können, über die Entwickler typischerweise keine Kenntnisse haben.

Quellen

  1. Kubernetes Introduction for VMware Users – Part 1: The Theory
  2. Containers and Kubernetes: The Time Is Now
  3. https://www.infoworld.com/article/3268073/kubernetes/what-is-kubernetes-container-orchestration-explained.html