<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.caballero.co/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Felipe</id>
	<title>Wiki de Caballero - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.caballero.co/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Felipe"/>
	<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php/Special:Contributions/Felipe"/>
	<updated>2026-04-21T19:55:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Comando,_comprimir_cada_archivo_de_un_directorio_a_un_tar.gz&amp;diff=827</id>
		<title>Comando, comprimir cada archivo de un directorio a un tar.gz</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Comando,_comprimir_cada_archivo_de_un_directorio_a_un_tar.gz&amp;diff=827"/>
		<updated>2022-03-24T01:23:34Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
for i in $(ls -1)&lt;br /&gt;
do&lt;br /&gt;
echo compressing $i;&lt;br /&gt;
tar -czf $i.tar.gz $i;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O en una sola línea.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
for i in $(ls -1); do echo compressing $i; tar -czf $i.tar.gz $i; done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;br /&gt;
[[Category:Command]]&lt;br /&gt;
[[Category:Comando]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Comando,_comprimir_cada_archivo_de_un_directorio_a_un_tar.gz&amp;diff=826</id>
		<title>Comando, comprimir cada archivo de un directorio a un tar.gz</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Comando,_comprimir_cada_archivo_de_un_directorio_a_un_tar.gz&amp;diff=826"/>
		<updated>2022-03-24T01:18:45Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in $(ls -1)&lt;br /&gt;
do&lt;br /&gt;
echo compressing $i;&lt;br /&gt;
tar -czf $i.tar.gz $i;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O en una sola línea.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in $(ls -1); do echo compressing $i; tar -czf $i.tar.gz $i; done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;br /&gt;
[[Category:Command]]&lt;br /&gt;
[[Category:Comando]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Category:Comando&amp;diff=825</id>
		<title>Category:Comando</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Category:Comando&amp;diff=825"/>
		<updated>2022-03-24T01:16:34Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;Comando&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Comando&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=824</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=824"/>
		<updated>2022-03-24T01:04:06Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki is maintained by [http://felipe.caballero.co/ felipe.caballero.co]&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
# [[PHP, Log curl requests]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
# [[*nix, obtener la huella digital para SSH localmente]]&lt;br /&gt;
# [[Bash, cómo hacer una pregunta y responder acorde en un script]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
# [[macOS, desactivar Apretar y Mantener (función de mantener tecla presionada para variaciones de tecla)]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=823</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=823"/>
		<updated>2022-03-24T00:42:18Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
# [[PHP, Log curl requests]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
# [[*nix, obtener la huella digital para SSH localmente]]&lt;br /&gt;
# [[Bash, cómo hacer una pregunta y responder acorde en un script]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
# [[macOS, desactivar Apretar y Mantener (función de mantener tecla presionada para variaciones de tecla)]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=PHP,_Log_curl_requests&amp;diff=820</id>
		<title>PHP, Log curl requests</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=PHP,_Log_curl_requests&amp;diff=820"/>
		<updated>2020-12-18T22:05:30Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Option 1: Log to file.&lt;br /&gt;
&lt;br /&gt;
Adapted from https://stackoverflow.com/a/35363599/1071459&lt;br /&gt;
&lt;br /&gt;
Do this before curl_exec to log to file&lt;br /&gt;
*/&lt;br /&gt;
$file_location = &amp;#039;&amp;#039;; // CHANGE THIS&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_VERBOSE, true);&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_STDERR, fopen($file_location, &amp;#039;a+&amp;#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Option 2: Get output in in buffer and into a variable.&lt;br /&gt;
&lt;br /&gt;
From https://blog.kettle.io/debugging-curl-requests-in-php/&lt;br /&gt;
*/&lt;br /&gt;
# init (part 1 of 2)&lt;br /&gt;
ob_start();&lt;br /&gt;
$output_buffer = fopen(&amp;#039;php://output&amp;#039;, &amp;#039;w&amp;#039;);&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_VERBOSE, true);&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_STDERR, $output_buffer);&lt;br /&gt;
# end (part 1 of 2)&lt;br /&gt;
&lt;br /&gt;
$response = curl_exec($curl_handle);&lt;br /&gt;
&lt;br /&gt;
# init (part 2 of 2)&lt;br /&gt;
fclose($output_buffer);&lt;br /&gt;
$curl_verbose_debug = ob_get_clean();&lt;br /&gt;
# end (part 2 of 2)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=PHP,_Log_curl_requests&amp;diff=819</id>
		<title>PHP, Log curl requests</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=PHP,_Log_curl_requests&amp;diff=819"/>
		<updated>2020-12-18T22:03:14Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; /* Option 1: Log to file Next, adapted from https://stackoverflow.com/a/35363599/1071459 Do this before curl_exec to log to file */ $file_location = &amp;#039;&amp;#039;; //...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Option 1: Log to file&lt;br /&gt;
Next, adapted from https://stackoverflow.com/a/35363599/1071459&lt;br /&gt;
Do this before curl_exec to log to file&lt;br /&gt;
*/&lt;br /&gt;
$file_location = &amp;#039;&amp;#039;; // CHANGE THIS&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_VERBOSE, true);&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_STDERR, fopen($file_location, &amp;#039;a+&amp;#039;));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Option 2: Get output in in buffer and into a variable.&lt;br /&gt;
*/&lt;br /&gt;
# init (part 1 of 2), from https://blog.kettle.io/debugging-curl-requests-in-php/&lt;br /&gt;
ob_start();&lt;br /&gt;
$output_buffer = fopen(&amp;#039;php://output&amp;#039;, &amp;#039;w&amp;#039;);&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_VERBOSE, true);&lt;br /&gt;
curl_setopt($curl_handle, CURLOPT_STDERR, $output_buffer);&lt;br /&gt;
# end (part 1 of 2)&lt;br /&gt;
&lt;br /&gt;
$response = curl_exec($curl_handle);&lt;br /&gt;
&lt;br /&gt;
# init (part 2 of 2), from https://blog.kettle.io/debugging-curl-requests-in-php/&lt;br /&gt;
fclose($output_buffer);&lt;br /&gt;
$curl_verbose_debug = ob_get_clean();&lt;br /&gt;
# end (part 2 of 2)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=818</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=818"/>
		<updated>2020-12-18T21:58:27Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* PHP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
# [[PHP, Log curl requests]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
# [[*nix, obtener la huella digital para SSH localmente]]&lt;br /&gt;
# [[Bash, cómo hacer una pregunta y responder acorde en un script]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
# [[macOS, desactivar Apretar y Mantener (función de mantener tecla presionada para variaciones de tecla)]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=MacOS,_desactivar_Apretar_y_Mantener_(funci%C3%B3n_de_mantener_tecla_presionada_para_variaciones_de_tecla)&amp;diff=817</id>
		<title>MacOS, desactivar Apretar y Mantener (función de mantener tecla presionada para variaciones de tecla)</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=MacOS,_desactivar_Apretar_y_Mantener_(funci%C3%B3n_de_mantener_tecla_presionada_para_variaciones_de_tecla)&amp;diff=817"/>
		<updated>2020-08-18T17:21:34Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apple tiene la funcionalidad de al apretar y mantener apretada algunas teclas, se muestra un menú de variaciones de las teclas. Esta funcionalidad es lo mismo que se ve en iOS al mantener una tecla apretada.&lt;br /&gt;
[[File:ApplePressAndHoldEnabled example.png|300px|thumb|none|Ejemplo de ApplePressAndHold para la tecla &amp;#039;a&amp;#039;.]]&lt;br /&gt;
&lt;br /&gt;
Esta funcionalidad se puede desactivar para todo el sistema operativo o para aplicaciones. Es una funcionalidad útil si queremos escribir por ejemplo con acentos pero no tenemos un teclado en español. Pero para programar puede ser un dolor de cabeza. A continuación vemos como se desactiva.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Configurar globalmente, no lo he probado&lt;br /&gt;
# *********&lt;br /&gt;
# Desactivar&lt;br /&gt;
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false&lt;br /&gt;
# Reactivar&lt;br /&gt;
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool true&lt;br /&gt;
&lt;br /&gt;
# Para Atom&lt;br /&gt;
# *********&lt;br /&gt;
# Desactivar&lt;br /&gt;
defaults write com.github.atom ApplePressAndHoldEnabled -bool false&lt;br /&gt;
# Reactivar&lt;br /&gt;
defaults write com.github.atom ApplePressAndHoldEnabled -bool true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto se puede hacer para todas las aplicaciones. Para conocer el identificador de la aplicación (por ejemplo para Atom &amp;lt;code&amp;gt;com.github.atom&amp;lt;/code&amp;gt;), revisar el contenido del archivo Info.plist adentro de la carpeta de la aplicación. Por ejemplo, para Atom este archivo está ubicado por defecto en &amp;lt;code&amp;gt;/Applications/Atom.app/Contents/Info.plist&amp;lt;/code&amp;gt;, adentro de este archivo buscar:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
&amp;lt;string&amp;gt;com.github.atom&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Referencias:&lt;br /&gt;
- [https://stackoverflow.com/questions/39972335/how-do-i-press-and-hold-a-key-and-have-it-repeat-in-vscode visual studio code - How do I press and hold a key and have it repeat in VSCode? - Stack Overflow]&lt;br /&gt;
&lt;br /&gt;
[[Category:Atom]]&lt;br /&gt;
[[Category:macOS]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=MacOS,_desactivar_Apretar_y_Mantener_(funci%C3%B3n_de_mantener_tecla_presionada_para_variaciones_de_tecla)&amp;diff=816</id>
		<title>MacOS, desactivar Apretar y Mantener (función de mantener tecla presionada para variaciones de tecla)</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=MacOS,_desactivar_Apretar_y_Mantener_(funci%C3%B3n_de_mantener_tecla_presionada_para_variaciones_de_tecla)&amp;diff=816"/>
		<updated>2020-08-18T17:04:06Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;Apple tiene la funcionalidad de al apretar y mantener apretada algunas teclas, se muestra un menú de variaciones de las teclas. Esta funcionalidad es lo mismo que se ve en iO...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apple tiene la funcionalidad de al apretar y mantener apretada algunas teclas, se muestra un menú de variaciones de las teclas. Esta funcionalidad es lo mismo que se ve en iOS al mantener una tecla apretada.&lt;br /&gt;
[[File:ApplePressAndHoldEnabled example.png|300px|thumb|none|Ejemplo de ApplePressAndHold para la tecla &amp;#039;a&amp;#039;.]]&lt;br /&gt;
&lt;br /&gt;
Esta funcionalidad se puede desactivar para todo el sistema operativo o para aplicaciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para Atom&lt;br /&gt;
# *********&lt;br /&gt;
# Desactivar&lt;br /&gt;
defaults write com.github.atom ApplePressAndHoldEnabled -bool false&lt;br /&gt;
# Reactivar&lt;br /&gt;
defaults write com.github.atom ApplePressAndHoldEnabled -bool true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=File:ApplePressAndHoldEnabled_example.png&amp;diff=815</id>
		<title>File:ApplePressAndHoldEnabled example.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=File:ApplePressAndHoldEnabled_example.png&amp;diff=815"/>
		<updated>2020-08-18T16:57:03Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Example of ApplePressAndHoldEnabled for key &amp;#039;a&amp;#039;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Example of ApplePressAndHoldEnabled for key &amp;#039;a&amp;#039;.&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=814</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=814"/>
		<updated>2020-08-18T16:50:57Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
# [[*nix, obtener la huella digital para SSH localmente]]&lt;br /&gt;
# [[Bash, cómo hacer una pregunta y responder acorde en un script]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
# [[macOS, desactivar Apretar y Mantener (función de mantener tecla presionada para variaciones de tecla)]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=813</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=813"/>
		<updated>2020-05-15T20:20:22Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Actualización */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se usa [[#Manejo de paquetes]] leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Actualización===&lt;br /&gt;
Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&lt;br /&gt;
Un mini script para actualizar en caso que se esté usando un prefix:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm_prefix=$(npm config get prefix)&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
sudo npm i -g npm@latest&lt;br /&gt;
npm config set prefix $npm_prefix&lt;br /&gt;
unset npm_prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json (init [inicializar] el proyecto)===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===package.json vs package-lock.json===&lt;br /&gt;
Para una explicación de la diferencia entre package.json y package-lock.json, ver [https://stackoverflow.com/a/53578685/1071459 npm - Do I need both package-lock.json and package.json? - Stack Overflow].&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Este autoompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Versionamiento de proyectos==&lt;br /&gt;
Cuando se ejecuta &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt; se menciona el comando de ayuda &amp;lt;code&amp;gt;npm help json&amp;lt;/code&amp;gt; para saber más sobre los campos usados en package.json y en esa ayuda se menciona [https://semver.org/ Semantic Versioning 2.0.0 | Semantic Versioning] donde se habla de una estructura lógica y protocolar del nombre de las versiones de proyectos.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=812</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=812"/>
		<updated>2020-05-15T20:18:19Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Actualización */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se usa [[#Manejo de paquetes]] leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Actualización===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm_prefix=$(npm config get prefix)&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
sudo npm i -g npm@latest&lt;br /&gt;
npm config set prefix $npm_prefix&lt;br /&gt;
unset npm_prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json (init [inicializar] el proyecto)===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===package.json vs package-lock.json===&lt;br /&gt;
Para una explicación de la diferencia entre package.json y package-lock.json, ver [https://stackoverflow.com/a/53578685/1071459 npm - Do I need both package-lock.json and package.json? - Stack Overflow].&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Este autcompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Versionamiento de proyectos==&lt;br /&gt;
Cuando se ejecuta &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt; se menciona el comando de ayuda &amp;lt;code&amp;gt;npm help json&amp;lt;/code&amp;gt; para saber más sobre los campos usados en package.json y en esa ayuda se menciona [https://semver.org/ Semantic Versioning 2.0.0 | Semantic Versioning] donde se habla de una estructura lógica y protocolar del nombre de las versiones de proyectos.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=811</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=811"/>
		<updated>2020-05-15T20:16:37Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Manejo de paquetes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se usa [[#Manejo de paquetes]] leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Actualización===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm_prefix=$(npm config get prefix)&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
sudo npm i -g npm@latest&lt;br /&gt;
npm config set prefix $npm_prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json (init [inicializar] el proyecto)===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===package.json vs package-lock.json===&lt;br /&gt;
Para una explicación de la diferencia entre package.json y package-lock.json, ver [https://stackoverflow.com/a/53578685/1071459 npm - Do I need both package-lock.json and package.json? - Stack Overflow].&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Este auocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Versionamiento de proyectos==&lt;br /&gt;
Cuando se ejecuta &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt; se menciona el comando de ayuda &amp;lt;code&amp;gt;npm help json&amp;lt;/code&amp;gt; para saber más sobre los campos usados en package.json y en esa ayuda se menciona [https://semver.org/ Semantic Versioning 2.0.0 | Semantic Versioning] donde se habla de una estructura lógica y protocolar del nombre de las versiones de proyectos.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=SSH,_mostrando_las_claves_en_una_m%C3%A1quina_y_viendo_las_claves_con_SSH&amp;diff=810</id>
		<title>SSH, mostrando las claves en una máquina y viendo las claves con SSH</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=SSH,_mostrando_las_claves_en_una_m%C3%A1quina_y_viendo_las_claves_con_SSH&amp;diff=810"/>
		<updated>2020-03-14T22:03:21Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para mostrar las claves de forma fácil:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in $(ls /etc/ssh/*sa_key.pub); do ssh-keygen -l -f $i; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede ejecutar lo siguiente ([https://github.com/caballerofelipe/scripts/blob/master/ssh/ssh_fingerprint.sh ver script en GitHub]):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -sS https://raw.githubusercontent.com/caballerofelipe/scripts/master/ssh/ssh_fingerprint.sh | bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo que genera un resultado parecido al siguiente:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| Cipher  | Algo    | Fingerprint                                         |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| RSA     | MD5     | MD5:15:66:80:fd:79:d8:c0:92:e8:39:4a:bc:4e:c4:00:15 |&lt;br /&gt;
| RSA     | SHA-256 | SHA256:G+rKuLGk+8Z1oxUV3cox0baNsH0qGQWm/saWPr4qZMM  |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| ECDSA   | MD5     | MD5:f5:90:5c:03:2e:38:1b:c9:86:bd:86:47:5d:22:79:17 |&lt;br /&gt;
| ECDSA   | SHA-256 | SHA256:GGmuOzsG4EGeRV9KD1WK7tRf3nIc40k/5jRgbTZDpTo  |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| ED25519 | MD5     | MD5:d1:5a:04:56:37:f4:75:19:22:e6:e5:d7:41:fd:79:fa |&lt;br /&gt;
| ED25519 | SHA-256 | SHA256:QVdqYeVzvsP4n5yjuN3D2fu8hDhskOxQCQAV5f9QK7w  |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=SSH,_mostrando_las_claves_en_una_m%C3%A1quina_y_viendo_las_claves_con_SSH&amp;diff=809</id>
		<title>SSH, mostrando las claves en una máquina y viendo las claves con SSH</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=SSH,_mostrando_las_claves_en_una_m%C3%A1quina_y_viendo_las_claves_con_SSH&amp;diff=809"/>
		<updated>2020-03-14T21:52:10Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para mostrar las claves de forma fácil:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in $(ls /etc/ssh/*sa_key.pub); do ssh-keygen -l -f $i; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se puede ejecutar el siguiente código ([https://github.com/caballerofelipe/scripts/blob/master/ssh/ssh_fingerprint.sh ver el código en GitHub]):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -sS https://raw.githubusercontent.com/caballerofelipe/scripts/master/ssh/ssh_fingerprint.sh | bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo que genera un resultado parecido al siguiente:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| Cipher  | Algo    | Fingerprint                                         |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| RSA     | MD5     | MD5:15:66:80:fd:79:d8:c0:92:e8:39:4a:bc:4e:c4:00:15 |&lt;br /&gt;
| RSA     | SHA-256 | SHA256:G+rKuLGk+8Z1oxUV3cox0baNsH0qGQWm/saWPr4qZMM  |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| ECDSA   | MD5     | MD5:f5:90:5c:03:2e:38:1b:c9:86:bd:86:47:5d:22:79:17 |&lt;br /&gt;
| ECDSA   | SHA-256 | SHA256:GGmuOzsG4EGeRV9KD1WK7tRf3nIc40k/5jRgbTZDpTo  |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
| ED25519 | MD5     | MD5:d1:5a:04:56:37:f4:75:19:22:e6:e5:d7:41:fd:79:fa |&lt;br /&gt;
| ED25519 | SHA-256 | SHA256:QVdqYeVzvsP4n5yjuN3D2fu8hDhskOxQCQAV5f9QK7w  |&lt;br /&gt;
+---------+---------+-----------------------------------------------------+&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Bash,_c%C3%B3mo_hacer_una_pregunta_y_responder_acorde_en_un_script&amp;diff=808</id>
		<title>Bash, cómo hacer una pregunta y responder acorde en un script</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Bash,_c%C3%B3mo_hacer_una_pregunta_y_responder_acorde_en_un_script&amp;diff=808"/>
		<updated>2019-11-07T11:40:34Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;&amp;lt;source lang=&amp;quot;bash&amp;gt; echo &amp;#039;Pregunta? (s/N)&amp;#039; read runCommandQuestion # Next line sets default value to &amp;#039;N&amp;#039; to avoid warnings in the if [ -z $runCommandQuestion ] &amp;amp;&amp;amp; runCommandQu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;bash&amp;gt;&lt;br /&gt;
echo &amp;#039;Pregunta? (s/N)&amp;#039;&lt;br /&gt;
read runCommandQuestion&lt;br /&gt;
# Next line sets default value to &amp;#039;N&amp;#039; to avoid warnings in the if&lt;br /&gt;
[ -z $runCommandQuestion ] &amp;amp;&amp;amp; runCommandQuestion=N&lt;br /&gt;
if [ $runCommandQuestion == &amp;quot;y&amp;quot; ] || [ $runCommandQuestion == &amp;quot;Y&amp;quot; ]&lt;br /&gt;
    then&lt;br /&gt;
        runCommand=y;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;#039;Doing nothing...&amp;#039;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=807</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=807"/>
		<updated>2019-11-07T11:26:34Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* *nix (Sistemas tipo Unix) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
# [[*nix, obtener la huella digital para SSH localmente]]&lt;br /&gt;
# [[Bash, cómo hacer una pregunta y responder acorde en un script]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=806</id>
		<title>*nix, obtener la huella digital para SSH localmente</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=806"/>
		<updated>2019-11-05T20:54:53Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Simple==&lt;br /&gt;
Al momento de logearse con SSH se da información de la huella digital del servidor (&amp;quot;Fingerprint for the ED25519 key&amp;quot; como especificado por Cyberduck).&lt;br /&gt;
&lt;br /&gt;
Para obtener las claves locales se puede ejecutar (comandos probados en Ubuntu 16.04 LTS):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Opción 1: muestra resultado en SHA256&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
# Opción 2: muestra resultado en md5, este resultado sirve en Cyberduck&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -E md5 -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: No testeado, usar como inspiración.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# standard sshd config path&lt;br /&gt;
SSHD_CONFIG=/etc/ssh/sshd_config&lt;br /&gt;
&lt;br /&gt;
# helper functions&lt;br /&gt;
function tablize { &lt;br /&gt;
        awk &amp;#039;{printf(&amp;quot;| %-7s | %-7s | %-47s |\n&amp;quot;, $1, $2, $3)}&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
LINE=&amp;quot;+---------+---------+-------------------------------------------------+&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# header&lt;br /&gt;
echo $LINE&lt;br /&gt;
echo &amp;quot;Cipher&amp;quot; &amp;quot;Algo&amp;quot; &amp;quot;Fingerprint&amp;quot; | tablize&lt;br /&gt;
echo $LINE&lt;br /&gt;
&lt;br /&gt;
# fingerprints&lt;br /&gt;
for host_key in $(awk &amp;#039;/^HostKey/ {sub(/^HostKey\s+/,&amp;quot;&amp;quot;);print $0&amp;quot;.pub&amp;quot;};&amp;#039; $SSHD_CONFIG); do&lt;br /&gt;
        cipher=$(echo $host_key | sed -r &amp;#039;s/^.*ssh_host_([^_]+)_key\.pub$/\1/&amp;#039;| tr &amp;#039;[a-z]&amp;#039; &amp;#039;[A-Z]&amp;#039;)&lt;br /&gt;
        if [[ -f &amp;quot;$host_key&amp;quot; ]]; then&lt;br /&gt;
                md5=$(ssh-keygen -l -f $host_key | awk &amp;#039;{print $2}&amp;#039;)&lt;br /&gt;
                sha256=$(awk &amp;#039;{print $2}&amp;#039; $host_key | base64 -d | sha256sum -b | awk &amp;#039;{print $1}&amp;#039; | xxd -r -p | base64)&lt;br /&gt;
&lt;br /&gt;
                echo $cipher MD5 $md5 | tablize&lt;br /&gt;
                echo $cipher SHA-256 $sha256 | tablize&lt;br /&gt;
                echo $LINE&lt;br /&gt;
        fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Unix]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: SSH]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=805</id>
		<title>*nix, obtener la huella digital para SSH localmente</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=805"/>
		<updated>2019-11-05T20:53:06Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Simple==&lt;br /&gt;
Al momento de logearse con SSH se da información de la huella digital del servidor (&amp;quot;Fingerprint for the ED25519 key&amp;quot; como especificado por Cyberduck).&lt;br /&gt;
&lt;br /&gt;
Para obtener las claves locales se puede ejecutar (comandos probados en Ubuntu 16.04 LTS):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Opción 1: muestra resultado en SHA256&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
# Opción 2: muestra resultado en md5, este resultado sirve en Cyberduck&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -E md5 -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# standard sshd config path&lt;br /&gt;
SSHD_CONFIG=/etc/ssh/sshd_config&lt;br /&gt;
&lt;br /&gt;
# helper functions&lt;br /&gt;
function tablize { &lt;br /&gt;
        awk &amp;#039;{printf(&amp;quot;| %-7s | %-7s | %-47s |\n&amp;quot;, $1, $2, $3)}&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
LINE=&amp;quot;+---------+---------+-------------------------------------------------+&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# header&lt;br /&gt;
echo $LINE&lt;br /&gt;
echo &amp;quot;Cipher&amp;quot; &amp;quot;Algo&amp;quot; &amp;quot;Fingerprint&amp;quot; | tablize&lt;br /&gt;
echo $LINE&lt;br /&gt;
&lt;br /&gt;
# fingerprints&lt;br /&gt;
for host_key in $(awk &amp;#039;/^HostKey/ {sub(/^HostKey\s+/,&amp;quot;&amp;quot;);print $0&amp;quot;.pub&amp;quot;};&amp;#039; $SSHD_CONFIG); do&lt;br /&gt;
        cipher=$(echo $host_key | sed -r &amp;#039;s/^.*ssh_host_([^_]+)_key\.pub$/\1/&amp;#039;| tr &amp;#039;[a-z]&amp;#039; &amp;#039;[A-Z]&amp;#039;)&lt;br /&gt;
        if [[ -f &amp;quot;$host_key&amp;quot; ]]; then&lt;br /&gt;
                md5=$(ssh-keygen -l -f $host_key | awk &amp;#039;{print $2}&amp;#039;)&lt;br /&gt;
                sha256=$(awk &amp;#039;{print $2}&amp;#039; $host_key | base64 -d | sha256sum -b | awk &amp;#039;{print $1}&amp;#039; | xxd -r -p | base64)&lt;br /&gt;
&lt;br /&gt;
                echo $cipher MD5 $md5 | tablize&lt;br /&gt;
                echo $cipher SHA-256 $sha256 | tablize&lt;br /&gt;
                echo $LINE&lt;br /&gt;
        fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Unix]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: SSH]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=804</id>
		<title>*nix, obtener la huella digital para SSH localmente</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=804"/>
		<updated>2019-11-05T19:52:29Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Al momento de logearse con SSH se da información de la huella digital del servidor (&amp;quot;Fingerprint for the ED25519 key&amp;quot; como especificado por Cyberduck).&lt;br /&gt;
&lt;br /&gt;
Para obtener las claves locales se puede ejecutar (comandos probados en Ubuntu 16.04 LTS):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Opción 1: muestra resultado en SHA256&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
# Opción 2: muestra resultado en md5, este resultado sirve en Cyberduck&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -E md5 -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Unix]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: SSH]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=803</id>
		<title>*nix, obtener la huella digital para SSH localmente</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=*nix,_obtener_la_huella_digital_para_SSH_localmente&amp;diff=803"/>
		<updated>2019-11-05T19:48:09Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;Al momento de logearse con SSH se da información de la huella digital del servidor (&amp;quot;Fingerprint for the ED25519 key&amp;quot; como especificado por Cyberduck).  Para obtener las clav...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Al momento de logearse con SSH se da información de la huella digital del servidor (&amp;quot;Fingerprint for the ED25519 key&amp;quot; como especificado por Cyberduck).&lt;br /&gt;
&lt;br /&gt;
Para obtener las claves locales se puede ejecutar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# Opción 1: muestra resultado en SHA256&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
# Opción 2: muestra resultado en md5, este resultado sirve en Cyberduck&lt;br /&gt;
for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -E md5 -f &amp;quot;$f&amp;quot;; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=802</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=802"/>
		<updated>2019-11-05T19:45:12Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* *nix (Sistemas tipo Unix) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
# [[*nix, obtener la huella digital para SSH localmente]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Ejemplo_de_HTML5_v%C3%A1lido&amp;diff=801</id>
		<title>Ejemplo de HTML5 válido</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Ejemplo_de_HTML5_v%C3%A1lido&amp;diff=801"/>
		<updated>2019-10-17T14:32:30Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Código minimalista */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Este es un ejemplo de HTML5 validado usando el [http://validator.w3.org/ &amp;#039;&amp;#039;validador&amp;#039;&amp;#039;] de [http://www.w3.org/ W3C (World Wide Web Consortium)].&lt;br /&gt;
&lt;br /&gt;
Se pueden ver [[HTML5, Algunos tips]] para trabajar con html5.&lt;br /&gt;
&lt;br /&gt;
==Código==&lt;br /&gt;
Código de ejemplo que valida usando [https://validator.w3.org/ The W3C Markup Validation Service].&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//*****************************************************************&lt;br /&gt;
//	By Flat Estrategia Digital &amp;lt;http://www.flat.cl/&amp;gt;&lt;br /&gt;
//	&amp;lt;contacto@flat.cl&amp;gt;&lt;br /&gt;
//	Created By: Felipe Caballero, Nov 15, 2013&lt;br /&gt;
//		Descripción:&lt;br /&gt;
//	Esto es un ejemplo de html5 que valida usando el validador de W3:&lt;br /&gt;
//		https://validator.w3.org/&lt;br /&gt;
//*****************************************************************&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
	&amp;lt;head&amp;gt;&lt;br /&gt;
		&amp;lt;!-- título --&amp;gt;&lt;br /&gt;
		&amp;lt;title&amp;gt;El título&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- meta --&amp;gt;&lt;br /&gt;
		&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Flat Estrategia Ditial &amp;lt;http://www.flat.cl/&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- archivo de javascript externo ubicado en el mismo directorio que este html --&amp;gt;&lt;br /&gt;
		&amp;lt;script src=&amp;quot;javascript.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- javascript embebido --&amp;gt;&lt;br /&gt;
		&amp;lt;script&amp;gt;&lt;br /&gt;
			alert(&amp;#039;Cargando página...&amp;#039;); // Muestra una alerta al cargar esta línea de código&lt;br /&gt;
		&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- archivo de css externo ubicado en el mismo directorio que este html  --&amp;gt;&lt;br /&gt;
		&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css.css&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- css embebido --&amp;gt;&lt;br /&gt;
		&amp;lt;style&amp;gt;&lt;br /&gt;
			h1 {&lt;br /&gt;
				color: red;&lt;br /&gt;
			}&lt;br /&gt;
		&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h1&amp;gt;Esto es un h1&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- noscript para mostrar contenido si no está activado el JavaScript:&lt;br /&gt;
               para funcionar tiene que tener adentro uno de los siguientes tags:&lt;br /&gt;
               &amp;quot;p&amp;quot;, &amp;quot;h1&amp;quot;, &amp;quot;h2&amp;quot;, &amp;quot;h3&amp;quot;, &amp;quot;h4&amp;quot;, &amp;quot;h5&amp;quot;, &amp;quot;h6&amp;quot;, &amp;quot;div&amp;quot;, &amp;quot;pre&amp;quot;, &amp;quot;address&amp;quot;, &amp;quot;fieldset&amp;quot;, &amp;quot;ins&amp;quot;, &amp;quot;del&amp;quot;.&lt;br /&gt;
               Estos tags son elementos &amp;quot;display: block&amp;quot;.&lt;br /&gt;
		--&amp;gt;&lt;br /&gt;
		&amp;lt;noscript&amp;gt;&amp;lt;h1&amp;gt;Esto NO aparece en un browser con javascript activo&amp;lt;/h1&amp;gt;&amp;lt;/noscript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Código minimalista==&lt;br /&gt;
Código &amp;#039;&amp;#039;&amp;#039;minimalista&amp;#039;&amp;#039;&amp;#039; de ejemplo que valida usando [https://validator.w3.org/ The W3C Markup Validation Service].&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
	&amp;lt;head&amp;gt;&lt;br /&gt;
		&amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;title&amp;gt;El título&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
		Esto es el body.&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Atributos especiales==&lt;br /&gt;
===lang===&lt;br /&gt;
Se puede especificar el idioma en la etiqueta html.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;html lang=&amp;quot;es&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Atributo name para &amp;amp;lt;a&amp;amp;gt;===&lt;br /&gt;
El atributo name para anchor no está soportado por html5, para eso hay que usar id. El id en cualquier etiqueta.&lt;br /&gt;
&lt;br /&gt;
===img, alt===&lt;br /&gt;
Es importante agregar alt a img para que valide.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://www.w3schools.com/html/ HTML Tutorial] en W3Schools.&lt;br /&gt;
&lt;br /&gt;
[[Category:html]]&lt;br /&gt;
[[Category:html5]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=800</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=800"/>
		<updated>2019-09-02T17:21:47Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate&amp;diff=799</id>
		<title>Git, Apache and HTTPS with a free certificate</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate&amp;diff=799"/>
		<updated>2019-08-30T21:31:55Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Git using the Self-Signed Certificate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
* Ubuntu CLI understanding&lt;br /&gt;
* Git knowledge&lt;br /&gt;
* Ubuntu, this was tested using Ubuntu 16&lt;br /&gt;
* Apache 2&lt;br /&gt;
&lt;br /&gt;
==Git using Apache==&lt;br /&gt;
This is a basic setup to allow Git on a server to be accessible via HTTP (no HTTPS yet, read further).&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
# Install Apache &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install apache2 apache2-utils&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Enable necessary modules &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
a2enmod cgi alias env&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;(Optional)&amp;#039;&amp;#039;&amp;#039; Add user(s) to the htpasswd file. This step is optional if this setup is going to serve only anonymous repository (pull/fetch). However if you want to push or if you want to allow to only obtain a repository using user/pass combo this step is necessary (see next step).&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Create file and add a user&lt;br /&gt;
# -c = create file&lt;br /&gt;
# The file is stored in /git/ the git repository for this specific setup&lt;br /&gt;
htpasswd -c /git/.htpasswd [user name]&lt;br /&gt;
# This will ask for a password&lt;br /&gt;
&lt;br /&gt;
# Add a user to the file&lt;br /&gt;
htpasswd /git/.htpasswd [user name]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# To allow to obtain a git repository using http, add the following to the apache2.conf &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Path to the Git directory (inside the OS)&lt;br /&gt;
SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
# Allows all projects to be served&lt;br /&gt;
# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
# Defines the URL path where git is located, as seen via http&lt;br /&gt;
# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
# Access configuration&lt;br /&gt;
&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
	# Enable Basic HTTP Authentication&lt;br /&gt;
	AuthType Basic&lt;br /&gt;
	AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
	AuthUserFile /git/.htpasswd&lt;br /&gt;
	# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
	# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
	Require valid-user&lt;br /&gt;
	# END Enable Basic HTTP Authentication&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional info:&lt;br /&gt;
* [https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP Git - Smart HTTP]&lt;br /&gt;
* [https://git-scm.com/docs/git-http-backend Git - git-http-backend Documentation]&lt;br /&gt;
* For more info on htpasswd, read the docs.&lt;br /&gt;
&lt;br /&gt;
===File permissions===&lt;br /&gt;
For Git push to work Apache must be able to write in the git repositories. There are several ways to do this but I can think of two easy ones:&lt;br /&gt;
* Change the Git repositories group to www-data and allow group to write.&lt;br /&gt;
* Change the Git repositories to a group created by you and add the user www-data to this group.&lt;br /&gt;
&lt;br /&gt;
I prefer the second way because it allows more users to be part of a group and it feels more controllable and ordered.&lt;br /&gt;
&lt;br /&gt;
==Self signed Certificate==&lt;br /&gt;
===How Certificates work===&lt;br /&gt;
Here are some videos on how certificates and SSL (TLS) work:&lt;br /&gt;
{{#ev:youtube|JCvPnwpWVUQ|400}}&lt;br /&gt;
{{#ev:youtube|iQsKdtjwtYI|400}}&lt;br /&gt;
{{#ev:youtube|earzZpX-PiY|400}}&lt;br /&gt;
&lt;br /&gt;
Additional info:&lt;br /&gt;
* [https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/ What is the SSL Certificate Chain? - DNSimple Help], explains how the certificate chain works.&lt;br /&gt;
* [https://www.symantec.com/connect/blogs/types-ssl-certificates-choose-right-one Types of SSL certificates – choose the right one | Symantec Connect], explains the different certificate types that can be used.&lt;br /&gt;
* [https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them DER vs. CRT vs. CER vs. PEM Certificates and How To Convert Them], explains different file types for certificates.&lt;br /&gt;
* [https://en.wikipedia.org/wiki/X.509 X.509 - Wikipedia], X.509 public key certificate standard.&lt;br /&gt;
&lt;br /&gt;
===Why certificates are needed===&lt;br /&gt;
To allow git to be served using https the server must have a certificate. Now, this certificate can be signed by a root Certificate Authority (CA), an Intermediate Cerfificate Authority (validated by a root CA) or a self signed certificate. To get a root or intermediate CA Certificate you must contact a company to give you one and pay for it. You could also create your own root or intermediate CA but this outside the scope of this article.&lt;br /&gt;
&lt;br /&gt;
===How to create a Self-Signed Certificate===&lt;br /&gt;
&amp;#039;&amp;#039;Disclaimer: I am not an expert in OpenSSL, these are my tests and I might have made wrong assumptions. Please read the OpenSSL docs.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This is done on an Ubuntu 16 but you could do this in another system, you do need OpenSSl. The process is actually very simple.&lt;br /&gt;
&lt;br /&gt;
Here are three ways of creating a Self-Signed Certificate:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1 - One line&lt;br /&gt;
# ********************&lt;br /&gt;
# This command outputs two files, the private key and the certificate. The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# -nodes = not encrypted, if you leave this out, Apache will ask for a password when using the private key&lt;br /&gt;
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 2 - Two steps&lt;br /&gt;
# ********************&lt;br /&gt;
# First the key is generated and second the certificate is generated using the generated key.&lt;br /&gt;
#&lt;br /&gt;
# Step 1: Generate the Private Key&lt;br /&gt;
# Step 1 - Option 1) -des3 encrypts the key, Apache will ask for a password when using the private key&lt;br /&gt;
openssl genrsa -des3 -out selfsigned.key 2048&lt;br /&gt;
# Step 1 - Option 2) No key encryption&lt;br /&gt;
openssl genrsa -out selfsigned.key 2048&lt;br /&gt;
#&lt;br /&gt;
# Step 2&lt;br /&gt;
# The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
openssl req -x509 -new -key selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 3 - Three steps&lt;br /&gt;
# ********************&lt;br /&gt;
# First the key is generated, then a signing request is generated and finally the certificate is generated using the generated key and the signing request.&lt;br /&gt;
#&lt;br /&gt;
# Step 1: Generate the Private Key&lt;br /&gt;
# Step 1 - Option 1) -des3 encrypts the key, Apache will ask for a password when using the private key&lt;br /&gt;
openssl genrsa -des3 -out selfsigned.key 2048&lt;br /&gt;
# Step 1 - Option 2) No key encryption&lt;br /&gt;
openssl genrsa -out selfsigned.key 2048&lt;br /&gt;
#&lt;br /&gt;
# Step 2: Generate the Signing Request (.csr = Certificate Signing Request)&lt;br /&gt;
openssl req -new -key selfsigned.key -out selfsigned.csr&lt;br /&gt;
#&lt;br /&gt;
# Step 3: Generate the certificate using the Private Key and the Signing Request&lt;br /&gt;
# The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
openssl x509 -req -in selfsigned.csr -signkey selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Check the certificate (a.k.a. see what&amp;#039;s inside)&lt;br /&gt;
# ********************&lt;br /&gt;
openssl x509 -text -noout -in selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html IBM Knowledge Center]&lt;br /&gt;
* [https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/ Creating Your Own SSL Certificate Authority (and Dumping Self Signed Certs) | The Data Center Overlords]&lt;br /&gt;
&lt;br /&gt;
===More info on how to create a root Certificate and how to create a Certificate Authority===&lt;br /&gt;
* [https://blog.didierstevens.com/2008/12/30/howto-make-your-own-cert-with-openssl/ Howto: Make Your Own Cert With OpenSSL | Didier Stevens]&lt;br /&gt;
* [https://www.youtube.com/watch?v=zwnEmLx2LRs Howto: Make Your Own Cert With OpenSSL - YouTube], this are the steps from the previous link put in a video&lt;br /&gt;
* [https://jamielinux.com/docs/openssl-certificate-authority/index.html OpenSSL Certificate Authority &amp;amp;mdash; Jamie Nguyen]&lt;br /&gt;
&lt;br /&gt;
==Configuring Apache to use https==&lt;br /&gt;
This are the steps to allow Apache to use https:&lt;br /&gt;
# Pick a location for the certificates and move them there (they could also be linked or copied), the location used in this example will be &amp;lt;code&amp;gt;/etc/apache2/ssl&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Enable SSL module for Apache: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;a2enmod ssl&amp;lt;/source&amp;gt;&lt;br /&gt;
# Edit /etc/apache2/sites-available/default-ssl.conf, change (or add) the following lines to point to the certificate and the private key: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	# Certificate file&lt;br /&gt;
	SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
	# Private key&lt;br /&gt;
	SSLCertificateKeyFile	/etc/apache2/ssl/selfsigned.key &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Enable the default ssl site: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;a2ensite default-ssl.conf&amp;lt;/source&amp;gt;&lt;br /&gt;
# Restart Apache: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;service apache2 restart&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* default-ssl.conf configures a site using the certificate but you must be careful to show only what you want to show, for instance copy some of the configuration from the 000-default.conf like DocumentRoot and additional custom information.&lt;br /&gt;
* This is the default default-ssl.conf file with the changes made in the previous instructions:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* [https://www.maketecheasier.com/apache-server-ssl-support/ Setting up Apache Server with SSL Support on Ubuntu]&lt;br /&gt;
* [https://www.digicert.com/ssl-certificate-installation-apache.htm SSL Certificate Installation - Apache Server | DigiCert.com]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YR6-6XUC3sY Configuring HTTPS or SSL on apache web server - YouTube]&lt;br /&gt;
* [https://www.youtube.com/watch?v=m06TttS2ZAM How to Install SSL Certificate on Linux Apache Web Server - YouTube]&lt;br /&gt;
&lt;br /&gt;
Forcing the right protocol:&lt;br /&gt;
* https://askubuntu.com/questions/643037/how-to-enable-tls-1-2-in-apache&lt;br /&gt;
* https://tecadmin.net/enable-tls-in-modssl-and-apache/&lt;br /&gt;
* https://serverfault.com/questions/314858/how-to-enable-tls-1-1-and-1-2-with-openssl-and-apache&lt;br /&gt;
&lt;br /&gt;
==Git using the Self-Signed Certificate==&lt;br /&gt;
&lt;br /&gt;
If you use a valid Certificate, that is checkable by a Root authority, you probably don’t need to follow these steps. However, if you use a self-signed certificate Git won’t pull or push since it won’t trust the certificate given by the server.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Server&amp;#039;&amp;#039;&amp;#039; is where Apache is running with Git. &amp;#039;&amp;#039;&amp;#039;Client&amp;#039;&amp;#039;&amp;#039; is the computer where we want to use Git connected via https to the server.&lt;br /&gt;
&lt;br /&gt;
To avoid the above problem we will transfer manually the certificate to the computer where we want to connect using Git. Then we will configure Git to use the certificate. The usual flow to obtain a Git repository is to use clone, we will not use this flow as Git won&amp;#039;t clone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;font-weight: bold; color: salmon;&amp;quot;&amp;gt;Important&amp;lt;/h3&amp;gt;&lt;br /&gt;
* When generating the certificate in the previous steps for &amp;#039;&amp;#039;&amp;#039;Common Name (e.g. server FQDN or YOUR name)&amp;#039;&amp;#039;&amp;#039; use the server&amp;#039;s IP or domain. If you&amp;#039;re using a dynamic IP you should probably use some kind of dynamic DNS to assign a domain to your server so your certificate will always match the same domain.&lt;br /&gt;
* The per server syntax (&amp;lt;code&amp;gt;git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&amp;lt;/code&amp;gt;) is not supported by all Git versions. If your version doesn&amp;#039;t support it you can go in one of tow ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# Add a configuration parameter to the git command every time communication with the server is needed: -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot;&lt;br /&gt;
# For instance&lt;br /&gt;
git -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot; pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# Use your certificate for all verifications&lt;br /&gt;
# Inside the git repository do&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# I haven&amp;#039;t tried but...&lt;br /&gt;
# You might also want to check the configuration variable http.sslCAPath, it might have a directory for multiple certificates.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Way 1===&lt;br /&gt;
# Transfer the certificate from the server to the client. The file ending with crt. &amp;#039;&amp;#039;&amp;#039;Do not transfer the Private Key&amp;#039;&amp;#039;&amp;#039;, this key is meant for the server only. Try using a secure connection to transfer it, for instance use ssh. You can place the certificate wherever you want, to avoid headaches place it outside the git project you will next create, it can be done but it&amp;#039;s a pain.&lt;br /&gt;
# Create an empty repository on the client.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git init [name]&lt;br /&gt;
# name is the name of the repository, the same name that would be used with git clone&lt;br /&gt;
# You could use whatever but perhaps it&amp;#039;s a good idea to use the same name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Add the remote &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git remote add origin https://servername/git/givenRepository&lt;br /&gt;
# serverName could also be an IP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Configure Git to use this certificate to communicate with the server. You can do this two different ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# This configures the CA for every remote&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# This configures the CA only to be used with https://servername/&lt;br /&gt;
git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Prepare your client&amp;#039;s Git repository:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git pull origin master&lt;br /&gt;
# Enter user/pass if needed&lt;br /&gt;
&lt;br /&gt;
git push --set-upstream origin master &lt;br /&gt;
# Enter user/pass if needed&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Use the client&amp;#039;s repository as you would normally do&lt;br /&gt;
&lt;br /&gt;
===Way 2===&lt;br /&gt;
# Transfer the certificate from the server to the client. The file ending with crt. &amp;#039;&amp;#039;&amp;#039;Do not transfer the Private Key&amp;#039;&amp;#039;&amp;#039;, this key is meant for the server only. Try using a secure connection to transfer it, for instance use ssh. You can place the certificate wherever you want, to avoid headaches place it outside the git project you will next create, it can be done but it&amp;#039;s a pain.&lt;br /&gt;
# Clone but pass a configuration option in the cloning process:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot; clone https://servername/git/givenRepository&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Configure Git to use this certificate to communicate with the server. You can do this two different ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# This configures the CA for every remote&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# This configures the CA only to be used with https://servername/&lt;br /&gt;
git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* https://stackoverflow.com/questions/11621768/how-can-i-make-git-accept-a-self-signed-certificate&lt;br /&gt;
* https://stackoverflow.com/questions/23807313/adding-self-signed-ssl-certificate-without-disabling-authority-signed-ones&lt;br /&gt;
* https://stackoverflow.com/questions/9072376/configure-git-to-accept-a-particular-self-signed-server-certificate-for-a-partic&lt;br /&gt;
&lt;br /&gt;
==Git using only https (and not http)==&lt;br /&gt;
To only allow access Git in a secure way (encrypted using https) remove all git directives from the file &amp;lt;code&amp;gt;/etc/apache2/apache2.conf&amp;lt;/code&amp;gt; and add them to the file &amp;lt;code&amp;gt;/etc/apache2/sites-available/default-ssl.conf&amp;lt;/code&amp;gt;. The file should look something like this:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# Added part&lt;br /&gt;
		# Git&lt;br /&gt;
&lt;br /&gt;
		# Path to the Git directory (inside the OS)&lt;br /&gt;
		SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
		# Allows all projects to be served&lt;br /&gt;
		# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
		SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
		# Defines the URL path where git is located, as seen via http&lt;br /&gt;
		# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
		ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
		# Access configuration&lt;br /&gt;
		&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
			# Enable Basic HTTP Authentication&lt;br /&gt;
			AuthType Basic&lt;br /&gt;
			AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
			AuthUserFile /git/.htpasswd&lt;br /&gt;
			# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
			# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
		#	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
			Require valid-user&lt;br /&gt;
			# END Enable Basic HTTP Authentication&lt;br /&gt;
		&amp;lt;/Files&amp;gt;&lt;br /&gt;
		# END Git&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Client based authentication using certificates in Apache==&lt;br /&gt;
===Apache configuration===&lt;br /&gt;
To force Apache to serve only to clients that have a valid certificate add the following lines to &amp;lt;code&amp;gt;/etc/apache2/sites-available/default-ssl.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
	# To allow certificate based authentication for clients&lt;br /&gt;
	# Clients must have a certificate to login&lt;br /&gt;
	SSLCACertificateFile /etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
	SSLVerifyClient require&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file should look like this:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# Added part&lt;br /&gt;
		# Git&lt;br /&gt;
&lt;br /&gt;
		# Path to the Git directory (inside the OS)&lt;br /&gt;
		SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
		# Allows all projects to be served&lt;br /&gt;
		# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
		SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
		# Defines the URL path where git is located, as seen via http&lt;br /&gt;
		# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
		ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
		# Access configuration&lt;br /&gt;
		&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
			# Enable Basic HTTP Authentication&lt;br /&gt;
			AuthType Basic&lt;br /&gt;
			AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
			AuthUserFile /git/.htpasswd&lt;br /&gt;
			# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
			# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
		#	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
			Require valid-user&lt;br /&gt;
			# END Enable Basic HTTP Authentication&lt;br /&gt;
		&amp;lt;/Files&amp;gt;&lt;br /&gt;
		# END Git&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Client certificate===&lt;br /&gt;
The client certificate generation works like this:&lt;br /&gt;
* Setup a root CA key and certificate, in our case the file selfsigned.crt acts as a root CA.&lt;br /&gt;
* The client generates his private key and certificate request, since we control both the server and the client this can be done in either machine.&lt;br /&gt;
* Generate the client certificate using the cliente certificate request, the root certificate and the root key.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generate the client key&lt;br /&gt;
openssl genrsa -out client.key 2048&lt;br /&gt;
# Generate the client csr (Certificate Signing Request)&lt;br /&gt;
openssl req -new -key client.key -out client.csr&lt;br /&gt;
# Generate the client certificate, change serial number for every new certificate&lt;br /&gt;
openssl x509 -req -in client.csr -CA selfsigned.crt -CAkey selfsigned.key -set_serial 01 -out client.crt&lt;br /&gt;
&lt;br /&gt;
# Generate a p12 file, this can be used for a browser but will probably have to be installed in the OS or the Browser&lt;br /&gt;
openssl pkcs12 -export -out client.p12 -inkey client.key -in client.crt -chain -CAfile ../oneline/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
* [http://stuff-things.net/2015/09/28/configuring-apache-for-ssl-client-certificate-authentication/ Configuring Apache for SSL Client Certificate Authentication - Stuff… And Things…]&lt;br /&gt;
* [https://stackoverflow.com/a/24543642/1071459 How to do client certificate authentication with Apache - Stack Overflow]&lt;br /&gt;
&lt;br /&gt;
==Git using a Client Certificate==&lt;br /&gt;
If we configured Apache for client based authentication then Git needs a certificate to use to communicate with Apache.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
# Transfer the client key and certificate to the client. This means client.key and client.csr.&lt;br /&gt;
# Follow steps from the previos section: [[#Git using the Self-Signed Certificate|Git using the Self-Signed Certificate]].&lt;br /&gt;
# Configure Git to use the transferred files: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git config http.sslCert [client os location]/client.crt&lt;br /&gt;
git config http.sslKey [client os location]/client.key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 16.04 | DigitalOcean]&lt;br /&gt;
* [http://ubuntuwiki.net/index.php/Apache,_Digest_authentication Apache, Digest authentication - Ubuntuwiki.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:git]]&lt;br /&gt;
[[Category:http]]&lt;br /&gt;
[[Category:https]]&lt;br /&gt;
[[Category:apache]]&lt;br /&gt;
[[Category:web]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate&amp;diff=798</id>
		<title>Git, Apache and HTTPS with a free certificate</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate&amp;diff=798"/>
		<updated>2019-08-30T21:06:48Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Configuring Apache to use https */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
* Ubuntu CLI understanding&lt;br /&gt;
* Git knowledge&lt;br /&gt;
* Ubuntu, this was tested using Ubuntu 16&lt;br /&gt;
* Apache 2&lt;br /&gt;
&lt;br /&gt;
==Git using Apache==&lt;br /&gt;
This is a basic setup to allow Git on a server to be accessible via HTTP (no HTTPS yet, read further).&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
# Install Apache &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install apache2 apache2-utils&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Enable necessary modules &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
a2enmod cgi alias env&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;(Optional)&amp;#039;&amp;#039;&amp;#039; Add user(s) to the htpasswd file. This step is optional if this setup is going to serve only anonymous repository (pull/fetch). However if you want to push or if you want to allow to only obtain a repository using user/pass combo this step is necessary (see next step).&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Create file and add a user&lt;br /&gt;
# -c = create file&lt;br /&gt;
# The file is stored in /git/ the git repository for this specific setup&lt;br /&gt;
htpasswd -c /git/.htpasswd [user name]&lt;br /&gt;
# This will ask for a password&lt;br /&gt;
&lt;br /&gt;
# Add a user to the file&lt;br /&gt;
htpasswd /git/.htpasswd [user name]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# To allow to obtain a git repository using http, add the following to the apache2.conf &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Path to the Git directory (inside the OS)&lt;br /&gt;
SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
# Allows all projects to be served&lt;br /&gt;
# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
# Defines the URL path where git is located, as seen via http&lt;br /&gt;
# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
# Access configuration&lt;br /&gt;
&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
	# Enable Basic HTTP Authentication&lt;br /&gt;
	AuthType Basic&lt;br /&gt;
	AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
	AuthUserFile /git/.htpasswd&lt;br /&gt;
	# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
	# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
	Require valid-user&lt;br /&gt;
	# END Enable Basic HTTP Authentication&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional info:&lt;br /&gt;
* [https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP Git - Smart HTTP]&lt;br /&gt;
* [https://git-scm.com/docs/git-http-backend Git - git-http-backend Documentation]&lt;br /&gt;
* For more info on htpasswd, read the docs.&lt;br /&gt;
&lt;br /&gt;
===File permissions===&lt;br /&gt;
For Git push to work Apache must be able to write in the git repositories. There are several ways to do this but I can think of two easy ones:&lt;br /&gt;
* Change the Git repositories group to www-data and allow group to write.&lt;br /&gt;
* Change the Git repositories to a group created by you and add the user www-data to this group.&lt;br /&gt;
&lt;br /&gt;
I prefer the second way because it allows more users to be part of a group and it feels more controllable and ordered.&lt;br /&gt;
&lt;br /&gt;
==Self signed Certificate==&lt;br /&gt;
===How Certificates work===&lt;br /&gt;
Here are some videos on how certificates and SSL (TLS) work:&lt;br /&gt;
{{#ev:youtube|JCvPnwpWVUQ|400}}&lt;br /&gt;
{{#ev:youtube|iQsKdtjwtYI|400}}&lt;br /&gt;
{{#ev:youtube|earzZpX-PiY|400}}&lt;br /&gt;
&lt;br /&gt;
Additional info:&lt;br /&gt;
* [https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/ What is the SSL Certificate Chain? - DNSimple Help], explains how the certificate chain works.&lt;br /&gt;
* [https://www.symantec.com/connect/blogs/types-ssl-certificates-choose-right-one Types of SSL certificates – choose the right one | Symantec Connect], explains the different certificate types that can be used.&lt;br /&gt;
* [https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them DER vs. CRT vs. CER vs. PEM Certificates and How To Convert Them], explains different file types for certificates.&lt;br /&gt;
* [https://en.wikipedia.org/wiki/X.509 X.509 - Wikipedia], X.509 public key certificate standard.&lt;br /&gt;
&lt;br /&gt;
===Why certificates are needed===&lt;br /&gt;
To allow git to be served using https the server must have a certificate. Now, this certificate can be signed by a root Certificate Authority (CA), an Intermediate Cerfificate Authority (validated by a root CA) or a self signed certificate. To get a root or intermediate CA Certificate you must contact a company to give you one and pay for it. You could also create your own root or intermediate CA but this outside the scope of this article.&lt;br /&gt;
&lt;br /&gt;
===How to create a Self-Signed Certificate===&lt;br /&gt;
&amp;#039;&amp;#039;Disclaimer: I am not an expert in OpenSSL, these are my tests and I might have made wrong assumptions. Please read the OpenSSL docs.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This is done on an Ubuntu 16 but you could do this in another system, you do need OpenSSl. The process is actually very simple.&lt;br /&gt;
&lt;br /&gt;
Here are three ways of creating a Self-Signed Certificate:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1 - One line&lt;br /&gt;
# ********************&lt;br /&gt;
# This command outputs two files, the private key and the certificate. The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# -nodes = not encrypted, if you leave this out, Apache will ask for a password when using the private key&lt;br /&gt;
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 2 - Two steps&lt;br /&gt;
# ********************&lt;br /&gt;
# First the key is generated and second the certificate is generated using the generated key.&lt;br /&gt;
#&lt;br /&gt;
# Step 1: Generate the Private Key&lt;br /&gt;
# Step 1 - Option 1) -des3 encrypts the key, Apache will ask for a password when using the private key&lt;br /&gt;
openssl genrsa -des3 -out selfsigned.key 2048&lt;br /&gt;
# Step 1 - Option 2) No key encryption&lt;br /&gt;
openssl genrsa -out selfsigned.key 2048&lt;br /&gt;
#&lt;br /&gt;
# Step 2&lt;br /&gt;
# The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
openssl req -x509 -new -key selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 3 - Three steps&lt;br /&gt;
# ********************&lt;br /&gt;
# First the key is generated, then a signing request is generated and finally the certificate is generated using the generated key and the signing request.&lt;br /&gt;
#&lt;br /&gt;
# Step 1: Generate the Private Key&lt;br /&gt;
# Step 1 - Option 1) -des3 encrypts the key, Apache will ask for a password when using the private key&lt;br /&gt;
openssl genrsa -des3 -out selfsigned.key 2048&lt;br /&gt;
# Step 1 - Option 2) No key encryption&lt;br /&gt;
openssl genrsa -out selfsigned.key 2048&lt;br /&gt;
#&lt;br /&gt;
# Step 2: Generate the Signing Request (.csr = Certificate Signing Request)&lt;br /&gt;
openssl req -new -key selfsigned.key -out selfsigned.csr&lt;br /&gt;
#&lt;br /&gt;
# Step 3: Generate the certificate using the Private Key and the Signing Request&lt;br /&gt;
# The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
openssl x509 -req -in selfsigned.csr -signkey selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Check the certificate (a.k.a. see what&amp;#039;s inside)&lt;br /&gt;
# ********************&lt;br /&gt;
openssl x509 -text -noout -in selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html IBM Knowledge Center]&lt;br /&gt;
* [https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/ Creating Your Own SSL Certificate Authority (and Dumping Self Signed Certs) | The Data Center Overlords]&lt;br /&gt;
&lt;br /&gt;
===More info on how to create a root Certificate and how to create a Certificate Authority===&lt;br /&gt;
* [https://blog.didierstevens.com/2008/12/30/howto-make-your-own-cert-with-openssl/ Howto: Make Your Own Cert With OpenSSL | Didier Stevens]&lt;br /&gt;
* [https://www.youtube.com/watch?v=zwnEmLx2LRs Howto: Make Your Own Cert With OpenSSL - YouTube], this are the steps from the previous link put in a video&lt;br /&gt;
* [https://jamielinux.com/docs/openssl-certificate-authority/index.html OpenSSL Certificate Authority &amp;amp;mdash; Jamie Nguyen]&lt;br /&gt;
&lt;br /&gt;
==Configuring Apache to use https==&lt;br /&gt;
This are the steps to allow Apache to use https:&lt;br /&gt;
# Pick a location for the certificates and move them there (they could also be linked or copied), the location used in this example will be &amp;lt;code&amp;gt;/etc/apache2/ssl&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Enable SSL module for Apache: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;a2enmod ssl&amp;lt;/source&amp;gt;&lt;br /&gt;
# Edit /etc/apache2/sites-available/default-ssl.conf, change (or add) the following lines to point to the certificate and the private key: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	# Certificate file&lt;br /&gt;
	SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
	# Private key&lt;br /&gt;
	SSLCertificateKeyFile	/etc/apache2/ssl/selfsigned.key &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Enable the default ssl site: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;a2ensite default-ssl.conf&amp;lt;/source&amp;gt;&lt;br /&gt;
# Restart Apache: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;service apache2 restart&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* default-ssl.conf configures a site using the certificate but you must be careful to show only what you want to show, for instance copy some of the configuration from the 000-default.conf like DocumentRoot and additional custom information.&lt;br /&gt;
* This is the default default-ssl.conf file with the changes made in the previous instructions:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* [https://www.maketecheasier.com/apache-server-ssl-support/ Setting up Apache Server with SSL Support on Ubuntu]&lt;br /&gt;
* [https://www.digicert.com/ssl-certificate-installation-apache.htm SSL Certificate Installation - Apache Server | DigiCert.com]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YR6-6XUC3sY Configuring HTTPS or SSL on apache web server - YouTube]&lt;br /&gt;
* [https://www.youtube.com/watch?v=m06TttS2ZAM How to Install SSL Certificate on Linux Apache Web Server - YouTube]&lt;br /&gt;
&lt;br /&gt;
Forcing the right protocol:&lt;br /&gt;
* https://askubuntu.com/questions/643037/how-to-enable-tls-1-2-in-apache&lt;br /&gt;
* https://tecadmin.net/enable-tls-in-modssl-and-apache/&lt;br /&gt;
* https://serverfault.com/questions/314858/how-to-enable-tls-1-1-and-1-2-with-openssl-and-apache&lt;br /&gt;
&lt;br /&gt;
==Git using the Self-Signed Certificate==&lt;br /&gt;
&lt;br /&gt;
If you use a valid Certificate, that is checkable by a Root authority, you probably don’t need to follow these steps. However, if you use a self-signed certificate Git won’t pull or push since it won’t trust the certificate given by the server.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Server&amp;#039;&amp;#039;&amp;#039; is where Apache is running with Git. &amp;#039;&amp;#039;&amp;#039;Client&amp;#039;&amp;#039;&amp;#039; is the computer where we want to use Git connected via https to the server.&lt;br /&gt;
&lt;br /&gt;
To avoid the above problem we will transfer manually the certificate to the computer where we want to connect using Git. Then we will configure Git to use the certificate. The usual flow to obtain a Git repository is to use clone, we will not use this flow as Git won&amp;#039;t clone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;font-weight: bold; color: salmon;&amp;quot;&amp;gt;Important&amp;lt;/h3&amp;gt;&lt;br /&gt;
* When generating the certificate in the previous steps for &amp;#039;&amp;#039;&amp;#039;Common Name (e.g. server FQDN or YOUR name)&amp;#039;&amp;#039;&amp;#039; use the server&amp;#039;s IP or domain. If you&amp;#039;re using a dynamic IP you should probably use some kind of dynamic DNS to assign a domain to your server so your certificate will always match the same domain.&lt;br /&gt;
* The per server syntax (&amp;lt;code&amp;gt;git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&amp;lt;/code&amp;gt;) is not supported by all Git versions. If your version doesn&amp;#039;t support it you can go in one of tow ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# Add a configuration parameter to the git command every time communication with the server is needed: -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot;&lt;br /&gt;
# For instance&lt;br /&gt;
git -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot; pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# Use your certificate for all verifications&lt;br /&gt;
# Inside the git repository do&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# I haven&amp;#039;t tried but...&lt;br /&gt;
# You might also want to check the configuration variable http.sslCAPath, it might have a directory for multiple certificates.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Way 1===&lt;br /&gt;
# Transfer the certificate from the server to the client. The file ending with crt. Do not transfer the Private Key, this key is meant for the server only. Try using a secure connection to transfer it, for instance use ssh. You can place the certificate wherever you want, to avoid headaches place it outside the git project you will next create, it can be done but it&amp;#039;s a pain.&lt;br /&gt;
# Create an empty repository on the client.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git init [name]&lt;br /&gt;
# name is the name of the repository, the same name that would be used with git clone&lt;br /&gt;
# You could use whatever but perhaps it&amp;#039;s a good idea to use the same name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Add the remote &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git remote add origin https://servername/git/givenRepository&lt;br /&gt;
# serverName could also be an IP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Configure Git to use this certificate to communicate with the server. You can do this two different ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# This configures the CA for every remote&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# This configures the CA only to be used with https://servername/&lt;br /&gt;
git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Prepare your client&amp;#039;s Git repository:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git pull origin master&lt;br /&gt;
# Enter user/pass if needed&lt;br /&gt;
&lt;br /&gt;
git push --set-upstream origin master &lt;br /&gt;
# Enter user/pass if needed&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Use the client&amp;#039;s repository as you would normally do&lt;br /&gt;
&lt;br /&gt;
===Way 2===&lt;br /&gt;
# Transfer the certificate from the server to the client. The file ending with crt. Do not transfer the Private Key, this key is meant for the server only. Try using a secure connection to transfer it, for instance use ssh. You can place the certificate wherever you want, to avoid headaches place it outside the git project you will next create, it can be done but it&amp;#039;s a pain.&lt;br /&gt;
# Clone but pass a configuration option in the cloning process:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot; clone https://servername/git/givenRepository&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Configure Git to use this certificate to communicate with the server. You can do this two different ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# This configures the CA for every remote&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# This configures the CA only to be used with https://servername/&lt;br /&gt;
git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* https://stackoverflow.com/questions/11621768/how-can-i-make-git-accept-a-self-signed-certificate&lt;br /&gt;
* https://stackoverflow.com/questions/23807313/adding-self-signed-ssl-certificate-without-disabling-authority-signed-ones&lt;br /&gt;
* https://stackoverflow.com/questions/9072376/configure-git-to-accept-a-particular-self-signed-server-certificate-for-a-partic&lt;br /&gt;
&lt;br /&gt;
==Git using only https (and not http)==&lt;br /&gt;
To only allow access Git in a secure way (encrypted using https) remove all git directives from the file &amp;lt;code&amp;gt;/etc/apache2/apache2.conf&amp;lt;/code&amp;gt; and add them to the file &amp;lt;code&amp;gt;/etc/apache2/sites-available/default-ssl.conf&amp;lt;/code&amp;gt;. The file should look something like this:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# Added part&lt;br /&gt;
		# Git&lt;br /&gt;
&lt;br /&gt;
		# Path to the Git directory (inside the OS)&lt;br /&gt;
		SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
		# Allows all projects to be served&lt;br /&gt;
		# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
		SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
		# Defines the URL path where git is located, as seen via http&lt;br /&gt;
		# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
		ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
		# Access configuration&lt;br /&gt;
		&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
			# Enable Basic HTTP Authentication&lt;br /&gt;
			AuthType Basic&lt;br /&gt;
			AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
			AuthUserFile /git/.htpasswd&lt;br /&gt;
			# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
			# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
		#	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
			Require valid-user&lt;br /&gt;
			# END Enable Basic HTTP Authentication&lt;br /&gt;
		&amp;lt;/Files&amp;gt;&lt;br /&gt;
		# END Git&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Client based authentication using certificates in Apache==&lt;br /&gt;
===Apache configuration===&lt;br /&gt;
To force Apache to serve only to clients that have a valid certificate add the following lines to &amp;lt;code&amp;gt;/etc/apache2/sites-available/default-ssl.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
	# To allow certificate based authentication for clients&lt;br /&gt;
	# Clients must have a certificate to login&lt;br /&gt;
	SSLCACertificateFile /etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
	SSLVerifyClient require&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file should look like this:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# Added part&lt;br /&gt;
		# Git&lt;br /&gt;
&lt;br /&gt;
		# Path to the Git directory (inside the OS)&lt;br /&gt;
		SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
		# Allows all projects to be served&lt;br /&gt;
		# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
		SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
		# Defines the URL path where git is located, as seen via http&lt;br /&gt;
		# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
		ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
		# Access configuration&lt;br /&gt;
		&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
			# Enable Basic HTTP Authentication&lt;br /&gt;
			AuthType Basic&lt;br /&gt;
			AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
			AuthUserFile /git/.htpasswd&lt;br /&gt;
			# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
			# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
		#	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
			Require valid-user&lt;br /&gt;
			# END Enable Basic HTTP Authentication&lt;br /&gt;
		&amp;lt;/Files&amp;gt;&lt;br /&gt;
		# END Git&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Client certificate===&lt;br /&gt;
The client certificate generation works like this:&lt;br /&gt;
* Setup a root CA key and certificate, in our case the file selfsigned.crt acts as a root CA.&lt;br /&gt;
* The client generates his private key and certificate request, since we control both the server and the client this can be done in either machine.&lt;br /&gt;
* Generate the client certificate using the cliente certificate request, the root certificate and the root key.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generate the client key&lt;br /&gt;
openssl genrsa -out client.key 2048&lt;br /&gt;
# Generate the client csr (Certificate Signing Request)&lt;br /&gt;
openssl req -new -key client.key -out client.csr&lt;br /&gt;
# Generate the client certificate, change serial number for every new certificate&lt;br /&gt;
openssl x509 -req -in client.csr -CA selfsigned.crt -CAkey selfsigned.key -set_serial 01 -out client.crt&lt;br /&gt;
&lt;br /&gt;
# Generate a p12 file, this can be used for a browser but will probably have to be installed in the OS or the Browser&lt;br /&gt;
openssl pkcs12 -export -out client.p12 -inkey client.key -in client.crt -chain -CAfile ../oneline/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
* [http://stuff-things.net/2015/09/28/configuring-apache-for-ssl-client-certificate-authentication/ Configuring Apache for SSL Client Certificate Authentication - Stuff… And Things…]&lt;br /&gt;
* [https://stackoverflow.com/a/24543642/1071459 How to do client certificate authentication with Apache - Stack Overflow]&lt;br /&gt;
&lt;br /&gt;
==Git using a Client Certificate==&lt;br /&gt;
If we configured Apache for client based authentication then Git needs a certificate to use to communicate with Apache.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
# Transfer the client key and certificate to the client. This means client.key and client.csr.&lt;br /&gt;
# Follow steps from the previos section: [[#Git using the Self-Signed Certificate|Git using the Self-Signed Certificate]].&lt;br /&gt;
# Configure Git to use the transferred files: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git config http.sslCert [client os location]/client.crt&lt;br /&gt;
git config http.sslKey [client os location]/client.key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 16.04 | DigitalOcean]&lt;br /&gt;
* [http://ubuntuwiki.net/index.php/Apache,_Digest_authentication Apache, Digest authentication - Ubuntuwiki.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:git]]&lt;br /&gt;
[[Category:http]]&lt;br /&gt;
[[Category:https]]&lt;br /&gt;
[[Category:apache]]&lt;br /&gt;
[[Category:web]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate&amp;diff=797</id>
		<title>Git, Apache and HTTPS with a free certificate</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate&amp;diff=797"/>
		<updated>2019-08-30T20:56:18Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Further reading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
* Ubuntu CLI understanding&lt;br /&gt;
* Git knowledge&lt;br /&gt;
* Ubuntu, this was tested using Ubuntu 16&lt;br /&gt;
* Apache 2&lt;br /&gt;
&lt;br /&gt;
==Git using Apache==&lt;br /&gt;
This is a basic setup to allow Git on a server to be accessible via HTTP (no HTTPS yet, read further).&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
# Install Apache &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install apache2 apache2-utils&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Enable necessary modules &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
a2enmod cgi alias env&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;(Optional)&amp;#039;&amp;#039;&amp;#039; Add user(s) to the htpasswd file. This step is optional if this setup is going to serve only anonymous repository (pull/fetch). However if you want to push or if you want to allow to only obtain a repository using user/pass combo this step is necessary (see next step).&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Create file and add a user&lt;br /&gt;
# -c = create file&lt;br /&gt;
# The file is stored in /git/ the git repository for this specific setup&lt;br /&gt;
htpasswd -c /git/.htpasswd [user name]&lt;br /&gt;
# This will ask for a password&lt;br /&gt;
&lt;br /&gt;
# Add a user to the file&lt;br /&gt;
htpasswd /git/.htpasswd [user name]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# To allow to obtain a git repository using http, add the following to the apache2.conf &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Path to the Git directory (inside the OS)&lt;br /&gt;
SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
# Allows all projects to be served&lt;br /&gt;
# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
# Defines the URL path where git is located, as seen via http&lt;br /&gt;
# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
# Access configuration&lt;br /&gt;
&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
	# Enable Basic HTTP Authentication&lt;br /&gt;
	AuthType Basic&lt;br /&gt;
	AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
	AuthUserFile /git/.htpasswd&lt;br /&gt;
	# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
	# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
	Require valid-user&lt;br /&gt;
	# END Enable Basic HTTP Authentication&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional info:&lt;br /&gt;
* [https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP Git - Smart HTTP]&lt;br /&gt;
* [https://git-scm.com/docs/git-http-backend Git - git-http-backend Documentation]&lt;br /&gt;
* For more info on htpasswd, read the docs.&lt;br /&gt;
&lt;br /&gt;
===File permissions===&lt;br /&gt;
For Git push to work Apache must be able to write in the git repositories. There are several ways to do this but I can think of two easy ones:&lt;br /&gt;
* Change the Git repositories group to www-data and allow group to write.&lt;br /&gt;
* Change the Git repositories to a group created by you and add the user www-data to this group.&lt;br /&gt;
&lt;br /&gt;
I prefer the second way because it allows more users to be part of a group and it feels more controllable and ordered.&lt;br /&gt;
&lt;br /&gt;
==Self signed Certificate==&lt;br /&gt;
===How Certificates work===&lt;br /&gt;
Here are some videos on how certificates and SSL (TLS) work:&lt;br /&gt;
{{#ev:youtube|JCvPnwpWVUQ|400}}&lt;br /&gt;
{{#ev:youtube|iQsKdtjwtYI|400}}&lt;br /&gt;
{{#ev:youtube|earzZpX-PiY|400}}&lt;br /&gt;
&lt;br /&gt;
Additional info:&lt;br /&gt;
* [https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/ What is the SSL Certificate Chain? - DNSimple Help], explains how the certificate chain works.&lt;br /&gt;
* [https://www.symantec.com/connect/blogs/types-ssl-certificates-choose-right-one Types of SSL certificates – choose the right one | Symantec Connect], explains the different certificate types that can be used.&lt;br /&gt;
* [https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them DER vs. CRT vs. CER vs. PEM Certificates and How To Convert Them], explains different file types for certificates.&lt;br /&gt;
* [https://en.wikipedia.org/wiki/X.509 X.509 - Wikipedia], X.509 public key certificate standard.&lt;br /&gt;
&lt;br /&gt;
===Why certificates are needed===&lt;br /&gt;
To allow git to be served using https the server must have a certificate. Now, this certificate can be signed by a root Certificate Authority (CA), an Intermediate Cerfificate Authority (validated by a root CA) or a self signed certificate. To get a root or intermediate CA Certificate you must contact a company to give you one and pay for it. You could also create your own root or intermediate CA but this outside the scope of this article.&lt;br /&gt;
&lt;br /&gt;
===How to create a Self-Signed Certificate===&lt;br /&gt;
&amp;#039;&amp;#039;Disclaimer: I am not an expert in OpenSSL, these are my tests and I might have made wrong assumptions. Please read the OpenSSL docs.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This is done on an Ubuntu 16 but you could do this in another system, you do need OpenSSl. The process is actually very simple.&lt;br /&gt;
&lt;br /&gt;
Here are three ways of creating a Self-Signed Certificate:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1 - One line&lt;br /&gt;
# ********************&lt;br /&gt;
# This command outputs two files, the private key and the certificate. The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# -nodes = not encrypted, if you leave this out, Apache will ask for a password when using the private key&lt;br /&gt;
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 2 - Two steps&lt;br /&gt;
# ********************&lt;br /&gt;
# First the key is generated and second the certificate is generated using the generated key.&lt;br /&gt;
#&lt;br /&gt;
# Step 1: Generate the Private Key&lt;br /&gt;
# Step 1 - Option 1) -des3 encrypts the key, Apache will ask for a password when using the private key&lt;br /&gt;
openssl genrsa -des3 -out selfsigned.key 2048&lt;br /&gt;
# Step 1 - Option 2) No key encryption&lt;br /&gt;
openssl genrsa -out selfsigned.key 2048&lt;br /&gt;
#&lt;br /&gt;
# Step 2&lt;br /&gt;
# The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
openssl req -x509 -new -key selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 3 - Three steps&lt;br /&gt;
# ********************&lt;br /&gt;
# First the key is generated, then a signing request is generated and finally the certificate is generated using the generated key and the signing request.&lt;br /&gt;
#&lt;br /&gt;
# Step 1: Generate the Private Key&lt;br /&gt;
# Step 1 - Option 1) -des3 encrypts the key, Apache will ask for a password when using the private key&lt;br /&gt;
openssl genrsa -des3 -out selfsigned.key 2048&lt;br /&gt;
# Step 1 - Option 2) No key encryption&lt;br /&gt;
openssl genrsa -out selfsigned.key 2048&lt;br /&gt;
#&lt;br /&gt;
# Step 2: Generate the Signing Request (.csr = Certificate Signing Request)&lt;br /&gt;
openssl req -new -key selfsigned.key -out selfsigned.csr&lt;br /&gt;
#&lt;br /&gt;
# Step 3: Generate the certificate using the Private Key and the Signing Request&lt;br /&gt;
# The certificate will be valid for 1 year (use &amp;#039;-days [number]&amp;#039; to change this).&lt;br /&gt;
openssl x509 -req -in selfsigned.csr -signkey selfsigned.key -out selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Check the certificate (a.k.a. see what&amp;#039;s inside)&lt;br /&gt;
# ********************&lt;br /&gt;
openssl x509 -text -noout -in selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html IBM Knowledge Center]&lt;br /&gt;
* [https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/ Creating Your Own SSL Certificate Authority (and Dumping Self Signed Certs) | The Data Center Overlords]&lt;br /&gt;
&lt;br /&gt;
===More info on how to create a root Certificate and how to create a Certificate Authority===&lt;br /&gt;
* [https://blog.didierstevens.com/2008/12/30/howto-make-your-own-cert-with-openssl/ Howto: Make Your Own Cert With OpenSSL | Didier Stevens]&lt;br /&gt;
* [https://www.youtube.com/watch?v=zwnEmLx2LRs Howto: Make Your Own Cert With OpenSSL - YouTube], this are the steps from the previous link put in a video&lt;br /&gt;
* [https://jamielinux.com/docs/openssl-certificate-authority/index.html OpenSSL Certificate Authority &amp;amp;mdash; Jamie Nguyen]&lt;br /&gt;
&lt;br /&gt;
==Configuring Apache to use https==&lt;br /&gt;
This are the steps to allow Apache to use https:&lt;br /&gt;
# Pick a location for the certificates and move them there (they could also be linked or copied), the location used in this example will be &amp;lt;code&amp;gt;/etc/apache2/ssl&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Enable SSL module for Apache: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;a2enmod ssl&amp;lt;/source&amp;gt;&lt;br /&gt;
# Edit /etc/apache2/sites-available/default-ssl.conf, change (or add) the following lines to point to the certificate and the private key: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	# Certificate file&lt;br /&gt;
	SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
	# Private key&lt;br /&gt;
	SSLCertificateKeyFile	/etc/apache2/ssl/selfsigned.key &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Enable the default ssl site: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;a2ensite default-ssl.conf&amp;lt;/source&amp;gt;&lt;br /&gt;
# Restart Apache: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;service apache2 restart&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* default-ssl.conf configures a site using the certificate but you must be careful to show only what you want to show, for instance copy some of the configuration from the 000-default.conf like DocumentRoot and additional custom information.&lt;br /&gt;
* This is the default default-ssl.conf file with the the changes made in the previous instructions:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* [https://www.maketecheasier.com/apache-server-ssl-support/ Setting up Apache Server with SSL Support on Ubuntu]&lt;br /&gt;
* [https://www.digicert.com/ssl-certificate-installation-apache.htm SSL Certificate Installation - Apache Server | DigiCert.com]&lt;br /&gt;
* [https://www.youtube.com/watch?v=YR6-6XUC3sY Configuring HTTPS or SSL on apache web server - YouTube]&lt;br /&gt;
* [https://www.youtube.com/watch?v=m06TttS2ZAM How to Install SSL Certificate on Linux Apache Web Server - YouTube]&lt;br /&gt;
&lt;br /&gt;
Forcing the right protocol:&lt;br /&gt;
* https://askubuntu.com/questions/643037/how-to-enable-tls-1-2-in-apache&lt;br /&gt;
* https://tecadmin.net/enable-tls-in-modssl-and-apache/&lt;br /&gt;
* https://serverfault.com/questions/314858/how-to-enable-tls-1-1-and-1-2-with-openssl-and-apache&lt;br /&gt;
&lt;br /&gt;
==Git using the Self-Signed Certificate==&lt;br /&gt;
&lt;br /&gt;
If you use a valid Certificate, that is checkable by a Root authority, you probably don’t need to follow these steps. However, if you use a self-signed certificate Git won’t pull or push since it won’t trust the certificate given by the server.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Server&amp;#039;&amp;#039;&amp;#039; is where Apache is running with Git. &amp;#039;&amp;#039;&amp;#039;Client&amp;#039;&amp;#039;&amp;#039; is the computer where we want to use Git connected via https to the server.&lt;br /&gt;
&lt;br /&gt;
To avoid the above problem we will transfer manually the certificate to the computer where we want to connect using Git. Then we will configure Git to use the certificate. The usual flow to obtain a Git repository is to use clone, we will not use this flow as Git won&amp;#039;t clone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 style=&amp;quot;font-weight: bold; color: salmon;&amp;quot;&amp;gt;Important&amp;lt;/h3&amp;gt;&lt;br /&gt;
* When generating the certificate in the previous steps for &amp;#039;&amp;#039;&amp;#039;Common Name (e.g. server FQDN or YOUR name)&amp;#039;&amp;#039;&amp;#039; use the server&amp;#039;s IP or domain. If you&amp;#039;re using a dynamic IP you should probably use some kind of dynamic DNS to assign a domain to your server so your certificate will always match the same domain.&lt;br /&gt;
* The per server syntax (&amp;lt;code&amp;gt;git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&amp;lt;/code&amp;gt;) is not supported by all Git versions. If your version doesn&amp;#039;t support it you can go in one of tow ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# Add a configuration parameter to the git command every time communication with the server is needed: -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot;&lt;br /&gt;
# For instance&lt;br /&gt;
git -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot; pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# Use your certificate for all verifications&lt;br /&gt;
# Inside the git repository do&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# I haven&amp;#039;t tried but...&lt;br /&gt;
# You might also want to check the configuration variable http.sslCAPath, it might have a directory for multiple certificates.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Way 1===&lt;br /&gt;
# Transfer the certificate from the server to the client. The file ending with crt. Do not transfer the Private Key, this key is meant for the server only. Try using a secure connection to transfer it, for instance use ssh. You can place the certificate wherever you want, to avoid headaches place it outside the git project you will next create, it can be done but it&amp;#039;s a pain.&lt;br /&gt;
# Create an empty repository on the client.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git init [name]&lt;br /&gt;
# name is the name of the repository, the same name that would be used with git clone&lt;br /&gt;
# You could use whatever but perhaps it&amp;#039;s a good idea to use the same name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Add the remote &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git remote add origin https://servername/git/givenRepository&lt;br /&gt;
# serverName could also be an IP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Configure Git to use this certificate to communicate with the server. You can do this two different ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# This configures the CA for every remote&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# This configures the CA only to be used with https://servername/&lt;br /&gt;
git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Prepare your client&amp;#039;s Git repository:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git pull origin master&lt;br /&gt;
# Enter user/pass if needed&lt;br /&gt;
&lt;br /&gt;
git push --set-upstream origin master &lt;br /&gt;
# Enter user/pass if needed&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Use the client&amp;#039;s repository as you would normally do&lt;br /&gt;
&lt;br /&gt;
===Way 2===&lt;br /&gt;
# Transfer the certificate from the server to the client. The file ending with crt. Do not transfer the Private Key, this key is meant for the server only. Try using a secure connection to transfer it, for instance use ssh. You can place the certificate wherever you want, to avoid headaches place it outside the git project you will next create, it can be done but it&amp;#039;s a pain.&lt;br /&gt;
# Clone but pass a configuration option in the cloning process:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git -c http.sslcainfo=&amp;quot;[location of certificate]/selfsigned.crt&amp;quot; clone https://servername/git/givenRepository&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Configure Git to use this certificate to communicate with the server. You can do this two different ways:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Way 1&lt;br /&gt;
# This configures the CA for every remote&lt;br /&gt;
git config http.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&lt;br /&gt;
# Way 2&lt;br /&gt;
# This configures the CA only to be used with https://servername/&lt;br /&gt;
git config http.&amp;quot;https://servername/&amp;quot;.sslCAInfo [directory where crt is located]/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
* https://stackoverflow.com/questions/11621768/how-can-i-make-git-accept-a-self-signed-certificate&lt;br /&gt;
* https://stackoverflow.com/questions/23807313/adding-self-signed-ssl-certificate-without-disabling-authority-signed-ones&lt;br /&gt;
* https://stackoverflow.com/questions/9072376/configure-git-to-accept-a-particular-self-signed-server-certificate-for-a-partic&lt;br /&gt;
&lt;br /&gt;
==Git using only https (and not http)==&lt;br /&gt;
To only allow access Git in a secure way (encrypted using https) remove all git directives from the file &amp;lt;code&amp;gt;/etc/apache2/apache2.conf&amp;lt;/code&amp;gt; and add them to the file &amp;lt;code&amp;gt;/etc/apache2/sites-available/default-ssl.conf&amp;lt;/code&amp;gt;. The file should look something like this:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# Added part&lt;br /&gt;
		# Git&lt;br /&gt;
&lt;br /&gt;
		# Path to the Git directory (inside the OS)&lt;br /&gt;
		SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
		# Allows all projects to be served&lt;br /&gt;
		# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
		SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
		# Defines the URL path where git is located, as seen via http&lt;br /&gt;
		# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
		ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
		# Access configuration&lt;br /&gt;
		&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
			# Enable Basic HTTP Authentication&lt;br /&gt;
			AuthType Basic&lt;br /&gt;
			AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
			AuthUserFile /git/.htpasswd&lt;br /&gt;
			# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
			# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
		#	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
			Require valid-user&lt;br /&gt;
			# END Enable Basic HTTP Authentication&lt;br /&gt;
		&amp;lt;/Files&amp;gt;&lt;br /&gt;
		# END Git&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Client based authentication using certificates in Apache==&lt;br /&gt;
===Apache configuration===&lt;br /&gt;
To force Apache to serve only to clients that have a valid certificate add the following lines to &amp;lt;code&amp;gt;/etc/apache2/sites-available/default-ssl.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
	# To allow certificate based authentication for clients&lt;br /&gt;
	# Clients must have a certificate to login&lt;br /&gt;
	SSLCACertificateFile /etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
	SSLVerifyClient require&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file should look like this:&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/sites-available/default-ssl.conf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
	&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
		ServerAdmin webmaster@localhost&lt;br /&gt;
&lt;br /&gt;
		DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
		# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,&lt;br /&gt;
		# error, crit, alert, emerg.&lt;br /&gt;
		# It is also possible to configure the loglevel for particular&lt;br /&gt;
		# modules, e.g.&lt;br /&gt;
		#LogLevel info ssl:warn&lt;br /&gt;
&lt;br /&gt;
		ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
		CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
		# For most configuration files from conf-available/, which are&lt;br /&gt;
		# enabled or disabled at a global level, it is possible to&lt;br /&gt;
		# include a line for only one particular virtual host. For example the&lt;br /&gt;
		# following line enables the CGI configuration for this host only&lt;br /&gt;
		# after it has been globally disabled with &amp;quot;a2disconf&amp;quot;.&lt;br /&gt;
		#Include conf-available/serve-cgi-bin.conf&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Switch:&lt;br /&gt;
		#   Enable/Disable SSL for this virtual host.&lt;br /&gt;
		SSLEngine on&lt;br /&gt;
&lt;br /&gt;
		#   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;
		#   the ssl-cert package. See&lt;br /&gt;
		#   /usr/share/doc/apache2/README.Debian.gz for more info.&lt;br /&gt;
		#   If both key and certificate are stored in the same file, only the&lt;br /&gt;
		#   SSLCertificateFile directive is needed.&lt;br /&gt;
		SSLCertificateFile	/etc/apache2/ssl/selfsigned.crt&lt;br /&gt;
		SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key&lt;br /&gt;
&lt;br /&gt;
		#   Server Certificate Chain:&lt;br /&gt;
		#   Point SSLCertificateChainFile at a file containing the&lt;br /&gt;
		#   concatenation of PEM encoded CA certificates which form the&lt;br /&gt;
		#   certificate chain for the server certificate. Alternatively&lt;br /&gt;
		#   the referenced file can be the same as SSLCertificateFile&lt;br /&gt;
		#   when the CA certificates are directly appended to the server&lt;br /&gt;
		#   certificate for convinience.&lt;br /&gt;
		#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Authority (CA):&lt;br /&gt;
		#   Set the CA certificate verification path where to find CA&lt;br /&gt;
		#   certificates for client authentication or alternatively one&lt;br /&gt;
		#   huge file containing all of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCACertificatePath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCACertificatePath /etc/ssl/certs/&lt;br /&gt;
		#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt&lt;br /&gt;
&lt;br /&gt;
		#   Certificate Revocation Lists (CRL):&lt;br /&gt;
		#   Set the CA revocation path where to find CA CRLs for client&lt;br /&gt;
		#   authentication or alternatively one huge file containing all&lt;br /&gt;
		#   of them (file must be PEM encoded)&lt;br /&gt;
		#   Note: Inside SSLCARevocationPath you need hash symlinks&lt;br /&gt;
		#		 to point to the certificate files. Use the provided&lt;br /&gt;
		#		 Makefile to update the hash symlinks after changes.&lt;br /&gt;
		#SSLCARevocationPath /etc/apache2/ssl.crl/&lt;br /&gt;
		#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl&lt;br /&gt;
&lt;br /&gt;
		#   Client Authentication (Type):&lt;br /&gt;
		#   Client certificate verification type and depth.  Types are&lt;br /&gt;
		#   none, optional, require and optional_no_ca.  Depth is a&lt;br /&gt;
		#   number which specifies how deeply to verify the certificate&lt;br /&gt;
		#   issuer chain before deciding the certificate is not valid.&lt;br /&gt;
		#SSLVerifyClient require&lt;br /&gt;
		#SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
		#   SSL Engine Options:&lt;br /&gt;
		#   Set various options for the SSL engine.&lt;br /&gt;
		#   o FakeBasicAuth:&lt;br /&gt;
		#	 Translate the client X.509 into a Basic Authorisation.  This means that&lt;br /&gt;
		#	 the standard Auth/DBMAuth methods can be used for access control.  The&lt;br /&gt;
		#	 user name is the `one line&amp;#039; version of the client&amp;#039;s X.509 certificate.&lt;br /&gt;
		#	 Note that no password is obtained from the user. Every entry in the user&lt;br /&gt;
		#	 file needs this password: `xxj31ZMTZzkVA&amp;#039;.&lt;br /&gt;
		#   o ExportCertData:&lt;br /&gt;
		#	 This exports two additional environment variables: SSL_CLIENT_CERT and&lt;br /&gt;
		#	 SSL_SERVER_CERT. These contain the PEM-encoded certificates of the&lt;br /&gt;
		#	 server (always existing) and the client (only existing when client&lt;br /&gt;
		#	 authentication is used). This can be used to import the certificates&lt;br /&gt;
		#	 into CGI scripts.&lt;br /&gt;
		#   o StdEnvVars:&lt;br /&gt;
		#	 This exports the standard SSL/TLS related `SSL_*&amp;#039; environment variables.&lt;br /&gt;
		#	 Per default this exportation is switched off for performance reasons,&lt;br /&gt;
		#	 because the extraction step is an expensive operation and is usually&lt;br /&gt;
		#	 useless for serving static content. So one usually enables the&lt;br /&gt;
		#	 exportation for CGI and SSI requests only.&lt;br /&gt;
		#   o OptRenegotiate:&lt;br /&gt;
		#	 This enables optimized SSL connection renegotiation handling when SSL&lt;br /&gt;
		#	 directives are used in per-directory context.&lt;br /&gt;
		#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire&lt;br /&gt;
		&amp;lt;FilesMatch &amp;quot;\.(cgi|shtml|phtml|php)$&amp;quot;&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
		&amp;lt;Directory /usr/lib/cgi-bin&amp;gt;&lt;br /&gt;
				SSLOptions +StdEnvVars&lt;br /&gt;
		&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		#   SSL Protocol Adjustments:&lt;br /&gt;
		#   The safe and default but still SSL/TLS standard compliant shutdown&lt;br /&gt;
		#   approach is that mod_ssl sends the close notify alert but doesn&amp;#039;t wait for&lt;br /&gt;
		#   the close notify alert from client. When you need a different shutdown&lt;br /&gt;
		#   approach you can use one of the following variables:&lt;br /&gt;
		#   o ssl-unclean-shutdown:&lt;br /&gt;
		#	 This forces an unclean shutdown when the connection is closed, i.e. no&lt;br /&gt;
		#	 SSL close notify alert is send or allowed to received.  This violates&lt;br /&gt;
		#	 the SSL/TLS standard but is needed for some brain-dead browsers. Use&lt;br /&gt;
		#	 this when you receive I/O errors because of the standard approach where&lt;br /&gt;
		#	 mod_ssl sends the close notify alert.&lt;br /&gt;
		#   o ssl-accurate-shutdown:&lt;br /&gt;
		#	 This forces an accurate shutdown when the connection is closed, i.e. a&lt;br /&gt;
		#	 SSL close notify alert is send and mod_ssl waits for the close notify&lt;br /&gt;
		#	 alert of the client. This is 100% SSL/TLS standard compliant, but in&lt;br /&gt;
		#	 practice often causes hanging connections with brain-dead browsers. Use&lt;br /&gt;
		#	 this only for browsers where you know that their SSL implementation&lt;br /&gt;
		#	 works correctly.&lt;br /&gt;
		#   Notice: Most problems of broken clients are also related to the HTTP&lt;br /&gt;
		#   keep-alive facility, so you usually additionally want to disable&lt;br /&gt;
		#   keep-alive for those clients, too. Use variable &amp;quot;nokeepalive&amp;quot; for this.&lt;br /&gt;
		#   Similarly, one has to force some clients to use HTTP/1.0 to workaround&lt;br /&gt;
		#   their broken HTTP/1.1 implementation. Use variables &amp;quot;downgrade-1.0&amp;quot; and&lt;br /&gt;
		#   &amp;quot;force-response-1.0&amp;quot; for this.&lt;br /&gt;
		# BrowserMatch &amp;quot;MSIE [2-6]&amp;quot; \&lt;br /&gt;
		#		nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
		#		downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# ******************************************&lt;br /&gt;
		# Added part&lt;br /&gt;
		# Git&lt;br /&gt;
&lt;br /&gt;
		# Path to the Git directory (inside the OS)&lt;br /&gt;
		SetEnv GIT_PROJECT_ROOT /git&lt;br /&gt;
&lt;br /&gt;
		# Allows all projects to be served&lt;br /&gt;
		# If commented a file must exist in each available repository via Apache, file name: git-daemon-export-ok&lt;br /&gt;
		SetEnv GIT_HTTP_EXPORT_ALL&lt;br /&gt;
&lt;br /&gt;
		# Defines the URL path where git is located, as seen via http&lt;br /&gt;
		# First param is path, second is os path to git-http-backend, don&amp;#039;t forget the last slash&lt;br /&gt;
		ScriptAlias /git/ /usr/lib/git-core/git-http-backend/&lt;br /&gt;
&lt;br /&gt;
		# Access configuration&lt;br /&gt;
		&amp;lt;Files &amp;quot;git-http-backend&amp;quot;&amp;gt;&lt;br /&gt;
			# Enable Basic HTTP Authentication&lt;br /&gt;
			AuthType Basic&lt;br /&gt;
			AuthName &amp;quot;Git Access&amp;quot;&lt;br /&gt;
			AuthUserFile /git/.htpasswd&lt;br /&gt;
			# The following line allows to obtain a repository (pull/fetch) without having a user/pass combo&lt;br /&gt;
			# Comment it if user/pass are needed to obtain info as well&lt;br /&gt;
		#	Require expr !(%{QUERY_STRING} -strmatch &amp;#039;*service=git-receive-pack*&amp;#039; || %{REQUEST_URI} =~ m#/git-receive-pack$#)&lt;br /&gt;
			Require valid-user&lt;br /&gt;
			# END Enable Basic HTTP Authentication&lt;br /&gt;
		&amp;lt;/Files&amp;gt;&lt;br /&gt;
		# END Git&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Client certificate===&lt;br /&gt;
The client certificate generation works like this:&lt;br /&gt;
* Setup a root CA key and certificate, in our case the file selfsigned.crt acts as a root CA.&lt;br /&gt;
* The client generates his private key and certificate request, since we control both the server and the client this can be done in either machine.&lt;br /&gt;
* Generate the client certificate using the cliente certificate request, the root certificate and the root key.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Generate the client key&lt;br /&gt;
openssl genrsa -out client.key 2048&lt;br /&gt;
# Generate the client csr (Certificate Signing Request)&lt;br /&gt;
openssl req -new -key client.key -out client.csr&lt;br /&gt;
# Generate the client certificate, change serial number for every new certificate&lt;br /&gt;
openssl x509 -req -in client.csr -CA selfsigned.crt -CAkey selfsigned.key -set_serial 01 -out client.crt&lt;br /&gt;
&lt;br /&gt;
# Generate a p12 file, this can be used for a browser but will probably have to be installed in the OS or the Browser&lt;br /&gt;
openssl pkcs12 -export -out client.p12 -inkey client.key -in client.crt -chain -CAfile ../oneline/selfsigned.crt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
* [http://stuff-things.net/2015/09/28/configuring-apache-for-ssl-client-certificate-authentication/ Configuring Apache for SSL Client Certificate Authentication - Stuff… And Things…]&lt;br /&gt;
* [https://stackoverflow.com/a/24543642/1071459 How to do client certificate authentication with Apache - Stack Overflow]&lt;br /&gt;
&lt;br /&gt;
==Git using a Client Certificate==&lt;br /&gt;
If we configured Apache for client based authentication then Git needs a certificate to use to communicate with Apache.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
# Transfer the client key and certificate to the client. This means client.key and client.csr.&lt;br /&gt;
# Follow steps from the previos section: [[#Git using the Self-Signed Certificate|Git using the Self-Signed Certificate]].&lt;br /&gt;
# Configure Git to use the transferred files: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git config http.sslCert [client os location]/client.crt&lt;br /&gt;
git config http.sslKey [client os location]/client.key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 16.04 | DigitalOcean]&lt;br /&gt;
* [http://ubuntuwiki.net/index.php/Apache,_Digest_authentication Apache, Digest authentication - Ubuntuwiki.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:git]]&lt;br /&gt;
[[Category:http]]&lt;br /&gt;
[[Category:https]]&lt;br /&gt;
[[Category:apache]]&lt;br /&gt;
[[Category:web]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=PHP,_Atom_setup&amp;diff=796</id>
		<title>PHP, Atom setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=PHP,_Atom_setup&amp;diff=796"/>
		<updated>2019-07-10T15:50:49Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Possible setups:&lt;br /&gt;
* https://dev.to/oyelowooluwato5/--my-favorite-packages-on-atom-editor-for-php-development-3i77&lt;br /&gt;
&lt;br /&gt;
==Configurar php-cs-fixer==&lt;br /&gt;
Para Atom se puede crear un archivo ~/.php_cs donde se pone la configuración. Por ejemplo para hacer que se usen tabs en vez de espacios:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
return PhpCsFixer\Config::create()&lt;br /&gt;
	-&amp;gt;setIndent(&amp;quot;\t&amp;quot;)&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Más info&amp;#039;&amp;#039;&amp;#039;: https://github.com/FriendsOfPHP/PHP-CS-Fixer#installation&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=PHP,_Atom_setup&amp;diff=795</id>
		<title>PHP, Atom setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=PHP,_Atom_setup&amp;diff=795"/>
		<updated>2019-07-10T15:49:57Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;Possible setups: * https://dev.to/oyelowooluwato5/--my-favorite-packages-on-atom-editor-for-php-development-3i77  # Configurar php-cs-fixed Para Atom se puede crear un archivo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Possible setups:&lt;br /&gt;
* https://dev.to/oyelowooluwato5/--my-favorite-packages-on-atom-editor-for-php-development-3i77&lt;br /&gt;
&lt;br /&gt;
# Configurar php-cs-fixed&lt;br /&gt;
Para Atom se puede crear un archivo ~/.php_cs donde se pone la configuración. Por ejemplo para hacer que se usen tabs en vez de espacios:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
return PhpCsFixer\Config::create()&lt;br /&gt;
	-&amp;gt;setIndent(&amp;quot;\t&amp;quot;)&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Más info&amp;#039;&amp;#039;&amp;#039;: https://github.com/FriendsOfPHP/PHP-CS-Fixer#installation&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=794</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=794"/>
		<updated>2019-07-10T15:46:50Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
# [[PHP, Atom setup]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=793</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=793"/>
		<updated>2019-07-04T16:45:36Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* npm sin sudo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se usa [[#Manejo de paquetes]] leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json (init [inicializar] el proyecto)===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===package.json vs package-lock.json===&lt;br /&gt;
Para una explicación de la diferencia entre package.json y package-lock.json, ver [https://stackoverflow.com/a/53578685/1071459 npm - Do I need both package-lock.json and package.json? - Stack Overflow].&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Este atocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Versionamiento de proyectos==&lt;br /&gt;
Cuando se ejecuta &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt; se menciona el comando de ayuda &amp;lt;code&amp;gt;npm help json&amp;lt;/code&amp;gt; para saber más sobre los campos usados en package.json y en esa ayuda se menciona [https://semver.org/ Semantic Versioning 2.0.0 | Semantic Versioning] donde se habla de una estructura lógica y protocolar del nombre de las versiones de proyectos.&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=792</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=792"/>
		<updated>2019-07-04T16:26:43Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Crear archivo package.json */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se usa [[#Manejo de paquetes]] leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json (init [inicializar] el proyecto)===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===package.json vs package-lock.json===&lt;br /&gt;
Para una explicación de la diferencia entre package.json y package-lock.json, ver [https://stackoverflow.com/a/53578685/1071459 npm - Do I need both package-lock.json and package.json? - Stack Overflow].&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Este utocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=791</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=791"/>
		<updated>2019-07-04T16:24:14Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* package.json */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se usa [[#Manejo de paquetes]] leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===package.json vs package-lock.json===&lt;br /&gt;
Para una explicación de la diferencia entre package.json y package-lock.json, ver [https://stackoverflow.com/a/53578685/1071459 npm - Do I need both package-lock.json and package.json? - Stack Overflow].&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Esteautocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=790</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=790"/>
		<updated>2019-07-03T21:01:12Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Instalación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se usa [[#Manejo de paquetes]] leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Est autocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=789</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=789"/>
		<updated>2019-07-03T20:59:21Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Manejo de paquetes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Ese autocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=788</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=788"/>
		<updated>2019-07-03T20:36:08Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Manejo de paquetes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
Ejemplos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Setear el directorio para instalar paquetes&lt;br /&gt;
npm config set prefix ~/.npm-packages&lt;br /&gt;
# Eliminar la configuracion de donde instalar los paquetes&lt;br /&gt;
npm config delete prefix&lt;br /&gt;
# Obtener configuracion de donde instalar los paquetes&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PATH=$PATH:/Users/felipe/.npm-packages/bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar.&lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  Ete autocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=787</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=787"/>
		<updated>2019-07-03T18:45:05Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* nom sin sudo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.  ste autocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==npm sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=*nix,_crear_video_a_partir_de_imagenes_usando_ffmpeg&amp;diff=786</id>
		<title>*nix, crear video a partir de imagenes usando ffmpeg</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=*nix,_crear_video_a_partir_de_imagenes_usando_ffmpeg&amp;diff=786"/>
		<updated>2019-03-26T19:11:50Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; # To create a movie from images, 2 images per second # More info: http://hamelot.io/visualization/using-ffmpeg-to-convert-a-set-of-images-into-a-video/ #...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# To create a movie from images, 2 images per second&lt;br /&gt;
# More info: http://hamelot.io/visualization/using-ffmpeg-to-convert-a-set-of-images-into-a-video/&lt;br /&gt;
# ***************************************&lt;br /&gt;
ffmpeg -r 2 -f image2 -pattern_type glob -i &amp;#039;filename*&amp;#039; video.mp4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: *nix]]&lt;br /&gt;
[[Category: linux]]&lt;br /&gt;
[[Category: bash]]&lt;br /&gt;
[[Category: macos]]&lt;br /&gt;
[[Category: mac]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=785</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=785"/>
		<updated>2019-03-26T19:10:40Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
# [[*nix, crear video a partir de imagenes usando ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=MacOS,_Volver_un_script_ejecutable_o_empaquetar_una_aplicaci%C3%B3n&amp;diff=784</id>
		<title>MacOS, Volver un script ejecutable o empaquetar una aplicación</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=MacOS,_Volver_un_script_ejecutable_o_empaquetar_una_aplicaci%C3%B3n&amp;diff=784"/>
		<updated>2019-02-28T23:11:19Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;En MacOS las aplicaciones &amp;quot;normales&amp;quot;, es decir las que se quedan guardadas en /Applications y que al hacerles doble clic se ejecutan tienen una estructura definida. Conociendo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En MacOS las aplicaciones &amp;quot;normales&amp;quot;, es decir las que se quedan guardadas en /Applications y que al hacerles doble clic se ejecutan tienen una estructura definida. Conociendo la estructura se puede crear un ejecutable con icono y todo. Esto también permite ejecutar scripts haciendo clic en una app y sin que se abra el Terminal.&lt;br /&gt;
&lt;br /&gt;
Para esto hay que seguir los [https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html lineamientos de las aplicaciones definidos por Apple] o... seguir [https://superuser.com/a/1354541/369045 estos pasos más sencillos].&lt;br /&gt;
&lt;br /&gt;
[[Category:Mac]]&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
[[Category:OS X]]&lt;br /&gt;
[[Category:Apple]]&lt;br /&gt;
[[Category:Terminal]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=783</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=783"/>
		<updated>2019-02-28T23:02:57Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Mac OS X */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
# [[macOS, Volver un script ejecutable o empaquetar una aplicación]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Santiago.py_meetup,_A_TensorFlow_very_simple_Linear_Regression_model&amp;diff=782</id>
		<title>Santiago.py meetup, A TensorFlow very simple Linear Regression model</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Santiago.py_meetup,_A_TensorFlow_very_simple_Linear_Regression_model&amp;diff=782"/>
		<updated>2019-01-10T18:54:54Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;Una charla que dio Felipe Caballero en el Meetup Santiago.py.  [https://docs.google.com/presentation/d/1JW40gwVVj0xJsZFmMVYO3I1uRJqlffXZkYI30MSGx2Q/edit?usp=sharing Santiago.p...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Una charla que dio Felipe Caballero en el Meetup Santiago.py.&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1JW40gwVVj0xJsZFmMVYO3I1uRJqlffXZkYI30MSGx2Q/edit?usp=sharing Santiago.py meetup, A TensorFlow very simple Linear Regression model]&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;br /&gt;
[[Category:TensorFlow]]&lt;br /&gt;
[[Category:Conda]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=781</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Main_Page&amp;diff=781"/>
		<updated>2019-01-10T18:53:40Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size: 15px; color: gray;&amp;quot;&amp;gt;Este es el wiki de [http://www.flat.cl/ Flat Estrategia Digital (Flat)]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Git==&lt;br /&gt;
# [[Git, lo Básico]]&lt;br /&gt;
# [[Git, Tagging]]&lt;br /&gt;
# [[Git, Branching]]&lt;br /&gt;
# [[Git, Stashing]]&lt;br /&gt;
# [[Git, Rebase]]&lt;br /&gt;
# [[Git, Submodules]]&lt;br /&gt;
# [[Git, Desplegar Sitio Web desde repositorio]]&lt;br /&gt;
&lt;br /&gt;
==CLI==&lt;br /&gt;
# Algunos comandos útiles [[:Category:Command]]&lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
# [[Habilitar .htaccess]]&lt;br /&gt;
# [[Apache, restringir acceso]]&lt;br /&gt;
# [[Apache, .htacces]]&lt;br /&gt;
# [[Apache, MAMP using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
==Javascript==&lt;br /&gt;
# [[Javascript, Variables en URL como Anchors]]&lt;br /&gt;
# [[Crear librería de JavaScript]]&lt;br /&gt;
# [[Bloque try catch]]&lt;br /&gt;
# [[Asignar multiples eventos a un selector]]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
# [[Enviar mail con archivos adjuntos PHP |Enviar mail con archivos adjuntos PHP]]&lt;br /&gt;
# [[Subir archivo a servidor |Subir archivo(s) al servidor con PHP]]&lt;br /&gt;
# [[Ámbito de clases PHP |Ámbito de clases en PHP]]&lt;br /&gt;
# [[Simular &amp;quot;text-overflow:ellipsis&amp;quot; |Simular &amp;quot;text-overflow:ellipsis&amp;quot; ]]&lt;br /&gt;
# [[PHP, CLI mostrar colores]]&lt;br /&gt;
# [[PHP, Tabular con texto simple]]&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
# [[Instalar Python 3.6 en macOS]]&lt;br /&gt;
# [[Instalar Numpy y otras librarías]]&lt;br /&gt;
# [[Python, instalar pip si no se instaló]]&lt;br /&gt;
# [[Python, archivo de inicio para importación y otras cosas]]&lt;br /&gt;
# [[Python, algunos ejemplos]]&lt;br /&gt;
# [[Santiago.py meetup, A TensorFlow very simple Linear Regression model]]&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
# [[Generar diccionario de datos con MySQL Workbench]]&lt;br /&gt;
# [[Crear enlace ODBC para conectar Excel con MySQL]]&lt;br /&gt;
# [[Importar archivo.sql por Terminal]]&lt;br /&gt;
# [[Usuarios Mysql]]&lt;br /&gt;
# [[Errores MySql]]&lt;br /&gt;
# [[MySQL, iniciar, detener o reiniciar]]&lt;br /&gt;
# [[MySQL, obtener mediana]]&lt;br /&gt;
&lt;br /&gt;
==Redes Neuronales==&lt;br /&gt;
# [[Redes Neuronales, Pasos principales de Backpropagation]]&lt;br /&gt;
&lt;br /&gt;
==Node==&lt;br /&gt;
# [[npm]]&lt;br /&gt;
&lt;br /&gt;
==Web==&lt;br /&gt;
===Tecnologías===&lt;br /&gt;
# [[Tecnologías a usar en 2017 de acuerdo a LearnCode.academy]]&lt;br /&gt;
# [[Semantic Versioning]]&lt;br /&gt;
&lt;br /&gt;
===Varios temas mezclados===&lt;br /&gt;
# [[Git, Apache and HTTPS with a free certificate]]&lt;br /&gt;
# [[Verificar sitios web con algunos códigos maliciosos en PHP]]&lt;br /&gt;
&lt;br /&gt;
===Compass y Sass===&lt;br /&gt;
# [[Compass y Sass, Instalación]]&lt;br /&gt;
# [[Compass y Sass, Configuración y uso]]&lt;br /&gt;
&lt;br /&gt;
===Gráficos===&lt;br /&gt;
# [[Flat Social Icons CSS3, Flat Version]]&lt;br /&gt;
&lt;br /&gt;
==Mediawiki==&lt;br /&gt;
# [[MediaWiki, elementos colapsables]]&lt;br /&gt;
# [[Manejar Permisos Wikimedia]]&lt;br /&gt;
# [[Extension Wiki SyntaxHighlight]]&lt;br /&gt;
&lt;br /&gt;
==NetBeans==&lt;br /&gt;
# [[Multiples filas de pestañas NetBeans]]&lt;br /&gt;
# [[Cómo documentar un Proyecto en PHP con NetBeans]]&lt;br /&gt;
# [[Compilar archivos Sass al grabar en Netbeans]]&lt;br /&gt;
==OS==&lt;br /&gt;
&lt;br /&gt;
===*nix (Sistemas tipo Unix)===&lt;br /&gt;
# [[*nix, crear alias de comandos]]&lt;br /&gt;
# [[Crear una imagen usando comando convert]]&lt;br /&gt;
# [[SSH, mostrando las claves en una máquina y viendo las claves con SSH]]&lt;br /&gt;
# [[Bash, cómo hacer un script sólo ejecutable por root]]&lt;br /&gt;
# [[*nix, encontrar archivos usando find]]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
# [[Linux, comandos y operaciones básicos]]&lt;br /&gt;
# [[Crear claves publicas y privadas para conectarse por SSH al servidor]]&lt;br /&gt;
# [[Linux, Búsquedas de archivos y texto]]&lt;br /&gt;
# [[Linux, Cambiar directorio home por defecto]]&lt;br /&gt;
# [[Linux, hacer que el botón de power (on/off) apague el computador solo si no hay nadie loggeado (Ubuntu 14.04)]]&lt;br /&gt;
# [[Linux, Borrar o renombrar archivos con caracteres &amp;quot;raros&amp;quot; en su nombre]]&lt;br /&gt;
# [[Linux, Tips y Trucos]]&lt;br /&gt;
# [[Iniciar con Grub Ubuntu]]&lt;br /&gt;
# [[Instalar lftp]]&lt;br /&gt;
# [[Instalar Firewall Firestarter en Ubuntu 14.04]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[Linux, desactivar la tecla Windows (Super)]]&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
# [[Mac OS X, Como incluir directorios en PATH]]&lt;br /&gt;
# [[Instalar mcrypt]]&lt;br /&gt;
# [[Instalción y uso de ImageMagick]]&lt;br /&gt;
# [[OS X, Automator y AppleScript]]&lt;br /&gt;
# [[Mac OS X, Instalar Collabtive]]&lt;br /&gt;
# [[Mac OS X (macOS) upgrade OS]]&lt;br /&gt;
# [[macOS, ejecutar script en la interfaz gráfica (doble click)]]&lt;br /&gt;
# [[macOs, efecto suck]]&lt;br /&gt;
# [[Instalar Homebrew]]&lt;br /&gt;
&lt;br /&gt;
==Trabajo IT==&lt;br /&gt;
===Metodologías===&lt;br /&gt;
# [[Metodologías para encontrar errores]]&lt;br /&gt;
# [[Metodologías para encontrar soluciones]]&lt;br /&gt;
# [[Metodología de trabajo por encargo]]&lt;br /&gt;
# [[Como hacer un diagrama de flujo]]&lt;br /&gt;
# [[Métodos de programación]]&lt;br /&gt;
# [[Método Científico]]&lt;br /&gt;
# [[Multitasking versus Monotasking]]&lt;br /&gt;
&lt;br /&gt;
===Estándares===&lt;br /&gt;
# [[Estándares de Desarrollo]]&lt;br /&gt;
# [[Ejemplo de HTML5 válido]]&lt;br /&gt;
# [[HTML5, Algunos tips]]&lt;br /&gt;
# [[CSS, Algunos tips]]&lt;br /&gt;
# [[Cómo Generar Documentación en JavaScript]]&lt;br /&gt;
# [[Code Design Patterns (Patrones de Diseño de Código)]]&lt;br /&gt;
# [[Firmas de funciones en programación]]&lt;br /&gt;
&lt;br /&gt;
==Herramientas==&lt;br /&gt;
# [[Atom, formatear PHP]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=780</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=780"/>
		<updated>2018-11-07T21:47:20Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;. Este autocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
==nom sin sudo==&lt;br /&gt;
Ver [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://johnpapa.net/node-and-npm-without-sudo/ John Papa: Node and npm without sudo]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=779</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=779"/>
		<updated>2018-10-10T14:12:05Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es npm==&lt;br /&gt;
El sitio de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, pero en realidad significa &amp;#039;&amp;#039;Node Package Manager&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; fue creado inicialmente como una herramienta para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;, tiene paquetes pues... para &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039;. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; funcione debemos tener una versión de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; mayor a 0.10.32. &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; es independiente de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; por lo que se puede tener una versión antigua de &amp;#039;&amp;#039;&amp;#039;Node.js&amp;#039;&amp;#039;&amp;#039; y una versión nueva de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autocompletar==&lt;br /&gt;
Para los fanáticos de autocompletar, &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039; tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm completion &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de &amp;#039;&amp;#039;&amp;#039;npm&amp;#039;&amp;#039;&amp;#039;. Este autocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [http://npmjs.com npmjs.com]&lt;br /&gt;
* [https://nodejs.org/en/download/ Download | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/fixing-npm-permissions 20 - How to prevent permissions errors | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:Node.js]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=778</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=778"/>
		<updated>2018-10-10T13:54:48Z</updated>

		<summary type="html">&lt;p&gt;Felipe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Qué es==&lt;br /&gt;
El sitio de npm es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas npm, pero en realidad significa Node Package Manager.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de node, un framework creado para usar javascript en el servidor, una de las ideas detrás de node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  npm fue creado inicialmente como una herramienta para node, tiene paquetes pues... para node. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar npm hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que npm funcione debemos tener una versión de node mayor a 0.10.32. npm es independiente de node por lo que se puede tener una versión antigua de node y una versión nueva de npm.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de npm está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
npm permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de npm, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes npm se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
==Instalar paquetes==&lt;br /&gt;
===Instalar global vs local===&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
Más info: [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
===Ejemplo local===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# En una carpeta nueva ejecutar&lt;br /&gt;
npm install jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado localmente&lt;br /&gt;
npm ls&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejemplo global===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install -g jquery&lt;br /&gt;
# El siguiente comando muestra lo instalado globalmente&lt;br /&gt;
npm ls -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==package.json==&lt;br /&gt;
&lt;br /&gt;
===Para qué sirve===&lt;br /&gt;
Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crear archivo package.json===&lt;br /&gt;
Para crea un archivo package.json se puede de las siguientes formas:&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init&amp;lt;/code&amp;gt;, crea el archivo luego de responder algunas preguntas.&lt;br /&gt;
* &amp;lt;code&amp;gt;npm init --yes&amp;lt;/code&amp;gt;, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.&lt;br /&gt;
* Manualmente, como es un archivo de texto se puede crear manualmente.&lt;br /&gt;
&lt;br /&gt;
Para más info ver [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation].&lt;br /&gt;
&lt;br /&gt;
===dependencies vs devDependencies===&lt;br /&gt;
Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.&lt;br /&gt;
&lt;br /&gt;
La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Para agregar el paquete a dependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save&lt;br /&gt;
# Para agregar el paquete a devDependencies&lt;br /&gt;
 npm install &amp;lt;package&amp;gt; --save-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
* [https://docs.npmjs.com/cli/install install | npm Documentation]&lt;br /&gt;
* [https://docs.npmjs.com/getting-started/using-a-package.json 05 - Working with package.json | npm Documentation]&lt;br /&gt;
* [https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ npm 1.0: Global vs Local installation | Node.js]&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:node]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=777</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=777"/>
		<updated>2018-10-10T13:30:38Z</updated>

		<summary type="html">&lt;p&gt;Felipe: /* Instalación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Qué es==&lt;br /&gt;
El sitio de npm es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas npm, pero en realidad significa Node Package Manager.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de node, un framework creado para usar javascript en el servidor, una de las ideas detrás de node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  npm fue creado inicialmente como una herramienta para node, tiene paquetes pues... para node. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar npm hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que npm funcione debemos tener una versión de node mayor a 0.10.32. npm es independiente de node por lo que se puede tener una versión antigua de node y una versión nueva de npm.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de npm está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nota&amp;#039;&amp;#039;&amp;#039;: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.&lt;br /&gt;
&lt;br /&gt;
==Manejo de paquetes==&lt;br /&gt;
npm permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de npm, normalmente este directorio se encuentra &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes npm se puede ejecutar el siguiente comando:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm config get prefix&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, [https://docs.npmjs.com/getting-started/fixing-npm-permissions este link] puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto. &lt;br /&gt;
&lt;br /&gt;
==Instalar global vs local==&lt;br /&gt;
Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:node]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
	<entry>
		<id>http://wiki.caballero.co/index.php?title=Npm&amp;diff=776</id>
		<title>Npm</title>
		<link rel="alternate" type="text/html" href="http://wiki.caballero.co/index.php?title=Npm&amp;diff=776"/>
		<updated>2018-10-10T13:23:21Z</updated>

		<summary type="html">&lt;p&gt;Felipe: Created page with &amp;quot;&amp;lt;!-- &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; &amp;lt;/source&amp;gt; --&amp;gt; ==Qué es== El sitio de npm es [http://npmjs.com npmjs.com].  En la esquina izquierda superior tienen una broma que le da significados...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Qué es==&lt;br /&gt;
El sitio de npm es [http://npmjs.com npmjs.com].&lt;br /&gt;
&lt;br /&gt;
En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas npm, pero en realidad significa Node Package Manager.&lt;br /&gt;
&lt;br /&gt;
Fue pensado inicialmente para manejar paquetes de node, un framework creado para usar javascript en el servidor, una de las ideas detrás de node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo. &lt;br /&gt;
&lt;br /&gt;
Como  npm fue creado inicialmente como una herramienta para node, tiene paquetes pues... para node. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).&lt;br /&gt;
&lt;br /&gt;
==Instalación==&lt;br /&gt;
Para instalar npm hay que tener Node instalado. Para instalar Node se puede usar:&lt;br /&gt;
* MacPorts&lt;br /&gt;
* Homebrew&lt;br /&gt;
* Instalador (https://nodejs.org/en/download/)&lt;br /&gt;
&lt;br /&gt;
Para que npm funcione debemos tener una versión de node mayor a 0.10.32. npm es independiente de node por lo que se puede tener una versión antigua de node y una versión nueva de npm.&lt;br /&gt;
&lt;br /&gt;
Con el siguiente comando se revisa qué versión de npm está instalada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm -v &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para instalar la ultima versión se ejecuta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install npm@latest -g&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:npm]]&lt;br /&gt;
[[Category:node]]&lt;/div&gt;</summary>
		<author><name>Felipe</name></author>
	</entry>
</feed>