blob: 45caff8525c9fd64df67f1da176431db1fefdea7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
# Maintainer: dakataca <🐬danieldakataca@gmail.com>
pkgname=pgadmin4-py
_pkgname=${pkgname%[0-9]*}
__pkgname=${pkgname%-*}
pkgver=7.8
pkgrel=1
pkgdesc='Most popular and feature rich Open Source administration and development platform for PostgreSQL'
url='https://www.pgadmin.org/'
arch=(x86_64)
license=(GPL3)
makedepends=('python-pip' 'python-build' 'python-installer' 'python-wheel' 'python-authlib')
depends=('postgresql' 'translate-shell' 'openbsd-netcat' 'e2fsprogs')
# Alistar ficheros en el directorio de instalación.
package() {
# pgadmin configs.
install -o $USER -g $USER -dvm 755 "$pkgdir/var/lib/$_pkgname/"
install -o $USER -g $USER -dvm 755 "$pkgdir/var/log/$_pkgname/"
install -dvm 755 "$pkgdir/opt/venvs/"
# Existe /var/lib/postgres/?
if [ ! -d "/var/lib/postgres/" ]; then
install -o postgres -g postgres -dvm 755 "$pkgdir/var/lib/postgres/"
fi
cd $pkgdir/opt/venvs/
python3 -m venv $__pkgname
source $__pkgname/bin/activate
pip install $__pkgname
# Script de ejecución pgadmin4.
install -Dvm755 <(cat <<'EOF'
#!/usr/bin/env bash
translate_str() {
local -r lang=${LANG%_[A-Z][A-Z].UTF-8}
local str=""
if [[ $lang == en ]]; then
str=$1
elif [[ $lang == es ]]; then
str=$2
else
str=`trans -b :$lang "$str"`
fi
echo "$str"
}
open_server() {
sleep 1
while ! nc -z 127.0.0.1 5050; do
sleep 1
done
[ $? -eq 0 ] && xdg-open http://127.0.0.1:5050
}
validate_postgres_password() {
declare -r command="$1" level="$2"
while true; do
# Solicitar la credenciales.
translate_str "Enter the postgres user's credentials at the $level" \
"Ingrese las credenciales del usuario postgres a nivel de $level:"
bash -c "$command"
# Validar el éxito del comando anterior
if (( $? == 0 )); then
translate_str "Valid password. Continuing..." "Contraseña válida. Continuando..."
break
else
translate_str "Incorrect password. Please try again." "Contraseña incorrecta. Inténtelo de nuevo."
fi
done
}
# Usuario no es root?
if [ "$EUID" -ne 0 ]; then
declare -r data=/var/lib/postgres/data \
pg_hba=/var/lib/postgres/data/pg_hba.conf \
postgres_config=/var/lib/postgres/data/postgresql.conf
# Existe fichero de configuración base de datos postgres?
if ! sudo test -f "$pg_hba"; then
sudo -iu postgres initdb -D $data --data-checksums
# Sistema de ficheros es BTRFS?
# 🌐 wiki: https://wiki.archlinux.org/title/Btrfs#Copy-on-Write_(CoW)
if [ `stat -f -c %T $data` == btrfs ]; then
echo "Sistema de ficheros es BTRFS"
# Copia en escritura (copy on write) activo en BTRFS?
if [[ `sudo lsattr -dl $data` =~ No_COW ]]; then
echo "No_COW activo en BTRFS $data"
else
echo "No_COW activando en BTRFS $data"
sudo chattr +C $data
sudo lsattr -dl $data
fi
fi
# Restricts access rights to the database superuser by default.
# 🌐 wiki: https://wiki.archlinux.org/title/PostgreSQL#Restricts_access_rights_to_the_database_superuser_by_default
sudo grep -E 'local +all +postgres +peer' $pg_hba || sudo sed -Ei.back \
"s/^(local +all +)all +trust$/\1postgres\t\t\t\tpeer\n\
# "local" is for Unix domain socket connections only\n\
local\tall\t\t$USER\t\t\t\t\tscram-sha-256/" $pg_hba
# Require password for login.
# 🌐 wiki: https://wiki.archlinux.org/title/PostgreSQL#Require_password_for_login
sudo grep -E "^listen_addresses = 'localhost'*" $postgres_config || sudo sed -i.back \
"/^#password_encryption =*/ s/^#// ; \
/listen_addresses = 'localhost'/ s/^#//" $postgres_config
[[ `systemctl is-active --quiet postgresql.service` ]] && sudo systemctl restart postgresql.service || sudo systemctl start postgresql.service
# Contraseña de usuario postgres a nivel de Base de Datos postgresql.
# 🌐 wiki: https://www.postgresql.org/docs/current/app-psql.html
# 📜 man-page: https://wiki.archlinux.org/title/PostgreSQL#Access_the_database_shell
validate_postgres_password "sudo -u postgres psql -c '\password'" "postgresql"
# Contraseña de usuario postgres a nivel de Base de Datos postgresql.
translate_str "User password \"postgres\" at the level of ArchLinux Operating System:" "Contraseña de usuario \"postgres\" a nivel de Sistema Operativo ArchLinux:"
# Contraseña de usuario postgres a nivel de Sistema Operativo Linux.
validate_postgres_password "sudo passwd postgres" "S.O Archlinux"
# Crear credenciales de superusuario.
# 📜 man-page: https://www.postgresql.org/docs/current/app-createuser.html
validate_postgres_password "sudo -iu postgres createuser --password --interactive --createrole --superuser --createdb" "superusuario $USER"
fi
# Servicio postgresql.service está activo?
[[ `systemctl is-active --quiet postgresql.service` ]] && sudo systemctl restart postgresql.service || sudo systemctl start postgresql.service
# Activar entorno virtual pgadmin4.
source /opt/venvs/pgadmin4/bin/activate
open_server &
pgadmin4
else
translate_str "Error: You can't perform this operation as a superuser."\
"Error: No puede realizar esta operación siendo superusuario."
fi
EOF
) $pkgdir/usr/bin/$__pkgname
}
## References:
# Support: pgadmin-support@lists.postgresql.org
# Website: https://www.pgadmin.org/
# Tracker: https://github.com/pgadmin-org/pgadmin4/issues https://www.pgadmin.org/
# Guide: https://www.pgadmin.org/download/pgadmin-4-python/
## Test:
# updpkgsums
# makepkg --printsrcinfo > .SRCINFO
## Clean:
# sudo pacman -Rnsc pgadmin4-py --noconfirm
# sudo rm -rf /var/lib/p{ostgres,gadmin}/
# git clean -dfx
# 👤 Autor: https://t.me/dakataca 💻 🐬 #
|