GIT Cómo hacer un parche de un commit(s) dado

Introducción

Relacionado: GIT: Cómo hacer un parche con los cambios actuales

El caso en esta entrada puede ser conocido por muchos usurios veteranos de git y por los nóveles que no hayan conocido cómo solucionarlo.

En nuestro trabajo diario, tenemos que compartir uno o varios cambios que están en el histórico de git o en una rama local de trabajo y queremos compartir esos combios ya sea como solución a un problema o para pasarle una tarea a un compañero o lo que sea, ¿cómo lo hacemos?

Continue reading

Añadir origen de nuget por defecto

Problema

Recientemente he tenido que reinstalar mi equipo de trabajo, y comprobando que la nueva instalación funcionaba como la anterior me he encontrado que al recompilar un proyecto hecho con .NET5 no compilaba (le falta encontrar los origenes de Nuget), dando el siguiente mensaje:

Continue reading

Instalar Oh My Posh y personalizar el prompt del terminal

Introducción

Oh My Posh es un motor para el prompt del terminal de windows, que permite ser personalizado para cualquier shell que tenga la capacidad de ajustar la cadena de solicitud con una función o variable (usaremos powershell).

Es muy útil si programas y usas GIT porqué te muestra información útil, depende del tema que se use, pero si estás en un directorio en un repo git, la rama de trabajo, cuantos commits estás por detras del remote, cuantos ficheros pendietes de commit, si ha habido un error, y más …

El objetivo es tener un prompt (parecido, no esté en concreto necesariamente) como sl siguiente:

Continue reading

GIT: Cómo hacer un parche con los cambios actuales

Introducción

El caso por ver en esta entrada puede ser conocido por muchos usurios veteranos de git y por los nóveles que no hayan conocido cómo solucionarlo.

Estamos trabajando en una rama de trabajo, y queremos cambiar a la principal para hacer un pull, pero … no quermos perder o descartar los cambios, ¿qué hacer? Existen soluciones usar git stash o en IntelliJ hacer un shelf, pero cómo dice el título y si quiero almacenar TODOS los cambios que hay en el working tree en un fichero, un parche.

Continue reading

Configurar SSH para usar diferentes pares de claves con bitbucket y otros servicios git [ACTUALIZADO]

Introducción

Normalmente uso git como herramienta de control de código fuente. Por lo general el escenario que me he encontrado es una única cuenta en mi equipo. Ya que en equipo personal hago mis pruebas con bitbucket y en el trabajo con el servidor GIT que ponga a mi disposición la empresa.

En la actualidad, trabajo con un servidor GIT centralizado pero algunas entidades con las que colaboramos en el trabajo tienen sus propios servidores GIT. Esto plantea un escenario nuevo. Ya que si usas git sobre protocolo HTTP te da igual pero hoy en día por cuestiones de seguridad es muy recomendable SSH y en este caso es donde aparece el “problema”.

No es un problema, claro, pero para poder trabajar contra varios servidores con claves de acceso RSA para SSH diferentes es necesario configurar un poco el equipo. El siguiente ejemplo lo he hecho en Windows 10 con Git Bash pero en un shell de GNU/Linux o macOS sugpongo que irá igual (o muy parecido).

Continue reading

Descargar carpeta WEB completa con CURL

Introducción

Supongamos que queremos descargar un contenido WEB. Por ejemplo, en la siguiente imagen vemos un caso real de unos XML modelo publicados por la administración pública (pero podría ser una página HTML con sus imágenes, etc.):

Solución

La forma de hacerlo usando wget sería:

wget --no-parent -r http[s]://dominio.com/ruta/directorio/descargar

Con esto, se crea una carpeta con el nombre del dominio y la estructura de carpetas publicadas en el servidor y todos los documentos referendo los enlaces disponibles desde la ruta indicada.

NOTA: Para poder usar WGET con SSL (https) leer mi post anterior.

***ADICONAL**: Parametros adicionales en https://www.guyrutenberg.com/2014/05/02/make-offline-mirror-of-a-site-using-wget/

Desinstalar el plugin Subeclipse (svn) de Eclipse/Aptana Studio 3

Hace unos días, instalé el pluigin subeclipse para integrar SVN en Aptana Studio. Después de probarlo quedé contrariado al detectar que tiene un problema con el sistema de claves de gnome y no hacía más que darme problemas. Decidí seguir usando svn en consola y desinstalarlo. ¿Pero cómo hacerlo definitivo?

$ cd APTANA_INSTALL_DIR/plugins
$ ls |grep org.tigris.subversion
org.tigris.subversion.clientadapter_1.6.12.jar org.tigris.subversion.subclipse.doc_1.3.0.jar org.tigris.subversion.subclipse.tools.usage_1.0.1.jar
org.tigris.subversion.clientadapter.javahl_1.6.15.jar org.tigris.subversion.subclipse.graph_1.0.9.jar org.tigris.subversion.subclipse.ui_1.6.17.jar
org.tigris.subversion.subclipse.core_1.6.17.jar org.tigris.subversion.subclipse.mylyn_3.0.0.jar
$ ls |grep org.tigris.subversion|xargs rm

Solucionada, reiniciamos Aptana Studio y todo ok.

Referencias

  • Eclipse: http://www.eclipse.org/
  • Aptana Studio: http://www.aptana.com/
  • Subeclipse: http://subclipse.tigris.org/

Instalar Oracle JDK en Debian/Ubuntu

Introducción

Recientemente he descargado el Android Studio y necesito el JDK oficial de Oracle para hacerlo funcionar. Para instalarlo en nuestra distribución Linux primero debemos comprobar la versión de java instalada (interprete y compilador):

$ java -version
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.4)
OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)

Desintalar OpenJDK si está instalado

Si no tienes instalada el OpenJDK no necesitas seguir estos pasos, pero en mi caso voy a desinstalar los paquetes del OpenJDK.

$ sudo apt-get remove openjdk-6-jre*

Instalar Oracla JDK

A continuación, para instalar el Oracle JDK:

  1. Añadir repositorio:
    sudo add-apt-repository ppa:webupd8team/java
  2. Actualizamos los repositorios con:
    sudo apt-get update
  3. Instalar Oracle JDK:
    sudo apt-get install oracle-java7-installer

Para comprobar que la instalación ha tenido éxito, ejecuta en una terminal el comando para saber la versión de Java que utiliza tu Ubuntu:

java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) Client VM (build 24.45-b08, mixed mode)

Desintalar Oracle JDK

Si quisieramos desinstalar el Oracle JDK:

sudo apt-get remove oracle-java7-installer

Y sus repositorios:

sudo apt-get install ppa-purge
sudo ppa-purge ppa:webupd8team/java

Configurar un multihost con apache2 y en Debian/ubuntu [ACTUALIZADO]

Introducción

Como desarrollador Web en alguna ocasión he tenido que realizar algún proyecto sin disponibilidad de tener un servidor de desarrollo. Hasta este punto, existen tres opciones si queremos trabajar con un servidor de desarrollo en lugar de usar un WAMP o un XAMPP (que son cómodos pero poco profesionales).

  • Contratar un multihost a algún proveedor de servicios de hosting
  • Instalar una máquina servidor configurandola con multihost y su propio DNS, etc.
  • Instalar un servidor LAMP con multihost en el equipo de trabajo

En esta entrada me voy a decantar por esta última opción por comodidad y rapidez. Pero hay que tener en cuenta que esta solución sólo servirá para tener un entorno multihost para uno mismo, si se trabaja en grupo en un red no será un sistema válido.

Instalando apache2, php5, mysql5 … (lamp)

Lo primero, es instalar un sistema LAMP (Linux, Apache, Mysql, PHP). Esto en un sistema Debian/Ubuntu es tan sencillo cómo ejecutar en consola:

$ sudo apt-get install apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libaprutil1-dbd-sqlite3 libaprutil1-ldap libhtml-template-perl mysql-server mysql-server-5.5 mysql-server-core-5.5 apache2-mpm-prefork libapache2-mod-php5 libtidy-0.99-0 php5 php5-cli php5-common php5-curl php5-gd php5-mysql php5-odbc php5-sqlite php5-tidy php5-xdebug php5-xmlrpc libapache2-mod-auth-mysql libphp-jpgraph dbconfig-common libmcrypt4 php-doc php5-mcrypt phpmyadmin

A continuación, como sana costumbre recomiendo cambiar la clave de root de MySQL.

mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourpassword');

Y por último, si hemos instalado PHP, editar el fichero /etc/php5/apache2/php.ini y habilitar el uso de mysql, en la línea:

;extension=mysql.so

Cambiadla por: 

1extension=mysql.so

Un poco de DNS

Apache2 se configura de modo que se le indica al servidor en que interfaces de red y puertos debe funcionar. Tomemos la imagen siguiente:

Disponemos de varios nombres de dominio (reales o ficticios) y deseamos que apunten a la misma máquina, pero claro, no queremos que apache nos facilite las mismas Webs para cada uno, sino que sean proyectos diferentes (multihost), para ello debemos indicar el sistema DNS que esos nombres apuntan a la IP del servidor de trabajo.

Si estuviéramos en un entorno real y profesional, tendríamos un servidor DNS y un servidor LAMP dedicado con una IP W.X.Y.Z, e indicaríamos al servidor DNS que cada dominio apunte al servidor con IP W.X.Y.Z. Como estamos probando en un servidor “monopuesto” no necesitamos configurar ningún servidor DNS, sólo debemos editar el fichero /etc/hosts. Este fichero es una reminiscencia del origen de Internet y contiene parejas del tipo (nombre, ip).

De modo que si queremos añadir el dominio de prueba “midominio”, sólo debemos añadir al final del fichero /etc/hosts la sighuiente línea:

127.0.0.1    midominio

Una vez hecho esto, nuestro equipo sabe que la IP del dominio midominio es 127.0.0.1. Pero, sólo nuestro equipo, este fichero es local al equipo dónde lo hemos editado de ahí que este sistema sólo nos sirva para el equipo de trabajo no para trabajar en equipo.

Sistema multihost en apache2

Y por fin, vamos a ver los pasos para configurar un sistema multihost en nuestro apache2. Supongamos que los DocumentRoot de los diferentes dominios estan en la carpeta /home/usuario/www, debemos seguir estos pasos:

  1. Añadir el usuario al grupo WWW-DATA de apache2: Para que apache pueda leer/escribir sin problemas en sus carpetas (Cambiad USUARIO por vuestro usuario)
    $ sudo usermod -G www-data USUARIO
  2. Poner los permisos 775 para directorios y 664 para ficheros: Por lo mismo que en el apartado anterior ($PWD se evalúa como el directorio actual, se puede indicar el directorio correspondiente).
    $ find $PWD -type d -print -exec chmod 775 {} \;
    $ find $PWD -type f -print -exec chmod 664 {} \;
  3. Cambiar los permisos del directorio del vhost:
    $ sudo chown -R USUARIO:www-data *
  4. Edita el fichero del virtual host:
    
    <VirtualHost *:80>
    	ServerAdmin	info@miemail.com
    	Servername	midominio
    	DocumentRoot	/home/usuario/www/midominio
    	LogLevel	warn
    	ErrorLog 	${APACHE_LOG_DIR}/midominio_error.log
    	CustomLog	${APACHE_LOG_DIR}/midominio_access.log combined
    	<Directory />
    		Options FollowSymLinks
    		AllowOverride None
    	</Directory>
    	<Directory /home/usuario/www/midominio>
    		Options Indexes FollowSymLinks MultiViews
    		AllowOverride All
    		Order allow,deny
    		allow from all
    	</Directory>
    </VirtualHost>

    Debemos tener cuidado con lo siguiente, en Debian/Ubuntu la configuración inicial de apache2 desactiva el uso del fichero .htaccess. Para habilitarlo debemos ser cuidadods de poner la directiva AllowOverride All como en el ejemplo anterior.

    Novedad: En versiones recientes de apache está configuración puede no ser suficiente y debemos añadir alguna directiva adicional, para no encontrartos un error HTTP 403 Forbbiden. De modo que en la configuración del directorio con el DOCUMENT ROOT debemos a Require all granted, quedando algo así

    :

    <Directory "your directory here">
       Order allow,deny
       Allow from all
       # New directive needed in Apache 2.4.3: 
       Require all granted
    
    

    Tal y como podemos leer en Stack Overflow.

  5. Activar el mod_rewrite:
    $ sudo a2enmod rewrite
    $ sudo service apache2 restart
  6. Accede a http://midominio

Suerte con vuestros servidores LAMP!

Referencias

  1. DNS en Wikipedia: http://en.wikipedia.org/wiki/Domain_Name_System
  2. Virtual Host: http://httpd.apache.org/docs/2.2/vhosts/
  3. Ejemplos: http://httpd.apache.org/docs/2.2/vhosts/examples.html

Corregir: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName

Problema arrancando apache con Server’s fully qualified domain name

Hace poco, he tenido un pequeño “problema” instalando un servidor web apache2 y quería resolver cómo lo he solucionado. Trans instalar apache2 al realizar cualquier operación de administrador obtengo este mensaje:

* Starting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

Tranquilidad, no ocurre nada. Sólo que apache no sabe que nombre (DNS) tiene el servidor y por defecto emplea la IP de loopback (127.0.0.1). esto es así porqué httpd.conf está vacío, una solución sería añadir la cadenaServerName, pero con la nueva estructura de directorios de Apache2 disponemos de la siguiente opción:

sudo sh -c 'echo "ServerName localhost" >> /etc/apache2/conf.d/name' && sudo service apache2 restart

Con lo cual queda asignado este nombre y solucionado el problema.