Buscar este blog

Aviso

El autor de éste blog no se hace responsable de los posibles daños o perdidas de información, que pudieran ocasionarse en su sistema o su vida por la aplicación de la información aquí contenida.

viernes, 7 de agosto de 2020

Configurar un repositorio local junto a un repositorio externo como Jfrog

Imagínate que te encuentras en la siguiente situación, necesitas usar jfrog como repositorio de código, pero al mismo tiempo necesitas usar unas bibliotecas de java localmente, que no se encuentran en dicho repositorio. Para ello se usa como url del recurso el protocolo "file" que nos permite usar archivos locales como recurso:

Primero creamos un directorio en la raiz del proyecto llamado local-maven-repo (o cualquier otro, pero debes reemplazarlo donde aparezca), luego procedemos a instalar el jar en dicho repositorio con el comando:

mvn deploy:deploy-file \
-DgroupId=com.example \
-DartifactId=dependency \
-Dversion=1.0 \
-Durl=file:./local-maven-repo/ \
-DrepositoryId=localrepository \
-DupdateReleaseInfo=true \
-Dfile=/home/jorge/libs/depencency.jar

Luego actuazliza el archivo pom.xml con esta sección a nivel de <project>:

...
<repositories>
<repository>
<id>localrepository</id>
<name>localrepository</name>
<url>file:///${basedir}/local-maven-repo</url>
</repository>
<repository>
<id>central</id>
<name>central</name>
<url>https://myrepo.jfrog.io/
myrepo/maven-public/</url>
</repository>
</repositories>
...
Luego crea un archivo settings.xml en la raiz del proyecto:

<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/SETTINGS/1.1.0" xsi:schemalocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <mirrors>
        <mirror>
            <id>localrepository</id>
            <mirrorof>localrepository</mirrorof>
            <url>file://${env.PWD}/local-maven-repo</url>
            <name>localrepository</name>
        </mirror>
        <mirror>
            <id>central</id>
            <mirrorof>*</mirrorof>
            <url>https://myrepo.jfrog.io/myrepo/maven-public/</url>
            <name>central</name>
        </mirror>
    </mirrors>
    <plugingroups>
        <plugingroup>org.sonarsource.scanner.maven</plugingroup>
        <plugingroup>org.jacoco</plugingroup>
    </plugingroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activebydefault>true</activebydefault>
            </activation>
            <properties>
                <sonar.host.url>${SONAR_HOST_URL}</sonar
.host.url>
                <sonar.projectname>${SONAR_PROJECT_NAME}</sonar
.projectname>
                <sonar.login>${SONAR_LOGIN_TOKEN}</sonar
.login>
                <sonar.organization>${SONAR_ORGANIZATION}</sonar
.organization>
                <sonar.projectkey>${SONAR_PROJECT_KEY}</sonar
.projectkey>
                <sonar.java.source>11</sonar
.java.source><!--1.8-->
                <sonar.java.coverageplugin>jacoco</sonar.
java.coverageplugin>
                <sonar.dynamicanalysis>reuseReports</sonar.
dynamicanalysis>
                <sonar.language>java</sonar.
language>
                <sonar.sources>src/main</sonar.
sources>
                <sonar.tests>src/test</sonar
.tests>
            </properties>
        </profile>
    </profiles>
    <localrepository>${user.home}/.m2/repository</localrepository>
    <servers>
        <server>
            <id>central</id>
            <username>${SONAR_USER}</username>
            <password>${SONAR_API_KEY_OR_PASSWORD}</password>
        </server>
    </servers>
</settings>

Por último puedes usar el nuevo comando para instalar las dependencias:

$ mvn install -s settings.xml
Con esto queda resuelto el problema :)

jueves, 23 de enero de 2020

¿De dónde vienen las credenciales de rol de las instancias en EC2?

Normalmente te encuentras con dudas,  dudas que te hacen pensar, yo uso X biblioteca,  pero cómo lo hace?

Este es el caso de garantizar a una aplicación el acceso a ciertos recursos se usa normalmente la idea del ROL de las Instancias, es buena idea pero entrando a inspeccionar la instancia no encontraba ningún lugar de donde la aplicación pudiera obtenerlas, así que me dispuse a entrar en las entrañas de la biblioteca en búsqueda de algo que me dijera qué estaba pasando?

Lo que hace es buscar en el siguiente orden:
1. Buscar en los System Properties de Java las clavess aws.accessKeyId y aws.secretKey.
2. Buscar las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY.
3. Buscar en el archivo de credenciales predeterminado para el usuario actual, normalmente ~/.aws/credentials
4. Buscar en una url que se expone la variable de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
5. Buscar en la metadata que tiene la instancia, esta url se puede armar mediante otras variables de entorno pero normalmente es http://169.254.169.254/latest/meta-data/iam/security-credentials/ecsInstanceRole

Esta última es la que logré encontrar y contiene la respuesta del accesskey y secretaccesskey que necesita la aplicación para conectar.

{
  "Code" : "Success",
  "LastUpdated" : "2020-01-23T22:38:07Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ABC1234",
  "SecretAccessKey" : "KEY/AWS",
  "Token" : "TOKEN==",
  "Expiration" : "2020-01-24T05:06:30Z"
}


REFERENCIAS:
- https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html
- https://rclayton.silvrback.com/using-the-instance-role-manually-on-an-ec2-instance

viernes, 19 de julio de 2019

Actualizar hora via http en macOS High Sierra

Cree un archivo llamado updateDateWithHtth.sh y copie estas líneas

#!/usr/bin/env bash
# Ejecute script como sudo
d1="$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8) GMT-0000"
sec=$(TZ="UTC" date -j -f "%d %b %Y %H:%M:%S GMT-0000" "$d1" "+%s")
local=$(TZ="America/Bogota" date -j -f "%s" "$sec" "+%Y:%m:%d %H:%M:%S")
sudo date -f "%Y:%m:%d %H:%M:%S" "$local"

La explicación es muy que descarga la hora UTC de un servidor de Google, la interpreta como GTM0 convirtiéndola a timestamp y luego se convierte al formato de hora local en este cazo a la zona "America/Bogota" puede cambiar esta a la zona horaria de tu país. Después como usuario administrador "sudo" se cambia la hora especificando el formato en el que se obtuvo la hora UTC convertida a local.

Se ejecuta luego el script como:

$ chmod +x updateDateWithHtth.sh
$ sudo ./updateDateWithHtth.sh

Luego mira la hora con el comando:

$ date


Con esto estaría todo terminado.

Buena suerte!

Más populares

Archivo del blog