Create an element to allow using a dpkg manifest

Enable reusing of a dpkg manifest to pin package versions at build
time

Change-Id: I23e83268d282c972b335a8cf0dfc45030a0ab4ff
This commit is contained in:
Jon-Paul Sullivan 2014-05-06 15:09:18 +01:00
parent ce85042b9c
commit ec234d356e
2 changed files with 55 additions and 0 deletions

View File

@ -0,0 +1,6 @@
# Create package pins for apt systems if packages need to be held back
For APT based systems, you specify package priorities in the apt preferences file.
This element reads the given manifest file, specified in `DIB_DPKG_MANIFEST`, to
set pins to enable pinning of older versions for the given packages.

View File

@ -0,0 +1,49 @@
#!/bin/bash
#
# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# 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.
set -eu
set -o pipefail
# exit directly if DIB_DPKG_MANIFEST is not defined properly
if [ -z "$DIB_DPKG_MANIFEST" ]; then
echo "DIB_DPKG_MANIFEST must be set to the location of a manifest file you wish to use"
exit 0
elif [ ! -f "$DIB_DPKG_MANIFEST" -o ! -s "$DIB_DPKG_MANIFEST" ]; then
echo "$DIB_DPKG_MANIFEST is not a valid manifest file."
echo "You should assign a proper manifest file in DIB_DPKG_MANIFEST"
exit 1
fi
DIB_DPKG_MANIFEST=$(readlink -f $DIB_DPKG_MANIFEST)
# Create the preferences file from the given manifest
outfile=$(mktemp)
for package in $(jq -r ".packages[].package" $DIB_DPKG_MANIFEST); do
version=$(jq -r ".packages[] | select(.package == \"${package}\") |\
.version" $DIB_DPKG_MANIFEST)
cat << EOF >> $outfile
Package: ${package}
Pin: version ${version}
Pin-Priority: 1001
EOF
done
if [ -s $outfile ]; then
sudo mv $outfile $TMP_MOUNT_PATH/etc/apt/preferences
else
rm $outfile
fi