aboutsummaryrefslogtreecommitdiff
path: root/src/dotnet
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotnet')
-rw-r--r--src/dotnet/devcontainer-feature.json2
-rw-r--r--src/dotnet/install.sh32
2 files changed, 29 insertions, 5 deletions
diff --git a/src/dotnet/devcontainer-feature.json b/src/dotnet/devcontainer-feature.json
index 4aa264c..4f484cc 100644
--- a/src/dotnet/devcontainer-feature.json
+++ b/src/dotnet/devcontainer-feature.json
@@ -1,6 +1,6 @@
{
"id": "dotnet",
- "version": "1.1.3",
+ "version": "1.1.4",
"name": "Dotnet CLI",
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/dotnet",
"description": "Installs the .NET CLI. Provides option of installing sdk or runtime, and option of versions to install. Uses latest version of .NET sdk as defaults to install.",
diff --git a/src/dotnet/install.sh b/src/dotnet/install.sh
index 1c7430a..178994d 100644
--- a/src/dotnet/install.sh
+++ b/src/dotnet/install.sh
@@ -33,6 +33,16 @@ DOTNET_VERSION_CODENAMES_REQUIRE_OLDER_LIBSSL_1="buster bullseye bionic focal hi
# alongside DOTNET_VERSION, but not set as default.
ADDITIONAL_VERSIONS=${ADDITIONALVERSIONS:-""}
+APT_PREFERENCES_CONTENT="$(cat << 'EOF'
+Package: *
+Pin: origin "packages.microsoft.com"
+Pin-Priority: 1001
+EOF
+)"
+
+APT_PREFERENCES_FILE_ADDED="false"
+APT_PREFERENCES_UPDATED="false"
+
set -e
# Clean up
@@ -147,9 +157,9 @@ apt_cache_package_and_version_soft_match() {
. /etc/os-release
local architecture="$(dpkg --print-architecture)"
+ apt-get update -y
major_minor_version="$(echo "${requested_version}" | cut -d "." --field=1,2)"
- package_name="$(apt-cache search "${partial_package_name}-[0-9].[0-9]" | awk -F" - " '{print $1}' | grep -m 1 "${partial_package_name}-${major_minor_version}")"
-
+ package_name="$(apt-cache search "${partial_package_name}-[0-9].[0-9]$" | awk -F" - " '{print $1}' | grep -m 1 "${partial_package_name}-${major_minor_version}")"
dot_escaped="${requested_version//./\\.}"
dot_plus_escaped="${dot_escaped//+/\\+}"
# Regex needs to handle debian package version number format: https://www.systutorials.com/docs/linux/man/5-deb-version/
@@ -193,6 +203,12 @@ install_using_apt() {
# Import key safely and import Microsoft apt repo
curl -sSL ${MICROSOFT_GPG_KEYS_URI} | gpg --dearmor > /usr/share/keyrings/microsoft-archive-keyring.gpg
echo "deb [arch=${architecture} signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/microsoft-${ID}-${VERSION_CODENAME}-prod ${VERSION_CODENAME} main" > /etc/apt/sources.list.d/microsoft.list
+
+ [ ! -f /etc/apt/preferences ] && APT_PREFERENCES_FILE_ADDED="true"
+ APT_PREFERENCES_UPDATED="true"
+
+ # See https://github.com/dotnet/core/issues/7699
+ echo "${APT_PREFERENCES_CONTENT}" >> /etc/apt/preferences
apt-get update -y
fi
@@ -233,8 +249,8 @@ install_using_apt() {
mkdir -p "${TARGET_DOTNET_ROOT}"
local dotnet_installed_version="$(dotnet --version)"
# See if its the distro version
- if [[ "$(dotnet --info)" == *"Base Path: /usr/lib/dotnet/dotnet${dotnet_installed_version:0:1}-${dotnet_installed_version}"* ]]; then
- ln -s "/usr/lib/dotnet/dotnet${dotnet_installed_version:0:1}" "${CURRENT_DIR}"
+ if [[ "$(dotnet --info)" == *"Base Path: /usr/lib/dotnet/${DOTNET_SDK_OR_RUNTIME}/${dotnet_installed_version}"* ]]; then
+ ln -s "/usr/lib/dotnet" "${CURRENT_DIR}"
else
# Location used by MS repo versions
ln -s "/usr/share/dotnet" "${CURRENT_DIR}"
@@ -463,6 +479,14 @@ if [ "${CHANGE_OWNERSHIP}" = "true" ]; then
fi
# Clean up
+if [ "${APT_PREFERENCES_UPDATED}" = "true" ]; then
+ if [ "${APT_PREFERENCES_FILE_ADDED}" = "true" ]; then
+ rm -f /etc/apt/preferences
+ else
+ head -n -3 /etc/apt/preferences > /tmp/preferences-temp && mv /tmp/preferences-temp /etc/apt/preferences
+ fi
+fi
+
rm -rf /var/lib/apt/lists/*
echo "Done!"