Skip to content

Instantly share code, notes, and snippets.

@CarsonF
Last active January 19, 2024 11:10
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save CarsonF/d7730ce442e7e9391333cc002577ec53 to your computer and use it in GitHub Desktop.
Save CarsonF/d7730ce442e7e9391333cc002577ec53 to your computer and use it in GitHub Desktop.
Global Composer Setup
#!/usr/bin/env bash
# As root
# Make config and data dirs
mkdir /etc/composer -p || exit 1
mkdir /var/lib/composer -p
# Set composer home dir to global location
cat << EOF > /etc/profile.d/composer.sh
#!/usr/bin/env bash
export COMPOSER_HOME=/etc/composer
export COMPOSER_ALLOW_SUPERUSER=1
EOF
export COMPOSER_HOME=/etc/composer
export COMPOSER_ALLOW_SUPERUSER=1
# Allow dir to be passed when sudoing
# sudo composer global ...
cat << EOF > /etc/sudoers.d/composer
Defaults env_keep += "COMPOSER_HOME"
Defaults env_keep += "COMPOSER_ALLOW_SUPERUSER"
EOF
# install composer
curl -sS https://getcomposer.org/installer | php -d memory_limit=-1 -- --filename=composer --install-dir=/usr/bin || exit 1
# Reset data and cache dirs to be in normal location
composer config -g cache-dir "~/.composer/cache"
composer config -g data-dir "~/.composer"
chmod +r /etc/composer/auth.json
chmod +r /etc/composer/config.json
# Set global dirs for global context
composer global config data-dir /var/lib/composer
composer global config vendor-dir /var/lib/composer/vendor
composer global config bin-dir /usr/bin
# Add script to update composer and global packages on boot
cat << EOF > /var/lib/cloud/scripts/per-boot/composer_update.sh
#!/usr/bin/env bash
. /etc/profile
composer self
composer global update
EOF
chmod u+x /var/lib/cloud/scripts/per-boot/composer_update.sh
composer global require gmo/credstash "^1.0@dev"
composer global require symfony/console "^2.7 || ^3.0"
echo
echo
echo "Relogin to apply env variables"
@willhertz
Copy link

Definitely solves a lot of headaches when installing globally and trying to use global requires (like plugins) and the .cache goes to some user's home folder.
Just a question.
Why use /usr/bin instead of /usr/local/bin (to adhere to FHS) ?

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