Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Experiment: FreePBX on NGINX -- anybody can explore this, using flag 'pbx_try_nginx: True' [RENAMED TO... pbx_use_nginx: True] in /etc/iiab/local_vars.yml #2916

Merged
merged 7 commits into from
Aug 7, 2021

Conversation

@holta holta added this to the 7.2 milestone Aug 6, 2021
@holta
Copy link
Member Author

holta commented Aug 7, 2021

  1. This PR installs.
  2. http://box/freepbx loads properly!
  3. Bad News First: as soon as you register on the above page (all 3 Username, Password, Email address are required) an ugly error appears in browser (pasted below, can we perhaps patch around this?)
  4. Good News Next: if you ignore the above error, opening http://box/freepbx in a new tab to log in, things appear to work! (possibly we're very close??)
Exception
Trying to edit user asterisk, when I'm running as www-data

The error arises from Line 63 of /var/www/html/freepbx/admin/libraries/BMO/Cron.class.php here:

        // If we're not root, we can only edit our own cron.
        if (posix_geteuid() != 0) {
            $userArray = posix_getpwuid(posix_geteuid());
            if ($userArray['name'] != $user)
                throw new \Exception("Trying to edit user $user, when I'm running as ".$userArray['name']);

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

Trying to setup the cron jobs.. https://git.freepbx.org/projects/FREEPBX/repos/framework/browse/amp_conf/htdocs/admin/libraries/BMO/Cron.class.php#51-54 suggest that there can be an override https://git.freepbx.org/plugins/servlet/search?q=AMPASTERISKWEBUSER think if we define '$amp_conf['AMPASTERISKWEBUSER'] = www-data' in /etc/freepfx.conf we might be good to go?

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

fwconsole ma disablerepo commercial seems safe when I ran it.
fwconsole ma installall ran forever and think introduced a bunch of new stuff.
fwconsole ma delete firewall seems safe when I ran it.

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

mental note grab fwconsole ma list from just after install but pre freepbx service start.

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

Just occurred to me that what is passed with ./install -n --webroot {{ freepbx_install_dir }} --dbuser {{ asterisk_db_user }} --dbpass {{ asterisk_db_password }} --dbname {{ asterisk_db_dbname }} --cdrdbname {{ asterisk_db_cdrdbname }} ends up in /etc/freepbx.conf so there might be an option to set what we want just need to know the name to pass on the cmdline.

@holta
Copy link
Member Author

holta commented Aug 7, 2021

mental note grab fwconsole ma list from just after install but pre freepbx service start.

This current PR is being fresh-installed on 10.8.0.22 (191-u20-srv-pbx4) with the following last-minute line hacked into freepbx.yml, immediately after ./install -n and just before fwconsole stop :

- shell: fwconsole ma list > /tmp/fwconsole_ma_list.out

@holta
Copy link
Member Author

holta commented Aug 7, 2021

mental note grab fwconsole ma list from just after install but pre freepbx service start.

This current PR is being fresh-installed on 10.8.0.22 (191-u20-srv-pbx4) with the following last-minute line hacked into freepbx.yml, immediately after ./install -n and just before fwconsole stop :

- shell: fwconsole ma list > /tmp/fwconsole_ma_list.out

Conclusion: this fwconsole ma list output is identical before-and-after freepbx has been stopped/restarted for the 1st time:

root@u20-srv:~# more /tmp/fwconsole_ma_list.out
No repos specified, using: [standard] from last GUI settings

+------------------+------------+---------+---------+
| Module           | Version    | Status  | License |
+------------------+------------+---------+---------+
| builtin          |            | Enabled |         |
| callrecording    | 16.0.6     | Enabled | AGPLv3+ |
| cdr              | 16.0.7     | Enabled | GPLv3+  |
| conferences      | 16.0.4     | Enabled | GPLv3+  |
| core             | 16.0.54    | Enabled | GPLv3+  |
| customappsreg    | 16.0.3     | Enabled | GPLv3+  |
| dashboard        | 16.0.7     | Enabled | AGPLv3+ |
| featurecodeadmin | 16.0.1     | Enabled | GPLv3+  |
| framework        | 16.0.10.10 | Enabled | GPLv2+  |
| infoservices     | 16.0.2     | Enabled | GPLv2+  |
| logfiles         | 16.0.2     | Enabled | GPLv3+  |
| music            | 16.0.1     | Enabled | GPLv3+  |
| pm2              | 16.0.4     | Enabled | AGPLv3+ |
| recordings       | 16.0.4     | Enabled | GPLv3+  |
| sipsettings      | 16.0.14    | Enabled | AGPLv3+ |
| soundlang        | 16.0.5     | Enabled | GPLv3+  |
| voicemail        | 16.0.15    | Enabled | GPLv3+  |
+------------------+------------+---------+---------+

@holta
Copy link
Member Author

holta commented Aug 7, 2021

Eureka the "Pre-Asterisk hooks" problem is finally solved:

  • Running fwconsole stop immediately after ./install -n is confirmed to fully work!
  • Thereby allowing journalctl -u freepbx to be completely clean of all "Unable to run Pre-Asterisk hooks, because Asterisk is already running" errors!

Sorry the code yesterday led to confusion, and worse a day wasted. I (and likely others) were tripped up by the creates: "{{ freepbx_install_dir }}" line. Which had been making ALL my tests meaningless — as each one of those attempts to shut down the 2 Asterisk processes right after install -n — were never actually running yesterday/overnight :/

But all's well that ends well.

@holta
Copy link
Member Author

holta commented Aug 7, 2021

[ CORRECTION: Aug 6/7 testing below was not complete 3-4 days ago -- clarification at the bottom of freepbx.yml here... ] https://github.com/iiab/iiab/blob/master/roles/pbx/tasks/freepbx.yml#L289-L300

Unfortunately however adding $amp_conf['AMPASTERISKWEBUSER'] = 'www-data'; to /etc/freepbx.conf does not solve the FreePBX registration cron glitch.

As I've confirmed on both:

If it helps, please feel free to log to either FreePBX page above, with the usual field operator's Admin password, to click around etc and verify what all works (and doesn't work!) regardless of the cron complaint during initial registration?

Regrettably I do not know how to "nuke" the registration of FreePBX's Admin user — i.e. to retest this initial FreePBX Admin user registration registration process. Possibly the process is hard to reverse? In any case: for the moment testing this takes a lot of time (almost an hour to clone/build a new VM, fresh-installing IIAB with this PR #2916 each time if there's no better way ??)

@lemueldsouza
Copy link
Contributor

This is great, thanks @holta abd @jvonau

I quickly checked 10.0.8.42 to see if freepbx is working fine.

This is a good quick test to see if things are setup correctly:

  1. Login to freepbx web console
  2. Go to
    Settings >> Advanced settings >> Without any changes just click ‘Submit’ at bottom of the page. ‘Apply config’ would appear at the top right side of the page, click on it as well. It should work without any issue.

I see an error during fwconsole reload. We may still have to tweak some permissions or configs to get things working, but great progress so far.

476BB299-6E5E-489F-B464-577500D0FCF0

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

ubuntu@box:/opt/iiab/freepbx$ sudo ./install --help
[sudo] password for ubuntu: 
 ______             _____  ______   __
|  ____|           |  __ \|  _ \ \ / /
| |__ _ __ ___  ___| |__) | |_) \ V /
|  __| '__/ _ \/ _ \  ___/|  _ < > <
| |  | | |  __/  __/ |    | |_) / . \
|_|  |_|  \___|\___|_|    |____/_/ \_\
Usage:
  install [options]
Options:
      --dbengine=DBENGINE          Database engine [default: "mysql"]
      --dbname=DBNAME              Database name [default: "asterisk"]
      --dbhost=DBHOST              Database server address [default: "localhost"]
      --dbport=DBPORT              Database server port [default: "3306"]
      --cdrdbname=CDRDBNAME        CDR Database name [default: "asteriskcdrdb"]
      --dbuser=DBUSER              Database username [default: "root"]
      --dbpass=DBPASS              Database password [default: ""]
      --user=USER                  File owner user [default: "asterisk"]
      --group=GROUP                File owner group [default: "asterisk"]
      --dev-links                  Make links to files in the source directory instead of copying (developer option)
      --skip-install               Skip installing local modules (except Framework, Core, Dashboard, Voicemail and Sip Settings)
      --webroot=WEBROOT            Filesystem location from which FreePBX files will be served [default: "/var/www/html"]
      --astetcdir=ASTETCDIR        Filesystem location from which Asterisk configuration files will be served [default: "/etc/asterisk"]
      --astmoddir=ASTMODDIR        Filesystem location for Asterisk modules [default: "/usr/lib/asterisk/modules"]
      --astvarlibdir=ASTVARLIBDIR  Filesystem location for Asterisk lib files [default: "/var/lib/asterisk"]
      --astagidir=ASTAGIDIR        Filesystem location for Asterisk agi files [default: "/var/lib/asterisk/agi-bin"]
      --astspooldir=ASTSPOOLDIR    Location of the Asterisk spool directory [default: "/var/spool/asterisk"]
      --astrundir=ASTRUNDIR        Location of the Asterisk run directory [default: "/var/run/asterisk"]
      --astlogdir=ASTLOGDIR        Location of the Asterisk log files [default: "/var/log/asterisk"]
      --ampbin=AMPBIN              Location of the FreePBX command line scripts [default: "/var/lib/asterisk/bin"]
      --ampsbin=AMPSBIN            Location of the FreePBX (root) command line scripts [default: "/usr/sbin"]
      --ampcgibin=AMPCGIBIN        Location of the Apache cgi-bin executables [default: "/var/www/cgi-bin"]
      --ampplayback=AMPPLAYBACK    Directory for FreePBX html5 playback files [default: "/var/lib/asterisk/playback"]
  -r, --rootdb                     Database Root Based Install. Will create the database user and password automatically along with the databases
  -f, --force                      Force an install. Rewriting all databases with default information
  -h, --help                       Display this help message
  -q, --quiet                      Do not output any message
  -V, --version                    Display this application version
      --ansi                       Force ANSI output
      --no-ansi                    Disable ANSI output
  -n, --no-interaction             Do not ask any interactive question
  -v|vv|vvv, --verbose             Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
  FreePBX Installation Utility

I'd try setting '--user=' on the command line to 'install' and see how freepbx.conf gets populated. I ran across this post before, double check that we have the groups right.

@holta
Copy link
Member Author

holta commented Aug 7, 2021

Just occurred to me that what is passed with ./install -n --webroot {{ freepbx_install_dir }} --dbuser {{ asterisk_db_user }} --dbpass {{ asterisk_db_password }} --dbname {{ asterisk_db_dbname }} --cdrdbname {{ asterisk_db_cdrdbname }} ends up in /etc/freepbx.conf so there might be an option to set what we want just need to know the name to pass on the cmdline.

Any idea which if any of these ~30 FreePBX's ./install flags might be truly useful to us?

root@u20-srv:/opt/iiab/freepbx# ./install --help
 ______             _____  ______   __
|  ____|           |  __ \|  _ \ \ / /
| |__ _ __ ___  ___| |__) | |_) \ V /
|  __| '__/ _ \/ _ \  ___/|  _ < > <
| |  | | |  __/  __/ |    | |_) / . \
|_|  |_|  \___|\___|_|    |____/_/ \_\
Usage:
  install [options]

Options:
      --dbengine=DBENGINE          Database engine [default: "mysql"]
      --dbname=DBNAME              Database name [default: "asterisk"]
      --dbhost=DBHOST              Database server address [default: "localhost"]
      --dbport=DBPORT              Database server port [default: "3306"]
      --cdrdbname=CDRDBNAME        CDR Database name [default: "asteriskcdrdb"]
      --dbuser=DBUSER              Database username [default: "root"]
      --dbpass=DBPASS              Database password [default: ""]
      --user=USER                  File owner user [default: "asterisk"]
      --group=GROUP                File owner group [default: "asterisk"]
      --dev-links                  Make links to files in the source directory instead of copying (developer option)
      --skip-install               Skip installing local modules (except Framework, Core, Dashboard, Voicemail and Sip Settings)
      --webroot=WEBROOT            Filesystem location from which FreePBX files will be served [default: "/var/www/html"]
      --astetcdir=ASTETCDIR        Filesystem location from which Asterisk configuration files will be served [default: "/etc/asterisk"]
      --astmoddir=ASTMODDIR        Filesystem location for Asterisk modules [default: "/usr/lib/asterisk/modules"]
      --astvarlibdir=ASTVARLIBDIR  Filesystem location for Asterisk lib files [default: "/var/lib/asterisk"]
      --astagidir=ASTAGIDIR        Filesystem location for Asterisk agi files [default: "/var/lib/asterisk/agi-bin"]
      --astspooldir=ASTSPOOLDIR    Location of the Asterisk spool directory [default: "/var/spool/asterisk"]
      --astrundir=ASTRUNDIR        Location of the Asterisk run directory [default: "/var/run/asterisk"]
      --astlogdir=ASTLOGDIR        Location of the Asterisk log files [default: "/var/log/asterisk"]
      --ampbin=AMPBIN              Location of the FreePBX command line scripts [default: "/var/lib/asterisk/bin"]
      --ampsbin=AMPSBIN            Location of the FreePBX (root) command line scripts [default: "/usr/sbin"]
      --ampcgibin=AMPCGIBIN        Location of the Apache cgi-bin executables [default: "/var/www/cgi-bin"]
      --ampplayback=AMPPLAYBACK    Directory for FreePBX html5 playback files [default: "/var/lib/asterisk/playback"]
  -r, --rootdb                     Database Root Based Install. Will create the database user and password automatically along with the databases
  -f, --force                      Force an install. Rewriting all databases with default information
  -h, --help                       Display this help message
  -q, --quiet                      Do not output any message
  -V, --version                    Display this application version
      --ansi                       Force ANSI output
      --no-ansi                    Disable ANSI output
  -n, --no-interaction             Do not ask any interactive question
  -v|vv|vvv, --verbose             Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
  FreePBX Installation Utility

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

I'd try setting '--user=' on the command line to 'install' and see how freepbx.conf gets populated. I ran across this post before, double check that we have the groups right.

@holta holta changed the title Experiment: FreePBX on NGINX Experiment: FreePBX on NGINX -- anybody can explore using flag 'pbx_try_nginx: True' in /etc/iiab/local_vars.yml Aug 7, 2021
@holta holta changed the title Experiment: FreePBX on NGINX -- anybody can explore using flag 'pbx_try_nginx: True' in /etc/iiab/local_vars.yml Experiment: FreePBX on NGINX -- anybody can explore this, using flag 'pbx_try_nginx: True' in /etc/iiab/local_vars.yml Aug 7, 2021
@holta holta merged commit eecd46d into iiab:master Aug 7, 2021
@holta
Copy link
Member Author

holta commented Aug 7, 2021

I'd try setting '--user=' on the command line to 'install' and see how freepbx.conf gets populated. I ran across this post before, double check that we have the groups right.

10.8.0.42 = 194-deb11-srv-pbx5 is currently paused at the Ansible breakpoint right before freepbx.yml's ./install -n

I have to head out for the afternoon — but let me ask what --user= and --group= (etc) flags are most useful to test at this point — if @jvonau or @lemueldsouza or anybody want to try this directly on 10.8.0.42, please go ahead!

Aside...I ran these 4 commands just to verify all's good with Asterisk:

root@deb11-srv:/opt/iiab/freepbx# ./start_asterisk start


STARTING ASTERISK
Asterisk Started
root@deb11-srv:/opt/iiab/freepbx# pgrep asterisk
79135
79138
root@deb11-srv:/opt/iiab/freepbx# asterisk -rx 'core stop gracefully'
root@deb11-srv:/opt/iiab/freepbx# pgrep asterisk
root@deb11-srv:/opt/iiab/freepbx#

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

Any real reason to alter the below stanza?

- name: Asterisk - Create Linux user 'asterisk'
  user:
    name: asterisk

cat /etc/passed
asterisk:x:1001:1001::/home/asterisk:/bin/sh

Looks like a normal system user now that can login and with the .pm2 directory now moved.

iiab-admin@box:~$ ls -la /home/asterisk/
total 44
drwxr-xr-x 7 asterisk www-data 4096 Aug 7 14:48 .
drwxr-xr-x 4 root root 4096 Aug 7 11:11 ..
-rw-r--r-- 1 asterisk www-data 220 Jun 21 22:26 .bash_logout
-rw-r--r-- 1 asterisk www-data 3526 Jun 21 22:26 .bashrc
drwxrwxr-x 4 asterisk www-data 4096 Aug 7 14:48 .gnupg
drwxr-xr-x 4 asterisk www-data 4096 Aug 7 14:42 .node
drwxr-xr-x 3 asterisk www-data 4096 Aug 7 14:42 .npm
-rw-r--r-- 1 asterisk www-data 18 Aug 7 14:51 .npmrc
-rw-r--r-- 1 asterisk www-data 0 Aug 7 14:48 .odbc.ini
drwxr-xr-x 3 asterisk www-data 4096 Aug 7 14:42 .package_cache
drwxrwxr-x 5 asterisk www-data 4096 Aug 7 14:43 .pm2
-rw-r--r-- 1 asterisk www-data 807 Jun 21 22:26 .profile

I would confirm that

PM2 v4.5.0: God Daemon (/var/lib/asterisk/.pm2)
node /var/www/html/freepbx/admin/modules/core/node/fastagi-server.js

Are running within the freepbx service from their new location.

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

I finished the install on 10.8.0.42 with this ./install -n --webroot {{ freepbx_install_dir }} --user asterisk --group www-data --dbuser {{ asterisk_db_user }} --dbpass {{ asterisk_db_password }} --dbname {{ asterisk_db_dbname }} --cdrdbname {{ asterisk_db_cdrdbname }}

Bit of poking and things look ok. Don't like /home/asterisk being around thou...

iiab-admin@box:/opt/iiab/iiab$ systemctl status freepbx.service
● freepbx.service - FreePBX VoIP Server
Loaded: loaded (/etc/systemd/system/freepbx.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2021-08-07 15:24:47 EDT; 6min ago
Process: 87650 ExecStart=/usr/sbin/fwconsole start (code=exited, status=0/SUCCESS)
Main PID: 87650 (code=exited, status=0/SUCCESS)
Tasks: 96 (limit: 2341)
Memory: 76.5M
CPU: 18.985s
CGroup: /system.slice/freepbx.service
├─87749 /bin/sh /usr/sbin/safe_asterisk -U asterisk -G www-data
├─87751 /usr/sbin/asterisk -f -U asterisk -G www-data -vvvg -c
├─87854 PM2 v4.5.0: God Daemon (/home/asterisk/.pm2)
└─87909 node /var/www/html/freepbx/admin/modules/core/node/fastagi-server.js

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

same issue as #2916 (comment) noted.

@jvonau
Copy link
Contributor

jvonau commented Aug 7, 2021

Go though language selection and press apply see noted error #2916 (comment)

The latest change to asterisk's home directory is confirmed to be working OK with apache without adding nginx into the mix?

@holta
Copy link
Member Author

holta commented Aug 7, 2021

Any real reason to alter the below stanza?

- name: Asterisk - Create Linux user 'asterisk'
  user:
    name: asterisk

[ cat /etc/passwd ]
asterisk:x:1001:1001::/home/asterisk:/bin/sh

The goal is to remove eccentric/complex randomness from old blog posts like:
https://computingforgeeks.com/how-to-install-asterisk-16-with-freepbx-15-on-ubuntu-debian/

Using these official instructions instead:
https://wiki.freepbx.org/display/FOP/Installing+FreePBX+16+on+Debian+10.9#InstallingFreePBX16onDebian10.9-CreatetheAsteriskuserandsetbasefilepermissions.

In short, I commented out these 3 lines :

# groups: audio,dialout      # 2021-08-06: No longer mainline
# home: /var/lib/asterisk    # 2021-08-06: No longer mainline
# system: yes                # 2021-08-06: No longer mainline (and does nothing to pre-existing users)

If there's another much better approach (that doesn't deviate too far from the official instructions!) that's also Ok.

@holta
Copy link
Member Author

holta commented Aug 7, 2021

I finished the install on 10.8.0.42 with this ./install -n --webroot {{ freepbx_install_dir }} --user asterisk --group www-data --dbuser {{ asterisk_db_user }} --dbpass {{ asterisk_db_password }} --dbname {{ asterisk_db_dbname }} --cdrdbname {{ asterisk_db_cdrdbname }}

Thanks for doing this!

Regardless where it leads us (:

@jvonau
Copy link
Contributor

jvonau commented Aug 8, 2021

The goal is to remove eccentric/complex randomness from old blog posts like:
https://computingforgeeks.com/how-to-install-asterisk-16-with-freepbx-15-on-ubuntu-debian/

Using these official instructions instead:
https://wiki.freepbx.org/display/FOP/Installing+FreePBX+16+on+Debian+10.9#InstallingFreePBX16onDebian10.9-CreatetheAsteriskuserandsetbasefilepermissions.

In short, I commented out these 3 lines :

# groups: audio,dialout      # 2021-08-06: No longer mainline
# home: /var/lib/asterisk    # 2021-08-06: No longer mainline
# system: yes                # 2021-08-06: No longer mainline (and does nothing to pre-existing users)

If there's another much better approach (that doesn't deviate too far from the official instructions!) that's also Ok.

Yea revert that change as you are now introducing the use of /home/asterisk in place of /var/lib/asterisk which /var/lib/ is commonly used by system level components. The use of home to run services from is more homebrew'ish than doing what was done in the past without this change using apache why change that now?

@holta
Copy link
Member Author

holta commented Aug 8, 2021

/var/lib/ is commonly used by system level components

I don't doubt that.

Some official documentation would be very useful.

But Asterisk's requirement that user 'asterisk' have any home directory at all exists appears gratuitous. i.e. it's very likely this has no consequence, no matter what we set it too. So I've changed it back to /var/lib/asterisk as part of:

@jvonau
Copy link
Contributor

jvonau commented Aug 8, 2021

ls /var/lib

@holta
Copy link
Member Author

holta commented Aug 8, 2021

On Ubuntu Server 21.04 on RPi 4...just as IIAB install is beginning, there are 35 things in /var/lib :

root@ubuntu:~# ls /var/lib
AccountsService    dpkg            plymouth          ubuntu-release-upgrader
PackageKit         emacsen-common  polkit-1          ucf
apt                fwupd           private           udisks2
bluetooth          git             python            unattended-upgrades
boltd              landscape       snapd             update-manager
cloud              logrotate       sudo              update-notifier
command-not-found  man-db          systemd           usbutils
dbus               misc            tpm               vim
dhcp               pam             ubuntu-advantage

On Ubuntu Server 20.04 VM after a basic IIAB with roles/pbx (Apache default) was installed using PR #2920, there are 41 things in /var/lib :

root@u20-srv:~# ls /var/lib
AccountsService    landscape    sudo
apt                logrotate    systemd
boltd              man-db       tpm
cloud              misc         ubuntu-advantage
command-not-found  mlocate      ubuntu-release-upgrader
dbus               os-prober    ucf
dhcp               PackageKit   udisks2
dpkg               pam          unattended-upgrades
emacsen-common     plymouth     update-manager
fwupd              polkit-1     update-notifier
ghostscript        private      upower
git                python       usbutils
grub               shim-signed  vim
initramfs-tools    snapd

@jvonau
Copy link
Contributor

jvonau commented Aug 8, 2021

 .42 ls /var/lib
apt       asterisk  dictionaries-common  exim4  ispell     misc     nginx      php       python  sudo     vim
aptitude  dbus      dpkg                 git    logrotate  mlocate  os-prober  polkit-1  runit   systemd
aspell    dhcp      emacsen-common       grub   man-db     mysql    pam        private   snmp    ucf

I'll note nginx php mysql... think those qualify as system level as delivered as apt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants