# ubuntu_tips Tips y configuraciones de ubuntu ## Eligir terminal por defecto ubuntu sudo update-alternatives --config x-terminal-emulator ## Instalar docker ```sh sudo apt-get install docker-ce # Compose ayuda a crear instalaciones de varios contenedores sudo apt-get install docker-compose ``` ### Pagina Oficial Consultar Instalacion https://docs.docker.com/engine/install/ubuntu/ ### Permitir correr docker sin sudo ```sh sudo groupadd docker sudo gpasswd -a $USER docker newgrp docker ``` Otra Forma: ```sh sudo usermod -aG docker $USER ``` ### Detener todos los contenedores ```sh docker stop $(docker ps -a -q) ``` ### borrar todos los contenedores ```sh docker rm $(docker ps -a -q) ``` ### imagen docker ayuda ```sh docker run -d -p 80:80 docker/getting-started ``` ### cambiar temporales Docker ```sh sudo vim /etc/default/docker # Agregar esta linea al final con la ruta de tu disco externo montado export DOCKER_TMPDIR="/mnt/storage/docker-tmp" ``` ### Comandos básicos ### INSTALAR EMQX DOCKER docker run -d --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 -p 8084:8084 -e EMQX_ALLOW_ANONYMOUS=false emqx/emqx:latest ### EMQX DOCKER_COMPOSE Instalamos la version 4.2.3 ya que en posteriores no soporta el plugin **emqx_auth_username** ToDo: + [x] Buscar solucion emqx_auth_username **docker-compose.yml** version: "2.0" services: emqx: container_name: emqx_iot image: emqx/emqx:latest #restart: always ports: - 18083:18083 - 18084:18084 - 1883:1883 - 8883:8883 - 8083:8083 - 8084:8084 - 8085:8081 environment: EMQX_NAME: mi-emqtt EMQX_HOST: 127.0.0.1 EMQX_ALLOW_ANONYMOUS: "false" EMQX_NOMATCH: "deny" TZ: "America/Bogota" EMQX_DASHBOARD__DEFAULT_USER__PASSWORD: "pass_dasboard" EMQX_DASHBOARD__DEFAULT_USER__LOGIN: "mdchaparror" EMQX_AUTH__USER__1__USERNAME: "mdchaparror" EMQX_AUTH__USER__1__PASSWORD: "pass_clientes_mtt" EMQX_LOADED_PLUGINS: "emqx_auth_username,emqx_recon,emqx_retainer,emqx_management,emqx_dashboard" ### Abrir puertos en ubuntu ufw allow from any to any port 18083 proto tcp ### Instalar Portainer docker volume create portainer_data docker run -d \ --name Portainer \ --restart=always \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer [https://domology.es/instalacion-docker-parte-1-dockerportainer/](https://domology.es/instalacion-docker-parte-1-dockerportainer/) ### PORTAINER EN LA RASPBERRY sudo docker pull portainer/portainer-ce:latest sudo docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest ### RPI-MONITOR docker run --device=/dev/vchiq --device=/dev/vcsm-cma --volume=/opt/vc:/opt/vc --volume=/boot:/boot --volume=/sys:/dockerhost/sys:ro --volume=/etc:/dockerhost/etc:ro --volume=/proc:/dockerhost/proc:ro --volume=/usr/lib:/dockerhost/usr/lib:ro -p=8888:8888 --name="rpi-monitor" -d michaelmiklis/rpi-monitor:latest ### Home Assistant docker run --init -d --name="home-assistant" -e "TZ=America/Bogota" -v /home/pi/docker/config:/config --net=host homeassistant/raspberrypi3-homeassistant:stable ### Instalar Gitea Descargar repositorio de gitea git clone https://github.com/go-gitea/gitea.git Editar Fichero DockerFile Cambiar linea: **FROM golang:1.10-alpine3.7 AS build-env** por **FROM resin/raspberrypi3-alpine-golang AS build-env** y la linea: **FROM alpine:3.7** por **FROM resin/raspberrypi3-alpine:3.7** Construir la imagen: docker build -t mdchaparror/gitea . Crear archivo docker-compose.yml version: "2" networks: gitea: external: false services: server: image: mdchaparror/gitea container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "5000:3000" - "222:22" Ejecutar: docker-compose up -d ### Backup Raspberry #### Crear Imagen Mirar el disco correspondiente a la sd sudo fdisk -l sudo dd bs=4M if=/dev/sdd | gzip > imagen_rasp1_back_`date +%Y-%M-d`.gz ### Restaurar imagen La imagen se puede restaurar imagen ya sea con dd o con [balenaEtcher](https://www.balena.io/etcher/) gzip -dc image.gz | sudo dd bs=4M of=/dev/sdd ### Virtualbox Para poder usar los dispositivos usb en virtualBox añadir usuario al grupo de virtualboxusers sudo usermod -a -G vboxusers mdchaparror ### Instalar NODERED ***docker-compose.yml ```sh version: 2 services: nodered: container_name: Node-red image: nodered/node-red:latest ports: - 1880:1880 volumes: - ./gitea:/data ``` ## Mongo sudo systemctl status mongodb ## Heroku + login: **heroku login** + subir aplicacion **git push heroku master** ### Variables de entorno + ver las variables de entorno **heroku config** + añadir una variable **heroku config:set VARIABLE=valor** + borrar una variable **heroku config:unset VARIABLE** + obtener una variable **heroku config:get VARIABLE** ## Despliegue APP FINANZAS ```sh heroku config:set BASE_URL="https://finanzasm.herokuapp.com/api" heroku config:set MONGOOSE_URI="mongodb+srv://mdchaparror:un260874@cluster0-4fhc1.mongodb.net/test?retryWrites=true" heroku config:set REGISTER="true" heroku config:set CLOUDINARY_CLUD_NAME="mdchaparror" heroku config:set CLOUDINARY_API_KEY="491878952588461" heroku config:set CLOUDINARY_API_SECRET="KvpO_0WLT8dVXCKOhEPXWNllg1w" heroku config:set TOKEN_SECRET="api finanzas mdchaparror @4050#" git add . git push heroku master ``` ## Instalar Mongo ubuntu 22:04 ```sh curl -LO http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb sudo dpkg -i ./libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb ``` ## Habilitar ufw ```sh sudo ufw app list #lista las app permitidas sudo ufw allow OpenSSH # habilta comunicacion ssh sudo ufw allo port # habilita un puerto sudo ufw deny port # bloquea el puerto sudo ufw enable #habilita el firewall ``` ### Conocer que programa esta usando determinado puerto ```sh sudo netstat -tulpn | grep :puerto_buscado ``` ## Despliegue fly.io ```sh fly launch fly deploy fly status ``` ```sh flyctl secrets set BASE_URL="https://finanzasm.fly.dev/api/" flyctl secrets set CLOUDINARY_API_KEY="491878952588461" flyctl secrets set CLOUDINARY_API_SECRET="KvpO_0WLT8dVXCKOhEPXWNllg1w" flyctl secrets set CLOUDINARY_CLUD_NAME="mdchaparror" flyctl secrets set MONGOOSE_URI="mongodb+srv://mdchaparror:un260874@cluster0-4fhc1.mongodb.net/test?retryWrites=true" flyctl secrets set REGISTER=true flyctl secrets set REGISTER=true flyctl secrets set TOKEN_SECRET="api finanzas mdchaparror @4050#" ``` ### SSH #### COpiar llave SSH ```sh ssh-copy-id @ ``` **o** ```sh cat ~/.ssh/id_rsa.pub | ssh @ 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys' ``` https://www.raspberrypi.com/documentation/computers/remote-access.html#passwordless-ssh-access ### Estadisticas del sistema ```sh systemd-analyze ``` salida ``` Startup finished in 10.336s (kernel) + 54.408s (userspace) = 1min 4.745s multi-user.target reached after 54.214s in userspace ``` ### Velocidad Escritura ```sh sudo apt-get install hdparm sudo hdparm -t /dev/mmcblk0 ``` ## Hardware ### Dar permisos a los puertos seriales sin sudo ```sh sudo usermod -a -G dialout $USER ``` Es necesario reiniciar la sesión ## error: **Kernel panic -> not syncing vfs unable to mount root fs ```sh sudo update-initramfs -c -k 6.1.0-18-amd64 #version del kernel sudo update-grub ``` ## Activar Encendido por tarjeta de red Para saber si la tarjeta de red tiene activo el encendido por red ```sh ethtool enp7s0 | grep Wake-on ``` en caso de tener la siguiente respuesta ```sh Supports Wake-on: pumbg Wake-on: g ``` si Wake-on =d corremos la siguiente linea ```sh ethtool -s enp7s0 wol g ``` Este cambio es temporal se pierde en el proximo reinicio para dejar el cambio permanente creamos el siguiente archivo **/etc/systemd/network/10-enp7s0.link** con la siguiente información: ```sh [Match] MACAddress=00:e0:1d:67:00:d1 [Link] NamePolicy=kernel database onboard slot path MACAddressPolicy=persistent WakeOnLan=magic ``` para enviar el pakete de encendido desde otro equipo se usa **wakeonlan** en caso de no tener el paquete se instala con apt ```sh #wakeonlan mac wakeonlan 00:e0:1d:67:00:d1 ``` se puede crear un alias en .basrc o .zshrc ```sh alias server="wakeonlan 00:e0:1d:67:00:d1" ```