tincho 15-09-2021, 21:44
Hola amigos.
En el marco del proyecto intriga en el que estoy buscando algunas informaciones encontré un script que me parece muy interesante así que aquí, sin mas, se los comparto.
https://whattheserver.com/keep-your-sshf...s-mounted/
Para automatizar la conexiones con el protocolo SSHFS

Código:
#!/bin/bash
## Author: Michael Ramsey
## Objective: Check and ensure a remote sshfs mount is mounted. This script assumes you have already have ssh passwordless keypair setup for accessing the remote sshfs mount point.

## How to use.
# Set the below variables to match your needs first.

# Then the below script can be run manually or via a cronjob
# sh check_remote_mount.sh

#example cronjob path to the script may need to be updated depending on where it was saved.
# * * * * * /bin/bash /root/check_remote_mount.sh > /dev/null

##### User specific variables to edit
#Set local mount directory
mountdir="/mnt/backup"

#Remote mount directory
remotemountdir="/root/server-backups"

#Set file name to test for in the remote mount directory. Just create an empty file "is_mounted" in the remote mount so we can check if it exists.
remotemounttestfile="/mnt/backup/is_mounted"

#Remote hostname or IP
remotehost="something.example.com"

#Remote ssh username
remoteuser="root"

#SSH IdentityFile path. Please Note: This would be the key like "/root/.ssh/id_rsa" not the pub file "/root/.ssh/id_rsa.pub"
sshIdentityFile="/root/.ssh/id_rsa"

#### Do not edit below this line

if mountpoint $mountdir && [ -f $remotemounttestfile ]; then
    echo "Mounted"
    RC=$?
else
   echo "Not mounted properly"
   #umount gracefully if possible
   umount $mountdir  > /dev/null 2>&1

   #kill any frozen process on the mount
   fuser -k $mountdir  > /dev/null 2>&1
   fusermount -u $mountdir  > /dev/null 2>&1
   umount -l $mountdir  > /dev/null 2>&1
   umount $mountdir  > /dev/null 2>&1

   #kill any hung processes and mounts
   pkill -9 sshfs && umount "$mountdir"  > /dev/null 2>&1

   #remount backup server
   rm -rf "${mountdir:?}/"* && sshfs -o nonempty,allow_other,IdentityFile=$sshIdentityFile $remoteuser@$remotehost:$remotemountdir $mountdir

   if mountpoint $mountdir && [ -f $remotemounttestfile ]; then
    echo "Mounted"
    RC=$?
   else
   echo "Not mounted properly needs fixed manually"
   RC=1
   fi
fi
exit $RC

Saludos.
Shordi 15-09-2021, 12:25
Desde hace muy poco, tan poco como esta mañana, que he actualizado a gambas 3.16.3 me encuentro que cuando uso wait en algún evento o, incluso, en alguna función llamada por algún evento, el programa se cuelga. "Vaya", me digo,"Ya tenemos bug nuevo"... y lo iba a reportar cuando se me ha ocurrido mirar la documentación. Allí se dice en una notita que no recuerdo haber visto nunca que "Si usa wait en el disparador de un evento se puede producir una recursión infinita al buble de eventos".

Lo piensas y un poco y es lógico... pero antes no ocurría eso. Ahora sí. Lo que me tira por tierra casi todo lo que tengo hecho... incluyendo los programas y vídeos del youtube, que ahora dejarán de funcionar.

(Por ese motivo me permito quejarme en voz alta: "AAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRGGGGGHHHHHHH")

El problema es ¿Cómo hacer que un programa se detenga un tiempo concreto dentro de un evento? ¿Ein?
Wait era perfecto, pero ahora... ¿un bucle que cuente números? ¿uno que cuente segundos?... no dudo que encontraré solución (Se admiten sugerencias), pero vaya por dios...

Encima lo he actualizado muy feliz porque según Benoit en esta versión lo trayicon sí cambiaban de imagen... y tururú que te ví.

Señor, señor,....

Saludos desde el cabreado retiro.
tincho 14-09-2021, 20:46
Hola amigos
Inicie un proyecto en gitlab para ir poniendo todo los avances, que de momento son escuetos, hasta lograr una web funcional hecha con gambas WebForms.
https://gitlab.com/belmotek/base-web
[Imagen: RAaauEp.png]

A efectos prácticos en adelante me referiré como myweb.gambas al ejecutable creado con el IDE de gambas de un proyecto web que usa el componente gb.web.gui y no  gb.web.form.

¿Que es un servidor Web?
En pocas palabras, es un servidor de red que se encuentra en un servidor físico (oops, un servidor en un servidor) y espera que un cliente envíe una solicitud. Cuando recibe una solicitud, genera una respuesta y la devuelve al cliente. La comunicación entre un cliente y un servidor se realiza mediante el protocolo HTTP. Un cliente puede ser tu navegador o cualquier otro software que hable HTTP.
Fuente: https://ruslanspivak.com/lsbaws-part1

Protocolo de transferencia de hipertexto
El Protocolo de transferencia de hipertexto (en inglés, Hypertext Transfer Protocol, abreviado HTTP) es el protocolo de comunicación que permite las transferencias de información a través de archivos (XHML, HTML…) en la World Wide Web. Fue desarrollado por el World Wide Web Consortium y la Internet Engineering Task Force, colaboración que culminó en 1999 con la publicación de una serie de RFC, siendo el más importante de ellos el RFC 2616 que especifica la versión 1.1. HTTP define la sintaxis y la semántica que utilizan los elementos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse.

HTTP es un protocolo sin estado, por lo que no guarda ninguna información sobre conexiones anteriores. El desarrollo de aplicaciones web necesita frecuentemente mantener estado. Para esto se usan las cookies, que es información que un servidor puede almacenar en el sistema cliente. Esto le permite a las aplicaciones web instituir la noción de sesión, y también permite rastrear usuarios, ya que las cookies pueden guardarse en el cliente por tiempo indeterminado.
Fuente: https://es.wikipedia.org/wiki/Protocolo_...hipertexto

Request (solicitud) - Response (respuesta)
Grambas contempla estos conceptos en el componente gb.web

gb.web.gui
Este componente permite desarrollar aplicaciones web siguiendo un modelo similar al de las aplicaciones GUI clásicas.
Sustituye al anterior componente gb.web.form, siendo más rápido y fácil de usar.
Clases
Align, Application, Arrange, Color, Key, Message, Scroll, Select, Session, WebAudio, WebButton, WebCheckBox, WebComboBox, WebContainer, WebControl, WebControlStyle, WebDateBox, WebDateChooser, WebFileButton, WebForm, WebHBox, WebHtml, WebImage, WebLabel, WebListBox, WebMenu, WebProgressBar, WebRadioButton, WebScrollView, WebSeparator, WebSlider, WebSpinBox, WebTable, WebTableData, WebTabPanel, WebTextArea, WebTextBox, WebTimer, WebTree, WebTreeData, WebVBox

gb.web
This component allows to make a web application based on a CGI script. It manages:
  • HTTP requests with the Request class.
  • HTTP response with the Response class.
  • Session management with the Session class.
  • JSP-like HTML pages rendered on the server-side with Gambas Server Pages.
  • Application - Returns information about the CGI application.
  • CGI - This class is used for managing the CGI interface.
  • Request -This class is used for managing the HTTP request.
  • Response - This class is used for generating the HTTP response.
  • Session     - This class is used for managing sessions.
  • URL - This class provides static utility methods that deal with URL strings.
  • WebPage - This class implements the Gambas JSP-like dynamic html page.
Sesión
La sesión es el lugar donde guardar las variables globales, como el programa en producción residirá en el el directorio del servidor web, luego cuando un usuario se conecte a esta aplicación, automáticamente se iniciara la sesión en la que se colocaran los parámetros de dicha conexión al servicio web. Usuario, contraseña, y cualquier otro parámetro de cualquier tipo, ya que es Variant
Agregar o editar parámetros de una sesión
Código:
Sesion["usuario"] =  "user1"
Sesion["password"] =  "ushuaia"
Sesion["ciudad"] =  "ushuaia"

Uso de cokies ??
Seguridad y control de acceso de la aplicación web ??



Problemas y soluciones
  • La web no se muestra en el navegador > Depuración / Configuración > Depurador / Usar el servidor HTTP incrustado = True
  • La web sigue sin mostrarse en el navegador > Depuración / Configuración > Entorno / GB_HTTPD_PORT = 8082 (usar un puerto diferente de 8080)
  • Los paneles no se expanden > Para ello hay que dar las propiedades H y W del contenedor en % [New]
  • Donde se coloca el archivo CSS > .public/
  • New Como se gestionan las sesiones de varios usuarios > Cada sesion sera una ejecución independiente, un proceso a parte. Es decir habrá tantos myweb.gambas corriendo en el servidor como sesiones exista.
  • New La web no se ve en el navegador > Conviene ver el archivo log de Apache /var/log/apache2/error.log
  • New Las imágenes no se muestran en la web > Hay que indicar el tamaño en px para la dimensión horizontal y para la vertical, por ejemplo 128px
Configuración del servidor Debian estable 11 (adaptación de la lista de Heberth )
  •     Actualizar el sistema
    • sudo apt update
  • Motor de bases de datos MySQL
    • sudo apt-get install mysql-server
  • Motor de bases de datos MariaDB
    • sudo apt-get install mariadb-server
  • Motor de bases de datos PosgreSQL
    • sudo apt install postgresql postgresql-contrib
  • Gambas3
    • sudo apt update
    • sudo apt -t bullseye-backports install gambas3-gb-web-gui
  • Apache
    • sudo apt install apache2
    • Editar el archivo /etc/apache2/conf-available/serve-cgi-bin.conf > sudo nano /etc/apache2/conf-available/serve-cgi-bin.conf [1]
    • Activar CGI en Apache2 > sudo a2enmod cgi
    • sudo service apache2 restart / sudo systemctl restart apache2 / sudo systemctl start apache2
  • Copiar el programa dentro del directorio del servidor
    • cp /home/user/proyectoweb.gambas /usr/lib/cgi-bin/
    • Cambia los permisos de la carpeta > sudo chmod +x -R /usr/lib/cgi-bin/
  • Acceder a la web
Archivo log de Apache
Este archivo es transcendental al principio, cuando intentamos desplegar una app.gambas, pero seguramente luego también lo sea, pero es una corazonada.
Al copiar la myweb.gambas en el directorio del servidor Apache y hacer todo "correctamente" la aplicación no funcionaba, así que recurrí al archivo log de apache y alli me decía que me faltaban instalar algunos componentes. Procedí a instalarlos y luego todo funciono.

[1]
Código:
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /var/www/cgi-bin
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .py .gb
Require all granted
</Directory>
</IfDefine>
</IfModule>


Cómo instalar un servidor Linux, Apache, MySQL y PHP (LAMP) en Ubuntu 20.04
https://www.digitalocean.com/community/t...u-20-04-es
Cómo instalar PostgrSQL en Ubuntu 20.04
https://www.digitalocean.com/community/t...ckstart-es
Referencias
Páginas (557):    1 378 379 380 381 382 557   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 285
Último miembro: XLRG
Temas del foro: 1,720
Mensajes del foro: 8,934
Últimos temas
Archivos .ods
Foro: General
Último mensaje por: tincho, 01-07-2025, 18:54
Respuestas: 8 - Vistas: 173
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: tincho, 01-07-2025, 18:48
Respuestas: 6 - Vistas: 312
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: tincho, 01-07-2025, 17:47
Respuestas: 41 - Vistas: 32,418
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: guizans, 22-06-2025, 19:55
Respuestas: 3 - Vistas: 279
Crear una aplicación para...
Foro: Bases de Datos
Último mensaje por: Shell, 29-05-2025, 20:11
Respuestas: 11 - Vistas: 1,423
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.