Funciones de instalar y desinstalar postgres
Clase 40 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Clase 40 de 43 • Curso de Programación en Bash Shell
Contenido del curso
freddy molleda
Fredy Mendoza Vargas
Reinaldo Mendoza
Jose Antonio Pinto Gimeno
Andres Vargas
jose luis olivares camacho
Luis Gabriel Delgado Sanchez
Luis Romero
Esteban Blanco Ortuno
Jose Suarez
Juan Sebastián Vargas Castañeda
Luis Fernando Cruz Carrillo
Jose Suarez
Reinaldo Mendoza
Fernando del Olmo
Gustavo Hernan Tiseira
Maximo Martinez Soria
Jose Suarez
Gerardo Alberto Soto Alvarez del Castillo
Kevin Castellano
Anthony Smith Quispe De la cruz
Edinson Padrón
emanuel anchique
Jesus Silva
Juan José ortiz bolaños
Jose Antonio Pinto Gimeno
Juan José ortiz bolaños
Jordan Arellano Rosero
Enzo Venturi
KAYLEE DANAE PAEZ HOOKER
Enzo Venturi
Juan David Cajamarca Acuña
Esteban Blanco Ortuno
Esta es una lista de las variables especiales en bash que encontre en internet:
$1, $2, $3, ... parámetros de posición que hacen referencia al primer, segundo, tercer, etc. parámetro pasado al script. $_, el último argumento pasado al último comando ejecutado (justo después de arrancar la shell, este valor guarda la ruta absoluta del comando que inicio la shell). $#, número total de argumentos pasados al script actual. $*, la lista completa de argumentos pasados al script. Esta valor es una cadena de texto. $@, la lista completa de argumentos pasados al script. Esta valor es una lista. $-, la lista de opciones de la shell actual. $$, el PID de la shell actual. $IFS, el separador utilizado para delimitar los campos. $?, el código de salida del pipe más reciente (es decir, de la última vez que se encadenaron varios comandos mediante el carácter pipe que se escribe como |). $!, el PID del último comando ejecutado en segundo plano. $0, el nombre de la shell o del script de shell.
algunas de ellas las hemos visto en las clases del curso
Excelente aporte compañero. Gracias
Esta genial
Buenos dias, aqui os dejo un par de tips que he encontrado ya que tenia algunos problemas y no he obtenido respuesta ninguna, ni por el profesor ni por los compañeros.
En primer lugar quería añadir una salto de linea en el prompt del comando "read", ya que me parecía poco estética la forma en la que se presenta en el curso. La forma de hacerlo es:
read -sp $'\nIngresar la contraseña sudo:' password
Al añadir el simbolo "$" antes de la cadena del prompt y muy importante utilizar comillas simples " ' ". Para que así nos reconozca el comando "\n" para el salto de linea.
Y el segundo tip viene del problema encontrado al desinstalar Postgresql, ya que al purgar aparece un prompt solicitando confirmación para la eliminación de directorios. Y al ejecutarlo desde el script, se bloquea la terminal y hay que matar el proceso. En cambio si lo hacemos desde la terminal, aparece el mismo prompt pero no se bloquea.
Despues de mucho investigar y hacer muchas pruebas, he localizado la opción: Debemos ejecutar el comando:
pg_dropcluster --stop 12 main
Con el que eliminamos las configuraciones y archivos de postgres, y después de hacer esto ya podemos utilizar el comando desde el script sin ningún prompt. Además he visto que la opción --purge del comando apt-get remove, ya elimina los directorios que el profesor nos hace borrar manualmente con el script. Por lo que en el proceso lanza mensajes de que no ha podido borrar el archivo o directorio. Finalmente mi código totalmente funcional queda de la siguiente forma.
#!/bin/bash # Programa que permite manejar la utilidades de PostGres # Autor: Tony Pinto Email: tony@tpgimeno.com opcion=0 directorioBackup="" backup="" #Función para instalar postgres instalar_postgres() { echo -e "\nVerificar instalación PostGres ..." verifyInstall=$(which psql) if [ $? -eq 0 ]; then echo -e "\nPostGres ya se encuentra instalado en el equipo" else read -sp $'\nIngresar la contraseña sudo:' password read -sp $'\nIngresar la contraseña para PostGres:' passwordPostgres echo "$password" | sudo -S apt update echo "$password" | sudo -S apt-get -y install postgresql postgresql-contrib sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{passwordPostgres}';" echo "$password" | sudo -S systemctl enable postgresql.service echo "$password" | sudo -S systemctl start postgresql.service fi read -p $'\nPRESIONE [ENTER] para continuar ...' } #Función para desinstalar postgres desinstalar_postgres() { read -sp $'\nIngresar la contraseña sudo:' password echo -e "\n" echo "$password" | sudo -S systemctl stop postgresql.service echo "$password" | sudo -S pg_dropcluster --stop 12 main echo "$password" | sudo -S apt-get -y --purge remove postgresql\* echo "$password" | sudo -S userdel -r postgres echo "$password" | sudo -S groupdel postgresql read -p $'\nPRESIONE [ENTER] para continuar ...' } #Función para sacar un respaldo respaldo() { echo -e "\nSacar respaldo..." echo "Directorio respaldo: $1" } #Función para restaurar respaldo restaurar_respaldo() { echo -e "\nRestaurar respaldo..." echo "Nombre del respaldo: $1" } while : do #Limpiar la pantalla clear #Desplegar el menu de opciones echo "-----------------------------------------" echo "PGUTIL - Programa de Utilidad de Postgres" echo "-----------------------------------------" echo " MENU PRINCIPAL " echo "-----------------------------------------" echo "1. Instalar Postgres" echo "2. Desinstalar Postgres" echo "3. Realizar un respaldo" echo "4. Restaurar un respaldo" echo "5. Salir" #Leer los datos del usuario - capturar información read -n1 -p "Ingresar una opción [1 - 5]: " opcion #Validar la opción ingresada case $opcion in 1) instalar_postgres sleep 3 ;; 2) desinstalar_postgres sleep 3 ;; 3) read -rep $'\nIngresar el directorio de Backup:' directorioBackup respaldo $directorioBackup sleep 3 ;; 4) read -rep $'\nIngresar backup a restaurar:' backup restaurar_respaldo $backup sleep 3 ;; 5) echo -e "\nSalir del Programa" exit 0 ;; esac done
Espero les sirva de ayuda.
Hola Jose, Gracias por tu aporte. Quisiera preguntarte si el signo $ y el uso de comillas simples " ' " es para evitar el uso del "\n" tradicional? Es decir que lo único que cambiaría la respecto es el uso de comillas dobles " " (?)
Me gustaría complementar que en mi caso cuando use:
echo "$password" | sudo -S pg_dropcluster --stop 12 main
me decía que el cluster no existía, aunque buscaba no encontré la razón, hasta que cambie el 12 por un 14
echo "$password" | sudo -S pg_dropcluster --stop 14 main
Asi que el numero del cluster debe corresponder a la version de postgres
Buen curso, muy facil la explicación, me sorprende no ver comentarios.. En lo personal me ayudo bastante con mi trabajo diario.
El tema es que es un tema
Ejecutar un comando con sudo desde un bash-script
read -s -p "Ingresar cotraseña sudo" password echo "$password" | sudo comando
Me parecio interesante este dato como tambien el resto del curso en general.
Les comparto el codigo por si no pueden visualizar en el video:
# ! /bin/bash # Programa que permite manejar las utilidades de Postres # Autor: Marco opcion=0 # Función para instalar postgres instalar_postgres () { echo -e "\n Verificar instalación postgres ...." verifyInstall=$(which psql) if [ $? -eq 0 ]; then echo -e "\n Postgres ya se encuentra instalado en el equipo" else read -s -p "Ingresar contraseña de sudo:" password read -s -p "Ingresar contraseña a utilizar en postgres:" passwordPostgres echo "$password" | sudo -S apt update echo "$password" | sudo -S apt-get -y install postgresql postgresql-contrib sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{$PASSWORDpOSTGRES}';" echo "$password" | sudo -S systemctl enable postgresql.service echo "$password" | sudo -S systemctl start postgresql.service fi read -n 1 -s -r -p "PRESIONE [ENTER] para continuar..." } # Función para desinstalar postgres desinstalar_postgres () { read -s -p "Ingresar contraseña de sudo:" password echo -e "\n" echo "$password" | sudo -S systemctl stop postgresql.service echo "$password" | sudo -S apt-get -y --purge remove postgresql\* echo "$password" | sudo -S rm -r /etc/postgresql echo "$password" | sudo -S rm -r /etc/postgresql-common echo "$password" | sudo -S rm -r /var/lib/postgresql echo "$password" | sudo -S userdel -r postgres echo "$password" | sudo -S groupdel postgresql read -n 1 -s -r -p "PRESIONE [ENTER] para continuar..." } # Función para sacar un respaldo sacar_respaldo () { echo "Sacar respaldo..."i echo "Directorio backup: $1" } # Función para restaurar un respaldo restaurar_respaldo () { echo "Restaurar respaldo..." echo "Directorio respaldo: $1" } while : do #Limpiar la pantalla clear #Desplegar el menú de opciones echo "_________________________________________" echo "PGUTIL - Programa de Utilidad de Postgres" echo "_________________________________________" echo " MENÚ PRINCIPAL " echo "_________________________________________" echo "1. Instalar Postgres" echo "2. Desinstalar Postgres" echo "3. Sacar un respaldo" echo "4. Restar respaldo" echo "5. Salir" # Leer los datos del usuario - capturar información read -n1 -p "Ingrese una opción [1-5]:" opcion #Validar la opción ingresada case $opcion in 1) instalar_postgres sleep 3 ;; 2) desinstalar_postgres sleep 3 ;; 3) read -p "Directorio Backup:" directorioBackup sacar_respaldo $directorioBackup sleep 3 ;; 4) read -p "Directorio de Respaldos:" directorioRespaldos restaurar_respaldo $directorioRespaldos sleep 3 ;; 5) echo "Hasta la vista Baby" exit 0 ;; esac done
Gracias :)
Significado de $?: devuelve el estado del último comando ejecutado.
Más información: https://stackoverflow.com/questions/7248031/meaning-of-dollar-question-mark-in-shell-scripts
Ya casi se terminan los temas del curso XD
jaja
no veo el momento...
No estaria brindando mal el password de usuario de postgres, ya que al guardarla la guarda en una variablame llamada
$passwordPostgres
Pero al realizar el cambio de contraseña en postgres lo manda se de esta forma
$PASSWORDpOSTGRES
Me estoy haciendo la misma pregunta 🤔
Tengo la misma pregunta, seria probar si puedo usar el usuario postgres con la clave que colocamos
Tengo una duda, sobre el paso de la variable que contiene la contraseña se SUDO, ¿esa variable acaso se queda guardada en la memoria RAM del equipo al ser almacenada? o como saber o evitar que no se almacene en memoria y sea "robada" mediante mecanismos de lenguaje de programación Ensamblador. gracias.
Quizás este artículo pueda ayudar: https://smallstep.com/blog/command-line-secrets/
Buenas, tras instalar,desintalar postgres el comando which me devuelve el path al binario de postges, es por ello que cuando vuelvo a intentar instalarlo el if [ $? -eq 0 ] no me lo permite, ¿alguna explicación?.
En lugar de guardar la verificación, ¿por qué no se evalua directamente el comando en el if?
if [ which psql 1>2 2>/dev/null ]; then ...
Si se quiere evitar mostrar el mensajes que arroja which, para eso (entre muchas otras cosas) se puedo utilizar redireccionamiento.
1>2 redirecciona salida estandar a error estandar. 2>/dev/null redirecciona el error estandar a un archivo especial de linux que es la nada (a lo agujero negro).
Muchas gracias profe, todo me pareció super bien explicado!! gracias por su tiempo y dedicación!, lo de la muletilla puede seguir trabajandolo pero eso no desmerita su esfuerzo por explicarnos cada tema.
Es todo un tema viste
Al momento de ejecutar la funcion desinstalar_postgres, dentro del proceso de desinstalacion me aparece una ventana con lo siguiente:
no se como seleccionar el <yes>, intente con muchas teclas pero no puedo seleccinar nada ni salir de esa ventana alguien sabe como seleccionar 'yes' o 'no' y continuar ?
Buenas tardes, a alguien más le ha pasado? Cuando ejecuta la desinstalación de Postgres, aun con la opción "-y", me aparece un prompt para la purga de los archivos. Y la aplicación se queda totalmente bloqueada. Tengo que matar el proceso y realizar "dpkg --configure -a". Pero cuando ejecuto el mismo comando desde consola, me aparece el mismo mensaje, pero no se bloquea y puedo terminar la desinstalación.
Hola jose, buen dia, tengo tu mismo inconveniente, me aparece el prompt para la purga de archivos, se queda bloqeado, no puedo seleccionar nada y tampoco puedo completar la desinstalacion, encontraste alguna solucion que me puedas compartir ?
gracias, saludos
en algunas distros basta con un purge :d
Mi código: 1- Frontend 2- Backend
Para los que tengan dudas de qué hace sudo -S es modificar el comando de tal manera que tome el valor enviado por medio de standar input (stdin) en vez de solicitar el valor por medio de la interfaz de la terminal. Si se omite la opción -S el comando va a esperar que se ingrese por medio de la terminal el valor esperado
Recordar que:
0 # True 1 # False
#!/bin/bash option=0 backup_directory="" restore_directory="" install_postgresql () { echo -e "\nVerifying PostgreSQL installation..." is_pg_installed=$(which psql) if [ $? -eq 0 ]; then echo -e "\nPostgreSQL is already installed on this server." else echo -e "\n" read -s -p "Enter the sudo password: " password echo -e "\n" read -s -p "Enter the new PostgreSQL password: " postgresql_password echo "$password" | sudo -S apt update echo "$password" | sudo -S apt install postgresql postgresql-contrib -y echo -e "\nInstalling PostgreSQL..." sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{postgresql_password}';" echo "$password" | sudo -S service postgresql enable echo "$password" | sudo -S service postgresql start fi echo -e "\n" read -n1 -s -r -p "Press [ENTER] to continue..." } uninstall_postgresql () { echo -e "\n" read -s -p "Enter the sudo password: " password echo -e "\nUninstalling PostgreSQL..." echo "$password" | sudo -S service postgresql stop echo "$password" | sudo -S apt remove postgresql\* --purge -y echo "$password" | sudo -S rm -rf /etc/postgresql echo "$password" | sudo -S rm -rf /etc/postgresql-common echo "$password" | sudo -S rm -rf /var/lib/postgresql echo "$password" | sudo -S userdel -r postgres echo "$password" | sudo -S groupdel postgresql echo -e "\n" read -n1 -s -r -p "Press [ENTER] to continue..." } backup () { echo -e "\nBackuping..." echo -e "\nBackup directory: $1" } restore_backup () { echo -e "\nRestoring backup..." echo -e "\nRestore directory: $1" } while : do clear echo "-------------------------------------" echo "PGUTIL - PostgreSQL utilities program" echo "-------------------------------------" echo " MAIN MENU " echo "-------------------------------------" echo "1. Install PostgreSQL" echo "2. Uninstall PostgreSQL" echo "3. Backup" echo "4. Restore Backup" echo "5. Exit" read -n1 -p "Enter an option [1-5]: " option case $option in 1) install_postgresql sleep 3 ;; 2) uninstall_postgresql sleep 3 ;; 3) echo -e "\n" read -p "Enter the backup directory: " backup_directory backup $backup_directory sleep 3 ;; 4) echo -e "\n" read -p "Enter the backup restore directory: " restore_directory restore_backup $restore_directory sleep 3 ;; 5) echo -e "\nExiting..." exit 0 ;; esac done
Me deje -S entre sudo y comando lo siento.