bookmark_borderI want to run horde/components on new PHP

If you want to run horde-components on a version of PHP which is not yet reflected in packagist.org released versions:

me@mine:~/horde/components$ composer config minimum-stability dev
me@mine:~/horde/components$ composer install –ignore-platform-reqs

No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 90 installs, 0 updates, 0 removals

  • Locking fig/event-dispatcher-util (1.3.1)
  • Locking horde/alarm (v3.0.0alpha4)
  • Locking horde/argv (dev-FRAMEWORK_6_0 a1362b5)
  • Locking horde/auth (v3.0.0alpha6)
  • Locking horde/autoloader (dev-FRAMEWORK_6_0 dfb56fa)
  • Locking horde/browser (v3.0.0alpha4)
  • Locking horde/cache (dev-FRAMEWORK_6_0 29bb731)
  • Locking horde/cli (v3.0.0alpha5)
  • Locking horde/cli_modular (v3.0.0alpha4)
  • Locking horde/compress (v3.0.0alpha4)
  • Locking horde/compress_fast (v2.0.0alpha4)
  • Locking horde/constraint (v3.0.0alpha4)
  • Locking horde/controller (dev-FRAMEWORK_6_0 35005ea)
  • Locking horde/core (v3.0.0alpha14)
  • Locking horde/crypt_blowfish (v2.0.0alpha3)
  • Locking horde/css_parser (v2.0.0alpha4)
  • Locking horde/cssminify (v2.0.0alpha4)
  • Locking horde/data (v3.0.0alpha4)
  • Locking horde/date (v3.0.0alpha4)
  • Locking horde/dav (v2.0.0alpha4)
  • Locking horde/db (v3.0.0alpha4)
  • Locking horde/eventdispatcher (dev-FRAMEWORK_6_0 8253aa9)
  • Locking horde/exception (v3.0.0alpha4)
  • Locking horde/githubapiclient (dev-FRAMEWORK_6_0 fe17552)
  • Locking horde/group (v3.0.0alpha4)
  • Locking horde/hashtable (v2.0.0alpha4)
  • Locking horde/history (v3.0.0alpha4)
  • Locking horde/horde-installer-plugin (v2.5.5)
  • Locking horde/http (dev-FRAMEWORK_6_0 a98cb86)
  • Locking horde/http_server (dev-FRAMEWORK_6_0 4a91669)
  • Locking horde/icalendar (v3.0.0alpha4)
  • Locking horde/idna (v2.0.0alpha4)
  • Locking horde/injector (dev-FRAMEWORK_6_0 6fbc75e)
  • Locking horde/javascriptminify (v2.0.0alpha4)
  • Locking horde/listheaders (v2.0.0alpha4)
  • Locking horde/lock (v3.0.0alpha4)
  • Locking horde/log (v3.0.0alpha8)
  • Locking horde/logintasks (v3.0.0alpha4)
  • Locking horde/mail (v3.0.0alpha4)
  • Locking horde/mime (v3.0.0alpha5)
  • Locking horde/mime_viewer (v3.0.0alpha4)
  • Locking horde/nls (v3.0.0alpha4)
  • Locking horde/notification (v3.0.0alpha4)
  • Locking horde/pack (v2.0.0alpha4)
  • Locking horde/pear (dev-FRAMEWORK_6_0 6e99004)
  • Locking horde/perms (v3.0.0alpha4)
  • Locking horde/prefs (v3.0.0alpha6)
  • Locking horde/release (v4.0.0alpha4)
  • Locking horde/role (dev-FRAMEWORK_6_0 cac03aa)
  • Locking horde/rpc (v3.0.0alpha5)
  • Locking horde/secret (v3.0.0alpha4)
  • Locking horde/serialize (v3.0.0alpha4)
  • Locking horde/sessionhandler (v3.0.0alpha3)
  • Locking horde/share (v3.0.0alpha4)
  • Locking horde/stream (v2.0.0alpha4)
  • Locking horde/stream_filter (v3.0.0alpha4)
  • Locking horde/stream_wrapper (v3.0.0alpha4)
  • Locking horde/support (v3.0.0.1alpha4)
  • Locking horde/template (v3.0.0alpha4)
  • Locking horde/test (dev-FRAMEWORK_6_0 c512302)
  • Locking horde/text_diff (dev-FRAMEWORK_6_0 f7cfbc2)
  • Locking horde/text_filter (v3.0.0alpha3)
  • Locking horde/text_flowed (v3.0.0alpha4)
  • Locking horde/token (v3.0.0alpha4)
  • Locking horde/translation (v3.0.0alpha2)
  • Locking horde/url (v3.0.0alpha5)
  • Locking horde/util (dev-FRAMEWORK_6_0 f62a395)
  • Locking horde/view (v3.0.0alpha4)
  • Locking horde/xml_element (v3.0.0alpha4)
  • Locking horde/yaml (dev-FRAMEWORK_6_0 c222d58)
  • Locking pear/archive_tar (1.5.0)
  • Locking pear/console_getopt (dev-master f0098a8)
  • Locking pear/pear (dev-master 9d3ac5e)
  • Locking pear/structures_graph (dev-trunk 66368ac)
  • Locking pear/xml_util (dev-master a1ce442)
  • Locking php-extended/polyfill-php80-stringable (1.2.12)
  • Locking psr/container (dev-master 7079847)
  • Locking psr/event-dispatcher (dev-master bbd9eac)
  • Locking psr/http-client (dev-master bb5906e)
  • Locking psr/http-factory (1.1.0)
  • Locking psr/http-message (dev-master 402d35b)
  • Locking psr/http-server-handler (dev-master 13403d4)
  • Locking psr/http-server-middleware (dev-master 459eeb7)
  • Locking psr/log (dev-master f16e1d5)
  • Locking sabre/dav (4.7.x-dev 7183a67)
  • Locking sabre/event (5.1.x-dev 1538b1b)
  • Locking sabre/http (5.1.x-dev 4c2a2c0)
  • Locking sabre/uri (v2.x-dev 2c21ebd)
  • Locking sabre/vobject (4.5.x-dev ff22611)
  • Locking sabre/xml (2.2.x-dev 01a7927)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 90 installs, 0 updates, 0 removals
  • Downloading horde/horde-installer-plugin (v2.5.5)
  • Downloading horde/translation (v3.0.0alpha2)
  • Downloading horde/exception (v3.0.0alpha4)
  • Downloading horde/util (dev-FRAMEWORK_6_0 f62a395)
  • Downloading horde/nls (v3.0.0alpha4)
  • Downloading horde/date (v3.0.0alpha4)
  • Downloading horde/alarm (v3.0.0alpha4)
  • Downloading horde/auth (v3.0.0alpha6)
  • Downloading horde/autoloader (dev-FRAMEWORK_6_0 dfb56fa)
  • Downloading horde/compress_fast (v2.0.0alpha4)
  • Downloading horde/cache (dev-FRAMEWORK_6_0 29bb731)
  • Downloading horde/stream_wrapper (v3.0.0alpha4)
  • Downloading horde/support (v3.0.0.1alpha4)
  • Downloading horde/cli (v3.0.0alpha5)
  • Downloading horde/argv (dev-FRAMEWORK_6_0 a1362b5)
  • Downloading horde/cli_modular (v3.0.0alpha4)
  • Downloading psr/log (dev-master f16e1d5)
  • Downloading php-extended/polyfill-php80-stringable (1.2.12)
  • Downloading horde/constraint (v3.0.0alpha4)
  • Downloading horde/log (v3.0.0alpha8)
  • Downloading psr/container (dev-master 7079847)
  • Downloading horde/injector (dev-FRAMEWORK_6_0 6fbc75e)
  • Downloading horde/controller (dev-FRAMEWORK_6_0 35005ea)
  • Downloading horde/crypt_blowfish (v2.0.0alpha3)
  • Downloading horde/url (v3.0.0alpha5)
  • Downloading horde/css_parser (v2.0.0alpha4)
  • Downloading horde/cssminify (v2.0.0alpha4)
  • Downloading horde/text_flowed (v3.0.0alpha4)
  • Downloading horde/secret (v3.0.0alpha4)
  • Downloading horde/idna (v2.0.0alpha4)
  • Downloading horde/text_filter (v3.0.0alpha3)
  • Downloading horde/stream_filter (v3.0.0alpha4)
  • Downloading horde/stream (v2.0.0alpha4)
  • Downloading horde/mime (v3.0.0alpha5)
  • Downloading horde/mail (v3.0.0alpha4)
  • Downloading horde/listheaders (v2.0.0alpha4)
  • Downloading horde/icalendar (v3.0.0alpha4)
  • Downloading horde/browser (v3.0.0alpha4)
  • Downloading horde/data (v3.0.0alpha4)
  • Downloading psr/event-dispatcher (dev-master bbd9eac)
  • Downloading fig/event-dispatcher-util (1.3.1)
  • Downloading horde/eventdispatcher (dev-FRAMEWORK_6_0 8253aa9)
  • Downloading psr/http-message (dev-master 402d35b)
  • Downloading psr/http-factory (1.1.0)
  • Downloading psr/http-client (dev-master bb5906e)
  • Downloading horde/http (dev-FRAMEWORK_6_0 a98cb86)
  • Downloading horde/githubapiclient (dev-FRAMEWORK_6_0 fe17552)
  • Downloading horde/hashtable (v2.0.0alpha4)
  • Downloading horde/db (v3.0.0alpha4)
  • Downloading horde/history (v3.0.0alpha4)
  • Downloading psr/http-server-handler (dev-master 13403d4)
  • Downloading psr/http-server-middleware (dev-master 459eeb7)
  • Downloading horde/http_server (dev-FRAMEWORK_6_0 4a91669)
  • Downloading horde/javascriptminify (v2.0.0alpha4)
  • Downloading horde/lock (v3.0.0alpha4)
  • Downloading horde/logintasks (v3.0.0alpha4)
  • Downloading horde/compress (v3.0.0alpha4)
  • Downloading horde/mime_viewer (v3.0.0alpha4)
  • Downloading horde/notification (v3.0.0alpha4)
  • Downloading horde/pack (v2.0.0alpha4)
  • Downloading horde/yaml (dev-FRAMEWORK_6_0 c222d58)
  • Downloading horde/xml_element (v3.0.0alpha4)
  • Downloading horde/pear (dev-FRAMEWORK_6_0 6e99004)
  • Downloading horde/prefs (v3.0.0alpha6)
  • Downloading horde/serialize (v3.0.0alpha4)
  • Downloading horde/group (v3.0.0alpha4)
  • Downloading horde/perms (v3.0.0alpha4)
  • Downloading sabre/uri (v2.x-dev 2c21ebd)
  • Downloading sabre/xml (2.2.x-dev 01a7927)
  • Downloading sabre/vobject (4.5.x-dev ff22611)
  • Downloading sabre/event (5.1.x-dev 1538b1b)
  • Downloading sabre/http (5.1.x-dev 4c2a2c0)
  • Downloading sabre/dav (4.7.x-dev 7183a67)
  • Downloading pear/pear (dev-master 9d3ac5e)
  • Downloading pear/xml_util (dev-master a1ce442)
  • Downloading pear/structures_graph (dev-trunk 66368ac)
  • Downloading pear/console_getopt (dev-master f0098a8)
  • Downloading pear/archive_tar (1.5.0)
  • Downloading horde/view (v3.0.0alpha4)
  • Downloading horde/token (v3.0.0alpha4)
  • Downloading horde/template (v3.0.0alpha4)
  • Downloading horde/share (v3.0.0alpha4)
  • Downloading horde/sessionhandler (v3.0.0alpha3)
  • Downloading horde/core (v3.0.0alpha14)
  • Downloading horde/dav (v2.0.0alpha4)
  • Downloading horde/rpc (v3.0.0alpha5)
  • Downloading horde/release (v4.0.0alpha4)
  • Downloading horde/role (dev-FRAMEWORK_6_0 cac03aa)
  • Downloading horde/test (dev-FRAMEWORK_6_0 c512302)
  • Downloading horde/text_diff (dev-FRAMEWORK_6_0 f7cfbc2)
  • Installing horde/horde-installer-plugin (v2.5.5): Extracting archive
  • Installing horde/translation (v3.0.0alpha2): Extracting archive
  • Installing horde/exception (v3.0.0alpha4): Extracting archive
  • Installing horde/util (dev-FRAMEWORK_6_0 f62a395): Extracting archive
  • Installing horde/nls (v3.0.0alpha4): Extracting archive
  • Installing horde/date (v3.0.0alpha4): Extracting archive
  • Installing horde/alarm (v3.0.0alpha4): Extracting archive
  • Installing horde/auth (v3.0.0alpha6): Extracting archive
  • Installing horde/autoloader (dev-FRAMEWORK_6_0 dfb56fa): Extracting archive
  • Installing horde/compress_fast (v2.0.0alpha4): Extracting archive
  • Installing horde/cache (dev-FRAMEWORK_6_0 29bb731): Extracting archive
  • Installing horde/stream_wrapper (v3.0.0alpha4): Extracting archive
  • Installing horde/support (v3.0.0.1alpha4): Extracting archive
  • Installing horde/cli (v3.0.0alpha5): Extracting archive
  • Installing horde/argv (dev-FRAMEWORK_6_0 a1362b5): Extracting archive
  • Installing horde/cli_modular (v3.0.0alpha4): Extracting archive
  • Installing psr/log (dev-master f16e1d5): Extracting archive
  • Installing php-extended/polyfill-php80-stringable (1.2.12): Extracting archive
  • Installing horde/constraint (v3.0.0alpha4): Extracting archive
  • Installing horde/log (v3.0.0alpha8): Extracting archive
  • Installing psr/container (dev-master 7079847): Extracting archive
  • Installing horde/injector (dev-FRAMEWORK_6_0 6fbc75e): Extracting archive
  • Installing horde/controller (dev-FRAMEWORK_6_0 35005ea): Extracting archive
  • Installing horde/crypt_blowfish (v2.0.0alpha3): Extracting archive
  • Installing horde/url (v3.0.0alpha5): Extracting archive
  • Installing horde/css_parser (v2.0.0alpha4): Extracting archive
  • Installing horde/cssminify (v2.0.0alpha4): Extracting archive
  • Installing horde/text_flowed (v3.0.0alpha4): Extracting archive
  • Installing horde/secret (v3.0.0alpha4): Extracting archive
  • Installing horde/idna (v2.0.0alpha4): Extracting archive
  • Installing horde/text_filter (v3.0.0alpha3): Extracting archive
  • Installing horde/stream_filter (v3.0.0alpha4): Extracting archive
  • Installing horde/stream (v2.0.0alpha4): Extracting archive
  • Installing horde/mime (v3.0.0alpha5): Extracting archive
  • Installing horde/mail (v3.0.0alpha4): Extracting archive
  • Installing horde/listheaders (v2.0.0alpha4): Extracting archive
  • Installing horde/icalendar (v3.0.0alpha4): Extracting archive
  • Installing horde/browser (v3.0.0alpha4): Extracting archive
  • Installing horde/data (v3.0.0alpha4): Extracting archive
  • Installing psr/event-dispatcher (dev-master bbd9eac): Extracting archive
  • Installing fig/event-dispatcher-util (1.3.1): Extracting archive
  • Installing horde/eventdispatcher (dev-FRAMEWORK_6_0 8253aa9): Extracting archive
  • Installing psr/http-message (dev-master 402d35b): Extracting archive
  • Installing psr/http-factory (1.1.0): Extracting archive
  • Installing psr/http-client (dev-master bb5906e): Extracting archive
  • Installing horde/http (dev-FRAMEWORK_6_0 a98cb86): Extracting archive
  • Installing horde/githubapiclient (dev-FRAMEWORK_6_0 fe17552): Extracting archive
  • Installing horde/hashtable (v2.0.0alpha4): Extracting archive
  • Installing horde/db (v3.0.0alpha4): Extracting archive
  • Installing horde/history (v3.0.0alpha4): Extracting archive
  • Installing psr/http-server-handler (dev-master 13403d4): Extracting archive
  • Installing psr/http-server-middleware (dev-master 459eeb7): Extracting archive
  • Installing horde/http_server (dev-FRAMEWORK_6_0 4a91669): Extracting archive
  • Installing horde/javascriptminify (v2.0.0alpha4): Extracting archive
  • Installing horde/lock (v3.0.0alpha4): Extracting archive
  • Installing horde/logintasks (v3.0.0alpha4): Extracting archive
  • Installing horde/compress (v3.0.0alpha4): Extracting archive
  • Installing horde/mime_viewer (v3.0.0alpha4): Extracting archive
  • Installing horde/notification (v3.0.0alpha4): Extracting archive
  • Installing horde/pack (v2.0.0alpha4): Extracting archive
  • Installing horde/yaml (dev-FRAMEWORK_6_0 c222d58): Extracting archive
  • Installing horde/xml_element (v3.0.0alpha4): Extracting archive
  • Installing horde/pear (dev-FRAMEWORK_6_0 6e99004): Extracting archive
  • Installing horde/prefs (v3.0.0alpha6): Extracting archive
  • Installing horde/serialize (v3.0.0alpha4): Extracting archive
  • Installing horde/group (v3.0.0alpha4): Extracting archive
  • Installing horde/perms (v3.0.0alpha4): Extracting archive
  • Installing sabre/uri (v2.x-dev 2c21ebd): Extracting archive
  • Installing sabre/xml (2.2.x-dev 01a7927): Extracting archive
  • Installing sabre/vobject (4.5.x-dev ff22611): Extracting archive
  • Installing sabre/event (5.1.x-dev 1538b1b): Extracting archive
  • Installing sabre/http (5.1.x-dev 4c2a2c0): Extracting archive
  • Installing sabre/dav (4.7.x-dev 7183a67): Extracting archive
  • Installing pear/pear (dev-master 9d3ac5e): Extracting archive
  • Installing pear/xml_util (dev-master a1ce442): Extracting archive
  • Installing pear/structures_graph (dev-trunk 66368ac): Extracting archive
  • Installing pear/console_getopt (dev-master f0098a8): Extracting archive
  • Installing pear/archive_tar (1.5.0): Extracting archive
  • Installing horde/view (v3.0.0alpha4): Extracting archive
  • Installing horde/token (v3.0.0alpha4): Extracting archive
  • Installing horde/template (v3.0.0alpha4): Extracting archive
  • Installing horde/share (v3.0.0alpha4): Extracting archive
  • Installing horde/sessionhandler (v3.0.0alpha3): Extracting archive
  • Installing horde/core (v3.0.0alpha14): Extracting archive
  • Installing horde/dav (v2.0.0alpha4): Extracting archive
  • Installing horde/rpc (v3.0.0alpha5): Extracting archive
  • Installing horde/release (v4.0.0alpha4): Extracting archive
  • Installing horde/role (dev-FRAMEWORK_6_0 cac03aa): Extracting archive
  • Installing horde/test (dev-FRAMEWORK_6_0 c512302): Extracting archive
  • Installing horde/text_diff (dev-FRAMEWORK_6_0 f7cfbc2): Extracting archive
    73 package suggestions were added by new dependencies, use composer suggest to see details.
    Package php-extended/polyfill-php80-stringable is abandoned, you should avoid using it. Use php >= 8.0 instead.
    Generating autoload files
    Applying /presets for absent files in /var/config
    Looking for registry snippets from apps
    Writing app configs to /var/config dir
    Linking app configs to /web Dir
    Linking javascript tree to /web/js
    Linking themes tree to /web/themes

Beware, these constraints are there for a reason. Expect things to break in unexpected ways if versions are actually incompatible.

bookmark_borderPrivilege Separation: Two github logins on the same Linux or WSL

Scenario:
You run a linux or wsl-equipped windows development machine where you do 90% of work for organization A using github.com and 10% for “other” and you strictly must not use the same github account. Both types of work require multiple repos so handling access per-repo is tedious.

Scenario B: Privilege separation

You have an account with high privilege on certain repos which you need to keep, i.e. to override CI failure on time critical issues, be able to block access on short notice or do things you would not allow the juniors to do. But you want to saveguard your 95% daily work against accidentally doing something to the wrong repo

Approach:
Have two separate operating system users. Actual access control on the filesystem is not the issue we want to tackle but separation of accounts. You can even “share” the code

mkdir /srv/develop
chown -R primaryuser:users /srv/develop
chmod chmod g+rwx /srv/develop

Now login every user to his appropriate github account

sudo su – primaryuser
ln -s /srv/develop /home/primaryuser/develop
gh auth login -h github.com -w -phttps
gh auth login corporategithub.com -w -phttps

Don’t forget to logout and login to the other ui user

sudo su – otheruser
ln -s /srv/develop /home/otheruser/develop
gh auth login -h github.com -w -phttps
gh auth login -h othercorporategithub.com -w -phttps

Logout again. After this point you don’t need to login to different browser sessions all the time.

You can also use prepared github personal tokens of each users and save the web browser hassle. I chose to go the UI way this time.

You can freely connect IDE’s to repos using your primary account for both types of repos.
The only thing you must avoid is pushing and PRing through the IDE.

Instead have a terminal window for each type of account and do it there

git push —
# This should not be possible to get wrong. Github will not allow you to push to a repo the account does not have access to.

gh pr create –fill
# Create PRs without hitting the browser and avoid all the login handling. Alternatively you can use another browser profile or browser install, i.e. use Firefox for your oddball account and your primary browser (probably something chromium based) for the main use case.