On 2019/01/22 14:07, Martijn van Duren wrote:
> On 1/22/19 11:36 AM, Stuart Henderson wrote:
> > On 2019/01/22 08:42, Martijn van Duren wrote:
> >> I'm currently trying to get vsphere module to run, which requires the 
> >> daemon to be started via icingacli. Unfortunately this doesn't work, 
> >> because the module was enabled inside the chroot, which makes the 
> >> destination path invalid for icingacli, which runs outside a chroot.
> >>
> >> The following diff adds some extra logic to turn the absolute chroot
> >> paths into relative paths.
> >>
> >> This also allows us to enable and disable modules via icingacli
> >> without breaking it inside the webroot.
> >>
> >> OK?
> > 
> > Did you follow the instructions in the icinga-web2 pkg-readme about
> > creating the symlink? I haven't checked recently but this used to work.
> 
> I must admit, I overlooked that part, but that still only works half.
> 1) It only works for modules enabled with icingacli, but modules enabled
>    via the web interface still point to /icinga-web2/
> icinga1# pwd
> /var/www/etc/icingaweb2/enabledModules
> icinga1# ls -l
> total 0
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  37 Jan 22 07:30 graphite -> 
> ../../../icinga-web2/modules/graphite
> lrwxr-xr-x  1 root         _icingaweb2  38 Jan 22 09:16 incubator -> 
> ../../../icinga-web2/modules/incubator
> lrwxr-xr-x  1 root         _icingaweb2  32 Jan 22 09:14 ipl -> 
> ../../../icinga-web2/modules/ipl
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  39 Jan 22 07:30 monitoring -> 
> ../../../icinga-web2/modules/monitoring
> lrwxr-xr-x  1 root         _icingaweb2  40 Jan 22 08:47 reactbundle -> 
> ../../../icinga-web2/modules/reactbundle
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  38 Jan 22 07:27 vspheredb -> 
> ../../../icinga-web2/modules/vspheredb
> icinga1# # Click enable button in web interface
> icinga1# ls -l                                 
> total 0
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  29 Jan 22 13:57 director -> 
> /icinga-web2/modules/director
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  37 Jan 22 07:30 graphite -> 
> ../../../icinga-web2/modules/graphite
> lrwxr-xr-x  1 root         _icingaweb2  38 Jan 22 09:16 incubator -> 
> ../../../icinga-web2/modules/incubator
> lrwxr-xr-x  1 root         _icingaweb2  32 Jan 22 09:14 ipl -> 
> ../../../icinga-web2/modules/ipl
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  39 Jan 22 07:30 monitoring -> 
> ../../../icinga-web2/modules/monitoring
> lrwxr-xr-x  1 root         _icingaweb2  40 Jan 22 08:47 reactbundle -> 
> ../../../icinga-web2/modules/reactbundle
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  38 Jan 22 07:27 vspheredb -> 
> ../../../icinga-web2/modules/vspheredb
> icinga1# icingacli module disable director
> Found invalid module in enabledModule directory 
> "/var/www/etc/icingaweb2/enabledModules": 
> "/var/www/etc/icingaweb2/enabledModules/director" points to non existing path 
> "false"
> icinga1# icingacli module enable director 
> icinga1# ls -l                            
> total 0
> lrwxr-xr-x  1 root         _icingaweb2  37 Jan 22 13:57 director -> 
> /var/www/icinga-web2/modules/director
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  37 Jan 22 07:30 graphite -> 
> ../../../icinga-web2/modules/graphite
> lrwxr-xr-x  1 root         _icingaweb2  38 Jan 22 09:16 incubator -> 
> ../../../icinga-web2/modules/incubator
> lrwxr-xr-x  1 root         _icingaweb2  32 Jan 22 09:14 ipl -> 
> ../../../icinga-web2/modules/ipl
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  39 Jan 22 07:30 monitoring -> 
> ../../../icinga-web2/modules/monitoring
> lrwxr-xr-x  1 root         _icingaweb2  40 Jan 22 08:47 reactbundle -> 
> ../../../icinga-web2/modules/reactbundle
> lrwxr-xr-x  1 _icingaweb2  _icingaweb2  38 Jan 22 07:27 vspheredb -> 
> ../../../icinga-web2/modules/vspheredb
> 2) I reckon this is basic functionality that people could reasonably
>    expect to work without any hacks.
> > 
> > (and please make sure I am at least CC'd on mails about ports which
> > I am listed as MAINTAINER for, ports@ is busy enough that I sometimes
> > miss things there..)
> > 
> Will do.
> > 
> > 
> >> martijn@
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/net/icinga/web2/Makefile,v
> retrieving revision 1.28
> diff -u -p -r1.28 Makefile
> --- Makefile  22 Nov 2018 22:20:12 -0000      1.28
> +++ Makefile  22 Jan 2019 06:42:59 -0000
> @@ -6,6 +6,7 @@ GH_ACCOUNT =  Icinga
>  GH_PROJECT = icingaweb2
>  GH_TAGNAME = v2.6.2
>  PKGNAME =    icinga-web2-${GH_TAGNAME:S/v//}
> +REVISION =   0
>  
>  MODULES=     lang/php
>  
> Index: patches/patch-library_Icinga_Application_Modules_Manager_php
> ===================================================================
> RCS file: patches/patch-library_Icinga_Application_Modules_Manager_php
> diff -N patches/patch-library_Icinga_Application_Modules_Manager_php
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-library_Icinga_Application_Modules_Manager_php      22 Jan 
> 2019 07:36:00 -0000
> @@ -0,0 +1,36 @@
> +$OpenBSD$
> +
> +Make icingacli <module> <command> available outside of chroot
> +Index: library/Icinga/Application/Modules/Manager.php
> +--- library/Icinga/Application/Modules/Manager.php.orig
> ++++ library/Icinga/Application/Modules/Manager.php
> +@@ -285,7 +285,28 @@ class Manager
> +             return $this;
> +         }
> + 
> +-        if (! @symlink($target, $link)) {
> ++        $relTarget = explode("/", $target);
> ++        $relLink = explode("/", $link);
> ++        while (end($relTarget) === "") {
> ++            array_pop($relTarget);
> ++        }
> ++        while (end($relLink) === "") {
> ++            array_pop($relLink);
> ++        }
> ++        while (reset($relTarget) === reset($relLink)) {
> ++            array_shift($relTarget);
> ++            array_shift($relLink);
> ++        }
> ++        array_pop($relLink);
> ++        if (empty($relLink)) {
> ++            array_unshift($relTarget, ".");
> ++        } else {
> ++            while (array_shift($relLink)) {
> ++                array_unshift($relTarget, "..");
> ++            }
> ++        }
> ++        $relTarget = implode("/", $relTarget);
> ++        if (! @symlink($relTarget, $link)) {
> +             $error = error_get_last();
> +             if (strstr($error["message"], "File exists") === false) {
> +                 throw new SystemPermissionException(
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/net/icinga/web2/Makefile,v
> retrieving revision 1.28
> diff -u -p -r1.28 Makefile
> --- Makefile  22 Nov 2018 22:20:12 -0000      1.28
> +++ Makefile  22 Jan 2019 13:06:26 -0000
> @@ -6,6 +6,7 @@ GH_ACCOUNT =  Icinga
>  GH_PROJECT = icingaweb2
>  GH_TAGNAME = v2.6.2
>  PKGNAME =    icinga-web2-${GH_TAGNAME:S/v//}
> +REVISION =   0
>  
>  MODULES=     lang/php
>  
> Index: pkg/README
> ===================================================================
> RCS file: /cvs/ports/net/icinga/web2/pkg/README,v
> retrieving revision 1.5
> diff -u -p -r1.5 README
> --- pkg/README        29 Oct 2018 06:16:21 -0000      1.5
> +++ pkg/README        22 Jan 2019 13:06:26 -0000
> @@ -14,20 +14,7 @@ about using "icinga2 feature enable" to 
>  details, database schema, etc.
>  
>  The majority of Icinga Web 2 configuration is web-based and simple,
> -but a few things will need to be setup FIRST, in particular to cope
> -with the use of a chroot jail for OpenBSD webservers and PHP.
> -
> -- To cope with the chroot jail normally used with OpenBSD's PHP/web
> -servers, create a symlink:
> -
> -   # mkdir -p /var/www/var
> -   # ln -s .. /var/www/var/www
> -   # ls -l /var/www/var/www
> -   lrwxr-xr-x  1 root  daemon  2 Feb  2 01:01 /var/www/var/www -> ..
> -
> -(Icinga-web2 has CLI scripts which are run outside the chroot jail,
> -and PHP webpages which are run inside the jail; this allows paths like
> -"/var/www/icinga-web2" to work in both cases).
> +but a few things will need to be setup FIRST.
>  
>  - If using PostgreSQL, install php-pgsql and php-pdo_pgsql.
>  
> 

Grudging OK. :)

Can you ask upstream about possibly including it please? I am not
too happy about carrying this as a local patch long term.

Reply via email to