Podman and systemd

K3s - Lightweight Kubernetes

Manage your passwords with Tempass - Open Source tool

Java versions compatible with jboss versions

Rundeck with active directory authentication

Install apache on Debian with Ansible Role

Ansible - ansible.cfg

Rotate tomcat logs with logrotate

AWS - Core services

Mapa Mental criado por Luiz Eduardo com GoConqr

PODman


Mapa Mental criado por Luiz Eduardo com GoConqr

The Most Common Java Keytool Keystore Commands

What is an APIs

Nginx ProxyPass for RunDeck 3.3.10

AWS - Load Balancer HTTP - 3 webServers HTTPD

AWS - Launch instance templates + tomcat 9

Creating an EFS shared for a Web Server and mount on boot

Kubernetes cheat sheet

CURL para gerar código HTTP e script para restart de instâncias JBossEAP

 Utilitário do DIA, simple but much useful


$ curl -kv http://blog.isweluiz.com.br 2>&1 | grep -i 'HTTP/1.1 ' | awk '{print $3}'| sed -e 's/^[ \t]*//'


  • 2>&1: error is stored in output for parsing
  • grep: filter the response code line from output
  • awk: filters out the response code from response code line
  • sed: removes any leading white spaces


Utilizando o comando CURL em script para validar a disponibilidade de um site com o código de retorno seguindo os redirects, em seguida faço caso o retorno seja diferente de 200, igual a 404, realizo o restart do grupo de servidores Jboss, este script pode ser utilizado como uma action no zabbix, caso seja disparado um alerta com a trigger XXX ou na cron de um sistema.

    Shell Script - O Super IF do Shell

    Tomada de Decisões

    Em toda linguagem de programação existe alguma estrutura para tomada de decisões. Essa estrutura em geral é feita através do comando “if”. O comando “if” analisa de uma expressão é verdadeira e então executa um bloco de código, caso a expressão seja falsa pode ser executado, ou não, um outro bloco.

    Em geral as linguagens de programação oferecem maneiras de verificar se um valor é igual, menor ou maior que outro. As formas mais comuns são:

    • ==: Igual à
    • != : Diferente de
    • < : Menor que
    • > : Maior que
    • <= : Menor ou igual à
    • >= : Maior ou igual à

    Em shell script os mesmos testes são obtidos com:

    • -eq : (equal) Igual à
    • -ne : (not equal) Diferente de
    • -lt : (less than) Menor que
    • -gt : (greater than) Maior que
    • -le : (less or egual) Menor ou igual à
    • -ge : (greater or equal) Maior ou igual à
    • O uso do “if” em shell script é assim:

    O uso do “if” em shell script é assim:

    #!/bin/bash
    if [ 2 -eq 4 ]
    then
        echo "Esse echo nunca acontecerá"
    fi
    Repare que é necessário manter espaços entre os colchetes e os números, ou variáveis. O bloco após a palavra “then” será executado se a expressão dentro do “if” for verdadeira. O bloco “if” termina com a palavra “fi” que é “if” ao contrário. Essa é uma maneira simples de identificar o final de um “if” quando o encontramos.

    As expressões acima são mais comuns para tratar números. Para fazer comparações com textos use:
    • = : Igual à (isso mesmo apenas um sinal de igual)
    • != : Diferente de
    • -n : String existe e não é vazia (apenas um operador)
    • -z: String existe e é vazia (apenas um operador)

    Veja um exemplo com Strings:

    #!/bin/bash
    echo "Digite seu nome: "
    read nome
    if [ -z $nome ]
    then
        echo "Você não digitou seu nome!"
    else
        echo "Olá, $nome"
    fi

    No script acima o “if” verifica se a variável $nome existe e está vazia, isso significa que o usuário não digitou o nome dele. A instrução “read” faz com que o shell leia alguma informação via teclado e retorne essa informação para a variável informada.

    Também no script acima foi usada a palavra “else” que significa “senão”. Esse bloco é executado quando o “if” retorna um valor falso.


    O Super IF do Shell

    Mas o shell oferece mais opções para o “if” do que as linguagens de programação o fazem! Veja outras opções bem interessantes:
    • -s: Arquivo existe, não vazio (apenas um operador)
    • -f: Arquivo existe, não é um diretório (apenas um operador)
    • -d: Diretório existe (apenas um operador)
    • -w: Arquivo, com permissão de escrita (apenas um operador)
    • -r: Arquivo, com permissão de leitura (apenas um operador)
    • -x: Arquivo, com parmissão de execução  -x  (apenas um operador)
    Veja um exemplo:

    #!/bin/bash
    arquivo="/tmp/meuLog.txt"
    if [ -f "$arquivo" ]
    then
        echo "Continuando log..." >> "$arquivo"
    else
        echo "Criando log..." > "$arquivo"
    fi
    O script acima verifica se o arquivo “/tmp/meuLog.txt” existe. Caso exista ele continua o arquivo, colocando mais informações no final dele (redirecionador >>). Caso o arquivo não exista ele o inicia (com o redirecionador >).

    IFs Aninhados


    Chamamos de “ifs aninhados” as construções onde há um “if” dentro do bloco “then” ou “else” de outro “if”:

    #!/bin/bash
    echo "Digite seu nome: "
    read nome
    echo "Digite sua idade: "
    read idade
    if [ -z $nome ]
    then
        echo "Você não digitou seu nome."
    else
        echo "Seu nome é $nome"
        if [ $idade -gt 10 ]
        then
            echo "Você tem mais que 10 anos."
        else
            echo "Você tem 10 anos ou menos."
        fi
    fi

    IF Multilevel

    Você pode fazer comparações em sequência, com o uso do “elif”, desse jeito:

    #!/bin/bash
    echo "Digite um número"
    read numero
    if [ $numero -gt 0 ];
    then
        echo "Número positivo"
    elif [ $numero -lt 0 ]
    then
        echo "Número negativo"
    elif [ $numero -eq 0 ]
    then
        echo "Número é zero"
    else
        echo "O valor fornecido não é um número!"
    fi

    Além do comando “if”, o shell oferece opções como “case” para controle de fluxo.

    O Comando Case
    O comando “case” é usado para executar um bloco de código de acordo com o valor de uma variável. O comando “case” é interessante pois pode definir diversas opções diferentes sem usar uma estrutura com diversos comandos “if”, “elif” e “else”. Veja um exemplo:

    #!/bin/bash
    echo -n "O que deseja fazer? (A)lmoçar/(J)antar/(S)air? [A] "
    read resposta
    case "$resposta" in
        a|A|"")
            echo "Então tenha um bom almoço =)"
        ;;
        j|J)
            echo "Um jantar vai muito bem."
        ;;
        s|S)
            echo "Saindo..."
        ;;
        *)
            echo "Opção inválida"
        ;;
    esac

    O script acima exibe uma mensagem e então pede uma informação do usuário. O usuário vai digitar alguma letra e então o comando “case” entra em ação. Ele verifica qual valor foi digitado pelo usuário e executa os blocos de código relativos a cada opção. Primeira opção é a padrão, por isso ela é executada mesmo que o usuário não digite um valor.Cada bloco do case é iniciado por um valor que a variável analisada pode ter, ou vários valores, separados por um pipe. Os blocos são finalizados por uma sequência de dois caracteres ‘ponto-e-vírgula’ (;;).

    JBoss EAP 7.0 - SECURITY DOMAIN TO USE A DATABASE

    Mapa Mental criado por Luiz Eduardo com GoConqr

    JBossEAP 7.0 - CLUSTER TCP + LOAD BALANCER - Dynamic Context

    Mapa Mental criado por Luiz Eduardo com GoConqrv

    Set different version of JDK in JBoss EAP 7 / 6 domain mode

    Environment

    Red Hat JBoss Enterprise Application Platform (EAP)

    • 7.x
    • 6.x

    Issue

    • Is it possible to set different versions of JDK to different server-groups/server-instances or profiles. For example, one profile needs to use JDK 1.7 and another one JDK 1.6 ?
    • Running two different JDK for servers in parallel on same host slave.
    • Does EAP6 support use of JVM option in host.xml something like
    • Configure a new server group with a different JVM than other server groups

    Resolution

    • This feature is fully tested and supported on EAP 6.2. The code is present in EAP 6.1.1 and is very likely to work there, but has not gone through full QA testing so it isn't officially supported.

    • Just put the property java-home at the jvm line in each server-group level at the domain.xml file (as shown below) or in each server level in the host.xml file:

            <server-group name="main-server-group" profile="full">
                <jvm name="default" java-home="/path/jdk">
                    <heap size="128m" max-size="1024m"/>
                </jvm>
                <socket-binding-group ref="full-sockets"/>
            </server-group>
    

    Monitoring Jenkins with Prometheus and Grafana

    Jenkins monitoring

    Monitoring Jenkins With prometheus


    Access this post on my hack.md https://hackmd.io/@isweluiz/SkOZI65-_

    MY LAB on GCP

    Host Tools Plataform
    34.67.153.94 Jenkins Docker
    34.67.153.94 Prometheus Docker
    34.67.153.94 Grafana Docker

    Configuring Jenkins

    Jenkins: https://hub.docker.com/_/jenkins

    The command bellow store the jenkins data in /your/home on the host. Ensure that /your/home is accessible by the jenkins user in container (jenkins user - uid 1000) or use -u some_other_user parameter with docker run.

    You can also use a volume container:

    docker run -d -u root --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home jenkins/jenkins
    
    [root@otrs-ansible is_otrs_az]# docker run -d -u root --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home jenkins/jenkins
    1e61d87865dcd05a9c259f97f4d4742de365badff037092cb8def0b3963f5407
    [root@otrs-ansible is_otrs_az]# docker ps
    CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS                         PORTS                                              NAMES
    1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   2 seconds ago       Up 2 seconds                   0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins
    08f6e8bd0217        ocsinventory/ocsinventory-docker-image:2.8.1   "/usr/bin/docker-e..."   9 days ago          Restarting (0) 3 minutes ago                                                      ocsinventory-server
    eae9e938a74e        mysql:5.7                                      "docker-entrypoint..."   9 days ago          Up 10 minutes                  0.0.0.0:3306->3306/tcp, 33060/tcp                  ocsinventory-db
    

    Access you jenkins on your IP and port 8080

    http://34.67.153.94:8080

    Unlok your jenkins, get you password

    [root@otrs-ansible is_otrs_az]# cat  /var/jenkins/secrets/initialAdminPassword 
    ea08621fe48d43b6a04110e110bcf7a6
    

    After put your password, click on install suggested plugins

    Now, create a admin user:

    Now, you are logged on your jenkins lab. Let's create our frist project, click on create a job.

    We will execute a shell command for test our job

    echo "This is test, for monitoring jenkins jobs"

    Like this:

    Save and execute our frist build:

    Configure Prometheus

    Prometheus: https://hub.docker.com/r/prom/prometheus

    Architecture overview

    Prom

    docker run -d -u root --name prometheus -p 9090:9090 -v /var/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
    
    
    docker rm 
    537b40ac35f9c9206f5d66727bebaf1982538a98ec99797055aaa9abc384c065
    
    docker run -d -u root --name prometheus -p 9090:9090 -v prometheus_config:/etc/prometheus/ prom/prometheus
    
    [root@otrs-ansible is_otrs_az]# docker ps
    CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS                         PORTS                                              NAMES
    515fced9aa52        prom/prometheus                                "/bin/prometheus -..."   3 seconds ago       Up 2 seconds                   0.0.0.0:9090->9090/tcp                             prometheus
    1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   24 minutes ago      Up 24 minutes                  0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins
    

    Then, access you prometheus on browser: http://34.67.153.94:9090/

    Our configure prometheus file:

    $vim /var/lib/docker/volumes/prometheus_config/_data/prometheus.yml
    

    Let's configure our jenkins for send metrics for prometheus:

    On context targets we can see the targets that prometheus is monitoring: http://34.67.153.94:9090/targets

    Now, install the prometheus plugin: https://plugins.jenkins.io/prometheus/

    After that, go to configure Jenkins: http://34.67.153.94:8080/configure find for prometheus,

    Then access you jenkins URL, you will see the metrics;

    http://34.67.153.94:8080/prometheus/

    Create a new JOB monitoring on you prometheus file:

     32   - job_name: 'jenkins'
     33 
     34     metrics_path: /promehteus
     35    
     36     static_configs:
     37     - targets: ['http://34.67.153.94:8080']
    

    After that, restart the prometheus container

     [root@otrs-ansible is_otrs_az]# docker ps
    CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS                         PORTS                                              NAMES
    515fced9aa52        prom/prometheus                                "/bin/prometheus -..."   23 minutes ago      Up 23 minutes                  0.0.0.0:9090->9090/tcp                             prometheus
    1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   48 minutes ago      Up 48 minutes                  0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins
    08f6e8bd0217        ocsinventory/ocsinventory-docker-image:2.8.1   "/usr/bin/docker-e..."   9 days ago          Restarting (0) 3 minutes ago                                                      ocsinventory-server
    eae9e938a74e        mysql:5.7                                      "docker-entrypoint..."   9 days ago          Up 58 minutes                  0.0.0.0:3306->3306/tcp, 33060/tcp                  ocsinventory-db
    [root@otrs-ansible is_otrs_az]# docker restart 515fced9aa52        
    515fced9aa52
    

    Accessing our targets on prometheus again: http://34.67.153.94:9090/classic/targets

    Run Grafana

    Grafana: https://grafana.com/grafana/download Documentation: https://grafana.com/docs/grafana/latest/installation/docker/

    docker run -d --name=grafana -p 3000:3000 -v grafana_config:/etc/grafana -v grafana_data:/var/lib/grafana grafana/grafana
    
    [root@otrs-ansible is_otrs_az]# docker run -d --name=grafana -p 3000:3000 -v grafana_config:/etc/grafana -v grafana_data:/var/lib/grafana grafana/grafana
    Unable to find image 'grafana/grafana:latest' locally
    Trying to pull repository docker.io/grafana/grafana ... 
    latest: Pulling from docker.io/grafana/grafana
    801bfaa63ef2: Pull complete 
    bfa9705a3cb2: Pull complete 
    12c11a7e9d94: Pull complete 
    377c2dc21544: Pull complete 
    4a20d1f981fb: Pull complete 
    4f4fb700ef54: Pull complete 
    5d9743dc37f2: Pull complete 
    ec2035efdb39: Pull complete 
    Digest: sha256:29e4e68a557fac7ead72496acea16a9b89626f3311ba7c4a9e39f7fb99f8f68f
    Status: Downloaded newer image for docker.io/grafana/grafana:latest
    adc8418dcfcbae2f2da30c97c5281b1f3719ed476c878d3b4b0776883b6ae421
    [root@otrs-ansible is_otrs_az]# docker ps
    CONTAINER ID        IMAGE                                          COMMAND                  CREATED              STATUS                          PORTS                                              NAMES
    adc8418dcfcb        grafana/grafana                                "/run.sh"                About a minute ago   Up About a minute               0.0.0.0:3000->3000/tcp                             grafana
    515fced9aa52        prom/prometheus                                "/bin/prometheus -..."   56 minutes ago       Up 24 minutes                   0.0.0.0:9090->9090/tcp                             prometheus
    1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   About an hour ago    Up About an hour                0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins
    08f6e8bd0217        ocsinventory/ocsinventory-docker-image:2.8.1   "/usr/bin/docker-e..."   9 days ago           Restarting (0) 36 minutes ago                                                      ocsinventory-server
    eae9e938a74e        mysql:5.7                                      "docker-entrypoint..."   9 days ago           Up About an hour                0.0.0.0:3306->3306/tcp, 33060/tcp                  ocsinventory-db
    

    Now we have 3 conteiners;

    Access you grafana on 3000 port, user: admin, password: admin


    Add a new Data Source for prometheus

    Save and then, create your own dashboards or download one ready in https://grafana.com/grafana/dashboards

    Instalando Wildfly 21.0.1 com Ansible

    Os Playboks são usados na maioria das vezes para construir interações complexas que requerem, por exemplo, provisionamento de software em máquinas remotas. Neste exemplo, veremos como combinar nosso Playbook que irá instalar o JDK o unzip e o Wildfly, o servidor de aplicativos por sua vez será configurado no modo standalone, e, ao fim da execução do playbook o mesmo estará pronto para utilização em ambiente de teste.

    Resolvendo o erro: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.


    ```bash
    sudo yum install libmpc-devel mpfr-devel gmp-devel

    cd ~/Downloads
    curl ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.bz2 -O
    tar xvfj gcc-4.9.2.tar.bz2

    cd gcc-4.9.2
    ./configure --disable-multilib --enable-languages=c,c++
    make -j 4
    make install
    ```

    Oficial GCC GNU https://ftp.gnu.org/gnu/gcc/gcc-4.9.4/