Skip to content

Commit dfc4533

Browse files
authored
fix: fixing repodepot support for azlinux3 and ubuntu2404 as well as PMC on Ubuntu (#7565)
1 parent f317e70 commit dfc4533

File tree

8 files changed

+271
-24
lines changed

8 files changed

+271
-24
lines changed

parts/linux/cloud-init/artifacts/init-aks-custom-cloud-mariner.sh

Lines changed: 91 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
11
#!/bin/bash
22
set -x
33
mkdir -p /root/AzureCACertificates
4+
5+
IS_MARINER=0
6+
IS_AZURELINUX=0
7+
# shellcheck disable=SC3010
8+
if [[ -f /etc/os-release ]]; then
9+
. /etc/os-release
10+
# shellcheck disable=SC3010
11+
if [[ $NAME == *"Mariner"* ]]; then
12+
IS_MARINER=1
13+
elif [[ $NAME == *"Microsoft Azure Linux"* ]]; then
14+
IS_AZURELINUX=1
15+
else
16+
echo "Unknown Linux distribution"
17+
exit 1
18+
fi
19+
else
20+
echo "Unsupported operating system"
21+
exit 1
22+
fi
23+
24+
echo "distribution is $distribution"
25+
echo "Running on $NAME"
26+
427
# http://168.63.129.16 is a constant for the host's wireserver endpoint
528
certs=$(curl "http://168.63.129.16/machine?comp=acmspackage&type=cacertificates&ext=json")
629
IFS_backup=$IFS
@@ -17,15 +40,77 @@ cp /root/AzureCACertificates/*.crt /etc/pki/ca-trust/source/anchors/
1740

1841
cloud-init status --wait
1942

43+
function init_mariner_repo_depot {
44+
local repodepot_endpoint=$1
45+
echo "Adding [extended] repo"
46+
cp /etc/yum.repos.d/mariner-extras.repo /etc/yum.repos.d/mariner-extended.repo
47+
sed -i -e "s|extras|extended|" /etc/yum.repos.d/mariner-extended.repo
48+
sed -i -e "s|Extras|Extended|" /etc/yum.repos.d/mariner-extended.repo
49+
50+
echo "Adding [nvidia] repo"
51+
cp /etc/yum.repos.d/mariner-extras.repo /etc/yum.repos.d/mariner-nvidia.repo
52+
sed -i -e "s|extras|nvidia|" /etc/yum.repos.d/mariner-nvidia.repo
53+
sed -i -e "s|Extras|Nvidia|" /etc/yum.repos.d/mariner-nvidia.repo
54+
55+
echo "Adding [cloud-native] repo"
56+
cp /etc/yum.repos.d/mariner-extras.repo /etc/yum.repos.d/mariner-cloud-native.repo
57+
sed -i -e "s|extras|cloud-native|" /etc/yum.repos.d/mariner-cloud-native.repo
58+
sed -i -e "s|Extras|Cloud-Native|" /etc/yum.repos.d/mariner-cloud-native.repo
59+
60+
echo "Pointing Mariner repos at RepoDepot..."
61+
for f in /etc/yum.repos.d/*.repo
62+
do
63+
sed -i -e "s|https://packages.microsoft.com|${repodepot_endpoint}/mariner/packages.microsoft.com|" $f
64+
echo "$f modified."
65+
done
66+
echo "Mariner repo setup complete."
67+
}
68+
69+
function init_azurelinux_repo_depot {
70+
local repodepot_endpoint=$1
71+
repos=("amd" "base" "cloud-native" "extended" "ms-non-oss" "ms-oss" "nvidia")
72+
73+
# tbd maybe we do this a bit nicer
74+
rm -f /etc/yum.repos.d/azurelinux*
75+
76+
for repo in "${repos[@]}"; do
77+
output_file="/etc/yum.repos.d/azurelinux-${repo}.repo"
78+
repo_content=(
79+
"[azurelinux-official-$repo]"
80+
"name=Azure Linux Official $repo \$releasever \$basearch"
81+
"baseurl=$repodepot_endpoint/azurelinux/\$releasever/prod/$repo/\$basearch"
82+
"gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY"
83+
"gpgcheck=1"
84+
"repo_gpgcheck=1"
85+
"enabled=1"
86+
"skip_if_unavailable=True"
87+
"sslverify=1"
88+
)
89+
90+
rm -f "$output_file"
91+
92+
for line in "${repo_content[@]}"; do
93+
echo "$line" >> "$output_file"
94+
done
95+
96+
echo "File '$output_file' has been created."
97+
done
98+
}
99+
20100
marinerRepoDepotEndpoint="$(echo "${REPO_DEPOT_ENDPOINT}" | sed 's/\/ubuntu//')"
21101
if [ -z "$marinerRepoDepotEndpoint" ]; then
22102
>&2 echo "repo depot endpoint empty while running custom-cloud init script"
23103
else
24-
for f in /etc/yum.repos.d/*.repo
25-
do
26-
sed -i -e "s|https://packages.microsoft.com|${marinerRepoDepotEndpoint}/mariner/packages.microsoft.com|" "$f"
27-
echo "## REPO - $f - MODIFIED"
28-
done
104+
# logic taken from https://repodepot.azure.com/scripts/cloud-init/setup_repodepot.sh
105+
if [ "$IS_MARINER" -eq 1 ]; then
106+
echo "Initializing Mariner repo depot settings..."
107+
init_mariner_repo_depot ${marinerRepoDepotEndpoint}
108+
elif [ "$IS_AZURELINUX" -eq 1 ]; then
109+
echo "Initializing Azure Linux repo depot settings..."
110+
init_azurelinux_repo_depot ${marinerRepoDepotEndpoint}
111+
else
112+
echo "No customizations for distribution: $NAME"
113+
fi
29114
fi
30115

31116
# Set the chrony config to use the PHC /dev/ptp0 clock
@@ -58,4 +143,4 @@ EOF
58143

59144
systemctl restart chronyd
60145

61-
#EOF
146+
#EOF

parts/linux/cloud-init/artifacts/init-aks-custom-cloud.sh

Lines changed: 174 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,28 @@
22
set -x
33
mkdir -p /root/AzureCACertificates
44

5-
# For Flatcar: systemd timer instead of cron, skip cloud-init/apt ops, chronyd service name).
65
IS_FLATCAR=0
7-
if [ -f /etc/os-release ] && grep -qi '^ID=flatcar' /etc/os-release; then
8-
IS_FLATCAR=1
6+
IS_UBUNTU=0
7+
# shellcheck disable=SC3010
8+
if [[ -f /etc/os-release ]]; then
9+
. /etc/os-release
10+
# shellcheck disable=SC3010
11+
if [[ $NAME == *"Ubuntu"* ]]; then
12+
IS_UBUNTU=1
13+
elif [[ $ID == *"flatcar"* ]]; then
14+
IS_FLATCAR=1
15+
else
16+
echo "Unknown Linux distribution"
17+
exit 1
18+
fi
19+
else
20+
echo "Unsupported operating system"
21+
exit 1
922
fi
1023

24+
echo "distribution is $distribution"
25+
echo "Running on $NAME"
26+
1127
# http://168.63.129.16 is a constant for the host's wireserver endpoint
1228
certs=$(curl "http://168.63.129.16/machine?comp=acmspackage&type=cacertificates&ext=json")
1329
IFS_backup=$IFS
@@ -41,13 +57,159 @@ if [ "$action" = "ca-refresh" ]; then
4157
exit
4258
fi
4359

44-
if [ "$IS_FLATCAR" -eq 0 ]; then
60+
function init_ubuntu_main_repo_depot {
61+
local repodepot_endpoint="$1"
62+
# Initialize directory for keys
63+
mkdir -p /etc/apt/keyrings
64+
65+
# This copies the updated bundle to the location used by OpenSSL which is commonly used
66+
echo "Copying updated bundle to OpenSSL .pem file..."
67+
cp /etc/ssl/certs/ca-certificates.crt /usr/lib/ssl/cert.pem
68+
echo "Updated bundle copied."
69+
70+
# Back up sources.list and sources.list.d contents
71+
mkdir -p /etc/apt/backup/
72+
if [ -f "/etc/apt/sources.list" ]; then
73+
mv /etc/apt/sources.list /etc/apt/backup/
74+
fi
75+
for sources_file in /etc/apt/sources.list.d/*; do
76+
if [ -f "$sources_file" ]; then
77+
mv "$sources_file" /etc/apt/backup/
78+
fi
79+
done
80+
81+
# Set location of sources file
82+
. /etc/os-release
83+
aptSourceFile="/etc/apt/sources.list.d/ubuntu.sources"
84+
85+
# Create main sources file
86+
cat <<EOF > /etc/apt/sources.list.d/ubuntu.sources
87+
88+
Types: deb
89+
URIs: ${repodepot_endpoint}/ubuntu
90+
Suites: ${VERSION_CODENAME} ${VERSION_CODENAME}-updates ${VERSION_CODENAME}-backports ${VERSION_CODENAME}-security
91+
Components: main universe restricted multiverse
92+
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
93+
EOF
94+
95+
# Update the apt sources file using the RepoDepot Ubuntu URL for this cloud. Update it by replacing
96+
# all urls with the RepoDepot Ubuntu url
97+
ubuntuUrl=${repodepot_endpoint}/ubuntu
98+
echo "Converting URLs in $aptSourceFile to RepoDepot URLs..."
99+
sed -i "s,https\?://.[^ ]*,$ubuntuUrl,g" $aptSourceFile
100+
echo "apt source URLs converted, see new file below:"
101+
echo ""
102+
echo "-----"
103+
cat $aptSourceFile
104+
echo "-----"
105+
echo ""
106+
}
107+
108+
function check_url {
109+
local url=$1
110+
echo "Checking url: $url"
111+
112+
# Use curl to check the URL and capture both stdout and stderr
113+
curl_exit_code=$(curl -s --head --request GET $url)
114+
# Check the exit status of curl
115+
# shellcheck disable=SC3010
116+
if [[ $? -ne 0 ]] || echo "$curl_exit_code" | grep -E "404 Not Found" > /dev/null; then
117+
echo "ERROR: $url is not available. Please manually check if the url is valid before re-running script"
118+
exit 1
119+
fi
120+
}
121+
122+
function write_to_sources_file {
123+
local sources_list_d_file=$1
124+
local source_uri=$2
125+
shift 2
126+
local key_paths=("$@")
127+
128+
sources_file_path="/etc/apt/sources.list.d/${sources_list_d_file}.sources"
129+
ubuntuDist=$(lsb_release -c | awk '{print $2}')
130+
131+
tee -a $sources_file_path <<EOF
132+
133+
Types: deb
134+
URIs: $source_uri
135+
Suites: $ubuntuDist
136+
Components: main
137+
Arch: amd64
138+
Signed-By: ${key_paths[*]}
139+
EOF
140+
}
141+
142+
function add_key_ubuntu {
143+
local key_name=$1
144+
145+
key_url="${repodepot_endpoint}/keys/${key_name}"
146+
check_url $key_url
147+
echo "Adding $key_name key to keyring..."
148+
key_data=$(wget -O - $key_url)
149+
key_path=$(derive_key_paths $key_name)
150+
echo "$key_data" | gpg --dearmor | tee $key_path > /dev/null
151+
echo "$key_name key added to keyring."
152+
}
153+
154+
function derive_key_paths {
155+
local key_names=("$@")
156+
local key_paths=()
157+
158+
for key_name in "${key_names[@]}"; do
159+
key_paths+=("/etc/apt/keyrings/${key_name}.gpg")
160+
done
161+
162+
echo "${key_paths[*]}"
163+
}
164+
165+
function add_ms_keys {
166+
# Add the Microsoft package server keys to keyring.
167+
echo "Adding Microsoft keys to keyring..."
168+
169+
add_key_ubuntu microsoft.asc
170+
add_key_ubuntu msopentech.asc
171+
}
172+
173+
function aptget_update {
174+
echo "apt-get updating..."
175+
echo "note: depending on how many sources have been added this may take a couple minutes..."
176+
if apt-get update | grep -q "404 Not Found"; then
177+
echo "ERROR: apt-get update failed to find all sources. Please validate the sources or remove bad sources from your sources and try again."
178+
exit 1
179+
else
180+
echo "apt-get update complete!"
181+
fi
182+
}
183+
184+
function init_ubuntu_pmc_repo_depot {
185+
local repodepot_endpoint="$1"
186+
# Add Microsoft packages source to the azure specific sources.list.
187+
echo "Adding the packages.microsoft.com Ubuntu-$ubuntuRel repo..."
188+
189+
microsoftPackageSource="$repodepot_endpoint/microsoft/ubuntu/$ubuntuRel/prod"
190+
check_url $microsoftPackageSource
191+
write_to_sources_file microsoft-prod $microsoftPackageSource $(derive_key_paths microsoft.asc msopentech.asc)
192+
write_to_sources_file microsoft-prod-testing $microsoftPackageSource $(derive_key_paths microsoft.asc msopentech.asc)
193+
echo "Ubuntu ($ubuntuRel) repo added."
194+
echo "Adding packages.microsoft.com keys"
195+
add_ms_keys $repodepot_endpoint
196+
}
197+
198+
if [ "$IS_UBUNTU" -eq 1 ]; then
45199
(crontab -l ; echo "0 19 * * * $0 ca-refresh") | crontab -
46200

47201
cloud-init status --wait
48-
repoDepotEndpoint="${REPO_DEPOT_ENDPOINT}"
49-
sudo sed -i "s,http://.[^ ]*,$repoDepotEndpoint,g" /etc/apt/sources.list
50-
else
202+
rootRepoDepotEndpoint="$(echo "${REPO_DEPOT_ENDPOINT}" | sed 's/\/ubuntu//')"
203+
# logic taken from https://repodepot.azure.com/scripts/cloud-init/setup_repodepot.sh
204+
ubuntuRel=$(lsb_release --release | awk '{print $2}')
205+
ubuntuDist=$(lsb_release -c | awk '{print $2}')
206+
# initialize archive.ubuntu.com repo
207+
init_ubuntu_main_repo_depot ${rootRepoDepotEndpoint}
208+
init_ubuntu_pmc_repo_depot ${rootRepoDepotEndpoint}
209+
# update apt list
210+
echo "Running apt-get update"
211+
aptget_update
212+
elif [ "$IS_FLATCAR" -eq 1 ]; then
51213
script_path="$(readlink -f "$0")"
52214
svc="/etc/systemd/system/azure-ca-refresh.service"
53215
tmr="/etc/systemd/system/azure-ca-refresh.timer"
@@ -79,15 +241,15 @@ fi
79241

80242
# Disable systemd-timesyncd and install chrony and uses local time source
81243
chrony_conf="/etc/chrony/chrony.conf"
82-
if [ "$IS_FLATCAR" -eq 0 ]; then
244+
if [ "$IS_UBUNTU" -eq 1 ]; then
83245
systemctl stop systemd-timesyncd
84246
systemctl disable systemd-timesyncd
85247

86248
if [ ! -e "$chrony_conf" ]; then
87249
apt-get update
88250
apt-get install chrony -y
89251
fi
90-
else
252+
elif [ "$IS_FLATCAR" -eq 1 ]; then
91253
rm -f ${chrony_conf}
92254
fi
93255

@@ -139,10 +301,10 @@ refclock PHC /dev/ptp0 poll 3 dpoll -2 offset 0
139301
makestep 1.0 -1
140302
EOF
141303

142-
if [ "$IS_FLATCAR" -eq 0 ]; then
304+
if [ "$IS_UBUNTU" -eq 1 ]; then
143305
systemctl restart chrony
144-
else
306+
elif [ "$IS_FLATCAR" -eq 1 ]; then
145307
systemctl restart chronyd
146308
fi
147309

148-
#EOF
310+
#EOF

pkg/agent/testdata/AKSUbuntu2204+CustomCloud+USNat/CustomData

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ write_files:
8181
encoding: gzip
8282
owner: root
8383
content: !!binary |
84-
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
8585

8686
- path: /opt/azure/containers/reconcilePrivateHosts.sh
8787
permissions: "0744"

0 commit comments

Comments
 (0)