Mejor usar una clave SSH que conectarse usando la contraseña.
Crear la clave usando ed25519 que es más rápido
ssh-keygen -t ed25519 -C "usuario@computadora"
Copiarrla al servidor:
ssh-copy-id usuario@servidor
En KDE 6, se está buscando que todos los procesos sean envueltos por systemctl, de manera que todos los procesos estén ordenados jerárquicamente pudiendo limitar los recursos usando cgroups.
Systemd es el proceso principal del sistema (PID1) del cual derivan todos los demás procesos, el único ancestro es el IDLE (PID0), que está reservado al kernel.
Los servicios del sistema se se encuentran en tres directorios:
| Directorio | Prioridad | Descripción |
|---|---|---|
/usr/lib/systemd/system |
Baja | Servicios creados por el SO |
/run/systemd/system |
Media | Servicios creados por procesos en tiempo de ejecución |
/etc/systemd/system |
Alta | Servicios creados por el usuario |
~/.config/systemd/user |
Alta | Servicios que se ejecutan cuando se inicia sesión |
Para los servicios que se crean manualmente y no hacen parte del sistema, lo mejor es usar una carpeta ~/services/ en el home y crear un enlace simbólico por cada servicio hacia ~/.config/systemd/user/. De esta manera se simplifica muchísimo tanto la creación de backups como el versionado con git.
Systemd usa un sistema de targets para agrupar los tiempos en que se ejecutan los procesos. A continuación se presenta una lista de muchos de ellos.
| Target | Descripción |
|---|---|
poweroff.target |
Apagado del sistema |
reboot.target |
Reinicio del sistema |
halt.target |
Apagado del sistema sin cortar electricidad |
kexec.target |
Reinicio sin pasar por la BIOS |
rescue.target |
Modo monousuario para reparaciones |
emergency.target |
Modo más crudo, solo carga /bin/sh y FS en lectura |
exit.target |
Cierre de sesión del usuario |
| Target | Descripción |
|---|---|
sysinit.target |
Servicios críticos tempranos |
basic.target |
El sistema básico está listo |
cryptsetup.target |
Configuración de discos cifrados |
local-fs.target |
Todos los discos están montados |
remote-fs.target |
Discos remotos montados |
swap.target |
Todas las unidades swap están montadas |
network.target |
Sistema de red listo |
network-online.target |
El sistema tiene dirección IP |
time-sync.target |
Reloj NTP sincronizado |
| Target | Descripción |
|---|---|
multiuser.target |
Estado normal de un servidor |
graphical.target |
Estado normal de un escritorio |
printer.target |
Servicios de impresión activo |
sound.target |
Sistema de sonido activo |
bluetooth.target |
Soporte de bluetooth activo |
| Target | Descripción |
|---|---|
paths.target |
Activa todas las unidades .path |
timers.target |
Activa todas las unidades .timer |
socket.target |
Activa todas las unidades .socket |
slices.target |
Gestiona porciones de recursos |
Contiene información general del servicio y algunas directrices. Tiene muchísimos parámetros, a continuación se listan los más importantes:
After=network.target sshdgenkeys.service, Before=ssh-access.target.Es la sección específica de un servicio, las otras dos son generales de los archivos Unit. A continuación se listan algunas de las directrices más importantes:
simple: Asume que el servicio está corriendo una vez el kernel le asigna un PID.notify: Espera hasta que el servicio le envíe una notificación mediante sd_notify.notify-reload: Similar a notify, pero además envía una notificación cuando un servicio es recargado.always: Reinicia el proceso siempre.on-success: Reinicia solo si cierra con exit-0.on-failure: Reinicia solo si cierra con exit-1.control-group: Es el que está por defecto, mata todos los subprocesos.process: Mata solo el proceso principal y mantiene los subprocesos.mixed: Da un tiempo de espera para que el proceso principal mate a los subprocesos. En caso de que no, mata a todos los subprocesos.Directrices al usar systemctl enable:
WantedBy=multi-user.target
.wants/RequiredBy=multi-user.target
.requires/.upholds/El sandboxing agrupa las directrices de aislamiento y restricción del entorno de ejecución del servicio. Son independientes entre sí y pueden usarse con cualquier usuario, incluyendo root. Algunas de las más importantes:
ProtectHome=yes — el home aparece completamente vacío para el servicio.ProtectHome=read-only — el home es visible pero no modificable.PrivateTmp=yes — el servicio tiene su propio /tmp aislado.ProtectSystem=strict — el sistema de archivos es de solo lectura para el servicio.NoNewPrivileges=yes — el servicio no puede escalar privilegios.RemoveIPC=yes — elimina los objetos IPC del servicio al detenerse.Systemd puede crear y gestionar automáticamente directorios para el servicio, asignándoles los permisos correctos. Cada directriz recibe como parámetro una ruta relativa, no se permiten rutas absolutas ni el uso de ..
| Directriz | Ruta absoluta |
|---|---|
StateDirectory= |
/var/lib/nombre |
CacheDirectory= |
/var/cache/nombre |
LogsDirectory= |
/var/log/nombre |
RuntimeDirectory= |
/run/nombre |
ConfigurationDirectory= |
/etc/nombre |
Para los servicios expuestos a internet, la opción más segura es usar DynamicUser=yes. A diferencia de un usuario fijo, el UID cambia en cada arranque y no existe en /etc/passwd. Además activa implícitamente las siguientes directrices de sandboxing:
ProtectHome=read-onlyPrivateTmp=yesProtectSystem=strictRemoveIPC=yesCon DynamicUser=yes la única forma de persistir datos es usar las directrices de sandboxing anteriores, ya que systemd transfiere la propiedad al usuario dinámico en cada arranque.
En mi caso particular, decidí que para facilitar las copias de seguridad, todos los servicios personales usarán una subcarpeta con el nombre de usuario como prefijo:
StateDirectory=jade/mi-servicio # /var/lib/usuario/mi-servicio
Esto agrupa todos los datos bajo /var/lib/usuario/, separando claramente lo que gestiona el sistema de lo que se gestiona manualmente, y simplificando las copias de seguridad a un único directorio.
https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html
Crear nueva sesión con un nombre particular:
tmux new -s session-name
Listar sesiones activas:
tmux ls
Cerrar una sesión:
tmux kill-session session-name
Acoplar última session:
tmux a
Acoplar sesion con su nombre:
tmux a session-name
Las sesiones tiene un prefix key Ctrl+b, para insertar atajos del teclado o comandos.
Desacoplar la sesión de la terminal, usar:
Prefix => d
Nueva pestaña:
Prefix => n
Anterior, siguiente pestaña:
Prefix => p
Prefix => n
When I tried to upload a set of images, I sometimes got the error 504 Gateway Error. This happened because Nginx didn't wait long enough and rejected the request due to the default timeout. To correct this, I added the following lines to the site configuration: /etc/nginx/sites-avalaible which have been taken from this stackoverflow.
So basically, you have to add these lines:
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
By default, the Bludit content editor (TinyMCE) doesn't include the codesample plugin activated by default. Although, it's very easy to add that useful tool into the editor of your blog.
codesample on the Plugins input.codesample on the Toolbar Top input.With that, it will appear the codesample button on the toolbox, with that the code will be appear inside a code tag, but it won't highlight the code with colors. For that purpose it's possible to install another plugin called prism available here.
I think it is very important and convenient to use webp images in my Bludit website, so I edited the code of Image Gallery Pro plugin to add support to webp images.
1. Change the line 48 of the vendors/novaGallery.php:
$images = glob($dir.'/*{jpg,jpeg,JPG,JPEG,png,PNG}', GLOB_BRACE);
with:
$images = glob($dir.'/*{jpg,jpeg,JPG,JPEG,png,PNG,webp,WEBP}', GLOB_BRACE);
2. Edit the line 100 of vendors/SimpleImage.php:
if(!preg_match('/^image\/(gif|jpeg|png)$/', $this->mimeType)) {
with:
if(!preg_match('/^image\/(gif|jpeg|png|webp)$/', $this->mimeType)) {
3. Edit the line 67 and 70 of app/BluditImageGalleryHelper.php
Line 67:
acceptedFiles: ".jpg,.jpeg,.png",
with:
acceptedFiles: ".jpg,.jpeg,.png,.webp",
Line 70:
dictInvalidFileType: "'.$L->get('This is not a JPEG or PNG.').'",
with:
dictInvalidFileType: "'.$L->get('This is not a JPEG, PNG or WEBP.').'",
With that I can use webp files for my photos-webpage, which makes everything more efficent.