commit:     70fa996d6be6a797e2d54c5320f021d23f30b249
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 11 21:02:08 2022 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Dec 11 21:13:48 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=70fa996d

sys-cluster/k3s: add k3s-killall script

Closes: https://bugs.gentoo.org/885389
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 sys-cluster/k3s/files/k3s-killall.sh | 78 ++++++++++++++++++++++++++++++++++++
 sys-cluster/k3s/k3s-1.25.4_p1.ebuild |  1 +
 2 files changed, 79 insertions(+)

diff --git a/sys-cluster/k3s/files/k3s-killall.sh 
b/sys-cluster/k3s/files/k3s-killall.sh
new file mode 100644
index 000000000000..a3aa2fcf3770
--- /dev/null
+++ b/sys-cluster/k3s/files/k3s-killall.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+[ $(id -u) -eq 0 ] || exec sudo $0 $@
+
+for bin in /var/lib/rancher/k3s/data/**/bin/; do
+    [ -d $bin ] && export PATH=$PATH:$bin:$bin/aux
+done
+
+set -x
+
+for service in /etc/systemd/system/k3s*.service; do
+    [ -s $service ] && systemctl stop $(basename $service)
+done
+
+for service in /etc/init.d/k3s*; do
+    [ -x $service ] && $service stop
+done
+
+pschildren() {
+    ps -e -o ppid= -o pid= | \
+    sed -e 's/^\s*//g; s/\s\s*/\t/g;' | \
+    grep -w "^$1" | \
+    cut -f2
+}
+
+pstree() {
+    for pid in $@; do
+        echo $pid
+        for child in $(pschildren $pid); do
+            pstree $child
+        done
+    done
+}
+
+killtree() {
+    kill -9 $(
+        { set +x; } 2>/dev/null;
+        pstree $@;
+        set -x;
+    ) 2>/dev/null
+}
+
+getshims() {
+    ps -e -o pid= -o args= | sed -e 's/^ *//; s/\s\s*/\t/;' | grep -w 
'k3s/data/[^/]*/bin/containerd-shim' | cut -f1
+}
+
+killtree $({ set +x; } 2>/dev/null; getshims; set -x)
+
+do_unmount_and_remove() {
+    set +x
+    while read -r _ path _; do
+        case "$path" in $1*) echo "$path" ;; esac
+    done < /proc/self/mounts | sort -r | xargs -r -t -n 1 sh -c 'umount "$0" 
&& rm -rf "$0"'
+    set -x
+}
+
+do_unmount_and_remove '/run/k3s'
+do_unmount_and_remove '/var/lib/rancher/k3s'
+do_unmount_and_remove '/var/lib/kubelet/pods'
+do_unmount_and_remove '/var/lib/kubelet/plugins'
+do_unmount_and_remove '/run/netns/cni-'
+
+# Remove CNI namespaces
+ip netns show 2>/dev/null | grep cni- | xargs -r -t -n 1 ip netns delete
+
+# Delete network interface(s) that match 'master cni0'
+ip link show 2>/dev/null | grep 'master cni0' | while read ignore iface 
ignore; do
+    iface=${iface%%@*}
+    [ -z "$iface" ] || ip link delete $iface
+done
+ip link delete cni0
+ip link delete flannel.1
+ip link delete flannel-v6.1
+ip link delete kube-ipvs0
+ip link delete flannel-wg
+ip link delete flannel-wg-v6
+rm -rf /var/lib/cni/
+iptables-save | grep -v KUBE- | grep -v CNI- | grep -iv flannel | 
iptables-restore
+ip6tables-save | grep -v KUBE- | grep -v CNI- | grep -iv flannel | 
ip6tables-restore

diff --git a/sys-cluster/k3s/k3s-1.25.4_p1.ebuild 
b/sys-cluster/k3s/k3s-1.25.4_p1.ebuild
index 993f21c2a09d..aaae4d40b59d 100644
--- a/sys-cluster/k3s/k3s-1.25.4_p1.ebuild
+++ b/sys-cluster/k3s/k3s-1.25.4_p1.ebuild
@@ -92,6 +92,7 @@ src_compile() {
 
 src_install() {
        dobin "dist/artifacts/${PN}"
+       newbin "${FILESDIR}/k3s-killall.sh" k3s-killall
        use kubectl-symlink && dosym k3s /usr/bin/kubectl
        systemd_dounit "${FILESDIR}/${PN}.service"
        newinitd "${FILESDIR}/${PN}.initd" "${PN}"

Reply via email to