Cómo instalar Git e iniciarse en los mundos del versionado

Si en tu día a día te dedicas a desarrollar software seguro que conoces Git, espero por tu bien, si no te suena de nada bueno… no te preocupes porque te voy a explicar qué es y cómo puedes instalar Git en tu máquina.

En el desarrollo a nivel serio tenemos que asegurarnos de alguna forma que el código que estamos produciendo esté guardado en algún servidor para que si un día nuestro ordenador muere podamos volver a acceder a el fácilmente.

Vamos, un servidor de backups diría alguno….

Si, pero con mas cosas.

Estos servidores son llamados como servidores de control de versiones y permiten llevar un control exacto sobre los cambios en los ficheros que ahí se guardan.

Da igual el tipo de archivo que subas ahí (algunos no se aconsejan) que podrás ver el histórico de… si se ha añadido algo nuevo… se ha borrado algún fichero… otro compañero ha modificado parte de un documento… etc…

¿Se entiende no?

Pues este tipo de servidores se configuran con cierto software. En el mercado existen muchas opciones pero el que ya se ha convertido casi en un estándar es Git y hoy vamos a aprender a usarlo.

 

¿Qué es Git?

Aunque ya te lo he explicado antes hablando de los servidores VCS…

Según la Wikipedia:

Git (pronunciado «guit»​) es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente. Su propósito es llevar registro de los cambios en archivos de computadora y coordinar el trabajo que varias personas realizan sobre archivos compartidos.

 

Primer paso: Instalar Git

Lo primero que tienes que sabes es que Git es un programa puramente de consola, de terminal, de línea de comandos… como quieras llamarlo pero de esa ventanita negra con solo letras.

terminal de comandos

Así que, si estas empezando a programar ves quitándote el miedo ella porque la vas a tener que utilizar si o si.

Voy a decir también que existen programas de escritorio que añaden una capa gráfica, visual y por encima de Git que tal vez a los mas novatos les funcione.

Pero es mejor trabajar cuanto antes desde la línea de comandos.

Así que….

 

Cómo instalar Git en Linux

Si tu ya tienes alguna distribución basada en Linux instalada en tu máquina mi enhorabuena. Ya has hecho un gran paso para perderle el miedo a la terminal de comandos.

Imagino que si estas leyendo esta parte es por que tienes un Ubuntu así que voy a poner el ejemplo de instalar Git en Linux sobre esta distribución pero si tienes otra por ejemplo que este basada en Debian, por ejemplo Mint, no te costará tampoco mucho esfuerzo.

Tenemos que abrir la terminal de comandos. Desde el mismo Dash buscando por terminal o desde el Escritorio y pulsando Control, Alt, T (ctrl + alt + t) podremos abrir la consola y empezar a jugar a ser juanquers.

 

Soy programador

 

Una vez que tengamos la consola abierta tenemos que escribir lo siguiente:

sudo apt-get update

Este comando lo que hace es actualizar el repositorio de paquetes disponibles. Es decir, las referencias que le dicen dónde esta el software que queremos instalar.

Cuando se haya actualizado ya podemos instalar Git en Linux escribiendo lo siguiente:

sudo apt-get install git

Déjalo que se vaya instalado solo y cuando acabes ya podremos empezar a usar Git como un loco.

Puedes comprobar que se ha instalado correctamente Git comprobando la versión.

Si ejecutas la siguiente línea:

git version

Te debería salir lo siguiente:

Comando Git version
Comando Git version

Cómo instalar Git en Mac OS X

Es muy posible que ya lo tengas instalado. Algunas versiones de OS X ya viene con Git instalado por defecto, junto a otras herramientas.

Pero en caso de que no lo tengas instalado al ser un sistema operativo basado en UNIX, su proceso de instalación es igual de sencillo que cuando se instala en Linux.

O incluso mas!

Entra en esta dirección https://git-scm.com/download/mac y comenzará a descargarse el paquete instalador.

Cuando lo tengas abierto lo demás es ya Siguiente > Siguiente > Siguiente.

instalar git en mac

Una vez que se termine de instalar podemos comprobar que todo el proceso ha ido bien escribiendo:

git version

Pero también podemos instalar git de otra forma y es desde la terminal…

Instalar Git en Mac desde la terminal de comandos

Puedes hacerlo desde Homebrew, si no tienes esto ya instalado en tu Mac ya estás tardando porque simplifica enormemente el proceso de instalación de software.

Para instalar Homebrew que después nos ayudará a instalar Git abre la terminal y escribe lo siguiente:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew doctor

Esta línea comenzará el proceso de instalación y te preguntará además que si deseas instalar las herramientas de desarrollo de línea de comandos de Apple. Instálalo todo y ejecuta la siguiente línea:

brew install git

Ya está, ya lo habrás instalado. A disfrutar!

 

Cómo instalar Git en Windows

¿Quién dice la Wikipedia que ha creado Git?

Linus Torvals, el padre de Linux. Por lo cual podemos deducir que este programa no chutará bien en Windows. Ya sea por limitación y/o arquitectura de Windows contra Linux.

Pero aun así podemos instalar Git en Windows fácilmente. Desde la propia página web de GIT nos ofrecen una herramienta con la que podemos emular comandos pensados para sistemas Unix en nuestro flamante y no-espiador Windows 10.

Git Bash se llama.

Entra en la web https://git-scm.com/download/win y automáticamente empezará descargar del ejecutable que te va a instalar Git y Git Bash, la capa de abstracción entre los dos sistemas.

Cuando lo tengas descargado, ejecútalo y lo siguiente ya es hacer click como un loco en Siguiente, Siguiente, Siguiente.

Poca configuración lleva…

instalar git en windows
Instalar git en windows

 

Elegir el directorio donde se va a instalar GIT

Addons de Git en Windows

Mas configuración

Mas configuración git

200 años mas tarde

Instalando Git en Windows

terminal de git bash

Bravo 👏👏

 

Clientes de escritorio para Git

Para que no tengas que aprender a manejar Git (no recomendado) desde la consola he recopilado un par de clientes de escritorio que a pesar de ser un buen apoyo en cuestiones de logging también nos permite hacer lo mismo que se hace desde la terminal.

Hay clientes de escritorio tanto para Windows, para Mac OS X como para Linux, pero los mejores son los siguientes:

Sourcetree

Sourcetree logoEste bicho es compatible para ordenadores tanto con Windows como con Mac.

Tiene una interfaz muy clara y muy limpia lo que lo hace ideal para los que están empezando con el control de versiones aunque también es realmente útil para la gente que ya domina Git.

Puedes usarlo tanto para Git como para Mercurial (otro tipo de software de control de versiones) y entre sus ventajas tenemos:

  • Soporte para ficheros grandes
  • Integración con Git-flow
  • Soporte para submódulos en la administración de proyectos
  • Búsqueda en el local stage de commits

sourcetree atlassian

Por estas y otras razones junto a que es un programa totalmente gratuito lo recomiendo como una de las mejores opciones para Windows. Pero no para Mac, que tiene cosas mejores.

Puedes descargar Sourcetree desde aquí.

Github Desktop

Github Desktop logoAunque personalmente no lo he probado ya entrar en la web hace que te den ganas de bajártelo.

Tanto la web como el programa tiene un diseño realmente cuidado sabiendo diferenciar lo que es muy bien la parte del git log y su histórico de la parte de revisión de código.

Es otro de los programas que también van a funcionar tanto en Windows como en Mac.

A parte de integrar todas las funciones que integra cualquier otro cliente de escritorio de git, un punto a favor que le he visto es que en cada commit se integra el resultado de los tests de Integración Continua.

programa github desktop

Puedes descargarlo desde aquí y es gratis también.

Si quieres ver como han construido este programa puedes hacerlo desde su repositorio de Github.

GitKraken

gitkraken logo

La corona entre el hypeo maquetero.

Pese a ser un programa multiplataforma y encontrarse tanto en Linux como en Mac como en Windows, no se por qué pero una gran cantidad de usuarios de Mac sólo utilizan este programa…

La verdad es que este software si que te entra por la vista muy fácilmente ya que su diseña está cuidadísimo en extremo.

Tiene una versión gratuita para usos no comerciales y otra de pago para empresas. La verdad es que se entiende tanta emoción alrededor de este programa simplemente por los partners que tiene detrás .

Hay compañías como Lego, Tesla, Google o Amazon que están usando sus soluciones así que es una buena garantía de uso.

gitkraken

Podeis descargarlo desde aquí.

 

Conclusiones

Con todo lo que hemos visto ya tendríamos suficiente para poder instalar git en cualquier sistema operativo y comenzar a usarlo con nuestros proyectos.

Otra cosa ya es cuando entremos en el uso de sistemas distribuidos de git como cuando alojamos nuestros proyectos en Github o Bitbucket, pero para comenzar a tirar comandos de git con esto ya tienes de sobra.

Durante el artículo he dejado claro que soy un usuario pro-terminal siempre. He tenido, tengo y tendré clientes de escritorio de git toda mi vida, pero ahí se quedan cogiendo polvo porque no los uso.

Haz el esfuerzo y aprende a utilizar git desde la consola.

Sus ventajas son muchísimas.

Pero si aun así no te sientes seguro o prefieres hacerlo con una interfaz gráfica tira hacia GitKraken, es el mas bonito de todos.

Al fin y al cabo con todos puedes hacer lo mismo.

GitKraken es fantasía pura.

magic

Allahu akbar: cómo hacer una bomba lógica

Que no cunda el pánico!

Relajad las tetas que en este post no vamos a hacer exaltación al terrorista ni os voy a enseñar a hacer un artefacto pirotécnico. Si habéis entrado buscando ese tipo de información ya os podéis dar media vuelta e iros a freír espárragos. Lo que vamos a aprender en el post de hoy es a hacer una bomba lógica o mas concretamente una bomba fork y que afecta a sistema GNU/Linux.

Algo ya viejo y conocido en el mundo de la inseguridad informática junto a otros amigos como los virus, los gusanos o los rootkits pero que siempre es divertido de aprender y conocer su funcionamiento y que si se lleva a cabo con un poquito de ingenio, con tan solo tirar un par de caracteres podemos hacer muuuuucho daño.

Vamos a ver qué es una bomba lógica, vamos a aprender a programar una bomba fork y sobre todo vamos a ver cómo solucionarlo.

¿Qué es una bomba lógica?

Actuación de una bomba fork
Actuación de una bomba fork

Según la wikipedia:

Una bomba lógica es una parte de código insertada intencionalmente en un programa informático que permanece oculto hasta cumplirse una o más condiciones preprogramadas, en ese momento se ejecuta una acción maliciosa

Esta bomba la podríamos añadir al init.d de nuestro sistema Linux y joder para siempre el arranque del sistema operativo o al menos hasta que un experto le meta mano y consiga arreglarlo.

Vale, creo que ya ha quedado claro qué es una bomba lógica pero y una bomba fork que es sobre lo que estamos hablando hoy.. ¿qué es?

Pues una bomba fork sigue el mismo paradigma que las bombas lógicas pero se diferencia en que estas bombas son un tipo de ataque DOS que consiguen ocupar todo el espacio disponible de memoria RAM de un sistema.

Las bombas fork funcionan de la siguiente manera. Una vez que ha sido activada, el proceso padre que la maneja es capaz de crear procesos hijos que a su vez crean mas procesos hijos que a su vez crean mas procesos hijos y así hasta el infinito y de una manera recursiva. Estos procesos no reciben una señal SIGKILL por lo que no pueden ser matados. Como os imagináis y debido a esto el consumo de memoria RAM cada vez es mayor y mayor y la única solución para parar una bomba lógica es reiniciar el sistema.

Pues bien una bomba fork puede ser programada en cualquier lenguaje de programación, lenguaje de programación que no de maquetación, escribir HTML no es programar mamones 😉

Las siguientes líneas son un ejemplo de bomba fork escrita en C++

#include <unistd.h>

int main()
{
  while(1) {
    fork();
  }
  return 0;
}

Como leéis en el código, a no ser que se cumpla una condición, se va a estar ejecutando la función fork indefinidamente ya que la condición no se va a cumplir nunca en este snippet, te va a petar la memoria… ufff

Pero si algo me ha motivado a escribir este post sobre cómo hacer una bomba lógica es un snippet escrito en una sola línea en bash.

:(){ :|:& };:

¿Verdad que mola? Es muy gracioso, me recuerdan a caritas de patitos, pero patitos cabrones los muy joputas, no lo ejecutéis en vuestro en ordenador si no queréis tener que reiniciar el aparato…

Vamos a intentar desgranar esta línea para que quede mas clara.

Lo que en una sola linea contiene toda la lógica, si lo formateamos podemos empezar a ver lo siguiente:

:(){ 
  :|:& 
};:

La primera parte o línea del snippet formateado e identado se corresponde con la el nombre de la función, es decir, en lugar de llamar a nuestra función con un nombre literal la hemos nombrado con el nombre de los dos puntos.

Esto

:(){ 
}

Es igual a esto

bomba(){ 
}

¿Hasta aquí bien no? Ok

La segunda línea se corresponde con la llamada recursiva a sí misma haciendo uso de las tuberías UNIX pero sobre todo y lo mas jodido es el ampersand utilizado al final. Si recordáis las clases de Linux, sabréis que el uso de este símbolo después de la llamada de una función hace que el proceso se ejecute en segundo plano y se mantenga en constante ejecución hasta que termine o sea matado.

Así pues esto

:|:& 

Es igual a esto

bomba | bomba & 

Y para rizar el rizo, una vez que la ejecución de la bomba lógica ha terminado, vuelve a llamarse a si misma volviendo a iniciar todo el ciclo y volviendo a tocar los cojones xD

Por lo cual, el código desgranado y explicado queda de una forma que es mucho mas sencillo de leer y entender.

bomba(){ 
  bomba | bomba & 
};bomba

Ahora bien, si hemos sigo tan tontos de auto hacernos un ataque DOS mediante bomba lógica o hemos sido infectados mediante por ejemplo un script en el init.d tal y como decía antes, ¿cómo podemos parar una de estas bombas?

Mitigación y solución a bombas lógicas

Como decía antes, parar una bomba de este tipo es algo bastante difícil debido a la recursividad y a que tienden a ir ocupando todos los bloques de memoria disponibles hasta saturar completamente toda la RAM. Una solución que podría llevarse a cabo sería en ejecutar un script que se dedicase a ir matando procesos aunque puede no ser posible si no hay posiciones vacías dentro de la tabla de procesos o espacio dentro de las estructuras de memoria.

Si realmente queremos prevenir un ataque de este tipo, la mejor solución sería limitar el número de procesos que pueden ejecutar los usuarios. En el kernel de Linux existe una variable llamada RLIMIT_NPROC, que indica la cantidad máxima de procesos que se puede ejecutar. Si un proceso intenta llamar a la función fork y el usuario que es propietario del proceso ya tiene igual o más procesos que los indicados en RLIMIT_NPROC la llamada a la función fallará y se evitará la ejecución lógica de la bomba.

Bueno pues nada chavales, ya habéis aprendido otra cosa mas sobre vuestros sistemas, si tenéis alguna duda podéis dejarme un comentario o escribirme a Twitter a través del banner de abajo. Si ponéis en práctica esta bomba lógica que sea sobre vuestro propio ordenador o sobre una máquina virtual, no seáis hijoputas y ataquéis a otras personas, si lo hacéis yo no quiero saber nada…

[xyz-ips snippet=»FAQS-GORKAMU-TW-YELLOW»]

 

Hala a mamarla!

Vagrant, PHPStorm y el nuevo hype de los entornos

Imagina que tienes a tu disposición una herramienta que te monta entornos de desarrollo y en la que no tienes que configurar nada. Imagina que te olvidas de instalar un Apache, un Mysql y PHP en tu ordenador cada vez que formateas. Imagina que ya no tienes que escribir más buildfiles y que puedes desplegar haciendo click en un botón. Imagina que tienes diferentes sistemas operativos y tecnologías instaladas a golpe de comando. Imagina que trabajas en equipo y todos usais el mismo entorno, el «pues a mi no me funciona» dejaría de existir. Imagina…

Parezco John Lennon copón, pero todo esto que te estas imaginando existe en forma de herramienta. Si alguna vez has sufrido lo anterior se te estará haciendo el culo pepsicola tan solo con imaginar. Hablo de Vagrant.

¿Qué es Vagrant?

Logo de Vagrant
Logo de Vagrant

Pues no es nada más y nada menos que una herramienta que cada vez están utilizando más empresas de software y que sirve para virtualizar entornos de desarrollo de una manera super rápida mediante ficheros de configuración. Estos entornos están configurados para que puedan ser usados con los servicios más populares de virtualización como VirtualBox, VMWare o AWS. Según su página web:

Create and configure lightweight, reproducible, and portable development environments.

El corazón de cada instancia es un ficherito que se llama Vagrantfile en el que defines la configuración mínima de la máquina, el sistema operativo y las herramientas que vamos a necesitar.

Una de las grandes ventajas del uso de Vagrant es su integración con herramientas de suministro como Chef y Puppet las cuales se basan en la creación de recetas o scripts que permiten alterar la configuración, instalar de software y mucho más durante el proceso de levantamiento del ambiente.

¿Cómo empiezo?

Para comenzar a utilizar Vagrant vas a necesitar un software de virtualización. Yo soy muy fan de VirtualBox así que el ejemplo irá por ahí, pero vamos, como hemos dicho más arriba, Vagrant no esta sujeto a un solo software. Para instalar VirtualBox escribimos lo siguiente en una terminal.

sudo apt-get install virtualbox-qt

Una vez haya terminado la instalación nos dirigimos a la página web de descarga de Vagrant y seleccionamos nuestro sistema operativo y arquitectura. En mi caso he elegido Linux de 32 bits, esto hará que se nos descargue un paquete .deb que podemos instalar con el gestor de software de Linux.

El proceso de instalación agregará la variable de entorno vagrant a nuestro PATH para que podamos utilizarlo por comandos y para probar que todo ha ido bien que mejor que mirar la versión instalada.

vagrant -v

Configurando Vagrant en PHPStorm

Una Box es la imagen base de una instancia de máquina virtual en la que ya viene preconfigurado todo lo que podamos necesitar, concepto básico en Vagrant. Actualmente ya hay cientos de Boxes predefinidas por lo que tan solo tendrás que buscarla en este listado e instalarla.

Empezando a configurar Vagrant en PHPStorm
Empezando a configurar Vagrant en PHPStorm

Para configurar Vagrant en PHPStorm tenemos que dirigirnos a Settings > Project Settings > Vagrant y se nos abrirá una ventana en la que tenemos que poner la ruta al ejecutable de Vagrant primero y después el directorio en el que estará alojada nuestra instancia. Si lo dejamos en blanco se entiende que se instalará en el directorio del proyecto.

Haciendo click en el botón de Añadir podemos definir nuestra primera box de Vagrant, por defecto PHPStorm nos proveerá con una Ubuntu Lucid Lynx de 32 bits, que no esta nada mal para comenzar, pero podemos definir cualquier otra box tan solo añadiendo su url.

Ubuntu Lucid Lynx por defecto
Ubuntu Lucid Lynx por defecto

Para iniciar Vagrant tendremos que hacer click en Tools > Vagrant > Init in Project Root. Esto creará nuestro VagrantFile, el fichero de configuración que tendrá los detalles de la máquina virtual como por ejemplo la configuración de la IP Virtual, el mapeo de puertos o la memoria a asignar entre otros…

Inicializando nuestro entorno virtual
Inicializando nuestro entorno virtual

Por último, si queremos levantar nuestra instancia de máquina virtual tenemos dos formas de hacerlo, o teclear lo siguiente en la terminal

vagrant up

o hacer click en Tools > Vagrant > Up.

Arrancando nuestro entorno virtual
Arrancando nuestro entorno virtual

Con esto ya tendremos nuestro entorno virtual levantado pero estará pelado. Posteriormente tendrás que instalar todo aquello que necesites como por ejemplo un servidor y una base de datos, a no ser que encuentres una box que incluya todo esto y mucho mas.

Si escribes en una terminal

vagrant ssh

podrás acceder por ssh al entorno recién creado para ir instalando a mano todos los programas o copiar tu proyecto mediante scp, aunque existen otras maneras de hacer un deploy.

Por otro lado, hay varios servicios como PuPHPet que se encargan, mediante una GUI, de generarte un Vagrantfile con todos los programas que puedas llegar a necesitar, es muy intuitivo, tan solo tienes que ir haciendo click en lo que te interese y dejar que el asistente te vaya guiando por cada uno de los pasos.

Para comenzar con Vagrant, esta primera aproximación no esta nada mal. Dejo para más adelante la creación de boxes personalizadas con PuPHPet y el deploy en entornos de desarrollo virtuales.

¡Hasta que volvamos a olernos!

Hablando de BD, como instalar MariaDB en Linux

Estamos a últimos de Agosto, hace calor, los más afortunados aún siguen de vacaciones y otros estamos con el síndrome postvacacional pero tarde o temprano hay que volver a la rutina y otra vez a coger ritmo de trabajo.

Llevo varios meses sin pasar por el blog, se que esta mal, que hay que sacar contenido de manera regular pero no puedo justificarlo, a mi me cuesta mucho escribir un blog, es lo que hay, pero para recompensar esta carencia le estoy dando un nuevo aspecto al blog y además en cada post que escribo intento contar algo que sea útil, por lo que de vez en cuando aporto una perlita a este desierto llamado blog.

En este artículo quiero enseñar cómo se instala MariaDB en un sistema Linux, pero antes de entrar en harina hay que explicar que es MariaDB sobre todo, no ya para los que trabajamos a diario con estas tecnologías que ya hemos oído hablar de ella, este artículo esta orientado a aquellos neófitos de las tecnologías web.

Para que se entienda, MariaDB es un proyecto derivado (fork) de MySQL. MySQL es una base de datos enormemente popular usada por páginas web y aplicaciones web. Si usáis o habéis usado un CMS como podría ser WordPress o Drupal tenéis que saber que sois o habéis sido usuarios de MySQL y posiblemente sin que lo supierais.
Pues MariaDB es lo mismo, es una base de datos orientada a páginas web y aplicaciones pero que a diferencia de su hermana MySQL, MariaDB posee una licencia GPL.

Existe mucha historia entre MySQL, MariaDB, Oracle… pero el tema del artículo no es ese, sino la instalación así que os dejo un enlace por si queréis documentaros más.

 

Principales SGBD
Principales SGBD

Como instalar MariaDB en Linux

El primer paso para tener este sistema gestor de base de datos corriendo en nuestro equipo es importar la llave con el comando apt-get key desde la terminal.


sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

Después tendremos que editar el archivo de repositorios con el comando
sudo nano /etc/apt/sources.list

Y añadir las siguientes líneas

# MariaDB 5.5 repository list - created 2012-10-27 21:11 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb http://mirror.aarnet.edu.au/pub/MariaDB/repo/5.5/ubuntu precise main
deb-src http://mirror.aarnet.edu.au/pub/MariaDB/repo/5.5/ubuntu precise main

Con esto ya podemos actualizar los paquetes de nuestro repositorio

sudo apt-get update

Y procedemos a la instalación de MariaDB

sudo apt-get install libdbi-perl libdbd-mysql-perl psmisc
sudo dpkg --install mysql-common_5.1.42-mariadb73_all.deb
sudo dpkg --install libmariadbclient16_5.1.42-mariadb73_amd64.deb libmysqlclient16_5.1.42-mariadb73_amd64.deb 
mariadb-client_5.1.42-mariadb73_all.deb mariadb-client-5.1_5.1.42-mariadb73_amd64.deb mariadb-server_5.1.42-mariadb73_all.deb 
mariadb-server-5.1_5.1.42-mariadb73_amd64.deb

Con estos comandos ya tendremos instalado MariaDB en nuestro pc, hay que decir que la instalación la he hecho en mi ordenador bajo la arquitectura que ofrece ElementaryOS, es decir, Ubuntu.

Para los vaguetes a los que no les apetezca leer toda esta parrafada, he subido un vídeo de un tipo en el que explica cómo instalar MariaDB en ElementaryOS pero a cambio os pido tweet, un +1 o un me gusta para poder desbloquear el video, los dioses de la programación os lo agradecerán.

[sociallocker]


[/sociallocker]

Esta información la he sacado de su documentación oficial y espero que os haya servido 😉

¡¡Hasta que volvamos a olernos!!

descarga