#!/bin/bash # Copyright 2016 Matthew Thode # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. if [[ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]]; then set -x fi set -eu set -o pipefail # env is not sourced with user specified package inclusions # set the default bash array if GENTOO_EMERGE_ENV is not defined as an array if ! declare -p GENTOO_EMERGE_ENV 2> /dev/null | grep -q '^declare \-a'; then declare -a GENTOO_EMERGE_ENV GENTOO_EMERGE_ENV+=("USE=\"-build\"") GENTOO_EMERGE_ENV+=("FEATURES=\"binpkg-multi-instance buildpkg parallel-fetch parallel-install\"") GENTOO_EMERGE_ENV+=("PKGDIR=\"/tmp/portage-pkgdir\"") GENTOO_EMERGE_ENV+=("DISTDIR=\"/tmp/portage-distdir\"") GENTOO_EMERGE_ENV+=("PORTDIR=\"/tmp/portage-portdir\"") export GENTOO_EMERGE_ENV fi # iterate over the array, exporting each 'line' for (( i=0; i<${#GENTOO_EMERGE_ENV[@]}; i++ )); do eval export "${GENTOO_EMERGE_ENV[i]}" done # set default opts GENTOO_EMERGE_DEFAULT_OPTS=${GENTOO_EMERGE_DEFAULT_OPTS:-"--binpkg-respect-use --rebuilt-binaries=y --usepkg=y --with-bdeps=y --binpkg-changed-deps=y --quiet --jobs=2 --autounmask=n"} ACTION='install' SCRIPTNAME="$(basename $0)" function show_options { echo "Usage: ${SCRIPTNAME} [package ...]" echo echo 'Options:' echo ' -u -- update all packages' echo ' -e -- erase/remove packages' exit 0 } function install_gentoo_packages { RUN_ONCE_SHM='1' if mountpoint -q /dev/shm; then emerge ${GENTOO_EMERGE_DEFAULT_OPTS} $@ elif [[ -k /dev/shm ]]; then emerge ${GENTOO_EMERGE_DEFAULT_OPTS} $@ else fix_shm emerge ${GENTOO_EMERGE_DEFAULT_OPTS} $@ unfix_shm fi } TEMP="$(getopt -o huem: -n ${SCRIPTNAME} -- ${@})" if [[ "${?}" != 0 ]]; then echo 'Terminating...' >&2 exit 1 fi eval set -- "${TEMP}" while true; do case "${1}" in -u ) if [[ ! -f ${PORTDIR}/profiles ]]; then emerge-webrsync -q fi install_gentoo_packages --update --deep --newuse --complete-graph=y @world install_gentoo_packages --verbose=n --depclean install_gentoo_packages --usepkg=n @preserved-rebuild etc-update --automode -5 eselect news read new exit 0; ;; -e ) ACTION='remove' shift ;; -m ) MAP_ELEMENT="${2}" shift 2 ;; -h ) show_options ;; -- ) shift break ;; * ) echo "Error: unsupported option ${1}." exit 1 ;; esac done PKGS="${@}" if [[ -n "${MAP_ELEMENT:-}" ]]; then PKGS="$(pkg-map --element ${MAP_ELEMENT} ${@})" if [[ "${?}" != 0 ]]; then echo "bin/pkg-map error. ${PKGS}" exit 1 fi fi if [[ -z "${PKGS}" ]]; then echo "Not running install-packages ${ACTION} with empty packages list" else if [[ "${ACTION}" == 'install' ]]; then if [[ ! -f ${PORTDIR}/profiles ]]; then emerge-webrsync -q fi install_gentoo_packages -q --jobs=2 --changed-use "${PKGS}" elif [[ "${ACTION}" == 'remove' ]]; then if [[ ! -f ${PORTDIR}/profiles ]]; then emerge-webrsync -q fi install_gentoo_packages -C "${PKGS}" else echo 'something when really wrong, install action is not install or remove' fi fi