Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
78757564c8 | ||
|
|
41a3345101 | ||
|
|
6b6efd1c4d | ||
|
|
d53f2b69f2 | ||
|
|
5c04f1aa2e | ||
|
|
2de89dcaaf | ||
|
|
f2cc897f2f | ||
|
|
56e2c9db97 | ||
|
|
8ca8cb9409 | ||
|
|
0d518a5cb6 | ||
|
|
0f53fc8511 | ||
|
|
d7307fd334 | ||
|
|
ee1f97d124 | ||
|
|
09e2c0eac0 | ||
|
|
f873ab5374 | ||
|
|
8bcd1e4e60 | ||
|
|
e455114441 | ||
|
|
306b184e11 | ||
|
|
c8ef4733d0 | ||
|
|
71647c886d | ||
|
|
3583b094d0 | ||
|
|
da927f4897 | ||
|
|
f771d3a4bb | ||
|
|
d4fdd4601e | ||
|
|
b12c1f8740 | ||
|
|
ef91207669 | ||
|
|
d45072fae5 | ||
|
|
ff4c5392d6 | ||
|
|
485265979e | ||
|
|
88a443f73d | ||
|
|
2d27a97b8c | ||
|
|
06d454473c | ||
|
|
ae5254e8a9 | ||
|
|
1e94c3bd81 | ||
|
|
6179b216c5 | ||
|
|
76f581289c | ||
|
|
7bd0d55c83 | ||
|
|
084203debc | ||
|
|
b34078c6d2 | ||
|
|
b6765e00eb | ||
|
|
2567ed5784 | ||
|
|
3cffcc8f5b | ||
|
|
b4e5717bde | ||
|
|
9a7859c5cb | ||
|
|
e1fa1b0396 | ||
|
|
c2b23465cc | ||
|
|
271b6d91fc | ||
|
|
3766fa7f0b | ||
|
|
626681c5ba | ||
|
|
9c9fb293da | ||
|
|
2bc60c9142 | ||
|
|
0f11033989 | ||
|
|
c0c4524ec3 | ||
|
|
8b7ce2c276 | ||
|
|
5e4d3cc535 | ||
|
|
f6e7221359 | ||
|
|
d7ad375232 | ||
|
|
9c418188ee | ||
|
|
b69af1341b | ||
|
|
233652c3f1 | ||
|
|
923f2fc7c4 | ||
|
|
f5793e9a7a | ||
|
|
f96653e9af | ||
|
|
8c24d28740 | ||
|
|
d1c94ac73d | ||
|
|
fa6b77b42c | ||
|
|
4c6e7d4f4f | ||
|
|
53887c32bf | ||
|
|
060d7ba46b | ||
|
|
5877b49f64 | ||
|
|
352eb15dc7 | ||
|
|
66a1123268 | ||
|
|
95312f2d14 | ||
|
|
6145dc76fc | ||
|
|
526ee51485 | ||
|
|
1dab98c6a0 | ||
|
|
7e46e46080 | ||
|
|
81b0d1138b | ||
|
|
81f52a82c8 | ||
|
|
a7fd7d67b3 | ||
|
|
96c360e728 | ||
|
|
3e3f06c55d | ||
|
|
1745aaaa0a | ||
|
|
c67ed7d7d2 | ||
|
|
f6d8f9f5c5 | ||
|
|
a4c12555cb | ||
|
|
8d1868305d | ||
|
|
2cdee919c1 | ||
|
|
3f8c36789f | ||
|
|
631a08189a | ||
|
|
4808df5e95 | ||
|
|
4585597388 | ||
|
|
8f73956d1e | ||
|
|
8f2bda2309 | ||
|
|
9dde195af4 | ||
|
|
9468c80a78 | ||
|
|
1fecf70123 | ||
|
|
a11f42b3e0 | ||
|
|
683528b81c | ||
|
|
02b0f35442 | ||
|
|
1a5e60c44f | ||
|
|
a16e3523bd | ||
|
|
50c930f5fa | ||
|
|
9cdcad7a88 | ||
|
|
59f5c0d955 | ||
|
|
64e6700228 | ||
|
|
7414394ceb | ||
|
|
8b62cd1f04 | ||
|
|
239e3bb6f1 | ||
|
|
b283c0ba18 | ||
|
|
e59471d87d | ||
|
|
6bebce7015 | ||
|
|
eb65ab6b4b | ||
|
|
3a69d50458 | ||
|
|
9c45a62b53 | ||
|
|
ed59584fe4 | ||
|
|
bf7de8e7a5 | ||
|
|
9c745db413 | ||
|
|
7d0ed90796 | ||
|
|
b0681f55e9 | ||
|
|
86b30b3c83 | ||
|
|
b92e2fcfc9 | ||
|
|
b1f6664292 | ||
|
|
cb635f6706 |
No files matched your search
@@ -23,18 +23,18 @@ Python Dependencies
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
Flask 2.1.1 BSD-3-Clause https://palletsprojects.com/p/flask
|
||||
Flask 2.1.3 BSD-3-Clause https://palletsprojects.com/p/flask
|
||||
Flask-Gravatar 0.5.0 BSD https://github.com/zzzsochi/Flask-Gravatar/
|
||||
Flask-Login 0.6.0 MIT https://github.com/maxcountryman/flask-login
|
||||
Flask-Login 0.6.2 MIT https://github.com/maxcountryman/flask-login
|
||||
Flask-Mail 0.9.1 BSD https://github.com/rduplain/flask-mail
|
||||
Flask-Migrate 3.1.0 UNKNOWN https://github.com/miguelgrinberg/flask-migrate
|
||||
Flask-SQLAlchemy 2.5.1 BSD-3-Clause https://github.com/pallets/flask-sqlalchemy
|
||||
Flask-WTF 1.0.1 BSD-3-Clause https://github.com/wtforms/flask-wtf/
|
||||
Flask-Compress 1.11 MIT https://github.com/colour-science/flask-compress
|
||||
Flask-Compress 1.12 MIT https://github.com/colour-science/flask-compress
|
||||
Flask-Paranoid 0.3.0 UNKNOWN https://github.com/miguelgrinberg/flask-paranoid
|
||||
Flask-Babel 2.0.0 BSD http://github.com/python-babel/flask-babel
|
||||
Flask-Security-Too 4.1.4 MIT https://github.com/Flask-Middleware/flask-security
|
||||
Flask-SocketIO 5.1.1 UNKNOWN https://github.com/miguelgrinberg/flask-socketio
|
||||
Flask-Security-Too 4.1.5 MIT https://github.com/Flask-Middleware/flask-security
|
||||
Flask-SocketIO 5.2.0 Unknown https://github.com/miguelgrinberg/flask-socketio
|
||||
WTForms 3.0.1 BSD-3-Clause https://wtforms.readthedocs.io/
|
||||
passlib 1.7.4 BSD https://passlib.readthedocs.io
|
||||
pytz 2021.3 MIT http://pythonhosted.org/pytz
|
||||
@@ -42,28 +42,28 @@ simplejson 3.17.6
|
||||
six 1.16.0 MIT https://github.com/benjaminp/six
|
||||
speaklater3 1.4 UNKNOWN https://github.com/ThomasWaldmann/speaklater
|
||||
sqlparse 0.4.2 BSD-3-Clause https://github.com/andialbrecht/sqlparse
|
||||
psutil 5.9.0 BSD https://github.com/giampaolo/psutil
|
||||
psutil 5.9.1 BSD https://github.com/giampaolo/psutil
|
||||
psycopg2 2.9.3 LGPL with exceptions https://psycopg.org/
|
||||
python-dateutil 2.8.2 Dual License https://github.com/dateutil/dateutil
|
||||
SQLAlchemy 1.4.35 MIT https://www.sqlalchemy.org
|
||||
bcrypt 3.2.0 Apache License, Version 2.0 https://github.com/pyca/bcrypt/
|
||||
SQLAlchemy 1.4.40 MIT https://www.sqlalchemy.org
|
||||
bcrypt 3.2.2 Apache License, Version 2.0 https://github.com/pyca/bcrypt/
|
||||
cryptography 3.4.8 BSD or Apache License, Version 2.0 https://github.com/pyca/cryptography
|
||||
sshtunnel 0.4.0 MIT https://github.com/pahaz/sshtunnel
|
||||
ldap3 2.9.1 LGPL v3 https://github.com/cannatag/ldap3
|
||||
gssapi 1.7.3 LICENSE.txt https://github.com/pythongssapi/python-gssapi
|
||||
eventlet 0.33.0 UNKNOWN http://eventlet.net
|
||||
httpagentparser 1.9.2 http://www.opensource.org/licenses/mit-license.php https://github.com/shon/httpagentparser
|
||||
httpagentparser 1.9.3 http://www.opensource.org/licenses/mit-license.php https://github.com/shon/httpagentparser
|
||||
user-agents 2.2.0 MIT https://github.com/selwin/python-user-agents
|
||||
pywinpty 1.1.* Unknown Unknown
|
||||
Authlib 0.15.5 BSD-3-Clause https://authlib.org/
|
||||
requests 2.25.1 Apache 2.0 https://requests.readthedocs.io
|
||||
pyotp 2.6.0 MIT License https://github.com/pyotp/pyotp
|
||||
qrcode 7.3.1 BSD https://github.com/lincolnloop/python-qrcode
|
||||
Pillow 9.1.0 HPND https://python-pillow.org
|
||||
Pillow 9.2.0 HPND https://python-pillow.org
|
||||
boto3 1.20.54 Apache License 2.0 https://github.com/boto/boto3
|
||||
botocore 1.23.54 Apache License 2.0 https://github.com/boto/botocore
|
||||
urllib3 1.26.9 MIT https://urllib3.readthedocs.io/
|
||||
Werkzeug 2.0.3 BSD-3-Clause https://palletsprojects.com/p/werkzeug/
|
||||
urllib3 1.26.11 MIT https://urllib3.readthedocs.io/
|
||||
Werkzeug 2.1.2 BSD-3-Clause https://palletsprojects.com/p/werkzeug/
|
||||
azure-mgmt-rdbms 10.1.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-resource 21.0.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-subscription 3.0.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
@@ -195,6 +195,7 @@ aspen-core 1.0.5
|
||||
aspen-decorations 1.1.1 MIT git+https://github.com/neeksandhu/aspen-decorations.git
|
||||
aspen-tree-model 1.0.5 MIT git+https://github.com/neeksandhu/aspen-tree-model.git
|
||||
async 2.6.4 MIT https://github.com/caolan/async.git
|
||||
attr-accept 2.2.2 MIT https://github.com/react-dropzone/attr-accept.git
|
||||
axios 0.21.4 MIT https://github.com/axios/axios.git
|
||||
babel-plugin-styled-components 1.13.3 MIT https://github.com/styled-components/babel-plugin-styled-components.git
|
||||
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
|
||||
@@ -239,6 +240,7 @@ commander 7.2.0
|
||||
concat-map 0.0.1 MIT git://github.com/substack/node-concat-map.git
|
||||
context-menu 2.0.0 MIT https://github.com/chipto/context-menu.git
|
||||
convert-source-map 1.8.0 MIT git://github.com/thlorenz/convert-source-map.git
|
||||
convert-units 2.3.4 MIT git://github.com/ben-ng/convert-units.git
|
||||
core-js 3.19.1 MIT https://github.com/zloirock/core-js.git
|
||||
css-color-names 1.0.1 MIT git://github.com/bahamas10/css-color-names.git
|
||||
css-line-break 2.0.1 MIT git+ssh://git@github.com/niklasvh/css-line-break.git
|
||||
@@ -255,8 +257,7 @@ csstype 2.6.18
|
||||
csstype 3.0.9 MIT https://github.com/frenic/csstype
|
||||
dagre 0.8.5 MIT https://github.com/dagrejs/dagre.git
|
||||
date-fns 2.25.0 MIT https://github.com/date-fns/date-fns
|
||||
debug 4.3.2 MIT git://github.com/visionmedia/debug.git
|
||||
debug 4.3.3 MIT git://github.com/debug-js/debug.git
|
||||
debug 4.3.4 MIT git://github.com/debug-js/debug.git
|
||||
decamelize 5.0.1 MIT https://github.com/sindresorhus/decamelize.git
|
||||
decamelize 1.2.0 MIT https://github.com/sindresorhus/decamelize.git
|
||||
decamelize-keys 1.1.0 MIT https://github.com/dsblv/decamelize-keys.git
|
||||
@@ -266,7 +267,6 @@ dir-glob 3.0.1
|
||||
dom-align 1.12.2 MIT git@github.com:yiminghe/dom-align.git
|
||||
dom-helpers 5.2.1 MIT git+https://github.com/react-bootstrap/dom-helpers.git
|
||||
dom-serializer 1.3.2 MIT git://github.com/cheeriojs/dom-renderer.git
|
||||
dropzone 5.9.3 MIT https://github.com/dropzone/dropzone.git
|
||||
emojis-list 3.0.0 MIT git+https://github.com/kikobeats/emojis-list.git
|
||||
engine.io-client 6.0.2 MIT https://github.com/socketio/engine.io-client.git
|
||||
engine.io-parser 5.0.3 MIT git@github.com:socketio/engine.io-parser.git
|
||||
@@ -277,6 +277,7 @@ fast-deep-equal 3.1.3
|
||||
fast-glob 3.2.11 MIT https://github.com/mrmlnc/fast-glob.git
|
||||
fast-json-stable-stringify 2.1.0 MIT git://github.com/epoberezkin/fast-json-stable-stringify.git
|
||||
fast-memoize 2.5.2 MIT git+https://github.com/caiogondim/fast-memoize.git
|
||||
file-selector 0.6.0 MIT https://github.com/react-dropzone/file-selector.git
|
||||
filename-reserved-regex 2.0.0 MIT https://github.com/sindresorhus/filename-reserved-regex.git
|
||||
fill-range 7.0.1 MIT https://github.com/jonschlinkert/fill-range.git
|
||||
find-up 5.0.0 MIT https://github.com/sindresorhus/find-up.git
|
||||
@@ -315,7 +316,7 @@ is-unc-path 1.0.0
|
||||
javascript-natural-sort 0.7.1 MIT https://github.com/Bill4Time/javascript-natural-sort.git
|
||||
jquery 3.6.0 MIT https://github.com/jquery/jquery.git
|
||||
jquery-contextmenu 2.9.2 MIT git://github.com/swisnl/jQuery-contextMenu.git
|
||||
jquery-ui 1.13.0 MIT git://github.com/jquery/jquery-ui.git
|
||||
jquery-ui 1.13.2 MIT git://github.com/jquery/jquery-ui.git
|
||||
js-tokens 4.0.0 MIT https://github.com/lydell/js-tokens.git
|
||||
jsbn 1.1.0 MIT https://github.com/andyperlitch/jsbn.git
|
||||
jsesc 2.5.2 MIT https://github.com/mathiasbynens/jsesc.git
|
||||
@@ -343,7 +344,26 @@ loader-utils 2.0.2
|
||||
loader-utils 1.4.0 MIT https://github.com/webpack/loader-utils.git
|
||||
locate-path 6.0.0 MIT https://github.com/sindresorhus/locate-path.git
|
||||
lodash 4.17.21 MIT https://github.com/lodash/lodash.git
|
||||
lodash._basebind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreate 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreatecallback 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._basecreatewrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._createwrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._objecttypes 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._renative 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._setbinddata 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._shimkeys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash._slice 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.bind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.foreach 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.forown 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.identity 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.isfunction 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.isobject 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.keys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.memoize 4.1.2 MIT https://github.com/lodash/lodash.git
|
||||
lodash.noop 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.support 2.3.0 MIT https://github.com/lodash/lodash-cli.git
|
||||
lodash.uniq 4.5.0 MIT https://github.com/lodash/lodash.git
|
||||
loose-envify 1.4.0 MIT git://github.com/zertosh/loose-envify.git
|
||||
lunr 0.7.2 MIT https://github.com/olivernn/lunr.js.git
|
||||
@@ -364,9 +384,8 @@ ml-array-min 1.2.2
|
||||
ml-array-rescale 1.3.6 MIT git+https://github.com/mljs/array.git
|
||||
ml-matrix 6.8.0 MIT https://github.com/mljs/matrix.git
|
||||
mobius1-selectr 2.4.13 MIT git+https://github.com/Mobius1/Selectr.git
|
||||
moment 2.29.3 MIT https://github.com/moment/moment.git
|
||||
moment 2.29.4 MIT https://github.com/moment/moment.git
|
||||
moment-timezone 0.5.34 MIT https://github.com/moment/moment-timezone.git
|
||||
moment-timezone 0.5.33 MIT https://github.com/moment/moment-timezone.git
|
||||
ms 2.1.2 MIT https://github.com/zeit/ms.git
|
||||
nanoid 3.3.2 MIT https://github.com/ai/nanoid.git
|
||||
nanoid 3.2.0 MIT https://github.com/ai/nanoid.git
|
||||
@@ -425,6 +444,7 @@ postcss-svgo 5.0.3
|
||||
postcss-unique-selectors 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-value-parser 4.1.0 MIT https://github.com/TrySound/postcss-value-parser.git
|
||||
prop-types 15.7.2 MIT https://github.com/facebook/prop-types.git
|
||||
prop-types 15.8.1 MIT https://github.com/facebook/prop-types.git
|
||||
punycode 2.1.1 MIT https://github.com/bestiejs/punycode.js.git
|
||||
queue-microtask 1.2.3 MIT git://github.com/feross/queue-microtask.git
|
||||
quick-lru 5.1.1 MIT https://github.com/sindresorhus/quick-lru.git
|
||||
@@ -449,6 +469,7 @@ react-dom 16.14.0
|
||||
react-dom 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-draggable 4.4.4 MIT https://github.com/react-grid-layout/react-draggable.git
|
||||
react-draggable 4.4.3 MIT https://github.com/mzabriskie/react-draggable.git
|
||||
react-dropzone 14.2.1 MIT https://github.com/react-dropzone/react-dropzone.git
|
||||
react-input-autosize 3.0.0 MIT https://github.com/JedWatson/react-input-autosize.git
|
||||
react-is 16.13.1 MIT https://github.com/facebook/react.git
|
||||
react-is 17.0.2 MIT https://github.com/facebook/react.git
|
||||
@@ -545,6 +566,7 @@ postcss-modules-scope 3.0.0
|
||||
postcss-modules-values 4.0.0 ISC git+https://github.com/css-modules/postcss-modules-values.git
|
||||
react-timer-hook 3.0.5 ISC git+https://github.com/amrlabib/react-timer-hook.git
|
||||
semver 7.3.5 ISC https://github.com/npm/node-semver
|
||||
semver 7.3.7 ISC https://github.com/npm/node-semver.git
|
||||
semver 6.3.0 ISC https://github.com/npm/node-semver
|
||||
vanilla-picker 2.12.1 ISC https://github.com/Sphinxxxx/vanilla-picker.git
|
||||
yallist 4.0.0 ISC git+https://github.com/isaacs/yallist.git
|
||||
@@ -594,9 +616,9 @@ pako 1.0.11
|
||||
precond 0.2.3 MIT* https://github.com/MathieuTurcotte/node-precond.git
|
||||
webcabin-docker 2.2.5 MIT* Unknown
|
||||
spdx-exceptions 2.3.0 CC-BY-3.0 https://github.com/kemitchell/spdx-exceptions.json.git
|
||||
tablesorter 2.31.3 (MIT OR GPL-2.0) git://github.com/Mottie/tablesorter.git
|
||||
tslib 2.4.0 0BSD https://github.com/Microsoft/tslib.git
|
||||
tslib 2.3.0 0BSD https://github.com/Microsoft/tslib.git
|
||||
type-fest 1.4.0 (MIT OR CC0-1.0) https://github.com/sindresorhus/type-fest.git
|
||||
|
||||
518 dependencies listed.
|
||||
540 dependencies listed.
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15 AS app-builder
|
||||
FROM alpine:3.16 AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
@@ -60,7 +60,7 @@ RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
# Next, create the base environment for Python
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15 as env-builder
|
||||
FROM alpine:3.16 as env-builder
|
||||
|
||||
# Install dependencies
|
||||
COPY requirements.txt /
|
||||
@@ -117,7 +117,7 @@ FROM postgres:12-alpine as pg12-builder
|
||||
FROM postgres:13-alpine as pg13-builder
|
||||
FROM postgres:14-alpine as pg14-builder
|
||||
|
||||
FROM alpine:3.15 as tool-builder
|
||||
FROM alpine:3.16 as tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
|
||||
@@ -149,7 +149,7 @@ COPY --from=pg14-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-14/
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15
|
||||
FROM alpine:3.16
|
||||
|
||||
# Copy in the Python packages
|
||||
COPY --from=env-builder /venv /venv
|
||||
@@ -196,7 +196,7 @@ RUN apk add \
|
||||
chown pgadmin:root /pgadmin4/config_distro.py && \
|
||||
chmod g=u /pgadmin4/config_distro.py && \
|
||||
chmod g=u /etc/passwd && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.9 && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.10 && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix && \
|
||||
echo "pgadminr ALL = NOPASSWD: /usr/sbin/postfix start" >> /etc/sudoers.d/postfix
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ the restore point to add* to provide a descriptive name for the restore point.
|
||||
|
||||
For more information about using a restore point as a recovery target, please
|
||||
see the
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/recovery-target-settings.html#RECOVERY-TARGET-NAME>`_.
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET>`_.
|
||||
|
||||
* Click the *OK* button to save the restore point.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
@@ -203,21 +203,6 @@ command:
|
||||
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_messages.png
|
||||
:alt: Backup success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *More details* on the popup window to launch the *Process Watcher*. The *Process Watcher* logs all the activity associated with the backup and provides additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_process_watcher.png
|
||||
:alt: Backup process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, you can review the error messages returned by the
|
||||
backup command on the *Process Watcher*.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -34,24 +34,6 @@ statements that should be included in the backup.
|
||||
Click the *Backup* button to build and execute a command based on your
|
||||
selections; click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_globals_messages.png
|
||||
:alt: Backup globals success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *Click
|
||||
here for details* on the popup window to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the backup and provides
|
||||
additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_globals_process_watcher.png
|
||||
:alt: Backup globals process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -122,24 +122,6 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
Click the *Backup* button to build and execute a command based on your
|
||||
selections; click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_server_messages.png
|
||||
:alt: Backup server success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *Click
|
||||
here for details* on the popup window to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the backup and provides
|
||||
additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_server_process_watcher.png
|
||||
:alt: Backup server process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -0,0 +1,27 @@
|
||||
.. _change_ownership:
|
||||
|
||||
************************************
|
||||
`Change Ownership Dialog`:index:
|
||||
************************************
|
||||
|
||||
Use the *Change Ownership* dialog to change the ownership of the shared servers.
|
||||
This dialog will appear if a user has been deleted from
|
||||
:ref:`User Management <user_management>` and owned some shared servers.
|
||||
|
||||
Choose the user who will own the shared servers from the drop-down.
|
||||
|
||||
.. image:: images/change_ownership.png
|
||||
:alt: Change ownership dialog
|
||||
:align: center
|
||||
|
||||
Click the *Change* button to change the ownership.
|
||||
|
||||
The shared servers owned by the user will be deleted if the user is not
|
||||
selected from the drop-down.
|
||||
|
||||
.. image:: images/change_ownership_info.png
|
||||
:alt: Change ownership dialog
|
||||
:align: center
|
||||
|
||||
Click the *Change* button to change the ownership; click *Close* to
|
||||
exit the dialog.
|
||||
@@ -36,5 +36,8 @@ Use the *Change Password* dialog to change your password:
|
||||
* Enter the desired password for in the *New Password* field.
|
||||
* Re-enter the new password in the *Confirm Password* field.
|
||||
|
||||
Click the *OK* button to change your password; click *Cancel* to exit the dialog
|
||||
without changing your password.
|
||||
Click the *Save* button to change your password.
|
||||
|
||||
Click the *Close* button to exit without changing your password.
|
||||
|
||||
Click the *Reset* button to reset the values.
|
||||
@@ -89,5 +89,8 @@ button to deploy the instance on Amazon RDS.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
@@ -10,8 +10,6 @@ To deploy a PostgreSQL server on the Azure cloud, follow the below steps.
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
**Note:** This feature is currently available in Desktop mode only.
|
||||
|
||||
Once you launch the tool, select the Azure PostgreSQL option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
@@ -109,6 +107,8 @@ button to deploy the instance on Azure PostgreSQL.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
.. image:: images/cloud_azure_bg_process_watcher.png
|
||||
:alt: Cloud Deployment
|
||||
|
||||
@@ -36,7 +36,8 @@ details.
|
||||
|
||||
* Use the *Region* field to select the region.
|
||||
|
||||
* Use the *Database version* field to specify the PostgreSQL version to deploy.
|
||||
* Use the *Public IP range* field to specify the IP Address range for permitting the
|
||||
inbound traffic. Leave it blank for 0.0.0.0/0
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
@@ -49,10 +50,7 @@ details.
|
||||
|
||||
* Use the *Volume properties* field to specify the storage capacity.
|
||||
|
||||
* Use the *Cloud type* field to specify the private or public network.
|
||||
|
||||
* Use the *Public IP range* field to specify the IP Address range for permitting the
|
||||
inbound traffic. Leave it blank for 0.0.0.0/0
|
||||
|
||||
.. image:: images/cloud_biganimal_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
@@ -74,6 +72,12 @@ Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
* Use the *High Availability* field to create the cluster with high availability, which creates a cluster
|
||||
with one primary and up to two standby replicas in different availability zones.
|
||||
|
||||
* Use the *Number of standby replicas* field to specify the standby replicas.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
@@ -87,5 +91,8 @@ button to deploy the instance on EDB BigAnimal.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
@@ -45,9 +45,10 @@ The configuration files are as follows:
|
||||
macOS,/Library/Preferences/pgadmin/config_system.py
|
||||
Windows,%CommonProgramFiles%\\pgadmin\\config_system.py
|
||||
|
||||
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py``,
|
||||
``config_local.py``, or ``config_system.py`` you will most likely need to
|
||||
re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH and STORAGE_DIR values
|
||||
.. note:: If the SERVER_MODE or DATA_DIR settings are changed in
|
||||
``config_distro.py``, ``config_local.py``, or ``config_system.py`` you
|
||||
will most likely need to re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH,
|
||||
STORAGE_DIR, KERBEROS_CCACHE_DIR, and AZURE_CREDENTIAL_CACHE_DIR values
|
||||
as well as they will have been set based on the default configuration or
|
||||
overridden by the runtime.
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ Mode is pre-configured for security.
|
||||
login
|
||||
mfa
|
||||
user_management
|
||||
change_ownership
|
||||
change_user_password
|
||||
restore_locked_user
|
||||
ldap
|
||||
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 282 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 130 KiB |
@@ -8,39 +8,36 @@ Use the *Import/Export data* dialog to copy data from a table to a file, or copy
|
||||
data from a file into a table.
|
||||
|
||||
The *Import/Export data* dialog organizes the import/export of data through the
|
||||
*Options* and *Columns* tabs.
|
||||
*General*, *Options* and *Columns* tabs.
|
||||
|
||||
.. image:: images/import_export_general.png
|
||||
:alt: Import Export data dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to specify import and export preferences:
|
||||
|
||||
* Move the *Import/Export* switch to the *Import* position to specify that the
|
||||
server should import data to a table from a file. The default is *Import*.
|
||||
|
||||
* Enter the name of the source or target file in the *Filename* field.
|
||||
Optionally, select the *Browser* icon (ellipsis) to the right to navigate
|
||||
into a directory and select a file.
|
||||
|
||||
* Use the drop-down listbox in the *Format* field to specify the file type.
|
||||
Select:
|
||||
|
||||
* *binary* for a .bin file.
|
||||
* *csv* for a .csv file.
|
||||
* *text* for a .txt file.
|
||||
|
||||
* Use the drop-down listbox in the *Encoding* field to specify the type of
|
||||
character encoding.
|
||||
|
||||
.. image:: images/import_export_options.png
|
||||
:alt: Import Export data dialog options tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Options* tab to specify import and export preferences:
|
||||
|
||||
* Move the *Import/Export* switch to the *Import* position to specify that the
|
||||
server should import data to a table from a file. The default is *Export*.
|
||||
|
||||
* Use the fields in the *File Info* field box to specify information about the
|
||||
source or target file:
|
||||
|
||||
* Enter the name of the source or target file in the *Filename* field.
|
||||
Optionally, select the *Browser* icon (ellipsis) to the right to navigate
|
||||
into a directory and select a file.
|
||||
* Use the drop-down listbox in the *Format* field to specify the file type.
|
||||
Select:
|
||||
|
||||
* *binary* for a .bin file.
|
||||
* *csv* for a .csv file.
|
||||
* *text* for a .txt file.
|
||||
|
||||
* Use the drop-down listbox in the *Encoding* field to specify the type of
|
||||
character encoding.
|
||||
|
||||
.. image:: images/import_export_miscellaneous.png
|
||||
:alt: Import Export data dialog miscellaneous tab
|
||||
:align: center
|
||||
|
||||
* Use the fields in the *Miscellaneous* field box to specify additional
|
||||
information:
|
||||
* Use the fields in the *Options* tab to specify additional information:
|
||||
|
||||
* Move the *OID* switch to the *Yes* position to include the *OID* column.
|
||||
The *OID* is a system-assigned value that may not be modified. The default
|
||||
@@ -57,6 +54,8 @@ Use the fields in the *Options* tab to specify import and export preferences:
|
||||
be a single quote or a double quote.
|
||||
* Specify a character that should appear before a data character that matches
|
||||
the *QUOTE* value in the *Escape* field.
|
||||
* Use the *NULL Strings* field to specify a string that will represent a null
|
||||
value within the source or target file.
|
||||
|
||||
Click the *Columns* tab to continue.
|
||||
|
||||
@@ -71,9 +70,8 @@ or exported:
|
||||
columns from the drop-down listbox. To delete a selection, click the *x* to
|
||||
the left of the column name. Click an empty spot inside the field to access
|
||||
the drop-down list.
|
||||
* Use the *NULL Strings* field to specify a string that will represent a null
|
||||
value within the source or target file.
|
||||
* If enabled, click inside the *Not null columns* field to select one or more
|
||||
|
||||
* If enabled, click inside the *NOT NULL columns* field to select one or more
|
||||
columns that will not be checked for a NULL value. To delete a column, click
|
||||
the *x* to the left of the column name.
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ of database objects.
|
||||
management_basics
|
||||
backup_and_restore
|
||||
developer_tools
|
||||
processes
|
||||
pgagent
|
||||
contributions
|
||||
release_notes
|
||||
|
||||
@@ -45,18 +45,6 @@ switch to the *No* position; by default, status messages are included.
|
||||
When you've completed the dialog, click *OK* to start the background process;
|
||||
to exit the dialog without performing maintenance operations, click *Cancel*.
|
||||
|
||||
pgAdmin will inform you when the background process completes:
|
||||
|
||||
.. image:: images/maintenance_complete.png
|
||||
:alt: Maintenance completion notification
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Maintenance process.
|
||||
|
||||
Use the *Click here for details* link on the notification to open the *Process
|
||||
Watcher* and review detailed information about the execution of the command that
|
||||
performed the import or export:
|
||||
|
||||
.. image:: images/maintenance_pw.png
|
||||
:alt: Maintenance process watcher
|
||||
:align: center
|
||||
pgAdmin will run the maintenance process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -290,6 +290,9 @@ preferences for the Query Editor tool.
|
||||
|
||||
Use the fields on the *Auto Completion* panel to set the auto completion options.
|
||||
|
||||
* When the *Autocomplete on key press* switch is set to *True* then autocomplete
|
||||
will be available on key press along with CTRL/CMD + Space. If it is set to
|
||||
*False* then autocomplete is only activated when CTRL/CMD + Space is pressed.
|
||||
* When the *Keywords in uppercase* switch is set to *True* then keywords are
|
||||
shown in upper case.
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
.. _processes:
|
||||
|
||||
***********************
|
||||
`Processes`:index:
|
||||
***********************
|
||||
|
||||
There are certain tasks which pgAdmin runs in the background. The processes
|
||||
running in the background can be viewed in the processes tab. It shows the
|
||||
process details of Backup, Restore, Maintenance, Import/Export and Cloud instance
|
||||
creation.
|
||||
|
||||
.. image:: images/processes_main.png
|
||||
:alt: Processes Tab
|
||||
:align: center
|
||||
|
||||
The columns of the processes table shows:
|
||||
|
||||
* The *PID* of the forked OS process.
|
||||
* The *Type* of the task being performed.
|
||||
* The *Server* name for which the task is.
|
||||
* The *Object* can be a database, table, mview or anything which gives more info.
|
||||
* The *Start Time* of the process, sorted descending by default.
|
||||
* The current *Status* of the process. It can be Running, Finished, Failed, Terminated.
|
||||
* The *Time Taken* to complete. It will keep updating if it is running.
|
||||
|
||||
There are two action buttons on each row:
|
||||
|
||||
* The *Stop Process* button allows you to kill a running process.
|
||||
* The *More details* button allows you to open the process watcher which shows the
|
||||
process logs and other details.
|
||||
|
||||
You can also select the checkboxes and click on *Delete and Acknowledge* button
|
||||
on the top to clear the process info and logs.
|
||||
|
||||
Process Watcher
|
||||
*********************
|
||||
|
||||
.. image:: images/processes_details.png
|
||||
:alt: Process Watcher
|
||||
:align: center
|
||||
|
||||
|
||||
The Process Watcher logs all the activity associated with the process/task and provides
|
||||
additional information for troubleshooting
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
@@ -331,13 +331,21 @@ Graph Visualiser Panel
|
||||
**********************
|
||||
|
||||
Click the Graph Visualiser button in the toolbar to generate the *Graphs* of
|
||||
the query results. The graph visualiser currently supports only Line Charts,
|
||||
but more charts (Bar, Stacked Bar, Pie...) will be added soon.
|
||||
the query results. The graph visualiser supports Line Charts, Stacked Line Charts,
|
||||
Bar Charts, Stacked Bar Charts, and Pie Charts.
|
||||
|
||||
.. image:: images/query_graph_visualiser_panel.png
|
||||
:alt: Query tool graph visualiser panel
|
||||
:align: center
|
||||
|
||||
* Graph Type
|
||||
|
||||
Choose the type of the graph that you would like to generate.
|
||||
|
||||
.. image:: images/query_graph_type.png
|
||||
:alt: Query tool graph visualiser graph type
|
||||
:align: center
|
||||
|
||||
* X Axis
|
||||
|
||||
Choose the column whose value you wish to display on X-axis from the *X Axis*
|
||||
@@ -358,15 +366,6 @@ from the drop-down menu to select all the columns.
|
||||
:alt: Query tool graph visualiser yaxis
|
||||
:align: center
|
||||
|
||||
* Graph Type
|
||||
|
||||
Choose the type of the graph that you would like to generate. Currently only
|
||||
*Line Charts* option is there, but more charts will be added soon.
|
||||
|
||||
.. image:: images/query_graph_type.png
|
||||
:alt: Query tool graph visualiser graph type
|
||||
:align: center
|
||||
|
||||
* Download and Zoom button
|
||||
|
||||
Zooming is performed by clicking and selecting an area over the chart with the
|
||||
@@ -382,7 +381,8 @@ Click the *Download* button on the button bar to download the chart.
|
||||
Line Chart
|
||||
==========
|
||||
|
||||
The *Line Chart* can be generated by selecting the X-axis and the Y-axis and
|
||||
The *Line Chart* can be generated by selecting the 'Line Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button. Below is an example of a chart of employee
|
||||
names and their salaries.
|
||||
|
||||
@@ -393,6 +393,52 @@ names and their salaries.
|
||||
Set *Use different data point styles?* option to true in the :ref:`preferences`,
|
||||
to show data points in a different style on each graph lines.
|
||||
|
||||
Stacked Line Chart
|
||||
==================
|
||||
|
||||
The *Stacked Line Chart* can be generated by selecting the 'Stacked Line Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
.. image:: images/query_stacked_line_chart.png
|
||||
:alt: Query tool graph visualiser stacked line chart
|
||||
:align: center
|
||||
|
||||
Bar Chart
|
||||
==========
|
||||
|
||||
The *Bar Chart* can be generated by selecting the 'Bar Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
.. image:: images/query_bar_chart.png
|
||||
:alt: Query tool graph visualiser bar chart
|
||||
:align: center
|
||||
|
||||
Stacked Bar Chart
|
||||
=================
|
||||
|
||||
The *Stacked Bar Chart* can be generated by selecting the 'Stacked Bar Chart'
|
||||
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
|
||||
.. image:: images/query_stacked_bar_chart.png
|
||||
:alt: Query tool graph visualiser stacked bar chart
|
||||
:align: center
|
||||
|
||||
Pie Chart
|
||||
=========
|
||||
|
||||
The *Pie Chart* can be generated by selecting the 'Pie Chart'
|
||||
from the Graph Type drop-down, selecting the Label and Value, and
|
||||
clicking on the 'Generate' button.
|
||||
|
||||
|
||||
.. image:: images/query_pie_chart.png
|
||||
:alt: Query tool graph visualiser pie chart
|
||||
:align: center
|
||||
|
||||
Connection Status
|
||||
*****************
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ notes for it.
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
release_notes_6_13
|
||||
release_notes_6_12
|
||||
release_notes_6_11
|
||||
release_notes_6_10
|
||||
release_notes_6_9
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
************
|
||||
Version 6.12
|
||||
************
|
||||
|
||||
Release date: 2022-07-28
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.11.
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #4488 <https://redmine.postgresql.org/issues/4488>`_ - Added option to trigger autocomplete on key press in the query tool.
|
||||
| `Issue #4607 <https://redmine.postgresql.org/issues/4607>`_ - Allow users to delete files/folders from the storage manager.
|
||||
| `Issue #7389 <https://redmine.postgresql.org/issues/7389>`_ - Allow users to search within the file/storage manager.
|
||||
| `Issue #7486 <https://redmine.postgresql.org/issues/7486>`_ - Added support for visualizing the graphs using Stacked Line, Bar, and Stacked Bar charts in the query tool.
|
||||
| `Issue #7487 <https://redmine.postgresql.org/issues/7487>`_ - Added support for visualise the graph using a Pie chart in the query tool.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #7313 <https://redmine.postgresql.org/issues/7313>`_ - Port the file/storage manager to React.
|
||||
| `Issue #7341 <https://redmine.postgresql.org/issues/7341>`_ - Port change password dialog to React.
|
||||
| `Issue #7342 <https://redmine.postgresql.org/issues/7342>`_ - Port Master Password dialog to React.
|
||||
| `Issue #7492 <https://redmine.postgresql.org/issues/7492>`_ - Removing dynamic module loading and replacing it with static loading.
|
||||
| `Issue #7546 <https://redmine.postgresql.org/issues/7546>`_ - Port named restore point dialog to React.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #7428 <https://redmine.postgresql.org/issues/7428>`_ - Preserve the settings set by the user in the import/export data dialog.
|
||||
| `Issue #7471 <https://redmine.postgresql.org/issues/7471>`_ - Ensure that the splash screen can be moved.
|
||||
| `Issue #7508 <https://redmine.postgresql.org/issues/7508>`_ - Fixed an issue where comments on indexes are not displayed.
|
||||
| `Issue #7512 <https://redmine.postgresql.org/issues/7512>`_ - Ensure that notices should not disappear from the messages tab.
|
||||
| `Issue #7517 <https://redmine.postgresql.org/issues/7517>`_ - Enable the start debugging button once execution is completed.
|
||||
| `Issue #7518 <https://redmine.postgresql.org/issues/7518>`_ - Ensure that dashboard graph API is not called after the panel has been closed.
|
||||
| `Issue #7519 <https://redmine.postgresql.org/issues/7519>`_ - Ensure that geometry should be shown for all the selected cells.
|
||||
| `Issue #7520 <https://redmine.postgresql.org/issues/7520>`_ - Fixed the JSON editor issue of hiding the first record.
|
||||
| `Issue #7522 <https://redmine.postgresql.org/issues/7522>`_ - Added support for Azure PostgreSQL deployment in server mode.
|
||||
| `Issue #7523 <https://redmine.postgresql.org/issues/7523>`_ - Fixed typo error for Statistics on the table header.
|
||||
| `Issue #7524 <https://redmine.postgresql.org/issues/7524>`_ - Fixed an issue where new folders cannot be created in the save dialog.
|
||||
@@ -0,0 +1,55 @@
|
||||
************
|
||||
Version 6.13
|
||||
************
|
||||
|
||||
Release date: 2022-08-25
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.12.
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #3709 <https://redmine.postgresql.org/issues/3709>`_ - Added support to show all background processes in separate panel.
|
||||
| `Issue #7387 <https://redmine.postgresql.org/issues/7387>`_ - Added support to create triggers from existing trigger functions in EPAS.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #7344 <https://redmine.postgresql.org/issues/7344>`_ - Port Role Reassign dialog to React.
|
||||
| `Issue #7345 <https://redmine.postgresql.org/issues/7345>`_ - Port User Management dialog to React.
|
||||
| `Issue #7404 <https://redmine.postgresql.org/issues/7404>`_ - Port process watcher to React.
|
||||
| `Issue #7462 <https://redmine.postgresql.org/issues/7462>`_ - Remove the SQL files for the unsupported versions of the database server.
|
||||
| `Issue #7567 <https://redmine.postgresql.org/issues/7567>`_ - Port About dialog to React.
|
||||
| `Issue #7568 <https://redmine.postgresql.org/issues/7568>`_ - Port change user password and 2FA dialog to React.
|
||||
| `Issue #7590 <https://redmine.postgresql.org/issues/7590>`_ - Port change ownership dialog to React.
|
||||
| `Issue #7595 <https://redmine.postgresql.org/issues/7595>`_ - Update the container base image to Alpine 3.16 (with Python 3.10.5).
|
||||
| `Issue #7602 <https://redmine.postgresql.org/issues/7602>`_ - Fixed improper parsing of HTTP requests in Pallets Werkzeug v2.1.0 and below (CVE-2022-29361).
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #7452 <https://redmine.postgresql.org/issues/7452>`_ - Ensure that an error is thrown if clipboard access is not provided and change the copy rows shortcut.
|
||||
| `Issue #7468 <https://redmine.postgresql.org/issues/7468>`_ - Fixed an issue where the History tab is getting blank and showing an error after some queries are executed.
|
||||
| `Issue #7481 <https://redmine.postgresql.org/issues/7481>`_ - Fixed an issue where OWNED BY was incorrectly set to NONE when adding user privileges on the sequence.
|
||||
| `Issue #7497 <https://redmine.postgresql.org/issues/7497>`_ - Fixed an issue with the error message being displayed at the right place for Azure deployments.
|
||||
| `Issue #7521 <https://redmine.postgresql.org/issues/7521>`_ - Fixed an issue where the Query Editor loses focus when saving a query (Alt+s).
|
||||
| `Issue #7527 <https://redmine.postgresql.org/issues/7527>`_ - Fixed API test cases for Postgres 14.4.
|
||||
| `Issue #7540 <https://redmine.postgresql.org/issues/7540>`_ - Ensure that rename panel should work on view/edit panels.
|
||||
| `Issue #7563 <https://redmine.postgresql.org/issues/7563>`_ - Fixed an issue where autocomplete is not working after clearing the query editor.
|
||||
| `Issue #7573 <https://redmine.postgresql.org/issues/7573>`_ - Ensure that autocomplete does not appear when navigating code using arrow keys.
|
||||
| `Issue #7575 <https://redmine.postgresql.org/issues/7575>`_ - Fixed an issue where Alt-Shift-Q didn't work after creating a new query.
|
||||
| `Issue #7579 <https://redmine.postgresql.org/issues/7579>`_ - Fixed an issue where copy and pasting a row in the results grid doesn't set the default for boolean.
|
||||
| `Issue #7586 <https://redmine.postgresql.org/issues/7586>`_ - Fixed an issue with rendering geometry when selecting a complete column.
|
||||
| `Issue #7587 <https://redmine.postgresql.org/issues/7587>`_ - Ensure that the children of information_schema and pg_catalog node should be displayed.
|
||||
| `Issue #7591 <https://redmine.postgresql.org/issues/7591>`_ - Fixed column "none" does not exist issue, while comparing schema objects.
|
||||
| `Issue #7596 <https://redmine.postgresql.org/issues/7596>`_ - Fixed an issue where schema diff did not pick up the change in RLS policy.
|
||||
| `Issue #7608 <https://redmine.postgresql.org/issues/7608>`_ - Fixed an issue where the cloud deployment wizard creates the cluster with the High Availability even if that option is not selected.
|
||||
| `Issue #7611 <https://redmine.postgresql.org/issues/7611>`_ - Ensure that schema diff maintains view ownership when view definitions are modified.
|
||||
| `Issue #7614 <https://redmine.postgresql.org/issues/7614>`_ - Fixed crypt key is missing issue when logout from the pgAdmin.
|
||||
| `Issue #7616 <https://redmine.postgresql.org/issues/7616>`_ - Ensure that the next button should be disabled if the password did not match for Azure deployment.
|
||||
| `Issue #7617 <https://redmine.postgresql.org/issues/7617>`_ - Fixed an issue where Azure cloud deployment failed.
|
||||
| `Issue #7625 <https://redmine.postgresql.org/issues/7625>`_ - Fixed Spanish translations typo.
|
||||
| `Issue #7630 <https://redmine.postgresql.org/issues/7630>`_ - Ensure that If the trigger function definition is changed, drop and recreate the trigger in the schema diff.
|
||||
| `Issue #7632 <https://redmine.postgresql.org/issues/7632>`_ - Fixed an issue where a user could not authenticate using Azure CLI on OSX.
|
||||
| `Issue #7633 <https://redmine.postgresql.org/issues/7633>`_ - Ensure that the autofocus is on the input control for the master password and server password dialogs.
|
||||
| `Issue #7641 <https://redmine.postgresql.org/issues/7641>`_ - Pin Flask-SocketIO <= v5.2.0. The latest version does not support Werkzeug in production environments.
|
||||
@@ -143,17 +143,6 @@ command, click the *Restore* button to start the process, or click the *Cancel*
|
||||
button to exit without saving your work. A popup will confirm if the restore is
|
||||
successful.
|
||||
|
||||
.. image:: images/restore_messages.png
|
||||
:alt: Restore dialog notifications
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Restore process.
|
||||
|
||||
Click *Click here for details* on the popup to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the restore, and
|
||||
provides additional information for troubleshooting should the restore command
|
||||
encounter problems.
|
||||
|
||||
.. image:: images/restore_process_watcher.png
|
||||
:alt: Restore dialog process watcher
|
||||
:align: center
|
||||
pgAdmin will run the restore process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -20,48 +20,54 @@ Use icons on the top of the *Storage Manager* window to manage storage:
|
||||
|
||||
Use the ``Home`` icon |home| to return to the home directory.
|
||||
|
||||
.. |home| image:: images/home.png
|
||||
.. |home| image:: images/sm_home.png
|
||||
|
||||
Use the ``Up Arrow`` icon |uparrow| to return to the previous directory.
|
||||
|
||||
.. |uparrow| image:: images/uparrow.png
|
||||
.. |uparrow| image:: images/sm_go_back.png
|
||||
|
||||
Use the ``Refresh`` icon |refresh| to display the most-recent files available.
|
||||
|
||||
.. |refresh| image:: images/refresh.png
|
||||
.. |refresh| image:: images/sm_refresh.png
|
||||
|
||||
Select the ``Download`` icon |download| to download the selected file.
|
||||
|
||||
.. |download| image:: images/download.png
|
||||
|
||||
Select the ``Delete`` icon |delete| to delete the selected file or folder.
|
||||
|
||||
.. |delete| image:: images/delete.png
|
||||
|
||||
Select the ``Edit`` icon |edit| to rename a file or folder.
|
||||
|
||||
.. |edit| image:: images/edit.png
|
||||
|
||||
Use the ``Upload`` icon |upload| to upload a file.
|
||||
|
||||
.. |upload| image:: images/upload.png
|
||||
.. |download| image:: images/sm_download.png
|
||||
|
||||
Use the ``New Folder`` icon |folder| to add a new folder.
|
||||
|
||||
.. |folder| image:: images/folder.png
|
||||
|
||||
Use the ``Grid View`` icon |gridview| to display all the files and folders in a grid view.
|
||||
|
||||
.. |gridview| image:: images/gridview.png
|
||||
|
||||
Use the ``Table View`` icon |tableview| to display all the files and folders in a list view.
|
||||
|
||||
.. |tableview| image:: images/tableview.png
|
||||
|
||||
Click on the check box next to *Show hidden files and folders* at the bottom of the window to view hidden files and folders.
|
||||
.. |folder| image:: images/sm_new_folder.png
|
||||
|
||||
Use the *Format* drop down list to select the format of the files to be displayed; choose from *sql*, *csv*, or *All Files*.
|
||||
|
||||
Other Options
|
||||
*********************
|
||||
|
||||
.. image:: images/sm_options.png
|
||||
:alt: Other options
|
||||
:align: center
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 5
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| Menu | Behavior |
|
||||
+======================+===================================================================================================+
|
||||
| *Rename* | Click the *Rename* option to rename a file/folder. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Delete* | Click the *Delete* option to rename a file/folder. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Upload* | Click the *Upload* option to upload multiple files to the current folder. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *List View* | Click the *List View* option to to display all the files and folders in a list view. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Grid View* | Click the *Grid View* option to to display all the files and folders in a grid view. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
| *Show Hidden Files* | Click the *Show Hidden Files* option to view hidden files and folders. |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
You can also download backup files through *Storage Manager* at the successful completion of the backups taken through :ref:`Backup Dialog <backup_dialog>`, :ref:`Backup Global Dialog <backup_globals_dialog>`, or :ref:`Backup Server Dialog <backup_server_dialog>`.
|
||||
|
||||
At the successful completion of a backup, click on the icon to open the current backup file in *Storage Manager* on the *process watcher* window.
|
||||
|
||||
@@ -35,12 +35,13 @@ To add a user, click the Add (+) button at the top right corner.
|
||||
Provide information about the new pgAdmin role in the row:
|
||||
|
||||
* Use the drop-down list box next to *Authentication source* field to select the
|
||||
type of authentication that should be used for the user. If LDAP
|
||||
authentication is not enabled for pgAdmin, then *Authentication source* field
|
||||
is disabled.
|
||||
type of authentication that should be used for the user. If authentication
|
||||
source is only 'internal' then *Authentication source* field
|
||||
is disabled. Supported *Authentication source* are internal, ldap, kerberos,
|
||||
oauth2 and webserver.
|
||||
* Click in the *Username* field, and provide a username for the user. This field
|
||||
is enabled only if you select *ldap* as authentication source. If you select
|
||||
*internal* as authentication source, your email address is displayed in the
|
||||
is enabled only when you select authentication source except *internal*. If you
|
||||
select *internal* as authentication source, your email address is displayed in the
|
||||
username field.
|
||||
* Click in the *Email* field, and provide an email address for the user.
|
||||
* Use the drop-down list box next to *Role* to select whether a user is an
|
||||
@@ -54,15 +55,19 @@ Provide information about the new pgAdmin role in the row:
|
||||
active; the default is *Yes*. Use this switch to disable account activity
|
||||
without deleting an account.
|
||||
* Use the *New password* field to provide the password associated with the user
|
||||
specified in the *Email* field. This field is disabled if you select *ldap*
|
||||
as authentication source since LDAP password is not stored in the pgAdmin database.
|
||||
specified in the *Email* field. This field is disabled if you select any
|
||||
authentication source except *internal*.
|
||||
* Re-enter the password in the *Confirm password* field. This field is disabled
|
||||
if you select *ldap* as authentication source.
|
||||
* Move the *Locked* switch to the *True* position if you want to lock the account;
|
||||
the default is *False*. This functionality is useful when a user is locked by trying unsuccessful login attempts.
|
||||
* *Locked* switch is disabled by default when set to *False*. It is only enabled
|
||||
when the user is locked by trying unsuccessful login attempts. Move the switch
|
||||
to the *False* position if you want to unlock the account.
|
||||
|
||||
To discard a user, and revoke access to pgAdmin, click the trash icon to the
|
||||
left of the row and confirm deletion in the *Delete user?* dialog.
|
||||
left of the row and confirm deletion in the *Delete user?* dialog. If the user
|
||||
has created some shared servers, then the :ref:`Change Ownership <change_ownership>`
|
||||
dialog will appear to change the ownership of a shared server.
|
||||
|
||||
|
||||
Users with the *Administrator* role are able to add, edit and remove pgAdmin
|
||||
users, but otherwise have the same capabilities as those with the *User* role.
|
||||
|
||||
@@ -6,8 +6,7 @@ set -e
|
||||
# Debugging shizz
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(dpkg-architecture -qDEB_HOST_ARCH)
|
||||
|
||||
# Stop creating pyc files.
|
||||
@@ -17,7 +16,7 @@ export PYTHONDONTWRITEBYTECODE=1
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Assemble the "standard" installation footprint
|
||||
_setup_env $0 "debian"
|
||||
_setup_env "$0" "debian"
|
||||
_cleanup "deb"
|
||||
_setup_dirs
|
||||
_create_python_virtualenv "debian"
|
||||
@@ -122,7 +121,7 @@ EOF
|
||||
fakeroot dpkg-deb --build "${METAROOT}" "${DISTROOT}/${APP_NAME}_${APP_LONG_VERSION}_all.deb"
|
||||
|
||||
# Get the libpq package
|
||||
pushd ${DISTROOT} 1> /dev/null
|
||||
pushd "${DISTROOT}" 1> /dev/null
|
||||
apt-get download libpq5
|
||||
popd 1> /dev/null
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)
|
||||
|
||||
# Node repo
|
||||
echo "Setting up the NodeJS repo..."
|
||||
curl -sL https://deb.nodesource.com/setup_12.x | bash -
|
||||
curl -sL https://deb.nodesource.com/setup_16.x | bash -
|
||||
|
||||
# Yarn repo
|
||||
echo "Setting up the Yarn repo..."
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Fixup the passwd file, in case we're on OpenShift
|
||||
if ! whoami &> /dev/null; then
|
||||
if [ $(id -u) -ne 5050 ]; then
|
||||
if ! whoami > /dev/null 2>&1; then
|
||||
if [ "$(id -u)" -ne 5050 ]; then
|
||||
if [ -w /etc/passwd ]; then
|
||||
echo "${USER_NAME:-pgadminr}:x:$(id -u):0:${USER_NAME:-pgadminr} user:${HOME}:/sbin/nologin" >> /etc/passwd
|
||||
fi
|
||||
@@ -13,7 +13,7 @@ fi
|
||||
# provided by the user through the PGADMIN_CONFIG_* environment variables.
|
||||
# Only update the file on first launch. The empty file is created during the
|
||||
# container build so it can have the required ownership.
|
||||
if [ `wc -m /pgadmin4/config_distro.py | awk '{ print $1 }'` = "0" ]; then
|
||||
if [ "$(wc -m /pgadmin4/config_distro.py | awk '{ print $1 }')" = "0" ]; then
|
||||
cat << EOF > /pgadmin4/config_distro.py
|
||||
CA_FILE = '/etc/ssl/certs/ca-certificates.crt'
|
||||
LOG_FILE = '/dev/null'
|
||||
@@ -31,37 +31,40 @@ EOF
|
||||
# This is a bit kludgy, but necessary as the container uses BusyBox/ash as
|
||||
# it's shell and not bash which would allow a much cleaner implementation
|
||||
for var in $(env | grep PGADMIN_CONFIG_ | cut -d "=" -f 1); do
|
||||
# shellcheck disable=SC2086
|
||||
# shellcheck disable=SC2046
|
||||
echo ${var#PGADMIN_CONFIG_} = $(eval "echo \$$var") >> /pgadmin4/config_distro.py
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
|
||||
if ([ -z "${PGADMIN_DEFAULT_EMAIL}" ]) || ( [ -z "${PGADMIN_DEFAULT_PASSWORD}" ] && [ ! -n "${PGADMIN_DEFAULT_PASSWORD_FILE}" ] ); then
|
||||
if [ -z "${PGADMIN_DEFAULT_EMAIL}" ] || { [ -z "${PGADMIN_DEFAULT_PASSWORD}" ] && [ -z "${PGADMIN_DEFAULT_PASSWORD_FILE}" ]; }; then
|
||||
echo 'You need to define the PGADMIN_DEFAULT_EMAIL and PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE environment variables.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ${PGADMIN_DEFAULT_EMAIL} | grep -E "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
if ! echo "${PGADMIN_DEFAULT_EMAIL}" | grep -E "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" > /dev/null; then
|
||||
echo "'${PGADMIN_DEFAULT_EMAIL}' does not appear to be a valid email address. Please reset the PGADMIN_DEFAULT_EMAIL environment variable and try again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Read secret contents
|
||||
if [ -n "${PGADMIN_DEFAULT_PASSWORD_FILE}" ]; then
|
||||
export PGADMIN_DEFAULT_PASSWORD=$(cat ${PGADMIN_DEFAULT_PASSWORD_FILE})
|
||||
PGADMIN_DEFAULT_PASSWORD=$(cat "${PGADMIN_DEFAULT_PASSWORD_FILE}")
|
||||
export PGADMIN_DEFAULT_PASSWORD
|
||||
fi
|
||||
|
||||
# Set the default username and password in a
|
||||
# backwards compatible way
|
||||
export PGADMIN_SETUP_EMAIL=${PGADMIN_DEFAULT_EMAIL}
|
||||
export PGADMIN_SETUP_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
|
||||
export PGADMIN_SETUP_EMAIL="${PGADMIN_DEFAULT_EMAIL}"
|
||||
export PGADMIN_SETUP_PASSWORD="${PGADMIN_DEFAULT_PASSWORD}"
|
||||
|
||||
# Initialize DB before starting Gunicorn
|
||||
# Importing pgadmin4 (from this script) is enough
|
||||
/venv/bin/python3 run_pgadmin.py
|
||||
|
||||
export PGADMIN_SERVER_JSON_FILE=${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}
|
||||
export PGADMIN_SERVER_JSON_FILE="${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}"
|
||||
|
||||
# Pre-load any required servers
|
||||
if [ -f "${PGADMIN_SERVER_JSON_FILE}" ]; then
|
||||
# When running in Desktop mode, no user is created
|
||||
@@ -69,13 +72,13 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
|
||||
if [ "${PGADMIN_CONFIG_SERVER_MODE}" = "False" ]; then
|
||||
/venv/bin/python3 /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}"
|
||||
else
|
||||
/venv/bin/python3 /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}" --user ${PGADMIN_DEFAULT_EMAIL}
|
||||
/venv/bin/python3 /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}" --user "${PGADMIN_DEFAULT_EMAIL}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Start Postfix to handle password resets etc.
|
||||
if [ -z ${PGADMIN_DISABLE_POSTFIX} ]; then
|
||||
if [ -z "${PGADMIN_DISABLE_POSTFIX}" ]; then
|
||||
sudo /usr/sbin/postfix start
|
||||
fi
|
||||
|
||||
@@ -86,8 +89,8 @@ TIMEOUT=$(cd /pgadmin4 && /venv/bin/python3 -c 'import config; print(config.SESS
|
||||
# NOTE: currently pgadmin can run only with 1 worker due to sessions implementation
|
||||
# Using --threads to have multi-threaded single-process worker
|
||||
|
||||
if [ ! -z ${PGADMIN_ENABLE_TLS} ]; then
|
||||
exec /venv/bin/gunicorn --timeout ${TIMEOUT} --bind ${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-443} -w 1 --threads ${GUNICORN_THREADS:-25} --access-logfile ${GUNICORN_ACCESS_LOGFILE:--} --keyfile /certs/server.key --certfile /certs/server.cert -c gunicorn_config.py run_pgadmin:app
|
||||
if [ -n "${PGADMIN_ENABLE_TLS}" ]; then
|
||||
exec /venv/bin/gunicorn --timeout "${TIMEOUT}" --bind "${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-443}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" --keyfile /certs/server.key --certfile /certs/server.cert -c gunicorn_config.py run_pgadmin:app
|
||||
else
|
||||
exec /venv/bin/gunicorn --timeout ${TIMEOUT} --bind ${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-80} -w 1 --threads ${GUNICORN_THREADS:-25} --access-logfile ${GUNICORN_ACCESS_LOGFILE:--} -c gunicorn_config.py run_pgadmin:app
|
||||
exec /venv/bin/gunicorn --timeout "${TIMEOUT}" --bind "${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-80}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" -c gunicorn_config.py run_pgadmin:app
|
||||
fi
|
||||
@@ -1,6 +1,8 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
_setup_env() {
|
||||
echo "Setting up the environment..."
|
||||
WD=$(cd `dirname "$1"` && pwd)
|
||||
WD=$(cd "$(dirname "$1")" && pwd)
|
||||
SOURCEDIR=$(realpath "${WD}/../..")
|
||||
BUILDROOT=$(realpath "${WD}/../../$2-build")
|
||||
DESKTOPROOT=${BUILDROOT}/desktop
|
||||
@@ -8,49 +10,49 @@ _setup_env() {
|
||||
SERVERROOT=${BUILDROOT}/server
|
||||
WEBROOT=${BUILDROOT}/web
|
||||
DISTROOT=$(realpath "${WD}/../../dist")
|
||||
APP_RELEASE=`grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_REVISION=`grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_NAME=`grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //' | sed 's/ //g' | tr '[:upper:]' '[:lower:]'`
|
||||
APP_RELEASE=$(grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_REVISION=$(grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //' | sed 's/ //g' | tr '[:upper:]' '[:lower:]')
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
}
|
||||
|
||||
_cleanup() {
|
||||
echo "Cleaning up the old environment and app..."
|
||||
if test -f ${SOURCEDIR}/runtime/pgAdmin4; then
|
||||
rm -rf ${SOURCEDIR}/runtime/pgAdmin4
|
||||
if test -f "${SOURCEDIR}/runtime/pgAdmin4"; then
|
||||
rm -rf "${SOURCEDIR}/runtime/pgAdmin4"
|
||||
fi
|
||||
if test -d ${BUILDROOT}; then
|
||||
rm -rf ${BUILDROOT}
|
||||
if test -d "${BUILDROOT}"; then
|
||||
rm -rf "${BUILDROOT}"
|
||||
fi
|
||||
rm -f ${DISTROOT}/pgadmin4*.$1
|
||||
rm -f "${DISTROOT}/pgadmin4"*".$1"
|
||||
}
|
||||
|
||||
_setup_dirs() {
|
||||
echo "Creating output directories..."
|
||||
test -d ${BUILDROOT} || mkdir ${BUILDROOT}
|
||||
test -d ${DESKTOPROOT} || mkdir ${DESKTOPROOT}
|
||||
test -d ${METAROOT} || mkdir ${METAROOT}
|
||||
test -d ${SERVERROOT} || mkdir ${SERVERROOT}
|
||||
test -d ${WEBROOT} || mkdir ${WEBROOT}
|
||||
test -d ${DISTROOT} || mkdir ${DISTROOT}
|
||||
test -d "${BUILDROOT}" || mkdir "${BUILDROOT}"
|
||||
test -d "${DESKTOPROOT}" || mkdir "${DESKTOPROOT}"
|
||||
test -d "${METAROOT}" || mkdir "${METAROOT}"
|
||||
test -d "${SERVERROOT}" || mkdir "${SERVERROOT}"
|
||||
test -d "${WEBROOT}" || mkdir "${WEBROOT}"
|
||||
test -d "${DISTROOT}" || mkdir "${DISTROOT}"
|
||||
}
|
||||
|
||||
_create_python_virtualenv() {
|
||||
echo "Creating the virtual environment..."
|
||||
|
||||
cd ${SERVERROOT}
|
||||
cd "${SERVERROOT}" || exit
|
||||
|
||||
# Create the required directories
|
||||
mkdir -p "usr/${APP_NAME}"
|
||||
cd "usr/${APP_NAME}"
|
||||
cd "usr/${APP_NAME}" || exit
|
||||
|
||||
# Create the blank venv
|
||||
python3 -m venv venv
|
||||
# shellcheck disable=SC1091
|
||||
source venv/bin/activate
|
||||
|
||||
# Make sure we have the wheel package present, as well as the latest pip
|
||||
@@ -58,7 +60,7 @@ _create_python_virtualenv() {
|
||||
pip3 install wheel
|
||||
|
||||
# Install the requirements
|
||||
pip3 install --no-cache-dir --no-binary psycopg2 -r ${SOURCEDIR}/requirements.txt
|
||||
pip3 install --no-cache-dir --no-binary psycopg2 -r "${SOURCEDIR}/requirements.txt"
|
||||
|
||||
# Fixup the paths in the venv activation scripts
|
||||
sed -i 's/VIRTUAL_ENV=.*/VIRTUAL_ENV="\/usr\/pgadmin4\/venv"/g' venv/bin/activate
|
||||
@@ -74,10 +76,10 @@ _create_python_virtualenv() {
|
||||
# Figure out some paths for use when completing the venv
|
||||
# Use "python3" here as we want the venv path
|
||||
PYMODULES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
|
||||
DIR_PYMODULES_PATH=`dirname ${PYMODULES_PATH}`
|
||||
DIR_PYMODULES_PATH=$(dirname "${PYMODULES_PATH}")
|
||||
|
||||
# Use /usr/bin/python3 here as we want the system path
|
||||
if [ $1 == "debian" ]; then
|
||||
if [ "$1" == "debian" ]; then
|
||||
PYSYSLIB_PATH=$(/usr/bin/python3 -c "import sys; print('%s/lib/python%d.%.d' % (sys.prefix, sys.version_info.major, sys.version_info.minor))")
|
||||
else
|
||||
PYSYSLIB_PATH=$(/usr/bin/python3 -c "import sys; print('%s/lib64/python%d.%.d' % (sys.prefix, sys.version_info.major, sys.version_info.minor))")
|
||||
@@ -86,33 +88,33 @@ _create_python_virtualenv() {
|
||||
# Symlink in the rest of the Python libs. This is required because the runtime
|
||||
# will clear PYTHONHOME for safety, which has the side-effect of preventing
|
||||
# it from finding modules that are not explicitly included in the venv
|
||||
cd ${DIR_PYMODULES_PATH}
|
||||
cd "${DIR_PYMODULES_PATH}" || exit
|
||||
|
||||
# Files
|
||||
for FULLPATH in ${PYSYSLIB_PATH}/*.py; do
|
||||
for FULLPATH in "${PYSYSLIB_PATH}"/*.py; do
|
||||
FILE=${FULLPATH##*/}
|
||||
if [ ! -e ${FILE} ]; then
|
||||
ln -s ${FULLPATH} ${FILE}
|
||||
if [ ! -e "${FILE}" ]; then
|
||||
ln -s "${FULLPATH}" "${FILE}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Paths
|
||||
for FULLPATH in ${PYSYSLIB_PATH}/*/; do
|
||||
for FULLPATH in "${PYSYSLIB_PATH}"/*/; do
|
||||
FULLPATH=${FULLPATH%*/}
|
||||
FILE=${FULLPATH##*/}
|
||||
if [ ! -e ${FILE} ]; then
|
||||
ln -s ${FULLPATH} ${FILE}
|
||||
if [ ! -e "${FILE}" ]; then
|
||||
ln -s "${FULLPATH}" "${FILE}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Remove tests
|
||||
cd site-packages
|
||||
cd site-packages || exit
|
||||
find . -name "test" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
|
||||
# Link the python<version> directory to python so that the private environment path is found by the application.
|
||||
if test -d ${DIR_PYMODULES_PATH}; then
|
||||
ln -s $(basename ${DIR_PYMODULES_PATH}) ${DIR_PYMODULES_PATH}/../python
|
||||
if test -d "${DIR_PYMODULES_PATH}"; then
|
||||
ln -s "$(basename "${DIR_PYMODULES_PATH}")" "${DIR_PYMODULES_PATH}/../python"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -134,13 +136,13 @@ _build_runtime() {
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.62.2"
|
||||
|
||||
pushd "${BUILDROOT}" > /dev/null
|
||||
pushd "${BUILDROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
wget https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-linux-x64.tar.gz && break
|
||||
rm nwjs-v${NW_VERSION}-linux-x64.tar.gz
|
||||
wget "https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-linux-x64.tar.gz" && break
|
||||
rm "nwjs-v${NW_VERSION}-linux-x64.tar.gz"
|
||||
done
|
||||
tar -zxvf nwjs-v${NW_VERSION}-linux-x64.tar.gz
|
||||
popd > /dev/null
|
||||
tar -zxvf "nwjs-v${NW_VERSION}-linux-x64.tar.gz"
|
||||
popd > /dev/null || exit
|
||||
# WGET END
|
||||
|
||||
# Copy nwjs into the staging directory
|
||||
@@ -188,10 +190,11 @@ _build_runtime() {
|
||||
_build_docs() {
|
||||
echo "Building the documentation..."
|
||||
cd "${SERVERROOT}" && mkdir -p "usr/${APP_NAME}/share/docs/en_US/html"
|
||||
cd "${SOURCEDIR}/docs/en_US"
|
||||
cd "${SOURCEDIR}/docs/en_US" || exit
|
||||
python3 build_code_snippet.py
|
||||
SYS_PYTHONPATH=$(/usr/bin/python3 -c "import sys; print(':'.join([p for p in sys.path if p]))")
|
||||
if [ $1 == "redhat" -a "${OS_VERSION}" == "7" ]; then
|
||||
# shellcheck disable=SC2153
|
||||
if [ "$1" == "redhat" ] && [ "${OS_VERSION}" == "7" ]; then
|
||||
PYTHONPATH=$PYTHONPATH:${SYS_PYTHONPATH} python3 /usr/local/bin/sphinx-build . "${SERVERROOT}/usr/${APP_NAME}/share/docs/en_US/html"
|
||||
else
|
||||
PYTHONPATH=$PYTHONPATH:${SYS_PYTHONPATH} python3 -msphinx . "${SERVERROOT}/usr/${APP_NAME}/share/docs/en_US/html"
|
||||
@@ -204,15 +207,15 @@ _copy_code() {
|
||||
# Remove any TCL-related files that may cause us problems
|
||||
find "${SERVERROOT}/usr/${APP_NAME}/venv/" -name "_tkinter*" -print0 | xargs -0 rm -rf
|
||||
|
||||
pushd ${SOURCEDIR}/web > /dev/null
|
||||
pushd "${SOURCEDIR}/web" > /dev/null || exit
|
||||
yarn install
|
||||
yarn run bundle
|
||||
popd > /dev/null
|
||||
popd > /dev/null || exit
|
||||
|
||||
# copy the web directory to the bundle as it is required by runtime
|
||||
cp -r "${SOURCEDIR}/web" "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cp "${SOURCEDIR}/pkg/linux/config_distro.py" "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/web/" || exit
|
||||
rm -f pgadmin4.db config_local.*
|
||||
rm -rf karma.conf.js package.json node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
@@ -230,11 +233,11 @@ _copy_code() {
|
||||
# Ensure our venv will use the correct Python interpreter, even if the
|
||||
# user has configured an alternative default.
|
||||
# DO THIS LAST!
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/venv/bin"
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/venv/bin" || exit
|
||||
PYTHON_INTERPRETER=$(/usr/bin/python3 -c "import os, sys; print(os.path.realpath(sys.executable))")
|
||||
PYTHON_VERSION=$(/usr/bin/python3 -c "import sys; print('%d.%d' % (sys.version_info.major, sys.version_info.minor))")
|
||||
rm python && ln -s python3 python
|
||||
rm python${PYTHON_VERSION} && ln -s python3 python${PYTHON_VERSION}
|
||||
rm "python${PYTHON_VERSION}" && ln -s python3 "python${PYTHON_VERSION}"
|
||||
rm python3 && ln -s "${PYTHON_INTERPRETER}" python3
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ if [ "$EUID" -ne 0 ]
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$#" -ne 0 ]] && ([[ "$#" -eq 1 ]] && [[ "$1" != "--yes" ]]); then
|
||||
if [[ "$#" -gt 1 ]] || { [[ "$#" -eq 1 ]] && [[ "$1" != "--yes" ]]; }; then
|
||||
echo "Usage: $0 [--yes]"
|
||||
exit 1
|
||||
fi
|
||||
@@ -20,7 +20,7 @@ IS_SUSE=0
|
||||
UNAME=$(uname -a)
|
||||
|
||||
# Get the distro from the environment
|
||||
if [ "x${PGADMIN_PLATFORM_TYPE}" == "x" ]; then
|
||||
if [ "${PGADMIN_PLATFORM_TYPE}" == "" ]; then
|
||||
if [ -f /etc/redhat-release ]; then
|
||||
PLATFORM_TYPE=redhat
|
||||
elif [[ ${UNAME} =~ "Ubuntu" ]] || [[ ${UNAME} =~ "Debian" ]] || [ -f /etc/apt/sources.list ]; then
|
||||
@@ -72,9 +72,7 @@ fi
|
||||
|
||||
# Run setup script first:
|
||||
echo "Creating configuration database..."
|
||||
/usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py
|
||||
|
||||
if [ $? != 0 ]
|
||||
if ! /usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py;
|
||||
then
|
||||
echo "Error setting up server mode. Please examine the output above."
|
||||
exit 1
|
||||
@@ -108,7 +106,7 @@ if [ ${IS_DEBIAN} == 1 ]; then
|
||||
if [ ${AUTOMATED} == 1 ]; then
|
||||
RESPONSE=Y
|
||||
else
|
||||
read -p "We can now configure the Apache Web server for you. This involves enabling the wsgi module and configuring the pgAdmin 4 application to mount at /pgadmin4. Do you wish to continue (y/n)? " RESPONSE
|
||||
read -r -p "We can now configure the Apache Web server for you. This involves enabling the wsgi module and configuring the pgAdmin 4 application to mount at /pgadmin4. Do you wish to continue (y/n)? " RESPONSE
|
||||
fi
|
||||
|
||||
case ${RESPONSE} in
|
||||
@@ -121,18 +119,16 @@ if [ ${IS_DEBIAN} == 1 ]; then
|
||||
esac
|
||||
fi
|
||||
|
||||
APACHE_STATUS=`ps cax | grep ${APACHE}`
|
||||
if [ $? -eq 0 ]; then
|
||||
if pgrep ${APACHE} > /dev/null; then
|
||||
if [ ${AUTOMATED} == 1 ]; then
|
||||
RESPONSE=Y
|
||||
else
|
||||
read -p "The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? " RESPONSE
|
||||
read -r -p "The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? " RESPONSE
|
||||
fi
|
||||
|
||||
case ${RESPONSE} in
|
||||
y|Y )
|
||||
systemctl restart ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
if ! systemctl restart ${APACHE}; then
|
||||
echo "Error restarting ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully restarted. You can now start using pgAdmin 4 in web mode at http://127.0.0.1/pgadmin4"
|
||||
@@ -144,20 +140,18 @@ else
|
||||
if [ ${AUTOMATED} == 1 ]; then
|
||||
RESPONSE=Y
|
||||
else
|
||||
read -p "The Apache web server is not running. We can enable and start the web server for you to finish pgAdmin 4 installation. Continue (y/n)? " RESPONSE
|
||||
read -r -p "The Apache web server is not running. We can enable and start the web server for you to finish pgAdmin 4 installation. Continue (y/n)? " RESPONSE
|
||||
fi
|
||||
|
||||
case ${RESPONSE} in
|
||||
y|Y )
|
||||
systemctl enable ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
if ! systemctl enable ${APACHE}; then
|
||||
echo "Error enabling ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully enabled."
|
||||
fi
|
||||
|
||||
systemctl start ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
if ! systemctl start ${APACHE}; then
|
||||
echo "Error starting ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully started."
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
_setup_env() {
|
||||
FUNCS_DIR=$(cd `dirname $0` && pwd)/../..
|
||||
APP_RELEASE=`grep "^APP_RELEASE" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_REVISION=`grep "^APP_REVISION" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_NAME=`grep "^APP_NAME" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //'`
|
||||
FUNCS_DIR=$(cd "$(dirname "$0")" && pwd)/../..
|
||||
APP_RELEASE=$(grep "^APP_RELEASE" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_REVISION=$(grep "^APP_REVISION" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_NAME=$(grep "^APP_NAME" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_SUFFIX=$(grep "^APP_SUFFIX" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
BUNDLE_DIR="${BUILD_ROOT}/${APP_NAME}.app"
|
||||
DMG_NAME="${DIST_ROOT}/$(echo ${APP_NAME} | sed 's/ //g' | awk '{print tolower($0)}')-${APP_LONG_VERSION}.dmg"
|
||||
DMG_NAME="${DIST_ROOT}"/$(echo "${APP_NAME}" | sed 's/ //g' | awk '{print tolower($0)}')-"${APP_LONG_VERSION}.dmg"
|
||||
}
|
||||
|
||||
_cleanup() {
|
||||
echo Cleaning up the old environment and app bundle...
|
||||
rm -rf "${BUILD_ROOT}"
|
||||
rm -rf "${TEMP_DIR}"
|
||||
rm -f ${DIST_ROOT}/*.dmg
|
||||
rm -f "${DIST_ROOT}"/*.dmg
|
||||
}
|
||||
|
||||
_build_runtime() {
|
||||
@@ -39,13 +40,13 @@ _build_runtime() {
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.62.2"
|
||||
|
||||
pushd "${BUILD_ROOT}" > /dev/null
|
||||
pushd "${BUILD_ROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
wget https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-osx-x64.zip && break
|
||||
rm nwjs-v${NW_VERSION}-osx-x64.zip
|
||||
wget "https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-osx-x64.zip" && break
|
||||
rm "nwjs-v${NW_VERSION}-osx-x64.zip"
|
||||
done
|
||||
unzip nwjs-v${NW_VERSION}-osx-x64.zip
|
||||
popd > /dev/null
|
||||
unzip "nwjs-v${NW_VERSION}-osx-x64.zip"
|
||||
popd > /dev/null || exit
|
||||
# WGET END
|
||||
|
||||
# YARN:
|
||||
@@ -77,7 +78,7 @@ _create_python_env() {
|
||||
PATH=$PATH:/usr/local/pgsql/bin python \
|
||||
"${BUILD_ROOT}/relocatable_python/make_relocatable_python_framework.py" \
|
||||
--upgrade-pip \
|
||||
--python-version ${PGADMIN_PYTHON_VERSION} \
|
||||
--python-version "${PGADMIN_PYTHON_VERSION}" \
|
||||
--pip-requirements "${SOURCE_DIR}/requirements.txt" \
|
||||
--destination "${BUNDLE_DIR}/Contents/Frameworks/"
|
||||
|
||||
@@ -85,26 +86,27 @@ _create_python_env() {
|
||||
# so they get properly signed later
|
||||
OLD_IFS=${IFS}
|
||||
IFS=$'\n'
|
||||
for i in $(find . -type f -name *.so -exec file "{}" \; | grep -v "(for architecture" | grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle|Mach-O 64-bit dynamically linked shared library" | awk -F":" '{print $1}' | uniq)
|
||||
for i in $(find . -type f -name '*.so' -exec file "{}" \; | grep -v "(for architecture" | grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle|Mach-O 64-bit dynamically linked shared library" | awk -F":" '{print $1}' | uniq)
|
||||
do
|
||||
chmod +x "${i}"
|
||||
done
|
||||
IFS=${OLD_IFS}
|
||||
|
||||
# Fixup shebangs
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework/Versions/Current/bin"
|
||||
grep -RiIl 'mac-build' * | xargs sed -i '' 's/\/.*\/python3\./\$(dirname \"$0\")\/python3./g'
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework/Versions/Current/bin" || exit
|
||||
# shellcheck disable=SC2016
|
||||
grep -RiIl 'mac-build' ./* | xargs sed -i '' 's/\/.*\/python3\./\$(dirname \"$0\")\/python3./g'
|
||||
|
||||
# Remove some things we don't need
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework"
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework" || exit
|
||||
find . -name test -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tkinter -type d -print0 | xargs -0 rm -rf
|
||||
find . -name turtle.py -type f -print0 | xargs -0 rm -rf
|
||||
find . -name turtledemo -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tcl* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tk* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tdbc* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name itcl* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tcl*" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tk*" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tdbc*" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "itcl*" -type d -print0 | xargs -0 rm -rf
|
||||
rm -f Versions/Current/lib/Tk.*
|
||||
rm -f Versions/Current/lib/libtcl*.dylib
|
||||
rm -f Versions/Current/lib/libtk*.dylib
|
||||
@@ -123,15 +125,16 @@ _build_docs() {
|
||||
# Create a temporary venv for the doc build, so we don't contaminate the one
|
||||
# that we're going to ship.
|
||||
"${BUNDLE_DIR}/Contents/Frameworks/Python.framework/Versions/Current/bin/python3" -m venv "${BUILD_ROOT}/venv"
|
||||
# shellcheck disable=SC1091
|
||||
source "${BUILD_ROOT}/venv/bin/activate"
|
||||
pip3 install --upgrade pip
|
||||
pip3 install -r "${SOURCE_DIR}/requirements.txt"
|
||||
pip3 install sphinx
|
||||
|
||||
cd "${SOURCE_DIR}"
|
||||
cd "${SOURCE_DIR}" || exit
|
||||
make docs
|
||||
|
||||
cd "${SOURCE_DIR}/docs/en_US"
|
||||
cd "${SOURCE_DIR}/docs/en_US" || exit
|
||||
test -d "${BUNDLE_DIR}/Contents/Resources/docs/en_US" || mkdir -p "${BUNDLE_DIR}/Contents/Resources/docs/en_US"
|
||||
cp -r _build/html "${BUNDLE_DIR}/Contents/Resources/docs/en_US/"
|
||||
|
||||
@@ -144,10 +147,10 @@ _fixup_imports() {
|
||||
local TODO TODO_OLD FW_RELPATH LIB LIB_BN
|
||||
|
||||
echo "Fixing imports on the core appbundle..."
|
||||
pushd "$1" > /dev/null
|
||||
pushd "$1" > /dev/null || exit
|
||||
|
||||
# Find all the files that may need tweaks
|
||||
TODO=$(file `find . -perm +0111 -type f` | \
|
||||
TODO=$(find . -perm +0111 -type f -exec file "{}" \; | \
|
||||
grep -v "Frameworks/Python.framework" | \
|
||||
grep -v "Frameworks/nwjs" | \
|
||||
grep -E "Mach-O 64-bit" | \
|
||||
@@ -155,7 +158,7 @@ _fixup_imports() {
|
||||
uniq)
|
||||
|
||||
# Add anything in the site-packages Python directory
|
||||
TODO+=$(file `find ./Contents/Frameworks/Python.framework/Versions/Current/lib/python*/site-packages -perm +0111 -type f` | \
|
||||
TODO+=$(find ./Contents/Frameworks/Python.framework/Versions/Current/lib/python*/site-packages -perm +0111 -type f -exec file "{}" \; | \
|
||||
grep -E "Mach-O 64-bit" | \
|
||||
awk -F ':| ' '{ORS=" "; print $1}' | \
|
||||
uniq)
|
||||
@@ -183,9 +186,9 @@ _fixup_imports() {
|
||||
|
||||
# Find all libraries ${TODO_OBJ} depends on, but skip system libraries
|
||||
for LIB in $(
|
||||
otool -L ${TODO_OBJ} | \
|
||||
otool -L "${TODO_OBJ}" | \
|
||||
sed -n 's|^.*[[:space:]]\([^[:space:]]*\.dylib\).*$|\1|p' | \
|
||||
egrep -v '^(/usr/lib)|(/System)|@executable_path|@loader_path|/DLC/PIL/' \
|
||||
grep -E -v '^(/usr/lib)|(/System)|@executable_path|@loader_path|/DLC/PIL/' \
|
||||
); do
|
||||
# Copy in any required dependencies
|
||||
LIB_BN="$(basename "${LIB}")" ;
|
||||
@@ -225,12 +228,12 @@ _fixup_imports() {
|
||||
done
|
||||
|
||||
echo "Imports updated on the core appbundle."
|
||||
popd > /dev/null
|
||||
popd > /dev/null || exit
|
||||
}
|
||||
|
||||
_complete_bundle() {
|
||||
echo "Completing the appbundle..."
|
||||
cd ${SCRIPT_DIR}
|
||||
cd "${SCRIPT_DIR}" || exit
|
||||
|
||||
# Copy the binary utilities into place
|
||||
mkdir -p "${BUNDLE_DIR}/Contents/SharedSupport/"
|
||||
@@ -247,7 +250,7 @@ _complete_bundle() {
|
||||
for FILE in "${BUNDLE_DIR}"/Contents/Resources/*.lproj/InfoPlist.strings; do
|
||||
sed -i '' 's/CFBundleGetInfoString =.*/CFBundleGetInfoString = "Copyright (C) 2013 - 2022, The pgAdmin Development Team";/g' "${FILE}"
|
||||
sed -i '' 's/NSHumanReadableCopyright =.*/NSHumanReadableCopyright = "Copyright (C) 2013 - 2022, The pgAdmin Development Team";/g' "${FILE}"
|
||||
echo CFBundleDisplayName = \"${APP_NAME}\"\; >> "${FILE}"
|
||||
echo CFBundleDisplayName = \""${APP_NAME}"\"\; >> "${FILE}"
|
||||
done
|
||||
|
||||
# PkgInfo
|
||||
@@ -266,39 +269,41 @@ _complete_bundle() {
|
||||
_fixup_imports "${BUNDLE_DIR}"
|
||||
|
||||
# Build node modules
|
||||
pushd "${SOURCE_DIR}/web" > /dev/null
|
||||
pushd "${SOURCE_DIR}/web" > /dev/null || exit
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
curl https://curl.se/ca/cacert.pem -o cacert.pem -s
|
||||
popd > /dev/null
|
||||
popd > /dev/null || exit
|
||||
|
||||
# copy the web directory to the bundle as it is required by runtime
|
||||
cp -r "${SOURCE_DIR}/web" "${BUNDLE_DIR}/Contents/Resources/"
|
||||
cd "${BUNDLE_DIR}/Contents/Resources/web"
|
||||
cd "${BUNDLE_DIR}/Contents/Resources/web" || exit
|
||||
rm -f pgadmin4.db config_local.*
|
||||
rm -rf karma.conf.js package.json node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "feature_tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name ".DS_Store" -print0 | xargs -0 rm -f
|
||||
|
||||
echo "SERVER_MODE = False" > config_distro.py
|
||||
echo "HELP_PATH = '../../../docs/en_US/html/'" >> config_distro.py
|
||||
echo "DEFAULT_BINARY_PATHS = {" >> config_distro.py
|
||||
echo " 'pg': '\$DIR/../../SharedSupport'," >> config_distro.py
|
||||
echo " 'ppas': ''" >> config_distro.py
|
||||
echo "}" >> config_distro.py
|
||||
{
|
||||
echo "SERVER_MODE = False"
|
||||
echo "HELP_PATH = '../../../docs/en_US/html/'"
|
||||
echo "DEFAULT_BINARY_PATHS = {"
|
||||
echo " 'pg': '\$DIR/../../SharedSupport',"
|
||||
echo " 'ppas': ''"
|
||||
echo "}"
|
||||
} > config_distro.py
|
||||
|
||||
# License files
|
||||
cp -r ${SOURCE_DIR}/LICENSE "${BUNDLE_DIR}/Contents/"
|
||||
cp -r ${SOURCE_DIR}/DEPENDENCIES "${BUNDLE_DIR}/Contents/"
|
||||
cp -r "${SOURCE_DIR}/LICENSE" "${BUNDLE_DIR}/Contents/"
|
||||
cp -r "${SOURCE_DIR}/DEPENDENCIES" "${BUNDLE_DIR}/Contents/"
|
||||
|
||||
# Remove the .pyc files if any
|
||||
find "${BUNDLE_DIR}" -name "*.pyc" -print0 | xargs -0 rm -f
|
||||
}
|
||||
|
||||
_codesign_binaries() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -309,13 +314,14 @@ _codesign_binaries() {
|
||||
|
||||
# Create the entitlements file
|
||||
cp "${SCRIPT_DIR}/entitlements.plist.in" "${BUILD_ROOT}/entitlements.plist"
|
||||
TEAM_ID=$(echo ${DEVELOPER_ID} | awk -F"[()]" '{print $2}')
|
||||
TEAM_ID=$(echo "${DEVELOPER_ID}" | awk -F"[()]" '{print $2}')
|
||||
sed -i '' "s/%TEAMID%/${TEAM_ID}/g" "${BUILD_ROOT}/entitlements.plist"
|
||||
|
||||
echo Signing ${BUNDLE_DIR} binaries...
|
||||
echo Signing "${BUNDLE_DIR}" binaries...
|
||||
IFS=$'\n'
|
||||
for i in $(find "${BUNDLE_DIR}" -type f -perm +111 -exec file "{}" \; | \
|
||||
grep -v "(for architecture" | \
|
||||
grep -v -E "^- Mach-O" | \
|
||||
grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle|Mach-O 64-bit dynamically linked shared library" | \
|
||||
awk -F":" '{print $1}' | \
|
||||
uniq)
|
||||
@@ -328,25 +334,23 @@ _codesign_binaries() {
|
||||
"$i"
|
||||
done
|
||||
|
||||
echo Signing ${BUNDLE_DIR} libraries...
|
||||
for i in $(find "${BUNDLE_DIR}" -type f -name "*.dylib*")
|
||||
do
|
||||
echo Signing "${BUNDLE_DIR}" libraries...
|
||||
find "${BUNDLE_DIR}" -type f -name "*.dylib*" -exec \
|
||||
codesign --deep --force --verify --verbose --timestamp \
|
||||
--options runtime \
|
||||
--entitlements "${BUILD_ROOT}/entitlements.plist" \
|
||||
-i org.pgadmin.pgadmin4 \
|
||||
--sign "${DEVELOPER_ID}" \
|
||||
"$i"
|
||||
done
|
||||
{} \;
|
||||
}
|
||||
|
||||
_codesign_bundle() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Sign the .app
|
||||
echo Signing ${BUNDLE_DIR}...
|
||||
echo Signing "${BUNDLE_DIR}"...
|
||||
codesign --deep --force --verify --verbose --timestamp \
|
||||
--options runtime \
|
||||
--entitlements "${BUILD_ROOT}/entitlements.plist" \
|
||||
@@ -357,7 +361,7 @@ _codesign_bundle() {
|
||||
|
||||
_create_dmg() {
|
||||
# move to the directory where we want to create the DMG
|
||||
test -d ${DIST_ROOT} || mkdir ${DIST_ROOT}
|
||||
test -d "${DIST_ROOT}" || mkdir "${DIST_ROOT}"
|
||||
|
||||
echo "Checking out create-dmg..."
|
||||
git clone https://github.com/create-dmg/create-dmg.git "${BUILD_ROOT}/create-dmg"
|
||||
@@ -381,7 +385,7 @@ _create_dmg() {
|
||||
}
|
||||
|
||||
_codesign_dmg() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -396,20 +400,19 @@ _codesign_dmg() {
|
||||
|
||||
|
||||
_notarize_pkg() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Notarize the package. Try three times, to allow for upload issues
|
||||
cmd_status=0
|
||||
for i in {1..3}; do
|
||||
echo "Uploading DMG for notarisation (attempt ${i} of 3)..."
|
||||
STATUS=$(xcrun altool --notarize-app \
|
||||
-f "${DMG_NAME}" \
|
||||
--asc-provider ${DEVELOPER_NAME} \
|
||||
--asc-provider "${DEVELOPER_NAME}" \
|
||||
--primary-bundle-id org.pgadmin.pgadmin4 \
|
||||
-u ${DEVELOPER_USER} \
|
||||
-p ${DEVELOPER_ASP} 2>&1)
|
||||
-u "${DEVELOPER_USER}" \
|
||||
-p "${DEVELOPER_ASP}" 2>&1)
|
||||
RETVAL=$?
|
||||
|
||||
if [ ${RETVAL} != 0 ]; then
|
||||
@@ -427,7 +430,7 @@ _notarize_pkg() {
|
||||
fi
|
||||
|
||||
# Get the request ID
|
||||
REQUEST_UUID=$(echo ${STATUS} | awk '/RequestUUID/ { print $NF; }')
|
||||
REQUEST_UUID=$(echo "${STATUS}" | awk '/RequestUUID/ { print $NF; }')
|
||||
echo "Notarization request ID: ${REQUEST_UUID}"
|
||||
|
||||
# Now we need to wait for the results. Try 60 times.
|
||||
@@ -436,9 +439,9 @@ _notarize_pkg() {
|
||||
sleep 30
|
||||
|
||||
echo "Requesting notarisation result (attempt ${i} of 60)..."
|
||||
REQUEST_STATUS=$(xcrun altool --notarization-info ${REQUEST_UUID} \
|
||||
--username ${DEVELOPER_USER} \
|
||||
--password ${DEVELOPER_ASP} 2>&1 | \
|
||||
REQUEST_STATUS=$(xcrun altool --notarization-info "${REQUEST_UUID}" \
|
||||
--username "${DEVELOPER_USER}" \
|
||||
--password "${DEVELOPER_ASP}" 2>&1 | \
|
||||
awk -F ': ' '/Status:/ { print $2; }' )
|
||||
|
||||
if [[ "${REQUEST_STATUS}" == "success" ]]; then
|
||||
@@ -447,9 +450,9 @@ _notarize_pkg() {
|
||||
done
|
||||
|
||||
# Print status information
|
||||
xcrun altool --notarization-info ${REQUEST_UUID} \
|
||||
--username ${DEVELOPER_USER} \
|
||||
--password ${DEVELOPER_ASP}
|
||||
xcrun altool --notarization-info "${REQUEST_UUID}" \
|
||||
--username "${DEVELOPER_USER}" \
|
||||
--password "${DEVELOPER_ASP}"
|
||||
|
||||
if [[ "${REQUEST_STATUS}" != "success" ]]; then
|
||||
echo "Notarization failed."
|
||||
@@ -458,10 +461,8 @@ _notarize_pkg() {
|
||||
|
||||
# Staple the notarization
|
||||
echo "Stapling the notarization to the pgAdmin DMG..."
|
||||
xcrun stapler staple "${DMG_NAME}"
|
||||
|
||||
if [ $? != 0 ]; then
|
||||
echo "Stapling failed."
|
||||
if ! xcrun stapler staple "${DMG_NAME}"; then
|
||||
echo "Stapling failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -8,49 +8,57 @@ set -e -E
|
||||
# Debugging shizz
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
SCRIPT_DIR=$(cd `dirname $0` && pwd)
|
||||
SOURCE_DIR=$(realpath ${SCRIPT_DIR}/../..)
|
||||
BUILD_ROOT=$(realpath ${SCRIPT_DIR}/../..)/mac-build
|
||||
TEMP_DIR=$(realpath ${SCRIPT_DIR}/../..)/mac-temp
|
||||
DIST_ROOT=$(realpath ${SCRIPT_DIR}/../..)/dist
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
export SCRIPT_DIR
|
||||
SOURCE_DIR=$(realpath "${SCRIPT_DIR}"/../..)
|
||||
export SOURCE_DIR
|
||||
BUILD_ROOT=$(realpath "${SCRIPT_DIR}"/../..)/mac-build
|
||||
export BUILD_ROOT
|
||||
TEMP_DIR=$(realpath "${SCRIPT_DIR}"/../..)/mac-temp
|
||||
export TEMP_DIR
|
||||
DIST_ROOT=$(realpath "${SCRIPT_DIR}"/../..)/dist
|
||||
export DIST_ROOT
|
||||
|
||||
CODESIGN=1
|
||||
if [ ! -f ${SCRIPT_DIR}/codesign.conf ]; then
|
||||
export CODESIGN=1
|
||||
if [ ! -f "${SCRIPT_DIR}/codesign.conf" ]; then
|
||||
echo
|
||||
echo "******************************************************************"
|
||||
echo "* pkg/mac/codesign.conf not found. NOT signing the binaries."
|
||||
echo "******************************************************************"
|
||||
echo
|
||||
CODESIGN=0
|
||||
export CODESIGN=0
|
||||
sleep 2
|
||||
else
|
||||
source ${SCRIPT_DIR}/codesign.conf
|
||||
# shellcheck disable=SC1091
|
||||
source "${SCRIPT_DIR}/codesign.conf"
|
||||
fi
|
||||
|
||||
NOTARIZE=1
|
||||
if [ ! -f ${SCRIPT_DIR}/notarization.conf ]; then
|
||||
export NOTARIZE=1
|
||||
if [ ! -f "${SCRIPT_DIR}/notarization.conf" ]; then
|
||||
echo
|
||||
echo "******************************************************************"
|
||||
echo "* pkg/mac/notarization.conf not found. NOT notarizing the package."
|
||||
echo "******************************************************************"
|
||||
echo
|
||||
NOTARIZE=0
|
||||
export NOTARIZE=0
|
||||
sleep 2
|
||||
else
|
||||
source ${SCRIPT_DIR}/notarization.conf
|
||||
# shellcheck disable=SC1091
|
||||
source "${SCRIPT_DIR}/notarization.conf"
|
||||
fi
|
||||
|
||||
if [ "x${PGADMIN_POSTGRES_DIR}" == "x" ]; then
|
||||
if [ "${PGADMIN_POSTGRES_DIR}" == "" ]; then
|
||||
echo "PGADMIN_POSTGRES_DIR not set. Setting it to the default: /usr/local/pgsql"
|
||||
export PGADMIN_POSTGRES_DIR=/usr/local/pgsql
|
||||
fi
|
||||
|
||||
if [ "x${PGADMIN_PYTHON_VERSION}" == "x" ]; then
|
||||
if [ "${PGADMIN_PYTHON_VERSION}" == "" ]; then
|
||||
echo "PGADMIN_PYTHON_VERSION not set. Setting it to the default: 3.9.9"
|
||||
export PGADMIN_PYTHON_VERSION=3.9.9
|
||||
fi
|
||||
|
||||
source ${SCRIPT_DIR}/build-functions.sh
|
||||
# shellcheck disable=SC1091
|
||||
source "${SCRIPT_DIR}/build-functions.sh"
|
||||
|
||||
_setup_env
|
||||
_cleanup
|
||||
|
||||
@@ -10,30 +10,28 @@
|
||||
#########################################################################
|
||||
|
||||
# Runtime checks
|
||||
if [ ! -d runtime -a ! -d web ]; then
|
||||
if [ ! -d runtime ] && [ ! -d web ]; then
|
||||
echo This script must be run from the top-level directory of the source tree.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d .git -a ! -f .git/config ]; then
|
||||
if [ ! -d .git ] && [ ! -f .git/config ]; then
|
||||
echo This script must be run from a git checkout of the source tree.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get the required package info
|
||||
APP_RELEASE=`grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_REVISION=`grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_NAME=`grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //'`
|
||||
APP_RELEASE=$(grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_REVISION=$(grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
TARBALL_NAME=`echo ${APP_NAME}-${APP_LONG_VERSION} | sed 's/ //g' | awk '{print tolower($0)}'`
|
||||
|
||||
# Output basic details to show we're working
|
||||
echo Building tarballs for ${APP_NAME} version ${APP_LONG_VERSION}...
|
||||
echo Building tarballs for "${APP_NAME}" version "${APP_LONG_VERSION}"...
|
||||
|
||||
# Create/clearout the build directory
|
||||
echo Creating/cleaning required directories...
|
||||
@@ -49,36 +47,39 @@ mkdir pip-build/pgadmin4
|
||||
mkdir pip-build/pgadmin4/docs
|
||||
|
||||
# Build the clean tree
|
||||
cd web
|
||||
for FILE in `git ls-files`
|
||||
cd web || exit
|
||||
for FILE in $(git ls-files)
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
echo Adding "${FILE}"
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
tar cf - ${FILE} | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
done
|
||||
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
for FILE in `ls -d pgadmin/static/js/generated/*`
|
||||
for FILE in pgadmin/static/js/generated/*
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
tar cf - ${FILE} | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
echo Adding "${FILE}"
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
done
|
||||
|
||||
cd ../docs
|
||||
for FILE in `git ls-files`
|
||||
cd ../docs || exit
|
||||
for FILE in $(git ls-files)
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
echo Adding "${FILE}"
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
tar cf - ${FILE} | (cd ../pip-build/pgadmin4/docs; tar xf -)
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4/docs; tar xf -)
|
||||
done
|
||||
|
||||
for DIR in `ls -d ??_??/`
|
||||
for DIR in ./??_??/
|
||||
do
|
||||
if [ -d ${DIR}/_build/html ]; then
|
||||
mkdir -p ../pip-build/pgadmin4/docs/${DIR}/_build
|
||||
cp -R ${DIR}/_build/html ../pip-build/pgadmin4/docs/${DIR}/_build
|
||||
if [ -d "${DIR}"/_build/html ]; then
|
||||
mkdir -p "../pip-build/pgadmin4/docs/${DIR}/_build"
|
||||
cp -R "${DIR}/_build/html" "../pip-build/pgadmin4/docs/${DIR}/_build"
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -87,6 +88,7 @@ for FILE in LICENSE DEPENDENCIES README.md
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - ${FILE} | (cd pip-build/pgadmin4; tar xf -)
|
||||
done
|
||||
|
||||
@@ -101,7 +103,7 @@ echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
|
||||
|
||||
# Run the build
|
||||
echo Building wheel...
|
||||
cd pip-build
|
||||
cd pip-build || exit
|
||||
python ../pkg/pip/setup_pip.py bdist_wheel
|
||||
cd ../
|
||||
|
||||
|
||||
@@ -6,8 +6,7 @@ set -e
|
||||
# Debugging shizz
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(arch)
|
||||
|
||||
# Make sure we get the right libpq
|
||||
@@ -17,10 +16,11 @@ export PATH=/usr/pgsql-14/bin:$PATH
|
||||
export PYTHONDONTWRITEBYTECODE=1
|
||||
|
||||
# Common Linux build functions
|
||||
# shellcheck disable=SC1091
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Assemble the "standard" installation footprint
|
||||
_setup_env $0 "redhat"
|
||||
_setup_env "$0" "redhat"
|
||||
_cleanup "rpm"
|
||||
_setup_dirs
|
||||
_create_python_virtualenv "redhat"
|
||||
@@ -30,7 +30,7 @@ _copy_code
|
||||
|
||||
# Get an RPM-compatible version number
|
||||
RPM_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
RPM_VERSION=${RPM_VERSION}_${APP_SUFFIX}
|
||||
fi
|
||||
|
||||
@@ -222,23 +222,23 @@ rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/meta.spec"
|
||||
#
|
||||
# mod_wsgi for CentOS 7
|
||||
#
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi-exports.patch" ${HOME}/rpmbuild/SOURCES
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi.conf" ${HOME}/rpmbuild/SOURCES
|
||||
curl -o ${HOME}/rpmbuild/SOURCES/mod_wsgi-4.9.0.tar.gz https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.9.0
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi-exports.patch" "${HOME}/rpmbuild/SOURCES"
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi.conf" "${HOME}/rpmbuild/SOURCES"
|
||||
curl -o "${HOME}/rpmbuild/SOURCES/mod_wsgi-4.9.0.tar.gz" https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.9.0
|
||||
rpmbuild -bb "${SOURCEDIR}/pkg/redhat/pgadmin4-python-mod_wsgi.spec"
|
||||
fi
|
||||
|
||||
# Get the libpq we need
|
||||
yumdownloader -y --downloadonly --destdir=$DISTROOT postgresql14-libs
|
||||
yumdownloader -y --downloadonly --destdir="${DISTROOT}" postgresql14-libs
|
||||
|
||||
#
|
||||
# Get the results!
|
||||
#
|
||||
cp ${HOME}/rpmbuild/RPMS/${OS_ARCH}/${APP_NAME}-*${RPM_VERSION}-*.${OS_ARCH}.rpm "${DISTROOT}/"
|
||||
cp ${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-*${RPM_VERSION}-*.noarch.rpm "${DISTROOT}/"
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
cp ${HOME}/rpmbuild/RPMS/${OS_ARCH}/pgadmin4-python3-mod_wsgi-4.9.0-1.el7.x86_64.rpm "${DISTROOT}/"
|
||||
cp "${HOME}/rpmbuild/RPMS/${OS_ARCH}/${APP_NAME}-"*"${RPM_VERSION}-"*".${OS_ARCH}.rpm" "${DISTROOT}/"
|
||||
cp "${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-"*"${RPM_VERSION}-"*".noarch.rpm" "${DISTROOT}/"
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
cp "${HOME}/rpmbuild/RPMS/${OS_ARCH}/pgadmin4-python3-mod_wsgi-4.9.0-1.el7.x86_64.rpm" "${DISTROOT}/"
|
||||
fi
|
||||
|
||||
echo "Completed. RPMs created in ${DISTROOT}."
|
||||
@@ -5,7 +5,7 @@ REPO_RPM_VERSION=2
|
||||
REPO_RPM_BUILD=1
|
||||
|
||||
# Set the repo base directory
|
||||
if [ "x${PGADMIN_REPO_DIR}" == "x" ]; then
|
||||
if [ "${PGADMIN_REPO_DIR}" == "" ]; then
|
||||
echo "PGADMIN_REPO_DIR not set. Setting it to the default: https://ftp.postgresql.org/pub/pgadmin/pgadmin4/repos/yum"
|
||||
export PGADMIN_REPO_DIR=https://ftp.postgresql.org/pub/pgadmin/pgadmin4/repos/yum
|
||||
fi
|
||||
@@ -14,14 +14,10 @@ fi
|
||||
set -e
|
||||
|
||||
# Debugging shizz
|
||||
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
|
||||
trap 'if [ $? -ne 0 ]; then echo "\"${last_command}\" command filed with exit code $?."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(arch)
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
# Common Linux build functions
|
||||
# shellcheck disable=SC1091
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Are we installing a package key?
|
||||
@@ -38,14 +34,14 @@ fi
|
||||
# Create the Redhat packaging stuffs for the repo
|
||||
_create_repo_rpm() {
|
||||
DISTRO=$1
|
||||
if [ ${DISTRO} == "redhat" ]; then
|
||||
if [ "${DISTRO}" == "redhat" ]; then
|
||||
PLATFORM="rhel"
|
||||
else
|
||||
PLATFORM=${DISTRO}
|
||||
fi
|
||||
|
||||
echo "Creating the repo package for ${DISTRO}..."
|
||||
test -d ${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d || mkdir -p ${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d
|
||||
test -d "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d" || mkdir -p "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d"
|
||||
|
||||
cat << EOF > "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
[pgAdmin4]
|
||||
@@ -55,9 +51,11 @@ enabled=1
|
||||
EOF
|
||||
|
||||
if [ ${INCLUDE_KEY} -eq 1 ]; then
|
||||
echo repo_gpgcheck=1 >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
echo gpgcheck=1 >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
echo gpgkey=file:///etc/pki/rpm-gpg/PGADMIN_PKG_KEY >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
{
|
||||
echo repo_gpgcheck=1
|
||||
echo gpgcheck=1
|
||||
echo gpgkey=file:///etc/pki/rpm-gpg/PGADMIN_PKG_KEY
|
||||
} >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
else
|
||||
echo gpgcheck=0 >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
fi
|
||||
@@ -88,11 +86,11 @@ cp -rfa %{pga_build_root}/${DISTRO}-repo/* \${RPM_BUILD_ROOT}
|
||||
EOF
|
||||
|
||||
if [ ${INCLUDE_KEY} -eq 1 ]; then
|
||||
cat << EOF >> ${BUILDROOT}/${DISTRO}-repo.spec
|
||||
cat << EOF >> "${BUILDROOT}/${DISTRO}-repo.spec"
|
||||
/etc/pki/rpm-gpg/PGADMIN_PKG_KEY
|
||||
EOF
|
||||
test -d ${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg || mkdir -p ${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg
|
||||
cp pkg/redhat/PGADMIN_PKG_KEY ${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg/
|
||||
test -d "${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg" || mkdir -p "${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg"
|
||||
cp pkg/redhat/PGADMIN_PKG_KEY "${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg/"
|
||||
fi
|
||||
|
||||
# Build the package
|
||||
@@ -100,7 +98,7 @@ EOF
|
||||
rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/${DISTRO}-repo.spec"
|
||||
}
|
||||
|
||||
_setup_env $0 "redhat"
|
||||
_setup_env "$0" "redhat"
|
||||
_create_repo_rpm redhat
|
||||
_create_repo_rpm fedora
|
||||
|
||||
@@ -108,4 +106,4 @@ _create_repo_rpm fedora
|
||||
# Get the results!
|
||||
#
|
||||
test -d "${DISTROOT}/" || mkdir -p "${DISTROOT}/"
|
||||
cp ${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-*-repo-${REPO_RPM_VERSION}-${REPO_RPM_BUILD}.noarch.rpm "${DISTROOT}/"
|
||||
cp "${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-"*"-repo-${REPO_RPM_VERSION}-${REPO_RPM_BUILD}.noarch.rpm" "${DISTROOT}/"
|
||||
@@ -5,24 +5,24 @@ if [ "$EUID" -ne 0 ]
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g' | awk -F "." '{ print $1 }')
|
||||
OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F "=" '{ print $2 }' | sed 's/"//g' | awk -F "." '{ print $1 }')
|
||||
|
||||
# EPEL & other repos
|
||||
if [ ${OS_VERSION} != 9 ]; then
|
||||
if [ "${OS_VERSION}" != 9 ]; then
|
||||
yum -y install centos-release-scl
|
||||
fi
|
||||
|
||||
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-${OS_VERSION}.noarch.rpm
|
||||
if [ ${OS_VERSION} == 8 ] || [ ${OS_VERSION} == 9 ]; then
|
||||
yum config-manager --enable PowerTools AppStream BaseOS *epel
|
||||
yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${OS_VERSION}.noarch.rpm"
|
||||
if [ "${OS_VERSION}" == 8 ] || [ "${OS_VERSION}" == 9 ]; then
|
||||
yum config-manager --enable PowerTools AppStream BaseOS "*epel"
|
||||
dnf -qy module disable postgresql
|
||||
fi
|
||||
|
||||
# PostgreSQL repo
|
||||
if [ ${OS_VERSION} == 7 ] || [ ${OS_VERSION} == 8 ] || [ ${OS_VERSION} == 9 ]; then
|
||||
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-${OS_VERSION}-x86_64/pgdg-redhat-repo-latest.noarch.rpm
|
||||
if [ "${OS_VERSION}" == 7 ] || [ "${OS_VERSION}" == 8 ] || [ "${OS_VERSION}" == 9 ]; then
|
||||
yum install -y "https://download.postgresql.org/pub/repos/yum/reporpms/EL-${OS_VERSION}-x86_64/pgdg-redhat-repo-latest.noarch.rpm"
|
||||
else
|
||||
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-${OS_VERSION}-x86_64/pgdg-fedora-repo-latest.noarch.rpm
|
||||
yum install -y "https://download.postgresql.org/pub/repos/yum/reporpms/F-${OS_VERSION}-x86_64/pgdg-fedora-repo-latest.noarch.rpm"
|
||||
fi
|
||||
|
||||
# Node repo
|
||||
@@ -37,20 +37,21 @@ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yu
|
||||
echo "Installing build pre-requisites..."
|
||||
yum groupinstall -y "Development Tools"
|
||||
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
yum install -y expect fakeroot httpd-devel postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
elif [ ${OS_VERSION} == 9 ]; then
|
||||
elif [ "${OS_VERSION}" == 9 ]; then
|
||||
yum install -y expect postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
else
|
||||
yum install -y expect fakeroot postgresql14-devel python3-devel python3-sphinx nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
yum install -y expect fakeroot postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
fi
|
||||
|
||||
# Setup RPM macros for signing
|
||||
echo "Please add the following macros to ~/.rpmmacros for the user that will sign the RPMs if required:"
|
||||
echo
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
cat << EOF
|
||||
# Macros for signing RPMs.
|
||||
|
||||
|
||||