Corregir error ‘permission denied’ en linux al intentar ejecutar Docker sin sudo

Para este post se asume que ya has instalado Docker satisfactoriamente

Al instalar Docker Community Edition o Docker-CE, te darás cuenta que al intentar ejecutar el comando docker en tu terminal te aparece un error parecido este:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/json: dial unix /var/run/docker.sock: connect: permission denied

Como puedes leer esto se debe a que tu usuario, el usuario con el cual estas intentando ejecutar el comando, no posee los permisos para hacerlo.

Solución

1.- Crea un grupo de nombre docker

$ sudo groupadd docker

2.- Agrega a tu usuario al grupo anteriormente creado

$ sudo usermod -aG docker $USER

3.- Cierra sesión con tu usuario y vuelve a iniciarla para que el nuevo grupo puede ser cargado en la información de tu usuario

  • Si estás en una maquina virtual puede que sea necesario que la reinicies
  • Si estás en un escritorio gráfico tipo x-windows es probable que necesites salir y volver a entrar para que los cambios tomen efecto

4.- Comprueba que puedas usar docker sin sudo

$ docker run hello-world

El comando anterior descarga una imagen de prueba y corre un contenedor a partir de ella. Al correr este contenedor muestra una serie de mensajes informativos y luego termina.

Si ya habías usado sudo anteriormente

Si habías ejecutado el comando docker con sudo antes de agregar tu usuario al grupo docker como fue indicado arriba, podrías ver el siguiente error:

WARNING: Error loading config file: /home/user/.docker/config.json - stat /home/user/.docker/config.json: permission denied

el cual indica que el directorio ~/.docker/ fue creado con permisos equivocados por el uso de sudo.

Para solucionar esto tienes dos alternativas:

  1. Puedes remover todo el directorio ~/.docker/. La próxima oportunidad que ejecutes el domando docker creará el directorio automáticamente con una configuración por defecto, esto evidentemente eliminará las configuraciones anteriormente almacenadas.
  2. Puedes cambiar el propietario y permisos del directorio~/.docker/ con los siguientes comandos:
$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "/home/$USER/.docker" -R

 

Fuente: docs.docker.com

Cómo instalar node.js con NVM

NVM o Node Version Manager es como nombre lo indica un manejador de versiones de node, igual que RVM lo es para Ruby o Virtualenv en Python. La idea es poder use poder ejecutar diferentes versiones de node y npm cada uno en un contenedor diferente sin afectar a las otras, asi tener un entorno con paquetes específicos para cada uno de nuestros proyectos.

Instalando

NVM no esta disponible para windows, puedes revisar en el repositorio del proyecto algunas herramientas alternativas

Debes asegurarte tener una versión de c++ en tu computador, para las distribuciones de Linux basadas en Debian funciona si ya tienes instalado el paquete build-essential.

Como indica su repositorio en github podemos instalarlo tenemos 3 alternativas:

1.- cURL, para ello debemos instalarlo con el manejador de paquetes de nuestra sistema operativo.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash

2.- wget, viene instalado por defecto en las distribuciones mas populares de GNU/Linux

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash

3.- git, clonando el repositorio, para ello debes instalar git en tu computador

git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`

Cómo usar NVM

Para descargar, compilar y instalar

nvm install <version>

donde <version> es el numero de la versión que quieren instalar, así:

nvm install 5.0

NVM permite instalar tantas versiones de node como necesites

Usar node

como ya dije es posible instalar varias versiones de node.js, por lo tanto es necesario especificarle a NVM cual versión queremos usar:

nvm use 5.0

¿Dónde se instala?

Para saber donde se encuentra nuestra instalación de node usamos el comando which:

nvm which <version>

Otros comandos

Listar versiones disponibles para instalar:

nvm ls-remote

Asignar una versión de node por defecto

nvm alias default node

podemos, si queremos, solo correr una versión especifica

nvm run 5.0 --version <script>

donde <script> es algún script que queramos correr con la versión especificada, así:

nvm run 5.0 --versión app.js

también podemos correr un comando especifico de una versión especifica de node, así:

nvm exec 5.0 node app.js

Más que node.js

Con NVM si así lo queremos podemos instalar io.js

nvm install io.js 3.3.1

Como notas es la misma nomenclatura que usamos para instalar node.js con un parámetro adicional “io.js”, de igual forma ocurre con todos los comandos descritos hasta acá.

 

 

Fuente: https://github.com/creationix/nvm

Cómo instalar git en Ubuntu 15.10

Git es la herramienta para versionado de proyectos de software más popular de la actualidad y como es de esperar se encuentra en los repositorios de Ubuntu así como de la mayoría de las distribuciones GNU/Linux.

Instalación

Instalarlo es tan siemple como ir a una terminal y a traves del gestor de paquetes instalar git-core:

~$ sudo aptitude install git-core

para comprobar que se ha instalado correctamente llamamos al comango git con alguna de sus opciones como por ejemplo –version, si reconoce a git como un comando con esta opción nos dirá la versión del mismo:

~$ git --version
git version 2.5.0

 

 

 

Crear, activar y desactivar entornos virtuales con Virtualenv

Creación

Bien una vez tengamos instalado virtualenenv (las instrucciones para instalarlo puedes encontrarlas en este acá) para crear un entorno virtual solo tenemos que escribir virtualenv y un nombre para nuestro entorno virtual, así:

~$ virtualenv my_enviroment
New python executable in my_enviroment/bin/python
Installing setuptools, pip, wheel...done.

Si queremos especificar una versión de python diferente a la que por defecto nos brinda el sistema operativo, podemos especificarlo con la opción -p de esta manera:

~$ virtualenv my_enviroment3 -p /usr/bin/python3

Activación

El paso anterior nos creará un directorio de con el nombre que le hayamos dado a nuestro entorno virtual, nuestro caso my_enviroment, dentro del el debemos buscar el script activate y pasarlo como argumento al comendo source:

~$ source my_enviroment/bin/activate

si todo va bien el promt de nuestra terminal debe verse similar a esto:

(my_enviroment):~$

cuando el promt se encuentre de esta forma, todo los cambios que hagamos a nuestro entorno python se hará de forma local sin afectar a la instalación del sistema.

Desactivación

Para desactivar el entorno virtual solo debemos escribir la palabra deactivate en nuestra terminal:

(my_enviroment):~$ deactivate

El promt volverá a su forma inicial sin el nombre del entorno virtual entre paréntesis al principio

Cómo instalar Whoops en Laravel 5.1

whoops-ssLamentablemente Whoops el paquete que nos permitía en la versión 4 de Laravel tener una interfaz de debug linda y amigable no viene incluido por defecto en Laravel 5.x, sin embargo no es tan complicado agregarlo.

En la carpeta de nuestro proyecto en Laravel escribimos esto en la terminal:

~$ composer require filp/whoops

esto modificará nuestro archivo composer.json, e instalará whoops en el directorio vendor de nuestro proyecto.

Luego abrimos con el editor de texto de nuestra preferencia el archivo app/Exceptions/Handler.php y editamos el método render() de la siguiente forma:

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e)
{
    if ($this->isHttpException($e))
    {
        return $this->renderHttpException($e);
    }


    if (config('app.debug'))
    {
        return $this->renderExceptionWithWhoops($e);
    }

    return parent::render($request, $e);
}

/**
 * Render an exception using Whoops.
 * 
 * @param  \Exception $e
 * @return \Illuminate\Http\Response
 */
protected function renderExceptionWithWhoops(Exception $e)
{
    $whoops = new \Whoops\Run;
    $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler());

    return new \Illuminate\Http\Response(
        $whoops->handleException($e),
        $e->getStatusCode(),
        $e->getHeaders()
    );
}

Y eso es todo, ahora deberías tener tener whoops activo en tu proyecto.

 

Fuente: mattstauffer.co

Activar extensión Mcrypt de PHP en Ubuntu 15.10

Instalamos via gestor de paquetes del sistema operativo php5-mcrypt:

~$ sudo aptitude install php5-mcrypt

Luego lo habilitamos con el comando php5enmod:

~$ sudo php5enmod mcrypt

Si estamos trabajando con php y apache (que es lo mas común), para que el servidor web tome estos cambios debemos reiniciarlo:

~$ sudo service apache2 restart

 

Cómo instalar Composer

Estas instrucciones las puedes encontrar en la web de composer en su la sección download.

Abrimos una terminal y ejecutamos.

~$ curl -sS https://getcomposer.org/installer | php

Sino tenemos instalado curl podemos hacerlo a través del gestor de paquetes de nuestra distribución; si no podemos instalar curl podemos cambiar el comando de arriba por:

~$ php -r "readfile('https://getcomposer.org/installer');" | php

una vez hecho esto tendremos en nuestro computador un archivo de nombre composer.phar, el cual ejecutamos con:

~$ php composer.phar

y nos debe dar una salida parecida a esta:

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.0-dev (b6bac0c2d31e4f84d607638277322d8d256e61af) 2015-11-29 17:21:38

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about           Short information about Composer
  archive         Create an archive of this composer package
  browse          Opens the package's repository URL or homepage in your browser.
  clear-cache     Clears composer's internal package cache.
  clearcache      Clears composer's internal package cache.
  config          Set config options
  create-project  Create new project from a package into given directory.
  depends         Shows which packages depend on the given package
  diagnose        Diagnoses the system to identify common errors.
  dump-autoload   Dumps the autoloader
  dumpautoload    Dumps the autoloader
  global          Allows running commands in the global composer dir ($COMPOSER_HOME).
  help            Displays help for a command
  home            Opens the package's repository URL or homepage in your browser.
  info            Show information about packages
  init            Creates a basic composer.json file in current directory.
  install         Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses        Show information about licenses of dependencies
  list            Lists commands
  remove          Removes a package from the require or require-dev
  require         Adds required packages to your composer.json and installs them
  run-script      Run the scripts defined in composer.json.
  search          Search for packages
  self-update     Updates composer.phar to the latest version.
  selfupdate      Updates composer.phar to the latest version.
  show            Show information about packages
  status          Show a list of locally modified packages
  suggests        Show package suggestions
  update          Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate        Validates a composer.json and composer.lock

Si te dio una salida parecida, eso quiere decir que ya tienes composer funcional en tu equipo. Ahora solo resta un ultimo paso, para tener composer de forma global y no tener que descargar el archivo en cada proyecto en el cual vayamos a trabajar, debemos mover nuestro archivo composer.phar al directorio /usr/local/bin:

~$ sudo mv composer.phar /user/local/bin/composer

Ahora si escribimos composer en nuestra terminal, sin importar el directorio donde nos encontremos, debería producirse la misma salida que cuando escribimos php composer.phar.

~$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.0-dev (b6bac0c2d31e4f84d607638277322d8d256e61af) 2015-11-29 17:21:38

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about           Short information about Composer
  archive         Create an archive of this composer package
  browse          Opens the package's repository URL or homepage in your browser.
  clear-cache     Clears composer's internal package cache.
  clearcache      Clears composer's internal package cache.
  config          Set config options
  create-project  Create new project from a package into given directory.
  depends         Shows which packages depend on the given package
  diagnose        Diagnoses the system to identify common errors.
  dump-autoload   Dumps the autoloader
  dumpautoload    Dumps the autoloader
  global          Allows running commands in the global composer dir ($COMPOSER_HOME).
  help            Displays help for a command
  home            Opens the package's repository URL or homepage in your browser.
  info            Show information about packages
  init            Creates a basic composer.json file in current directory.
  install         Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses        Show information about licenses of dependencies
  list            Lists commands
  remove          Removes a package from the require or require-dev
  require         Adds required packages to your composer.json and installs them
  run-script      Run the scripts defined in composer.json.
  search          Search for packages
  self-update     Updates composer.phar to the latest version.
  selfupdate      Updates composer.phar to the latest version.
  show            Show information about packages
  status          Show a list of locally modified packages
  suggests        Show package suggestions
  update          Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate        Validates a composer.json and composer.lock

 

Fuente: getcomposer.org

Cómo instalar Virtualenv en Ubuntu 15.10

Lo primero que tenemos que hacer es instalar el paquete python-setuptools:

~$ sudo aptitude install python-setuptools

Luego con easy_install instalamos pip:

~$ sudo easy_install pip

Después con pip instalamos virtualenv:

~$ sudo pip install virtualenv

Debemos colocar sudo tanto para el comando easy_install como para pip, porque al igual que aptitude realizarán cambios en los directorios del sistema.

con esto ya tenemos instalado virtual en nuestro sistema operativo, listo para usar.

Cómo instalar MariaDB en Ubuntu 15.10

Abrimos una terminal y escribimos

~$ sudo aptitude install mariadb-common mariadb-server mariadb-client

si ya has instalado mysql en otras ocasiones te llamará la atención que en proceso de instalación no te haya pedido especificar la clave del usuario superadministrador (root), tampoco puedes asignarlo a través del comando:

mysql_secure_installation

nos lanzará un error parecido a este:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):

para corregir este error primero nos iniciamos sesión en cli de mysql de la siguiente forma:

sudo mysql -u root

y ejecutamos las siguientes instrucciones:

MariaDB [(none)]> use mysql;
Database changed
MariaDB [mysql]> update user set plugin='' where User='root';
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0
flush privileges;
Query OK, 0 rows affected (0.00 sec)

Una vez hecho esto, salimos del cli con:

MariaDB [mysql]> \q
Bye

Ahora si podemos asignar el password al usuario root con el comando:

mysql_secure_installation

Dejamos la opciones por defecto:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] 
 ... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] 
 ... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] 
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] 
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

verificamos que este corriendo MariaDB:

sudo service mysql status

Probamos iniciar sesión en el cli con:

mysql -u root -p

Deberíamos poder ingresar el password que hemos asignado ;-).

 

Fuente: www.unixmen.com