Setup in debian 13 (trixie): bugs + fixes

María Scappini <[email protected]> Sun, 17 Aug 2025 19:02:18 -0300
Newsgroups gmane.comp.gnu.medical.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------GCWjJQEhZgfKbTWTmC40RRNK
Content-Type: multipart/alternative;
 boundary="------------00AqqiqbhjkqzQNevQ1lR0EM"

--------------00AqqiqbhjkqzQNevQ1lR0EM
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Hello, from Debian Trixie!

I ran into some hickups trying to setup gnumed-client and gnumed-sever (gm-bootstrap).
Debugged, and now GNUmed is up and running, healthy and new! Here below my findings + fixes.



*/CLIENT/*

Two dependencies are not automatically installed with gnumed-client, and thus are missing
when trying to run the client.

     - python3-standard-mailcap
     - python3-packaging

Just a simple...

     sudo apt install python3-packaging python3-standard-mailcap

... and the client runs, no problem!

Explanation that I could gather: Mailcap was part of the Standard Python Lib, but now it was
removed, so it needs "manual" installation. Now as for the packaging lib, I don't know why
it was not automatically installed by apt.

I know this is probably something that should be fixed by the debian team maybe? But just
out of curiosity, how does one go about adding these packages to the dependencies list so
that apt installs them automatically? Do we get a say in it, so that if for example we add
these to the prerequisites in gituhub and then the debian team pulls the changes from there?
Always wanted to know the workings behind package management...



*/DATABASE SETUP/*

This was trickier! Debugged with help of LLMs. I had two types of errors:

1- some syntax (?) changes in postresql 17 (used by debian trixie), so that the bootstrapper
has to be updated;
2- some permission troubles with gm-dbo not being able to grant roles.


*1- Syntax (?) error:*

See file attached for the tail of the log after the error (bootstrap_error_1.txt). Ran some
tests, did some tinkering.

Had to modify /var/lib/gnumed/server/bootstrap/bootstrap_gm_db_system.py to fix.

Changing line 420 to 425...

     curs = self.conn.cursor()
     curs.execute(u"select setting from pg_settings where name = 'lc_ctype'")
     data = curs.fetchall()
     lc_ctype = data[0][0]
     _log.info(u'template database LC_CTYPE is [%s]', lc_ctype)
     lc_ctype = lc_ctype.lower()

... for this...

     curs = self.conn.cursor()
     # PG17+: lc_ctype/lc_collate are per-database attrs, not GUCs
     curs.execute(
         u"SELECT datcollate, datctype "
         u"FROM pg_database "
         u"WHERE datname = current_database()"
     )
     row = curs.fetchone()
     if not row:
         _log.error(u"Could not read datcollate/datctype for template DB")
         return None
     lc_collate, lc_ctype = row
     _log.info(u'template database LC_COLLATE is [%s]', lc_collate)
     _log.info(u'template database LC_CTYPE   is [%s]', lc_ctype)
     lc_ctype = lc_ctype.lower()

... fixed the bug, and the bootstrapper was able to continue (until the next error detailed below).

Explanation (textually from the LLM, I'm still a newbie to sql databases): In PostgreSQL 17,
lc_collate and lc_ctype were removed from pg_settings because they are no longer GUCs. They
are per-database attributes stored in pg_database, not cluster-wide runtime parameters. So
the query SELECT setting FROM pg_settings WHERE name='lc_ctype' returns zero rows, data
becomes an empty list [], and we get an IndexError which aborts the bootstrap.


*2- gm-dbo permission troubles:*

Attached parts of log for these errors (bootstrap_error_2.txt).

I first granted just the role for the first error...

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gm-logins"  TO "gm-dbo" WITH ADMIN OPTION;'
     [sudo] password for jessie:
     GRANT ROLE
     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gm-public"  TO "gm-dbo" WITH ADMIN OPTION;'
     NOTICE:  role "gm-dbo" has already been granted membership in role "gm-public" by role "postgres"
     GRANT ROLE
     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gnumed_v16" TO "gm-dbo" WITH ADMIN OPTION;'
     GRANT ROLE
     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -c \
     'ALTER ROLE "gm-dbo" CREATEROLE CREATEDB;'
     ALTER ROLE

... but then since the next error was also about gm-dbo not having admin options,
I listed all roles...

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -c \
     "SELECT rolname FROM pg_roles WHERE rolname LIKE 'gm-%' ORDER BY 1;"
            rolname
     ---------------------
      gm-dbo
      gm-doctors
      gm-logins
      gm-public
      gm-staff
      gm-staff_medical
      gm-staff_office
      gm-trainees_medical
      gm-trainees_office
     (9 rows)

... then gave admin to gm-dbo to every role...

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gm-doctors" TO "gm-dbo" WITH ADMIN OPTION;'
     GRANT ROLE

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gm-logins" TO "gm-dbo" WITH ADMIN OPTION;'
     NOTICE:  role "gm-dbo" has already been granted membership in role "gm-logins" by role "postgres"
     GRANT ROLE

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gm-public" TO "gm-dbo" WITH ADMIN OPTION;'
     NOTICE:  role "gm-dbo" has already been granted membership in role "gm-public" by role "postgres"
     GRANT ROLE

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gm-staff" TO "gm-dbo" WITH ADMIN OPTION;'
     NOTICE:  role "gm-dbo" has already been granted membership in role "gm-staff" by role "postgres"
     GRANT ROLE

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
     'GRANT "gm-staff_medical" TO "gm-dbo" WITH ADMIN OPTION;'
     GRANT ROLE

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c 'GRANT "gm-staff_office" TO "gm-dbo" WITH ADMIN OPTION;'
     GRANT ROLE

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c 'GRANT "gm-trainees_medical" TO "gm-dbo" WITH ADMIN OPTION;'
     GRANT ROLE

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c 'GRANT "gm-trainees_office" TO "gm-dbo" WITH ADMIN OPTION;'
     GRANT ROLE

... surely there's a way to make this with a single query but I wanted to see what resulted for each operation (and didn't know how to make this more efficient :).


Then checked that gm-dbo was granted all roles successfully...

     jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -c \
     "SELECT r.rolname AS member, m.rolname AS role, am.admin_option
      FROM pg_auth_members am
      JOIN pg_roles r ON r.oid = am.member
      JOIN pg_roles m ON m.oid = am.roleid
      WHERE r.rolname='gm-dbo'
        AND (m.rolname LIKE 'gm-%' OR m.rolname='gnumed_v16')
      ORDER BY role;"

      member |        role         | admin_option
     --------+---------------------+--------------
      gm-dbo | gm-doctors          | t
      gm-dbo | gm-logins           | t
      gm-dbo | gm-public           | t
      gm-dbo | gm-staff            | t
      gm-dbo | gm-staff_medical    | t
      gm-dbo | gm-staff_office     | t
      gm-dbo | gm-trainees_medical | t
      gm-dbo | gm-trainees_office  | t
      gm-dbo | gnumed_v16          | t
     (9 rows)

... restarted postresql...

     sudo systemctl restart postgresql

... and ran again the bootstrap, now successfully!


The rest of the setup went smoothly and the client runs great (as far as I've tested it).

María

--------------00AqqiqbhjkqzQNevQ1lR0EM
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<!DOCTYPE html>
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <pre>Hello, from Debian Trixie!

I ran into some hickups trying to setup gnumed-client and gnumed-sever (gm-bootstrap).
Debugged, and now GNUmed is up and running, healthy and new! Here below my findings + fixes.



<b><i>CLIENT</i></b>

Two dependencies are not automatically installed with gnumed-client, and thus are missing
when trying to run the client.

    - python3-standard-mailcap
    - python3-packaging

Just a simple...

    sudo apt install python3-packaging python3-standard-mailcap

... and the client runs, no problem!

Explanation that I could gather: Mailcap was part of the Standard Python Lib, but now it was
removed, so it needs "manual" installation. Now as for the packaging lib, I don't know why 
it was not automatically installed by apt.

I know this is probably something that should be fixed by the debian team maybe? But just 
out of curiosity, how does one go about adding these packages to the dependencies list so 
that apt installs them automatically? Do we get a say in it, so that if for example we add 
these to the prerequisites in gituhub and then the debian team pulls the changes from there? 
Always wanted to know the workings behind package management...



<b><i>DATABASE SETUP</i></b>

This was trickier! Debugged with help of LLMs. I had two types of errors:

1- some syntax (?) changes in postresql 17 (used by debian trixie), so that the bootstrapper 
has to be updated;
2- some permission troubles with gm-dbo not being able to grant roles.


<b>1- Syntax (?) error:</b>

See file attached for the tail of the log after the error (bootstrap_error_1.txt). Ran some 
tests, did some tinkering.

Had to modify /var/lib/gnumed/server/bootstrap/bootstrap_gm_db_system.py to fix. 

Changing line 420 to 425...

    curs = self.conn.cursor()
    curs.execute(u"select setting from pg_settings where name = 'lc_ctype'")
    data = curs.fetchall()
    lc_ctype = data[0][0]
    _log.info(u'template database LC_CTYPE is [%s]', lc_ctype)
    lc_ctype = lc_ctype.lower()

... for this...

    curs = self.conn.cursor()
    # PG17+: lc_ctype/lc_collate are per-database attrs, not GUCs
    curs.execute(
        u"SELECT datcollate, datctype "
        u"FROM pg_database "
        u"WHERE datname = current_database()"
    )
    row = curs.fetchone()
    if not row:
        _log.error(u"Could not read datcollate/datctype for template DB")
        return None
    lc_collate, lc_ctype = row
    _log.info(u'template database LC_COLLATE is [%s]', lc_collate)
    _log.info(u'template database LC_CTYPE   is [%s]', lc_ctype)
    lc_ctype = lc_ctype.lower()

... fixed the bug, and the bootstrapper was able to continue (until the next error detailed below).

Explanation (textually from the LLM, I'm still a newbie to sql databases): In PostgreSQL 17, 
lc_collate and lc_ctype were removed from pg_settings because they are no longer GUCs. They 
are per-database attributes stored in pg_database, not cluster-wide runtime parameters. So 
the query SELECT setting FROM pg_settings WHERE name='lc_ctype' returns zero rows, data 
becomes an empty list [], and we get an IndexError which aborts the bootstrap.


<b>2- gm-dbo permission troubles:</b>

Attached parts of log for these errors (bootstrap_error_2.txt).

I first granted just the role for the first error...

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gm-logins"  TO "gm-dbo" WITH ADMIN OPTION;'
    [sudo] password for jessie: 
    GRANT ROLE
    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gm-public"  TO "gm-dbo" WITH ADMIN OPTION;'
    NOTICE:  role "gm-dbo" has already been granted membership in role "gm-public" by role "postgres"
    GRANT ROLE
    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gnumed_v16" TO "gm-dbo" WITH ADMIN OPTION;'
    GRANT ROLE
    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -c \
    'ALTER ROLE "gm-dbo" CREATEROLE CREATEDB;'
    ALTER ROLE

... but then since the next error was also about gm-dbo not having admin options, 
I listed all roles...

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -c \
    "SELECT rolname FROM pg_roles WHERE rolname LIKE 'gm-%' ORDER BY 1;"
           rolname       
    ---------------------
     gm-dbo
     gm-doctors
     gm-logins
     gm-public
     gm-staff
     gm-staff_medical
     gm-staff_office
     gm-trainees_medical
     gm-trainees_office
    (9 rows)

... then gave admin to gm-dbo to every role...

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gm-doctors" TO "gm-dbo" WITH ADMIN OPTION;'
    GRANT ROLE

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gm-logins" TO "gm-dbo" WITH ADMIN OPTION;'
    NOTICE:  role "gm-dbo" has already been granted membership in role "gm-logins" by role "postgres"
    GRANT ROLE

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gm-public" TO "gm-dbo" WITH ADMIN OPTION;'
    NOTICE:  role "gm-dbo" has already been granted membership in role "gm-public" by role "postgres"
    GRANT ROLE

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gm-staff" TO "gm-dbo" WITH ADMIN OPTION;'
    NOTICE:  role "gm-dbo" has already been granted membership in role "gm-staff" by role "postgres"
    GRANT ROLE

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c \
    'GRANT "gm-staff_medical" TO "gm-dbo" WITH ADMIN OPTION;'
    GRANT ROLE

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c 'GRANT "gm-staff_office" TO "gm-dbo" WITH ADMIN OPTION;'
    GRANT ROLE

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c 'GRANT "gm-trainees_medical" TO "gm-dbo" WITH ADMIN OPTION;'
    GRANT ROLE

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -v ON_ERROR_STOP=1 -c 'GRANT "gm-trainees_office" TO "gm-dbo" WITH ADMIN OPTION;'
    GRANT ROLE

... surely there's a way to make this with a single query but I wanted to see what resulted for each operation (and didn't know how to make this more efficient :).


Then checked that gm-dbo was granted all roles successfully...

    jessie@deb-vivobook:~$ sudo -u postgres psql -d postgres -X -c \
    "SELECT r.rolname AS member, m.rolname AS role, am.admin_option
     FROM pg_auth_members am
     JOIN pg_roles r ON r.oid = am.member
     JOIN pg_roles m ON m.oid = am.roleid
     WHERE r.rolname='gm-dbo'
       AND (m.rolname LIKE 'gm-%' OR m.rolname='gnumed_v16')
     ORDER BY role;"

     member |        role         | admin_option 
    --------+---------------------+--------------
     gm-dbo | gm-doctors          | t
     gm-dbo | gm-logins           | t
     gm-dbo | gm-public           | t
     gm-dbo | gm-staff            | t
     gm-dbo | gm-staff_medical    | t
     gm-dbo | gm-staff_office     | t
     gm-dbo | gm-trainees_medical | t
     gm-dbo | gm-trainees_office  | t
     gm-dbo | gnumed_v16          | t
    (9 rows)

... restarted postresql...

    sudo systemctl restart postgresql

... and ran again the bootstrap, now successfully!


The rest of the setup went smoothly and the client runs great (as far as I've tested it).

María
</pre>
  </body>
</html>

--------------00AqqiqbhjkqzQNevQ1lR0EM--

--------------GCWjJQEhZgfKbTWTmC40RRNK
Content-Type: text/plain; charset=UTF-8; name="bootstrap_error_1.txt"
Content-Disposition: attachment; filename="bootstrap_error_1.txt"
Content-Transfer-Encoding: base64

MjAyNS0wOC0xMiAxNDo0Mzo0NiAgRVJST1IgICAgIGdtLmJvb3RzdHJhcHBlciAgWzE0MDM1
OTI3MDUzMTMyOCBNYWluVGhyZWFkXSAgKC92YXIvbGliL2dudW1lZC9zZXJ2ZXIvYm9vdHN0
cmFwLy4vYm9vdHN0cmFwX2dtX2RiX3N5c3RlbS5weTo6Ym9vdHN0cmFwKCkgIzE1MDYpOiBD
YW5ub3QgYm9vdHN0cmFwIGJ1bmRsZSBbY29uZmlnXS4KVHJhY2ViYWNrIChtb3N0IHJlY2Vu
dCBjYWxsIGxhc3QpOgogIEZpbGUgIi92YXIvbGliL2dudW1lZC9zZXJ2ZXIvYm9vdHN0cmFw
Ly4vYm9vdHN0cmFwX2dtX2RiX3N5c3RlbS5weSIsIGxpbmUgMTUwNCwgaW4gYm9vdHN0cmFw
CiAgICBkYXRhYmFzZShhREJfYWxpYXMgPSBkYXRhYmFzZV9hbGlhcykKICAgIH5+fn5+fn5+
Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogIEZpbGUgIi92YXIvbGliL2dudW1lZC9z
ZXJ2ZXIvYm9vdHN0cmFwLy4vYm9vdHN0cmFwX2dtX2RiX3N5c3RlbS5weSIsIGxpbmUgNjA3
LCBpbiBfX2luaXRfXwogICAgZGJfc2VydmVyKHNlbGYuc2VydmVyX2FsaWFzLCBhdXRoX2dy
b3VwID0gc2VsZi5uYW1lKQogICAgfn5+fn5+fn5+Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e
Xl5eXl5eXl5eXl5eXl5eXl5eXgogIEZpbGUgIi92YXIvbGliL2dudW1lZC9zZXJ2ZXIvYm9v
dHN0cmFwLy4vYm9vdHN0cmFwX2dtX2RiX3N5c3RlbS5weSIsIGxpbmUgMzYwLCBpbiBfX2lu
aXRfXwogICAgaWYgbm90IHNlbGYuX19ib290c3RyYXAoKToKICAgICAgICAgICB+fn5+fn5+
fn5+fn5+fn5+Xl4KICBGaWxlICIvdmFyL2xpYi9nbnVtZWQvc2VydmVyL2Jvb3RzdHJhcC8u
L2Jvb3RzdHJhcF9nbV9kYl9zeXN0ZW0ucHkiLCBsaW5lIDM3MSwgaW4gX19ib290c3RyYXAK
ICAgIGlmIG5vdCBzZWxmLl9fY29ubmVjdF9zdXBlcnVzZXJfdG9fc3J2X3RlbXBsYXRlKCk6
CiAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fl5e
CiAgRmlsZSAiL3Zhci9saWIvZ251bWVkL3NlcnZlci9ib290c3RyYXAvLi9ib290c3RyYXBf
Z21fZGJfc3lzdGVtLnB5IiwgbGluZSA0MjMsIGluIF9fY29ubmVjdF9zdXBlcnVzZXJfdG9f
c3J2X3RlbXBsYXRlCiAgICBsY19jdHlwZSA9IGRhdGFbMF1bMF0KICAgICAgICAgICAgICAg
fn5+fl5eXgpJbmRleEVycm9yOiBsaXN0IGluZGV4IG91dCBvZiByYW5nZQoyMDI1LTA4LTEy
IDE0OjQzOjQ2ICBFUlJPUiAgICAgZ20uYm9vdHN0cmFwcGVyICBbMTQwMzU5MjcwNTMxMzI4
IE1haW5UaHJlYWRdICAoL3Zhci9saWIvZ251bWVkL3NlcnZlci9ib290c3RyYXAvLi9ib290
c3RyYXBfZ21fZGJfc3lzdGVtLnB5OjpleGl0X3dpdGhfbXNnKCkgIzE2OTQpOiBDYW5ub3Qg
Ym9vdHN0cmFwIGJ1bmRsZXMuCjIwMjUtMDgtMTIgMTQ6NDM6NDYgIElORk8gICAgICBnbS5i
b290c3RyYXBwZXIgIFsxNDAzNTkyNzA1MzEzMjggTWFpblRocmVhZF0gICgvdmFyL2xpYi9n
bnVtZWQvc2VydmVyL2Jvb3RzdHJhcC8uL2Jvb3RzdHJhcF9nbV9kYl9zeXN0ZW0ucHk6OmV4
aXRfd2l0aF9tc2coKSAjMTY5NSk6IHNodXRkb3duCjIwMjUtMDgtMTIgMTQ6NDM6NDYgIFdB
Uk5JTkcgICBnbS5ib290c3RyYXBwZXIgIFsxNDAzNTkyNzA1MzEzMjggTWFpblRocmVhZF0g
ICgvdmFyL2xpYi9nbnVtZWQvc2VydmVyL2Jvb3RzdHJhcC8uL2Jvb3RzdHJhcF9nbV9kYl9z
eXN0ZW0ucHk6Ojxtb2R1bGU+KCkgIzE5MDgpOiBvcGVuIGNvbm5lY3Rpb24gZGV0ZWN0ZWQ6
IGRiX3NlcnZlci5fX2Nvbm5lY3Rfc3VwZXJ1c2VyX3RvX3Nydl90ZW1wbGF0ZQoyMDI1LTA4
LTEyIDE0OjQzOjQ2ICBXQVJOSU5HICAgZ20uYm9vdHN0cmFwcGVyICBbMTQwMzU5MjcwNTMx
MzI4IE1haW5UaHJlYWRdICAoL3Zhci9saWIvZ251bWVkL3NlcnZlci9ib290c3RyYXAvLi9i
b290c3RyYXBfZ21fZGJfc3lzdGVtLnB5Ojo8bW9kdWxlPigpICMxOTA5KTogPGNvbm5lY3Rp
b24gb2JqZWN0IGF0IDB4N2ZhN2VmMTViNGQwOyBkc246ICd1c2VyPXBvc3RncmVzIHBhc3N3
b3JkPXh4eCBkYm5hbWU9dGVtcGxhdGUxIHBvcnQ9NTQzMiBjbGllbnRfZW5jb2Rpbmc9VVRG
OCBhcHBsaWNhdGlvbl9uYW1lPXJvb3RAdGVtcGxhdGUuc2VydmVyIGZhbGxiYWNrX2FwcGxp
Y2F0aW9uX25hbWU9R05VbWVkIHNzbG1vZGU9cHJlZmVyJywgY2xvc2VkOiAwPgoyMDI1LTA4
LTEyIDE0OjQzOjQ2ICBXQVJOSU5HICAgZ20uYm9vdHN0cmFwcGVyICBbMTQwMzU5MjcwNTMx
MzI4IE1haW5UaHJlYWRdICAoL3Zhci9saWIvZ251bWVkL3NlcnZlci9ib290c3RyYXAvLi9i
b290c3RyYXBfZ21fZGJfc3lzdGVtLnB5Ojo8bW9kdWxlPigpICMxOTEwKTogY2xvc2luZyBj
b25uZWN0aW9u
--------------GCWjJQEhZgfKbTWTmC40RRNK
Content-Type: text/plain; charset=UTF-8; name="bootstrap_error_2.txt"
Content-Disposition: attachment; filename="bootstrap_error_2.txt"
Content-Transfer-Encoding: base64

MjAyNS0wOC0xMiAxNjoxOTowMCAgRVJST1IgICAgIGdtLmJvb3RzdHJhcHBlciAgWzE0MDM0
MjI0NzY1NzcyOCBNYWluVGhyZWFkXSAgKC92YXIvbGliL2dudW1lZC9HbnVtZWQvcHljb21t
b24vZ21Qc3FsLnB5OjpydW4oKSAjMTQ0KTogU0VMRUNUIGdtLmNyZWF0ZV91c2VyKCdhbnkt
c3RhZmYnLCAnYW55LXN0YWZmJykKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3Qp
OgogIEZpbGUgIi92YXIvbGliL2dudW1lZC9HbnVtZWQvcHljb21tb24vZ21Qc3FsLnB5Iiwg
bGluZSAxMzcsIGluIHJ1bgogICAgY3Vycy5leGVjdXRlKGN1cnJfY21kKQogICAgfn5+fn5+
fn5+fn5+Xl5eXl5eXl5eXgogIEZpbGUgIi91c3IvbGliL3B5dGhvbjMvZGlzdC1wYWNrYWdl
cy9wc3ljb3BnMi9leHRyYXMucHkiLCBsaW5lIDE0NiwgaW4gZXhlY3V0ZQogICAgcmV0dXJu
IHN1cGVyKCkuZXhlY3V0ZShxdWVyeSwgdmFycykKICAgICAgICAgICB+fn5+fn5+fn5+fn5+
fn5eXl5eXl5eXl5eXl5eCnBzeWNvcGcyLmVycm9ycy5JbnN1ZmZpY2llbnRQcml2aWxlZ2U6
IHBlcm1pc3Npb24gZGVuaWVkIHRvIGFsdGVyIHJvbGUKREVUQUlMOiAgT25seSByb2xlcyB3
aXRoIHRoZSBBRE1JTiBvcHRpb24gb24gcm9sZSAiZ20tbG9naW5zIiBtYXkgYWRkIG9yIGRy
b3AgbWVtYmVycy4KQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgImFsdGVyIGdyb3VwICJnbS1s
b2dpbnMiIGFkZCB1c2VyICJhbnktc3RhZmYiOyIKUEwvcGdTUUwgZnVuY3Rpb24gZ20uY3Jl
YXRlX3VzZXIobmFtZSx0ZXh0KSBsaW5lIDIxIGF0IEVYRUNVVEUKCgouLi4uLi4uLi4uLi4u
CgoyMDI1LTA4LTEzIDA5OjI5OjQ3ICBFUlJPUiAgICAgZ20uYm9vdHN0cmFwcGVyICBbMTQw
MjYxMDMxMTAwNjcyIE1haW5UaHJlYWRdICAoL3Zhci9saWIvZ251bWVkL0dudW1lZC9weWNv
bW1vbi9nbVBzcWwucHk6OnJ1bigpICMxNDQpOiBTRUxFQ1QgZ20uY3JlYXRlX3VzZXIoJ2Fu
eS1zdGFmZicsICdhbnktc3RhZmYnKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFz
dCk6CiAgRmlsZSAiL3Zhci9saWIvZ251bWVkL0dudW1lZC9weWNvbW1vbi9nbVBzcWwucHki
LCBsaW5lIDEzNywgaW4gcnVuCiAgICBjdXJzLmV4ZWN1dGUoY3Vycl9jbWQpCiAgICB+fn5+
fn5+fn5+fn5eXl5eXl5eXl5eCiAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy9kaXN0LXBhY2th
Z2VzL3BzeWNvcGcyL2V4dHJhcy5weSIsIGxpbmUgMTQ2LCBpbiBleGVjdXRlCiAgICByZXR1
cm4gc3VwZXIoKS5leGVjdXRlKHF1ZXJ5LCB2YXJzKQogICAgICAgICAgIH5+fn5+fn5+fn5+
fn5+fl5eXl5eXl5eXl5eXl4KcHN5Y29wZzIuZXJyb3JzLkluc3VmZmljaWVudFByaXZpbGVn
ZTogcGVybWlzc2lvbiBkZW5pZWQgdG8gYWx0ZXIgcm9sZQpERVRBSUw6ICBPbmx5IHJvbGVz
IHdpdGggdGhlIEFETUlOIG9wdGlvbiBvbiByb2xlICJnbS1kb2N0b3JzIiBtYXkgYWRkIG9y
IGRyb3AgbWVtYmVycy4KQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgImFsdGVyIGdyb3VwICJn
bS1kb2N0b3JzIiBhZGQgdXNlciAiYW55LXN0YWZmIjsiClBML3BnU1FMIGZ1bmN0aW9uIGdt
LmNyZWF0ZV91c2VyKG5hbWUsdGV4dCkgbGluZSAyMyBhdCBFWEVDVVRF

--------------GCWjJQEhZgfKbTWTmC40RRNK--