File: install-packages

package info (click to toggle)
python-diskimage-builder 3.39.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,704 kB
  • sloc: sh: 7,474; python: 6,454; makefile: 37
file content (161 lines) | stat: -rwxr-xr-x 5,446 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/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

# note(JayF): YACC and LEX are both set by gentoo alternatives handling if you want to
#             use alternative implementations of them. Since whatever alternative
#             implementation is opted-for may not availabe inside the image, we need to 
#             unset the environment to ensure default behavior.
unset YACC LEX

# 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 --jobs=2 --verbose --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 --changed-use @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
        # --noreplace prevents us from rebuilding a package already installed
        # --changed-use means that package will be rebuilt *if* USE flags for
        #               it (configuration) has changed
        install_gentoo_packages --noreplace --changed-use "${PKGS}"
    elif [[ "${ACTION}" == 'remove' ]]; then
        if [[ ! -f ${PORTDIR}/profiles ]]; then
            emerge-webrsync -q
        fi
        # A good practice for removing packages in gentoo is to deselect them,
        # removing them from "world" set -- the equivalent of "unmark" in dnf.
        # This tells portage we no longer care if the package is installed,
        # and it can be removed if depedancies allow.
        # This means a removal is two steps:
        #   - emerge --deselect $pkg
        #   - emerge --depclean
        #
        # The depclean step removes all packages that are not in the "world"
        # set and are not in the dependency graph for any packages in "world"
        # set.
        #
        # Other methods of removal may work; but this method sets us up to
        # calculate the dependency graph exactly once and prevents portage
        # from erroring if any of the packages were not already selected.
        for PKG in ${PKGS}; do
            install_gentoo_packages --deselect $PKG
        done
        install_gentoo_packages --depclean
    else
        echo 'something went really wrong, install action is not install or remove'
    fi
fi