Mit findstr das letzte Zeichen prüfen

Mit dem Kommandowerkzeug findstr kann man unter Windows auf das letzte Zeichen eines Strings überprüfen. Eine Art dies zu bewerkstelligen kann man an folgendem Code sehen. Hier wird geprüft, ob die Variable %Project% mit einem Schrägstrich / endet oder nicht. Dabei wird ein Regex verwendet. Das Dollarzeichen in dem Regex steht hier für das Zeilenende, daher auch der “/$”:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET "Project=/Folder1"
ECHO %Project%| findstr /R /C:"/$" 1>nul
echo %ERRORLEVEL%

SET "Project=/Folder1/"
ECHO %Project%| findstr /R /C:"/$" 1>nul
echo %ERRORLEVEL%

Bei diesem Code sollte man beachten, dass es kein Leerzeichen zwischen der Variablen %Project% und dem Pipelinezeichen | gibt. Gibt es ein Leerzeichen wird der gesamte Befehl missinterpretiert als würde das letzte Zeichen des Strings ein Leerzeichen sein und findstr gibt dann in beiden Fällen eine 1 zurück.

Der Jenkinsslave und die Javaversion

Wie sich mal wieder herausgestellt hat, ist die Javaversion auf einer Windows-Slave-Maschine von großer Bedeutung. Auf einer Windows-Slave-Maschine wollte ich eine Batch-Datei ausführen, die wiederum ein Powershell-Skript aufgerufen hat. Während des Durchlaufs bekam ich jedoch diese Fehlermeldung in Jenkins:

Import-Module : Could not load file or assembly 'file:///C:\Program Files\WindowsPowerShell\Modules\Msonline\1.1.183.17\Microsoft.Online.Administration.Automation.PSModule.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Das seltsame daran war jedoch, dass dieses Skript in der Eingabeaufforderung von Windows auf derselben Maschine ohne Probleme lief. Mit Jenkins bekam ich jedoch diese Fehlermeldung. Wie sich herausgestellt hat, war auf der Slave-Maschine eine x86-Version von Java installiert. Diese habe ich dann deinstalliert und die entsprechende x64-Version installiert. Danach musste man nur noch den Slave-Agenten neu starten und die Fehlermeldung war beim nächsten Bau verschwunden.

Quellen:

findstr Beispiel: Bestimmte Zeilen ausschließen

Manchmal muss man mit Hilfe des Tools findstr bestimmte Zeilen ausschließen aus einer langen Liste von Daten. Dies will ich hier an einem kleinen Beispiel zeigen. Angenommen, man hat eine Liste an Zeilen wie diese hier:

(TR3919) Power '1' has been deployed to version '1'
(TR9102) Power '2' has NOT been deployed to version '2'
Random text and 13773r5, with a big error…
(TR1337) complicated
(TR1239) error

Und nun möchte man alle Zeilen bekommen, die entweder mit (TRXXXX) anfangen (wobei XXXX eine Zahl zwischen 0000 und 9999 sein kann) oder die ein error enthalten. Zeilen, die ein has been deployed enthalten, sollten rausgefiltert werden. Das kann man mit folgendem Befehl erreichen:

findstr "(TR[0-9][0-9][0-9][0-9]) error" "data1.txt" | findstr /V /C:"has been deployed"

Der erste findstr-Befehl sucht alle Zeilen heraus, die ein (TRXXXX) oder ein error enthalten. Nun muss man noch die Zeilen herausfiltern, die ein has been deployed enthalten und das erreicht man mit Hilfe des zweiten findstr-Befehls.

Der Parameter /V dient dazu, all jene Zeilen zu finden, die den angegeben String nicht enthalten. Der Parameter /C gibt an, dass nach genau diesem String, also Zeichen für Zeichen genau, gesucht wird. Bzw. in diesem Fall soll also genau dieser String nicht dabei sein (eben wegen dem Parameter /V).

docker: Are you trying to mount a directory onto a file (or vice-versa)?

Vor kurzem bekam ich beim Versuch, eine Datei von meinem Windows-Host-System in einen Docker Container über dem -v Parameter zu mounten, diese Fehlermeldung:

docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused : … : Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

Mein ursprüngliches Kommando lautete:

docker run -it -v /C/some/path/file.conf:/target/path/file.conf <image_name>

Die Lösung für dieses Problem ist folgende:

  • Erstmal den Container löschen, den ich versucht hatte zu starten: docker rm -f
  • Dockereinstellungen starten (in diesem Fall mit der rechten Maustaste über die Symbolleiste)
  • In dem Fenster mit den Dockereinstellungen auf den Reiter “Shared Drives” wechseln
  • In dem Fenster auf “Reset credentials” drücken
  • Die entsprechende Festplatte wieder aktivieren (in diesem Fall C:)
  • Auf “Apply” drücken und das Fenter schließen
  • Den Dockerdienst neu starten
  • Den docker-Befehl nochmals ausführen.

Quellen

https://stackoverflow.com/questions/45972812/are-you-trying-to-mount-a-directory-onto-a-file-or-vice-versa

Storage Accounts mit Azure CLI und Azure PowerShell auflisten

In diesem Post möchte ich nur kurz auflisten, wie man Storage Accounts in Azure mit Azure CLI und Azure PowerShell auflisten kann. Dies soll mehr für mich als Erinnerung dienen.

Azure CLI

az login
az storage account list

Azure PowerShell

Import-Module AzureRM

Login-AzureRmAccount
Get-AzureRmStorageAccount

Unterschied zwischen ‘Login-AzureRmAccount’ und ‘Connect-AzureRmAccount’

Vor kurzem wollte ich in PowerShell den Befehl Connect-AzureRmAccount aufrufen, da bekam ich plötzlich diese Fehlermeldung:

Connect-AzureRmAccount : Die Benennung "Connect-AzureRmAccount" wurde 
nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines 
ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des 
Namens, oder ob der Pfad korrekt ist (sofern enthalten), 
und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:1
+ Connect-AzureRmAccount
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Connect-AzureRmAccount:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Offensichtlich ist Connect-AzureRmAccount ein neuerer Name für das alte Login-AzureRmAccount. Nun gibt es zwei Möglichkeiten:

  1. Man benutzt den alten Namen Login-AzureRmAccount oder
  2. man macht ein Update vom Modul AzureRM.

Zweiteres erreicht man durch den PowerShell-Befehl

Install-Module -Force AzureRM

Dabei sollte PowerShell als Administrator gestartet sein.

yum Fehler: docker-ce benötigt container-selinux >= 2.9

Kürzlich wollte ich einen RedHat-Server einrichten und habe dafür docker auf dem Server installieren wollen. Beim Versuch, docker zu installieren bekam ich folgende Fehlermeldung:

Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Resolving Dependencies
--> Running transaction check
---> Package docker-ce.x86_64 0:18.06.1.ce-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2.9 for package: docker-ce-18.06.1.ce-3.el7.x86_64
--> Finished Dependency Resolution
Error: Package: docker-ce-18.06.1.ce-3.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2.9
**********************************************************************
yum can be configured to try to resolve such errors by temporarily enabling
disabled repos and searching for missing dependencies.
To enable this functionality please set 'notify_only=0' in /etc/yum/pluginconf.d/search-disabled-repos.conf
**********************************************************************

Error: Package: docker-ce-18.06.1.ce-3.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2.9
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Die Lösung hierbei war, dass ich mit Hilfe des Subscription-Managers das Repository rhel-7-server-extras-rpms aktivieren musste:

sudo subscription-manager repos --enable=rhel-7-server-extras-rpms

Danach hat die Installation von docker wunderbar funktioniert.

Version in “./docker-compose.yml” is unsupported.

Ich habe heute etwas mit Fossology gespielt. Genauer gesagt, wollte ich Fossology in Docker Containern starten und zwar mit Hilfe der Dateien, die von dem Projekt Fossology bereit gestellt werden.

Also fing ich an die entsprechenden Befehle in die Kommandozeile zu tippen:

$ git clone https://github.com/fossology/fossology.git
$ cd fossology
$ sudo docker-compose up

Beim letzten Befehl kam plötzlich eine Fehlermeldung:

ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file

Mit Hilfe von

$ sudo docker-compose -v

docker-compose version 1.8.0, build unknown

fand ich heraus, dass die installierte docker-compose Version zu alt für die docker-compose.yml war, die in dem Fossology-Projekt lag. Also musste ich erstmal docker-compose updaten:

$ sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

Danach konnte ich Fossology ohne Probleme in Docker Containern starten.

CMake: The ASM_NASM compiler identification is unknown

Neulich bekam ich beim Versuch, unter Ubuntu ein Makefile mit Hilfe von CMake zu erstellen, diese Fehlermeldung:

— The ASM_NASM compiler identification is unknown
— Didn’t find assembler
CMake Error at simd/CMakeLists.txt:41 (enable_language):
No CMAKE_ASM_NASM_COMPILER could be found.

Tell CMake where to find the compiler by setting either the environment
variable “ASM_NASM” or the CMake cache entry CMAKE_ASM_NASM_COMPILER to the
full path to the compiler, or to the compiler name if it is in the PATH.

— Configuring incomplete, errors occurred!

Die Lösung hier war, das Paket nasm zu installieren:

sudo apt install nasm

CMake und VS2017: could not find any instance of Visual Studio.

Vor kurzem bekam ich beim Versuch, ein Visual Studio 2017-Projekt mit CMake zu generieren, diese Fehlermeldung:

CMake Error at CMakeLists.txt:3 (project):
Generator

Visual Studio 15 2017 Win64

could not find any instance of Visual Studio.

— Configuring incomplete, errors occurred!

Die Fehlermeldung hat mich gewundert, da Visual Studio 2017 doch installiert war. Die Lösung bei mir war, dass ich noch die Komponente Visual C++ tools for CMake and Linux habe installieren müssen: