Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove upstream llvm repo, drop llvm 10, introduce arm builds #10

Merged
merged 3 commits into from
May 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/pull_request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ jobs:
trivy-image-config: "trivy.yaml"
multiarch-awareness: true
cache-action: ${{ (github.event_name == 'push') && 'save' || 'restore' }}
rockcraft-revisions: '{"amd64": "1783", "arm64": "1784"}'
arch-skipping-maximize-build-space: '["arm64"]'
platform-labels: '{"arm64": ["Ubuntu_ARM64_4C_16G_01"]}'
build-and-push-multiarch-manifest:
name: Combine Rocks and Push Multiarch Manifest
uses: canonical/k8s-workflows/.github/workflows/assemble_multiarch_image.yaml@main
Expand Down
1 change: 1 addition & 0 deletions cilium-operator-generic/rockcraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ base: bare
build-base: [email protected]
platforms:
amd64:
arm64:

environment:
GOPS_CONFIG_DIR: "/"
Expand Down
219 changes: 219 additions & 0 deletions cilium/iptables-wrapper-installer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
#!/bin/sh

# https://github.com/kubernetes-sigs/iptables-wrappers/blob/e139a115350974aac8a82ec4b815d2845f86997e/iptables-wrapper-installer.sh
# Copyright 2020 The Kubernetes Authors.
#
# 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.

# Usage:
#
# iptables-wrapper-installer.sh [--no-sanity-check]
#
# Installs a wrapper iptables script in a container that will figure out
# whether iptables-legacy or iptables-nft is in use on the host and then
# replaces itself with the correct underlying iptables version.
#
# Unless "--no-sanity-check" is passed, it will first verify that the
# container already contains a suitable version of iptables.

# NOTE: This can only use POSIX /bin/sh features; the build container
# might not contain bash.

set -eux

# Find iptables binary location
if [ -n "$OVERRIDE_SBIN" ]; then
sbin="$OVERRIDE_SBIN"
elif [ -d /usr/sbin -a -e /usr/sbin/iptables ]; then
sbin="/usr/sbin"
elif [ -d /sbin -a -e /sbin/iptables ]; then
sbin="/sbin"
else
echo "ERROR: iptables is not present in either /usr/sbin or /sbin" 1>&2
exit 1
fi

if [ -n "$OVERRIDE_PATH" ]; then
target="$OVERRIDE_PATH"
else
target="$sbin"
fi

# Determine how the system selects between iptables-legacy and iptables-nft
if [ -n "$OVERRIDE_ALTSTYLE" ]; then
altstyle="$OVERRIDE_ALTSTYLE"
elif [ -x /usr/sbin/alternatives ]; then
# Fedora/SUSE style alternatives
altstyle="fedora"
elif [ -x /usr/sbin/update-alternatives ]; then
# Debian style alternatives
altstyle="debian"
else
# No alternatives system
altstyle="none"
fi

if [ "${1:-}" != "--no-sanity-check" ]; then
# Ensure dependencies are installed
if ! version=$("${sbin}/iptables-nft" --version 2> /dev/null); then
echo "ERROR: iptables-nft is not installed" 1>&2
exit 1
fi
if ! "${sbin}/iptables-legacy" --version > /dev/null 2>&1; then
echo "ERROR: iptables-legacy is not installed" 1>&2
exit 1
fi

case "${version}" in
*v1.8.[0123]\ *)
echo "ERROR: iptables 1.8.0 - 1.8.3 have compatibility bugs." 1>&2
echo " Upgrade to 1.8.4 or newer." 1>&2
exit 1
;;
*)
# 1.8.4+ are OK
;;
esac
fi

# Start creating the wrapper...
rm -f "${target}/iptables-wrapper"
cat > "${target}/iptables-wrapper" <<EOF
#!/bin/sh

# Copyright 2020 The Kubernetes Authors.
#
# 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.

# NOTE: This can only use POSIX /bin/sh features; the container image
# might not contain bash.

set -eu

# In kubernetes 1.17 and later, kubelet will have created at least
# one chain in the "mangle" table (either "KUBE-IPTABLES-HINT" or
# "KUBE-KUBELET-CANARY"), so check that first, against
# iptables-nft, because we can check that more efficiently and
# it's more common these days.
nft_kubelet_rules=\$( (iptables-nft-save -t mangle || true; ip6tables-nft-save -t mangle || true) 2>/dev/null | grep -E '^:(KUBE-IPTABLES-HINT|KUBE-KUBELET-CANARY)' | wc -l)
if [ "\${nft_kubelet_rules}" -ne 0 ]; then
mode=nft
else
# Check for kubernetes 1.17-or-later with iptables-legacy. We
# can't pass "-t mangle" to iptables-legacy-save because it would
# cause the kernel to create that table if it didn't already
# exist, which we don't want. So we have to grab all the rules
legacy_kubelet_rules=\$( (iptables-legacy-save || true; ip6tables-legacy-save || true) 2>/dev/null | grep -E '^:(KUBE-IPTABLES-HINT|KUBE-KUBELET-CANARY)' | wc -l)
if [ "\${legacy_kubelet_rules}" -ne 0 ]; then
mode=legacy
else
# With older kubernetes releases there may not be any _specific_
# rules we can look for, but we assume that some non-containerized process
# (possibly kubelet) will have created _some_ iptables rules.
num_legacy_lines=\$( (iptables-legacy-save || true; ip6tables-legacy-save || true) 2>/dev/null | grep '^-' | wc -l)
num_nft_lines=\$( (iptables-nft-save || true; ip6tables-nft-save || true) 2>/dev/null | grep '^-' | wc -l)
if [ "\${num_legacy_lines}" -gt "\${num_nft_lines}" ]; then
mode=legacy
else
mode=nft
fi
fi
fi

EOF

# Write out the appropriate alternatives-selection commands
case "${altstyle}" in
fedora)
cat >> "${target}/iptables-wrapper" <<EOF
# Update links to point to the selected binaries
alternatives --set iptables "/usr/sbin/iptables-\${mode}" > /dev/null || failed=1
EOF
;;

debian)
cat >> "${target}/iptables-wrapper" <<EOF
# Update links to point to the selected binaries
update-alternatives --set iptables "/usr/sbin/iptables-\${mode}" > /dev/null || failed=1
update-alternatives --set ip6tables "/usr/sbin/ip6tables-\${mode}" > /dev/null || failed=1
EOF
;;

*)
cat >> "${target}/iptables-wrapper" <<EOF
# Update links to point to the selected binaries
for cmd in iptables iptables-save iptables-restore ip6tables ip6tables-save ip6tables-restore; do
rm -f "${sbin}/\${cmd}"
ln -s "${sbin}/xtables-\${mode}-multi" "${sbin}/\${cmd}"
done 2>/dev/null || failed=1
EOF
;;
esac

# Write out the post-alternatives-selection error checking and final wrap-up
cat >> "${target}/iptables-wrapper" <<EOF
if [ "\${failed:-0}" = 1 ]; then
echo "Unable to redirect iptables binaries. (Are you running in an unprivileged pod?)" 1>&2
# fake it, though this will probably also fail if they aren't root
exec "${sbin}/xtables-\${mode}-multi" "\$0" "\$@"
fi

# Now re-exec the original command with the newly-selected alternative
exec "\$0" "\$@"
EOF
chmod +x "${target}/iptables-wrapper"

# Now back in the installer script, point the iptables binaries at our
# wrapper
case "${altstyle}" in
fedora)
alternatives \
--install /usr/sbin/iptables iptables /usr/sbin/iptables-wrapper 100 \
--slave /usr/sbin/iptables-restore iptables-restore /usr/sbin/iptables-wrapper \
--slave /usr/sbin/iptables-save iptables-save /usr/sbin/iptables-wrapper \
--slave /usr/sbin/ip6tables iptables /usr/sbin/iptables-wrapper \
--slave /usr/sbin/ip6tables-restore iptables-restore /usr/sbin/iptables-wrapper \
--slave /usr/sbin/ip6tables-save iptables-save /usr/sbin/iptables-wrapper
;;

debian)
update-alternatives \
--install /usr/sbin/iptables iptables /usr/sbin/iptables-wrapper 100 \
--slave /usr/sbin/iptables-restore iptables-restore /usr/sbin/iptables-wrapper \
--slave /usr/sbin/iptables-save iptables-save /usr/sbin/iptables-wrapper
update-alternatives \
--install /usr/sbin/ip6tables ip6tables /usr/sbin/iptables-wrapper 100 \
--slave /usr/sbin/ip6tables-restore ip6tables-restore /usr/sbin/iptables-wrapper \
--slave /usr/sbin/ip6tables-save ip6tables-save /usr/sbin/iptables-wrapper
;;

*)
for cmd in iptables iptables-save iptables-restore ip6tables ip6tables-save ip6tables-restore; do
rm -f "${target}/${cmd}"
ln -s "${sbin}/iptables-wrapper" "${target}/${cmd}"
done
;;
esac

# Cleanup
rm -f "$0"
99 changes: 25 additions & 74 deletions cilium/rockcraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ base: [email protected]
build-base: [email protected]
platforms:
amd64:
arm64:

environment:
HUBBLE_SERVER: "unix:///var/run/cilium/hubble.sock"
Expand All @@ -19,18 +20,6 @@ services:
override: replace
startup: enabled

package-repositories:
- type: apt
url: http://apt.llvm.org/jammy/
suites: ["llvm-toolchain-jammy-15"]
components: ["main"]
key-id: 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421
- type: apt
url: http://apt.llvm.org/focal/
suites: ["llvm-toolchain-focal-10"]
components: ["main"]
key-id: 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421

parts:
bazelisk:
plugin: nil
Expand Down Expand Up @@ -175,66 +164,24 @@ parts:
- kmod
- ca-certificates
- libz3-dev
stage:
- -usr/lib/x86_64-linux-gnu/libmnl.so.0.2.0
- -usr/lib/x86_64-linux-gnu/libmnl.so.0

libmnl:
after : [build-deps]
plugin: autotools
source: https://www.netfilter.org/pub/libmnl/libmnl-1.0.4.tar.bz2
autotools-configure-parameters:
- "--prefix=/lib"
- "--libdir=/lib/x86_64-linux-gnu"
prime:
- -usr/local/include

libnftnl:
after: [libmnl]
plugin: autotools
source: https://www.netfilter.org/projects/libnftnl/files/libnftnl-1.2.1.tar.bz2
autotools-configure-parameters:
- "--prefix=/lib"
- "--libdir=/lib/x86_64-linux-gnu"
build-environment:
- LIBMNL_LIBS: $CRAFT_STAGE/lib/x86_64-linux-gnu
prime:
- -usr/local/include

iptables:
after: [libnftnl]
source: https://www.netfilter.org/projects/iptables/files/iptables-1.8.8.tar.bz2
plugin: autotools
build-environment:
- LIBMNL_LIBS: $CRAFT_STAGE/lib/x86_64-linux-gnu
- LIBNFTNL_LIBS: $CRAFT_STAGE/lib/x86_64-linux-gnu
autotools-configure-parameters:
- "--prefix=/usr"
- "--exec-prefix=/"
- "--disable-shared"
- "--enable-static"
stage:
- -usr/share
- -lib/pkgconfig
- -bin/iptables-xml
organize:
sbin: usr/sbin
plugin: nil
stage-packages:
- iptables

iptables-wrapper:
after: [iptables]
plugin: nil
source-type: git
source: https://github.com/kubernetes-sigs/iptables-wrappers.git
source-commit: "e139a115350974aac8a82ec4b815d2845f86997e"
source-depth: 1
override-build: |
mv /usr/sbin /usr/sbin-tmp
ln -sf $CRAFT_STAGE/usr/sbin /usr/sbin
./iptables-wrapper-installer.sh
mkdir -p $CRAFT_PART_INSTALL/usr/sbin
cp $CRAFT_STAGE/usr/sbin/iptables-wrapper $CRAFT_PART_INSTALL/usr/sbin/
rm -rf /usr/sbin
mv /usr/sbin-tmp /usr/sbin
source-type: file
source: ./iptables-wrapper-installer.sh
build-environment:
- OVERRIDE_PATH: "$CRAFT_PRIME/usr/sbin"
- OVERRIDE_SBIN: "/usr/sbin"
- OVERRIDE_ALTSTYLE: "none"
override-prime: |
craftctl default
$CRAFT_PART_BUILD/iptables-wrapper-installer.sh --no-sanity-check

bpftool:
plugin: make
Expand Down Expand Up @@ -307,16 +254,20 @@ parts:
source-type: git
source: https://github.com/cilium/cilium.git
source-tag: v1.15.2
source-depth: 1
build-packages:
- clang-10
- llvm-10
- clang-15
- llvm-15
stage-packages:
- clang-10
- llvm-10
- clang-15
- llvm-15
build-environment:
- DISABLE_ENVOY_INSTALLATION: 1
- PKG_BUILD: 1
- NOSTRIP: 0
- NOOPT: 0
override-build: |
# Cherry picking new debug symbols introduced in newer LLVM versions to ignore list
git cherry-pick b91046955d6ba6e335d8b71037e0a5154a09d064 --strategy-option theirs
make build-container
export DESTDIR=$CRAFT_PART_INSTALL
make install-container-binary
Expand All @@ -330,9 +281,9 @@ parts:
cp $CRAFT_PART_BUILD/plugins/cilium-cni/install-plugin.sh $CRAFT_PART_INSTALL/
cp $CRAFT_PART_SRC/plugins/cilium-cni/cni-uninstall.sh $CRAFT_PART_INSTALL/

cp -a $CRAFT_PART_INSTALL/usr/bin/clang-10 $CRAFT_PART_INSTALL/usr/bin/clang
cp -a $CRAFT_PART_INSTALL/usr/bin/llc-10 $CRAFT_PART_INSTALL/usr/bin/llc
cp -a $CRAFT_PART_INSTALL/usr/bin/llvm-objcopy-10 $CRAFT_PART_INSTALL/usr/bin/llvm-objcopy
cp -a $CRAFT_PART_INSTALL/usr/bin/clang-15 $CRAFT_PART_INSTALL/usr/bin/clang
cp -a $CRAFT_PART_INSTALL/usr/bin/llc-15 $CRAFT_PART_INSTALL/usr/bin/llc
cp -a $CRAFT_PART_INSTALL/usr/bin/llvm-objcopy-15 $CRAFT_PART_INSTALL/usr/bin/llvm-objcopy
override-prime: |
craftctl default
rm -rf /root/.cache/go-build