VBScript – letztes Element in einem String-Array

Beispiel: Es soll aus einem absoluten Pfad der Dateiname herausgeschnitten werden.
Diese Anforderung stellt sich oft bei der Verwendung von object.Files .
Es liefert meist etwas wie „C:\Dir1\Dir2\Dir3\Dateiname.Ext“ .
Wie kann man aus diesem String den Dateinamen herausschneiden?
a) Split den String an „\“ in ein Array
b) ermittle das letzte Element des Array mit der Funktion UBound

1
2
3
4
5
Set objFolder = objFSO.GetFolder("C:\Dir1\Dir2\Dir3")
For Each absFilePath in objFolder.Files
 arrFile = split(absFilePath,"\")
 FileName = arrFile(UBound(arrFile))
Next

liefert aus „C:\Dir1\Dir2\Dir3\Dateiname.Ext“ -> „Dateiname.Ext“

 

Schneetreiben1

Schneetreiben – Arbeit am Gleis in Düsseldorf-Derendorf

 

VB Monitorscript – Alter von Dateien in Verzeichnissen

Visual Basic Script (VB Script) für einen Monitor (z.B. SCOM)

Aufgabe: Es soll in mehreren Verzeichnissen nach nicht verarbeiteten Dateien gesucht werden. Dabei soll bei einer Schwellwertüberschreitung das Script „ERROR“ liefern, sonst „OK“.

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
34
35
36
37
38
' Dieses Monitorscript prueft auf ein maximales Alter von Dateien
' in mehreren Foldern - Return ist "OK" oder "ERROR"
' Detailiertes LOG fuer Schwellwertueberschreitungen in LogDatei
Option Explicit
Dim objFSO, objFile, objFolder, objLogFile, objAlter, maxtoleranz, Status, Folder, jetzt
Dim FolderArray, FStream, strFile, Alter, LogMsg
 
' Schwellwert für die Fehlerausloesung (LastModified-Alter in Sekunden)
maxtoleranz = 300
 
'ARRAY der Folder 
'entweder hier ReDim oder unter Dim direkt Groesse vereinbaren
ReDim FolderArray(2)
FolderArray(0) = "c:\Folder_1\"
FolderArray(1) = "c:\Folder_2\"
FolderArray(2) = "c:\Folder_3\"
 
Status = "OK"
 
For Each Folder in FolderArray
	jetzt = now
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	Set objFolder = objFSO.GetFolder(Folder)
 
	For Each strFile in objFolder.Files
		Set objFile = objFSO.GetFile(strFile)
		Alter = Datediff("s",objFile.DateLastModified,jetzt)
		If (Alter > maxtoleranz) Then
			Status = "ERROR"
			LogMsg = jetzt & " " & Alter & " " & strFile 
			Set objLogFile = objFSO.OpenTextFile("C:\log\fileage.log", 8, True)
			objLogFile.WriteLine(LogMsg)
			objLogFile.Close
		End If
	Next
Next
 
Wscript.echo Status

Raspberry Pi als passives Flugzeugradar mit dump1090 und DVB-T USB-Stick

Ein grauer Endnovembertag, eine geschlossene tiefhängende Wolkendecke, irgendwo da oben säuseln die Turbinen der Flugzeuge.
Urlaub wäre gut, aber die fliegen ohne mich. Doch wohin und wer fliegt da?
Flugzeuge senden ein Transpondersignal auf 1090MHz. Dieses Signal enthält Standort,Geschwindigkeit, Höhe, usw. und wird von einem DVB-T-Stick empfangen. Mit Dump1090 von MalcomRobb werden die Daten mit dem Raspberry Pi verarbeitet und im integrierten Webserver grafisch dargestellt. Das sieht dann so aus:

flightradar_01Vorraussetzungen:
– DVB-T-Stick inkl. Antenne
– fertig konfigurierter Raspberry Pi mit Netzwerk und Internetzugang
– cmake zum Kompilieren der SW-Komponenten RTL-SDR und Dump 1090 herunterladen und installieren:

$ sudo apt-get -fym install git cmake libusb-1.0-0-dev build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version.
git is already the newest version.
git set to manually installed.
The following extra packages will be installed:
cmake-data emacsen-common libxmlrpc-core-c3
The following NEW packages will be installed:
cmake cmake-data emacsen-common libusb-1.0-0-dev libxmlrpc-core-c3
0 upgraded, 5 newly installed, 0 to remove and 14 not upgraded.
Need to get 5,950 kB of archives.
After this operation, 14.6 MB of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libxmlrpc-core-c3 armhf 1.16.33-3.2 [146 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main emacsen-common all 2.0.5 [20.9 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ wheezy/main cmake-data all 2.8.9-1 [1,359 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian/ wheezy/main cmake armhf 2.8.9-1 [4,240 kB]
Get:5 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libusb-1.0-0-dev armhf 2:1.0.11-1 [184 kB]
Fetched 5,950 kB in 9s (637 kB/s)
Selecting previously unselected package libxmlrpc-core-c3.
(Reading database ... 72831 files and directories currently installed.)
Unpacking libxmlrpc-core-c3 (from .../libxmlrpc-core-c3_1.16.33-3.2_armhf.deb) ...
Selecting previously unselected package emacsen-common.
Unpacking emacsen-common (from .../emacsen-common_2.0.5_all.deb) ...
Selecting previously unselected package cmake-data.
Unpacking cmake-data (from .../cmake-data_2.8.9-1_all.deb) ...
Selecting previously unselected package cmake.
Unpacking cmake (from .../cmake_2.8.9-1_armhf.deb) ...
Selecting previously unselected package libusb-1.0-0-dev.
Unpacking libusb-1.0-0-dev (from .../libusb-1.0-0-dev_2%3a1.0.11-1_armhf.deb) ...
Processing triggers for man-db ...
Setting up libxmlrpc-core-c3 (1.16.33-3.2) ...
Setting up emacsen-common (2.0.5) ...
Setting up cmake-data (2.8.9-1) ...
Install cmake-data for emacs
Setting up cmake (2.8.9-1) . bupropion xl 150 mg..
Setting up libusb-1.0-0-dev (2:1.0.11-1) ...
$ git clone git://git.osmocom.org/rtl-sdr.git
Cloning into 'rtl-sdr'...
remote: Counting objects: 1587, done.
remote: Compressing objects: 100% (681/681), done.
remote: Total 1587 (delta 1160), reused 1213 (delta 898)
Receiving objects: 100% (1587/1587), 341.27 KiB | 655 KiB/s, done.
Resolving deltas: 100% (1160/1160), done.
$ cd rtl-sdr
$ ls -lotr
total 152
-rw-r--r-- 1 pi 17987 Nov 30 16:05 COPYING
-rw-r--r-- 1 pi  6031 Nov 30 16:05 CMakeLists.txt
-rw-r--r-- 1 pi   129 Nov 30 16:05 AUTHORS
-rw-r--r-- 1 pi   211 Nov 30 16:05 README
-rw-r--r-- 1 pi  1121 Nov 30 16:05 Makefile.am
-rw-r--r-- 1 pi 72355 Nov 30 16:05 Doxyfile.in
-rwxr-xr-x 1 pi  5440 Nov 30 16:05 git-version-gen
-rw-r--r-- 1 pi  2194 Nov 30 16:05 configure.ac
drwxr-xr-x 3 pi  4096 Nov 30 16:05 cmake
drwxr-xr-x 2 pi  4096 Nov 30 16:05 include
-rw-r--r-- 1 pi  5687 Nov 30 16:05 rtl-sdr.rules
drwxr-xr-x 2 pi  4096 Nov 30 16:05 m4
-rw-r--r-- 1 pi   267 Nov 30 16:05 librtlsdr.pc.in
drwxr-xr-x 4 pi  4096 Nov 30 16:05 src
$ mkdir build
$ cd build
$ cmake ../ -DINSTALL_UDEV_RULES=ON
-- The C compiler identification is GNU 4.6.3
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Build type not specified: defaulting to release.
-- Extracting version information from git describe...
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")
-- checking for module 'libusb-1.0'
--   found libusb-1.0, version 1.0.11
-- Looking for libusb_handle_events_timeout_completed
-- Looking for libusb_handle_events_timeout_completed - found
-- Looking for libusb_error_name
-- Looking for libusb_error_name - found
-- Found libusb-1.0: /usr/include/libusb-1.0, /usr/lib/arm-linux-gnueabihf/libusb-1.0.so
-- Looking for include file pthread.h
-- Looking for include file pthread.h - found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON...
-- Building for version: v0.5.3-6-gd447 / 0.5git
-- Using install prefix: /usr/local
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/rtl-sdr/build
$ sudo make install
Scanning dependencies of target convenience_static
[  5%] Building C object src/CMakeFiles/convenience_static.dir/convenience/convenience.c.o
Linking C static library libconvenience_static.a
[  5%] Built target convenience_static
Scanning dependencies of target rtlsdr_shared
[ 10%] Building C object src/CMakeFiles/rtlsdr_shared.dir/librtlsdr.c.o
[ 15%] Building C object src/CMakeFiles/rtlsdr_shared.dir/tuner_e4k.c.o
[ 20%] Building C object src/CMakeFiles/rtlsdr_shared.dir/tuner_fc0012.c.o
[ 25%] Building C object src/CMakeFiles/rtlsdr_shared.dir/tuner_fc0013.c.o
[ 30%] Building C object src/CMakeFiles/rtlsdr_shared.dir/tuner_fc2580.c.o
[ 35%] Building C object src/CMakeFiles/rtlsdr_shared.dir/tuner_r82xx.c.o
Linking C shared library librtlsdr.so
[ 35%] Built target rtlsdr_shared
Scanning dependencies of target rtl_adsb
[ 40%] Building C object src/CMakeFiles/rtl_adsb.dir/rtl_adsb.c.o
Linking C executable rtl_adsb
[ 40%] Built target rtl_adsb
Scanning dependencies of target rtl_eeprom
[ 45%] Building C object src/CMakeFiles/rtl_eeprom.dir/rtl_eeprom.c.o
Linking C executable rtl_eeprom
[ 45%] Built target rtl_eeprom
Scanning dependencies of target rtl_fm
[ 50%] Building C object src/CMakeFiles/rtl_fm.dir/rtl_fm.c.o
Linking C executable rtl_fm
[ 50%] Built target rtl_fm
Scanning dependencies of target rtl_power
[ 55%] Building C object src/CMakeFiles/rtl_power.dir/rtl_power.c.o
Linking C executable rtl_power
[ 55%] Built target rtl_power
Scanning dependencies of target rtl_sdr
[ 60%] Building C object src/CMakeFiles/rtl_sdr.dir/rtl_sdr.c.o
Linking C executable rtl_sdr
[ 60%] Built target rtl_sdr
Scanning dependencies of target rtl_tcp
[ 65%] Building C object src/CMakeFiles/rtl_tcp.dir/rtl_tcp.c.o
Linking C executable rtl_tcp
[ 65%] Built target rtl_tcp
Scanning dependencies of target rtl_test
[ 70%] Building C object src/CMakeFiles/rtl_test.dir/rtl_test.c.o
Linking C executable rtl_test
[ 70%] Built target rtl_test
Scanning dependencies of target rtlsdr_static
[ 75%] Building C object src/CMakeFiles/rtlsdr_static.dir/librtlsdr.c.o
[ 80%] Building C object src/CMakeFiles/rtlsdr_static.dir/tuner_e4k.c.o
[ 85%] Building C object src/CMakeFiles/rtlsdr_static.dir/tuner_fc0012.c.o
[ 90%] Building C object src/CMakeFiles/rtlsdr_static.dir/tuner_fc0013.c.o
[ 95%] Building C object src/CMakeFiles/rtlsdr_static.dir/tuner_fc2580.c.o
[100%] Building C object src/CMakeFiles/rtlsdr_static.dir/tuner_r82xx.c.o
Linking C static library librtlsdr.a
[100%] Built target rtlsdr_static
Install the project...
-- Install configuration: "Release"
-- Installing: /etc/udev/rules.d/rtl-sdr.rules
-- Installing: /usr/local/lib/pkgconfig/librtlsdr.pc
-- Installing: /usr/local/include/rtl-sdr.h
-- Installing: /usr/local/include/rtl-sdr_export.h
-- Installing: /usr/local/lib/librtlsdr.so.0.5git
-- Installing: /usr/local/lib/librtlsdr.so.0
-- Installing: /usr/local/lib/librtlsdr.so
-- Installing: /usr/local/lib/librtlsdr.a
-- Installing: /usr/local/bin/rtl_sdr
-- Removed runtime path from "/usr/local/bin/rtl_sdr"
-- Installing: /usr/local/bin/rtl_tcp
-- Removed runtime path from "/usr/local/bin/rtl_tcp"
-- Installing: /usr/local/bin/rtl_test
-- Removed runtime path from "/usr/local/bin/rtl_test"
-- Installing: /usr/local/bin/rtl_fm
-- Removed runtime path from "/usr/local/bin/rtl_fm"
-- Installing: /usr/local/bin/rtl_eeprom
-- Removed runtime path from "/usr/local/bin/rtl_eeprom"
-- Installing: /usr/local/bin/rtl_adsb
-- Removed runtime path from "/usr/local/bin/rtl_adsb"
-- Installing: /usr/local/bin/rtl_power
-- Removed runtime path from "/usr/local/bin/rtl_power"
$ sudo ldconfigcat
$ cd
$ sudo cp ./rtl-sdr/rtl-sdr.rules  /etc/udev/rules.d/

DVB-T-Treiber nicht laden:

$ sudo nano /etc/modprobe.d/rtlsdr.conf

blacklist dvb_usb_rtl28xxu eintragen und speichern

$ sudo reboot

Installation von Dump1090

$ git clone git://github.com/MalcolmRobb/dump1090.git
Cloning into 'dump1090'...
remote: Counting objects: 1401, done.
remote: Compressing objects: 100% (546/546), done.
remote: Total 1401 (delta 842), reused 1401 (delta 842)
Receiving objects: 100% (1401/1401), 4.12 MiB | 46 KiB/s, done.
Resolving deltas: 100% (842/842), done.
$ cd dump1090
$ make
gcc -O2 -g -Wall -W `pkg-config --cflags librtlsdr`  -c dump1090.c
gcc -O2 -g -Wall -W `pkg-config --cflags librtlsdr`  -c anet.c
gcc -O2 -g -Wall -W `pkg-config --cflags librtlsdr`  -c interactive.c
gcc -O2 -g -Wall -W `pkg-config --cflags librtlsdr`  -c mode_ac.c
gcc -O2 -g -Wall -W `pkg-config --cflags librtlsdr`  -c mode_s.c
gcc -O2 -g -Wall -W `pkg-config --cflags librtlsdr`  -c net_io.c
gcc -g -o dump1090 dump1090.o anet.o interactive.o mode_ac.o mode_s.o net_io.o `pkg-config --libs librtlsdr` -lpthread -lm
gcc -O2 -g -Wall -W `pkg-config --cflags librtlsdr`  -c view1090.c
gcc -g -o view1090 view1090.o anet.o interactive.o mode_ac.o mode_s.o net_io.o `pkg-config --libs librtlsdr` -lpthread -lm
$ ./dump1090 --interactive  --net

flightradar_04

 

 

BMC BEM: Wie kann man Daten aus externen Programmen im Regelwerk nutzen?

Bei der Eventverarbeitung im Regelwerk ist es manchmal notwendig, zusätzliche Daten aus externen Quellen zu beschaffen. Um externe Programme auszuführen und deren Daten zurück in das Regelwerk zu leiten, nutzt man Interfaces.

a) BAROC Datei für die Interface Daten-Struktur:
Die Struktur eines Interface wird in einer BAROC-Datei definiert, mit dem Schlüsselwort MC_INTERFACE :

1
2
3
4
5
6
7
8
MC_INTERFACE: AUSSENSENSOR
DEFINES {
    ort:            STRING;
    temperatur:     STRING;
    rel_feuchte:    STRING;
    abs_feuchte:    STRING;
};
END

Nach dem Laden der Definitionen (mcontrol -n CELL_NAME reload kb ) steht die Daten-Struktur in der Zelle zur Verfügung.

b) Das externe Programm:
Die durch das externe Programm zu liefernden Daten, werden an die Interface-Instanz übergeben. Diese Instanz ist leider keine FIFO, sondern eine ASCII-Datei, die nur über einen kurzen Zeitraum existiert. Konkret nur während die aufrufende Refine-Regel aktiv ist und auf die Daten aus dem externen Programm wartet. Als Beispiel liefert das externe Programm /usr/bin/get_sensor_data.pl folgende Daten an das Interface/FIFO und damit in das Regelwerk:

1
2
3
4
5
6
AUSSENSENSOR;
     ort = "Terrasse";
     temperatur = "23.45 °C";
     rel_feuchte = "66.4 %";
     abs_feuchte = "71.2 %";
END

In dem Output des externen Programms finden wir die Struktur unseres definierten Interface wieder.

c) Im Regelwerk:
Mit einer Refine-Rule wird mit get_external das externe Programm aufgerufen und die externen Daten in der definierten Interface-Struktur dem Regelwerk zur Verfügung gestellt:

1
2
3
4
get_external('/usr/bin/get_sensor_data.pl',['Sensor_Terrasse'],AUSSENSENSOR,$SEN);
$EV.sensorort = $SEN.ort;
$EV.value_temperatur = $SEN.temperatur;
$EV.value_feuchte = $SEN.rel_feuchte;

Nur während der Ausführung der Refine-Rule stehen die Daten aus der Interface-Struktur zur Verfügung. Hier wurden sie in einem Event zugeordnet und gespeichert.
Ebenso ist es im weiteren möglich, die Daten in einem global record zu speichern und zu einem späteren Zeitpunkt darauf zuzugreifen.

Interface Instances – siehe auch die Handbücher:
BMC Knowledge Base Development Reference Guide,
BMC Impact Solutions Knowledge Base Development Reference Guide

schnelle Hilfe - Dank bester Eventverarbeitung und gezielter Eskalation ( Ticket & Alarmierung )

schnelle Hilfe – Dank bester Eventverarbeitung und gezielter Eskalation ( Ticket & Alarmierung )

SCOM Monitor zur Überwachung eines Prozesses

Hier bearbeiten wir die Thematik der Überwachung eines Prozesses.
Es soll ein Critical Alert erzeugt werden und der Status des Systems auf Unhealthy gesetzt werden, wenn der zu überwachende Prozess nicht mehr läuft.
Ebenso ist denkbar, dass ein Prozess in einer bestimmten Anzahl auf dem gemonitorten System laufen soll, z.B.weil genau zwei Webservices laufen müssen.
Wir nutzen einen Script-Monitor und holen die gewünschte Information aus dem WMI durch ein VB-Skript.
Für denjenigen der einen Skript-Monitor blind einrichten kann, hier nur eine Variante eines möglichen VB-Skriptes. Danach eine detailierte Vorgehensweise zur Einrichtung des Monitors im SCOM Authoring.

Hier zuerst das VB-Skript am Beispiel von „notepad.exe“ als zu überwachender Prozess.

'Script ProcessCounter.vbs
Dim oAPI, oBag, oWMI, oProcess, sProcessname
 
sProgramname="notepad.exe"
Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
Set oProcess = oWMI.ExecQuery("select name from win32_process where name='" & sProgramname & "' ")
Set oWMI = Nothing
 
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
 
Call oBag.AddValue("ProcessCount",oProcess.count)
Call oBag.AddValue("ProcessName",sProgramname)
 
Call oAPI.Return(oBag)

Das Skript schreibt die Variablen ProcessCount und ProcessName in PropertyBag und dort kann der Monitor zugreifen.
ProcessCount ist für die Anzahl der aktuell laufenden Prozesse von „notepad.exe“ und ProcessName kann für die Message des Alerts verwendet werden.

Einrichten des Monitors im SCOM
a) Authoring

b) Management Pack Objects

c) Start des Wizzard „Create a Monitor“

d) Auswahl „Unit Monitor …“

e) Monitor Type : Scripting – Generic – Timed Script Two State Monitor und Auswahl eines geeigneten Management Pack oder erstellen eines neuen leeren Management Pack.
CreateScriptMonitor_01

f) General: Name – Name des Monitors

g) Beschreibung – kurze Beschreibung was der Monitor überwacht

h) Monitor target – Allgemeines Ziel, wie z.B „Windows Server Operating System“ oder „Computer“

i) Parent monitor – hier wählen wir „Availability“ und disablen den Monitor, da wir ihn sicher nicht auf allen angegebenen Monitor target laufen lassen wollen. Dort wo er laufen soll spezifizieren wir später über Overrides.

j) Schedule: Schedule lässt mehr vermuten, aber es geht hier nur um die Angabe des Meßintervalls, z.b. 5 Minuten. Mit „Synchronize at“ könnte man einen exakten Zeitpunkt initieren.
CreateScriptMonitor_02

k) Script: File Name – Angabe des Dateinamens unter dem das folgende VB-Skript auf den Zielsystemen gespeichert wird
Timeout – max. Laufzeit unseres Skriptes
Und hier fügen wir unseren Skriptcode wie oben angegeben ein. Der Skriptcode wird unter dem angegeben Dateinamen auf den Zielsystemen gespeichert und in den angegeben Meßintervallen ausgeführt.

l) Unhealthy Expression: Hier werden die Bedingungen für den „Unhealthy“ Zustand definiert. In unserem Fall gilt dies, wenn die Anzahl des zu überwachenden Prozesses gleich Null ist. Wir tragen Property[@Name=’ProcessName‘] equals 0 ein.

m) Healthy Expression: Und hier definieren wir die „Healthy“ Bedingung, z.B. soll die Anzahl unseres zu überwachenden Prozesses größer 0 sein.
Wir tragen Property[@Name=’ProcessName‘] greater than 0 ein.

n) Configure Health:
CreateScriptMonitor_03

o) Configure Alerts:
CreateScriptMonitor_04

Ein weiteres Beispiel für einen Messagetext (Alert Description) unter Verwendung von ProcessCount und ProcessName aus dem PropertyBag:
Process $Data/Context/Property[@Name=’ProcessName‘]$ does not run! Runs $Data/Context/Property[@Name=’ProcessCount‘]$ times.
Gut verwendbar, wenn z.B. mehr als ein Prozess laufen muss und nur 1 von X laufenden Prozessen bereits einen Alert auslöst.

Raspberry Pi: Partition auf gesamte SD-Karte erweitern

Die durch das Image erstellte Partition ist viel kleiner als die üblicherweise eingesetzten SD-Karten. Darum kann man entweder eine zusätzliche Partition anlegen, oder wie wir hier gleich praktizieren, die bestehende Partition auf die gesamte verbleibende Größe der SD-Karte erweitern. Dieses Beispiel ist mit einer 16 GB SD-Karte durchgeführt.

Root Filesystem vor ErweiterungHier sehen wir mit df -h / die aktuelle Größe und den benutzen Speicherplatz auf der originären Partition. Nur noch 10% nutzbar; etwas wenig für den Start.
Als Vorbereitung ermitteln wir den Devicenamen der SD-Karte, df /boot gibt uns einen Namen wie /dev/mmcblk0 aus.

Im ersten Schritt werden wir mit dem Tool fdisk die Partitionstabelle lesen und im nächsten editieren und überschreiben.
Aufruf von fdisk ist mit root Rechten erforderlich:
sudo fdisk /dev/mmcblk0
Mit p sehen wir die aktuellen Partitionen und ihre Start und Ende „Positionen“ auf dem Datenträger.
Die erste Partition ( W95 FAT32) lassen wir wie sie ist. Sie dient zum Booten des Systems.
Wir notieren uns den Startpunkt der zweiten Partition, unserer zu erweiternder Partition, in diesem Fall: 122880 .
Diesen zweiten Partitionstabelleneintrag löschen wir mit d und 2 – um ihn gleich wieder mit n (new) neu anzulegen.
Nun werden wir nach der Partition gefragt und wählen p für primäre Partition und 2 für den zweiten Eintrag in der Partitionstabelle.
Jetzt werden wir nach der Startposition gefragt und hier muss unbedingt die Zahl, die wir uns notiert haben eingetragen werden, also 122880!
Nicht den Default-Wert übernehmen!
Der folgende Wert für Last Sector ist der angegebene Maximalwert, am Ende des Datenträgers, wir nehmen den vorgeschlagenen Wert.
Nun mit w die Partitionstabelle neu schreiben.

Partition erweitern mit fdiskJetzt mit sudo reboot das System neu starten! Nachdem wir uns wieder angemeldet haben, erweitern wir die Partition mit sudo resize2fs /dev/mmcblk0p2 .

Resize of FilesystemHier kontrollieren wir das Ergebnis mit df -h / und sehen, dass uns nun die gesamte SD-Karte zur Benutzung bereitsteht.Rootfilesystem nach Erweiterung

Raspberry Pi: Swap File erweitern

Der Raspberry Pi Model B hat 512 MB RAM. Dies reicht für die meisten einfachen Anwendungsfälle aus. Doch bei mehreren speicherfressenden Anwendungen kann es sein, dass einfach geswapt werden muss. Es gilt die Regel Swap = 2 * RAM.
Standard ist 100MB Swap in der Datei /etc/dphys-swapfile mit CONF_SWAPSIZE=100 konfiguriert.Dort sollten wir also 1024 eintragen, was nur mit Root-Berechtigung (sudo su) geht.
Anlegen des Swap-Files mit:
root@raspberrypi:/home/pi# dphys-swapfile setup
want /var/swap=1024MByte, generating swapfile … of 1024MBytes

Hinweis: Gibt es folgende Ausgabe „checking existing: deleting wrong size file (104857600)“ so kann der Swap nicht eingerichtet werden, da nicht genügend Platz auf der Karte/Platte vorhanden ist! Ggf. die Partition vergrößern.

Aktivieren des Swap-Files mit:
dphys-swapfile swapon

LegoCity01

Raspberry Pi: Firmware aktualisieren

Wenn es eine neue Firmware für den Raspberry gibt, dann mit dem Kommando:
sudo apt-get install rpi-update laden.
Momentan hat dieser Pi die aktuelle Firmware. Dann sieht es so aus:
RaspberryPi Firmware ist aktuell

Die Version der Firmware kann man mit vcgencmd version erhalten:
Firmware Version ermitteln

Beitrag: Raspberry Pi: System aktualisieren mit apt-get update / upgrade

Raspberry Pi – erste Schritte / Start im headless mode

Raspberry Pi ohne Tastatur und Monitor an den Start bringen
Dies ist eine Anleitung für die initiale Installation eines Raspberry Pi Model B ohne angeschlossenen Monitor und Tastatur (sogenannter headless Modus). Danach kann der Raspberry Pi für den jeweiligen Spezialfall konfiguriert werden.

– Raspberry Pi Model B am LAN angeschlossen
– Kartenleser am Windows Computer
– leere SD-Karte > 4GB vorzugsweise von SanDisk oder anderem qualitativ guten Hersteller!
– ein Tool zum Beschreiben der SD-Karte, z.B. unter Windows den „Win32 Disk Imager“ (Download bei Heise.de)
– das Image für den Raspberry Pi – hier Raspian yyyy-mm-dd-wheezy-raspbian.zip von raspberrypi.org
– ein SSH Terminal / „Tool“ z.B. putty

Win32 Disk Imager

– Nach dem Auspacken der Zip-Datei kann das Image mit dem Win32 Disk Imager auf die SD-Karte gebracht werden.
Achtung! Ab Raspian Jessie ist ssh nicht mehr per default aktiv! Wenn das Image fertig auf die SD-Karte geschrieben ist, via Explorer direkt unter / eine leere Datei ssh anlegen.
Die Sinnhaftigkeit dieser „Neuerung“ möchte ich nicht diskutieren.
– Karte in den Raspberry Pi stecken und einschalten.Wer auf seine Platine schauen kann, sieht alle vier LEDs leuchten click for source.

Wir wollen den Raspberry ohne Monitor und Tastatur betreiben (sogenannter „headless mode“ – kopfloser Betrieb). Da kommen die aktuellen Images mit aktiviertem ssh und dhcp! Dies bedeutet, wir müssen nur die IP unseres Raspberry herausbekommen, indem wir z.B. auf dem Router nachsehen.
Router DHCP ListeDer Eintrag mit der MAC beginnend B8:27:EB … ist unser Raspberry.
Bei einer FritzBox zeigt uns diese die IP an (unter Punkt „Heimnetz“)
fritzbox_ipNun verbinden wir uns mit ssh (z.B. mit Putty ssh Port 22) auf die ermittelte IP. Der Standarduser ist pi und Passwort raspberry
putty ssh to raspberry

Mit der NOTICE wird man aufgefordert, mit dem Tool raspi-config Einstellungen auszuführen.
Dies machen wir hier jedoch nicht, sondern setzen diese direkt auf der Kommandozeile.

Zuerst setzen wir ein neues Passwort für den user pi mit:
sudo passwd piNun aktualisieren wir das System (Internetverbindung vorausgesetzt) mit:
rasp_apt-get_updateund mit:
rasp_apt-get_upgrade

Das Upgrade benötigt eine Bestätigung zur Benutzung des geforderten „Plattenplatz“ und danach etwas Zeit, je nach aktuellem Versionsstand des Images und der enthaltenen Pakete!

Die Einstellung der Zeitzone mit dpkg-reconfigure tzdata. Zur Auswahl von „Europe“ und „Berlin“ erscheint ein grafisches Menü aus dem Tool „raspi-config“

dpkg-reconfigure tzdata

Partitionserweiterung auf gesamte SD-Karte
Die Partition ist nun ziemlich klein und allein mit dem Image zu 90% ausgelastet.
Wir sollten also die Partition auf den gesamten Datenträger, also die gesamte SD-Karte, ausweiten und nutzen.
Als „Starter“ können wir dafür das Tool „raspi-config“ nutzen.
sudo raspi-config öffnet dieses Tool:
DasToolRaspiConfigExpand Filesystem erweitert die Partition. Wir rebooten das System um die Änderung an der Partitionstabelle wirksam werden zu lassen. Als fortgeschrittener oder interessierter Anwender können die unter der GUI verborgenen Befehle und Aktionen auch selbst gesteuert und durchgeführt werden. Dazu gibt es eine extra Anleitung im Beitrag „Partition auf gesamte SD-Karte erweitern“.

Hostname ändern
Wer sein System individuaisieren möchte, bzw. mehr als ein Raspberry Pi in seinem Netz betreiben will, kann den Systemnamen ändern. Einfach in den zwei folgenden Dateien den bisherigen Namen raspberrypi durch den gewünschten neuen Namen ersetzen:
sudo nano /etc/hostname
sudo nano /etc/hosts
Danach ist ein Reboot (sudo reboot) erforderlich und nach der Anmeldung kann man mit hostname den neuen Systemnamen abfragen, bzw. man sieht ihn schon im Prompt.

Image sichern
Wer nun sein Image sichern möchte, fährt den Raspberry Pi herunter (sudo poweroff) und steckt die SD-Karte in den Kartenleser, um mit W32DiskImager das Image in eine Datei zu sichern. Funktion „Read“ auswählen!

OpenSSL: Schwerwiegender Fehler in der Programmierung: The Heartbleed Bug

Ein schwerwiegender Programmierfehler in OpenSSL öffnet einem Angreifer zur Zeit Tür und Tor: The Heartbleed Bug

Es steht bereits ein Patch für OpenSSL zur Verfügung, dieser wird auch bereits in den verschiedenen Linux Distributionen zur Installation angeboten.

Des weiteren sollte man auf jeden Fall auch die SSL Zertifikate auf den Systemen austauschen um ganz sicher zu gehen. Die großen CA’s bieten bereits einen kostenlosen Austausch an.

Ob der eigene Server betroffen ist, kann man auf folgenden Sites testen: