Windows Powershell, how to temporarily set Java and Maven varables on the current terminal session

This is a quick tip, in order to configure the Windows Powershell for set the Java and Maven variables when is there another Java installation on the system, but you only want to apply on the current terminal session to avoid change the system configuration.

There are two ways to do that:

1. Replacing current environment variables in session.

$env:JAVA_HOME = "C:\Program Files\Java\jdk-11"
$env:PATH = "$env:JAVA_HOME\bin;" + $env:PATH
$env:M2_HOME = "C:\Program Files\maven\apache-maven-3.5.3"
$env:PATH = "$env:M2_HOME\bin;" + $env:PATH

Execution output:

> java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
> mvn.cmd -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T13:49:05-06:00)
Maven home: C:\Program Files\maven\apache-maven-3.5.3\bin..
Java version: 11, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk-11
Default locale: es_419, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

2. Replacing current environment variables and execute with the specific Java home

$env:JAVA_HOME = "C:\Program Files\Java\jdk-11"
$M2_HOME = "C:\Program Files\maven\apache-maven-3.5.3"
$env:Path += ";"+$M2_HOME+"\bin"
$env:Path += ";"+$JAVA_HOME+"\bin"

Execution output:

> java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
> & $env:JAVA_HOME\bin\java.exe -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
> mvn.cmd -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T13:49:05-06:00)
Maven home: C:\Program Files\maven\apache-maven-3.5.3\bin..
Java version: 11, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk-11
Default locale: es_419, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

This last is very useful when you have installed different Java versions and you don’t need to change your system configuration.

In order to reset the configuration restart the terminal session.

That’s all, bye

How to do a HTTP request from terminal

A quick tip for use in terminal:

# print string auth 
echo -n "dummyuser:MyPassword" | base64

# Unix terminal (basic auth, doing http request with GET method)

curl -X GET \
  -H "Content-Type: text/xml" \
  -H "Authorization: Basic ZHVtbXl1c2VyOk15UGFzc3dvcmQ=" \
  "http://dummyserver:5000/dir/wsdl?p=ic/6e7abd99891231jij123ndb769978566c470"


# Unix terminal (basic auth, doing http request with POST method to send payload from file)

curl -X POST \
  -H "Content-Type: application/soap+xml" \
  -H "Authorization: Basic ZHVtbXl1c2VyOk15UGFzc3dvcmQ=" \
  -d @./request.xml \
  "https://dummyserver:50001/XISOAPAdapter/MessageServlet?senderParty=&senderService=SYS_LEGACY&receiverParty=&receiverService=&interface=BookingFlight_Out&interfaceNamespace=http://LGCY/namespace"


# Unix terminal (basic auth, doing http request with POST method)

curl -X POST \
  -H "Content-Type: text/xml" \
  -H "Authorization: Basic ZHVtbXl1c2VyOk15UGFzc3dvcmQ=" \
  -d "<soapenv:Envelope>....ommited lines </soapenv:Envelope>" \
  "https://dummyserver:50001/XISOAPAdapter/MessageServlet?senderParty=&senderService=SYS_LEGACY&receiverParty=&receiverService=&interface=BookingFlight_Out&interfaceNamespace=http://LGCY/namespace"



# Windows Powershell (basic auth, doing http request with GET method)

$Username = "dummyuser"
$Password = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ($Username, $Password)

Invoke-RestMethod -Uri "http://dummyserver:5000/dir/wsdl?p=ic/6e7abd99891231jij123ndb769978566c470" -Method GET -Credential $Credential


# Windows Powershell (basic auth, doing http request with POST method to send payload from file)
 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("dummyuser:MyPassword"))
$headers = @{
    Authorization = "Basic $base64AuthInfo"
    "Content-Type" = "text/xml"
}

Invoke-RestMethod -Uri "https://dummyserver:50001/XISOAPAdapter/MessageServlet?senderParty=&senderService=SYS_LEGACY&receiverParty=&receiverService=&interface=BookingFlight_Out&interfaceNamespace=http://LGCY/namespace" -Method Post -Headers $headers -Body (Get-Content -Path "request.xml" -Raw)

Bye!

How to connect to a SFTP server from terminal using Password and SSH key authentication

Hi! this is a quick tip connect to SFTP server using a SSH key and password authentication.

Recently I’ve received a file created with Putty Key Generator «file.ppk», in order to establish the connection from terminal I had to use the private key and password to comply with the authentication method.

So, I had to extract the private key as shown as follow:

1. Open Putty Key Generator, select menu Conversions > Import key and load the ppk file

2. Select Conversions > Export OpenSSH key, you can save it with or without passphrase

3. Grant the permissions at the created file only for your user:

# Windows
icacls filename /inheritance:r /grant username:F

# Unix
chmod 700 filename 

4. Open the terminal and go to the folder where you saved the key, then execute the next command:

sftp -oHostKeyAlgorithms=+ssh-rsa -i <key> <username>@<server ip>

    Complete the pasword prompt (and the passphrase if you setted one) to establish the connection, the output must show something like this:

    $ sftp -oHostKeyAlgorithms=+ssh-rsa -i id_dummy_rsa dummyuser@111.222.33.321
    (dummyuser@111.222.33.321) Enter password: 
    Connected to 111.222.33.321.
    sftp>
    

    And thats it!

    bye! =D

    Sonarqube running in Podman containers

    This is a quick entry to show how to run sonarqube using Podman. Please note that I’m using windows powershell.

    First, create the next directory structure and add the following SQL script into sql directory:

    \SONARQUBE
    \---sql
        init-dabase.sql

    Script content:

    -- Creating db user and database for sonarqube
    
    CREATE USER mysonaruser PASSWORD 'mypassword';
    CREATE DATABASE sonarqube OWNER mysonaruser;
    

    Open that directory into the terminal, download the images from docker repository and create the volumes.

    # Download images
    
    podman pull postgres:15.4
    podman pull sonarqube:9.9.2-community
    
    # Create volumes
    
    podman volume create sonarqube_data
    podman volume create sonarqube_logs
    podman volume create sonarqube_extensions
    podman volume create postgres-data
    

    There are two ways to run the containers, creating a network or run in the same pod, please choose only one of the next.

    Seguir leyendo

    OneDrive blocked by registry policy and how to enable it

    A quick tip, if the OneDrive client isn’t execute maybe are blocked by your organization, in some cases changing the value from the registry editor could you help to skip this bloking policy.

    Open regedit from execute dialog (WIN+R) and go to HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OneDrive, then set the value to 0 for the entry DisableFileSyncNGSC and try to execute the client again.

    Cheers! =)

    Script to remove a huge amount of files in linux

    This is a quick entry, I’m going to share the script that I have used to remove more of 10 millions of files in a linux system.

    I had this problem, in a directory the amount of files is very excesive that I can’t list, count or even get the size of the entire directory, and that directory is used for some processes on every execution it is impossible to get the infomation from there.

    In stackexchage I have found some advice to do this but nothing works for me, I used the rsync command, the find command with a recursve actions, but doesn’t work, the server takes a lot of time to list files or an error is showed.

    So, I had to create this script to delete by a set number of files (every 10000 files):

    #!/bin/bash
    TARGET_PATH=/path/to/dir
    while [ "$(ls -U $TARGET_PATH | head -1)" ]
    do
          for i in "$(ls -U $TARGET_PATH | head -10000)"
          do
            cd $TARGET_PATH
            rm -r $i
          done
          echo "executed deletion on:"+$(date)
    done
    
    

    References

    GNOME, creating Dynamic Wallpapers

    This is a quick entry, there are two kind of Dynamic wallpapers for gnome:

    • Dynamic wallpaper changed by choosen theme (light/dark)
    • Dynamic wallpaper changed by defined time transition

    It can easily identify each one, the first have a preview with the both backgrouns (light and dark), the second have a clock icon at the bottom left corner:

    They can be created using the next tools, installed from flathub.

    Dynamic Wallpaper

    https://flathub.org/apps/me.dusansimic.DynamicWallpaper

    Dynamic Wallpaper Editor

    https://flathub.org/apps/com.github.maoschanz.DynamicWallpaperEditor

    Or if you prefer, you could create and edit the files manually from the next locations:

    # Only for the actual user
    
    ## path to user xml definition of the background
    ~/.local/share/gnome-background-properties
    
    ## path to user backgrounds directory with xml definition for transitions
    ~/.local/share/backgrounds
    
    # For all users
    
    ## path to system xml definition of the background
    /usr/share/gnome-background-properties/
    
    ## path to system backgrounds directory with xml definition for transitions
    /usr/share/backgrounds/Dynamic_Wallpapers/
    

    Thats all, enjoy =D!

    Docker, image layering/caching in action

    This is a quick entry to show how the image layers works, according to docker documentation the «The order of Dockerfile instructions matter» and it is because each line in the configuration file is converted into an image layer (cached layer).

    Docker image layers, taken from https://docs.docker.com/build/guide/layers/

    This feature allows that every layer can be reused when the image is built or executed, each layer is read-only. For example, create the next python app and the next Dockerfile:

    Seguir leyendo