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

Issue installing SentinelAgent local rpm with rpm-ostree #482

Closed
vinylen opened this issue Jul 24, 2023 · 19 comments
Closed

Issue installing SentinelAgent local rpm with rpm-ostree #482

vinylen opened this issue Jul 24, 2023 · 19 comments
Labels
bug Something isn't working external Issue related to external project not part of Fedora f38 Related to Fedora 38

Comments

@vinylen
Copy link

vinylen commented Jul 24, 2023

Describe the bug

Installing a local .rpm package from SentinelOne results in prein scripts failing with the following message:

error: Running %prein for SentinelAgent: bwrap(/bin/sh): Child process killed by signal 102; run `journalctl -t 'rpm-ostree(SentinelAgent.prein)'` for more information

Output of journalctl -t 'rpm-ostree(SentinelAgent.prein)':

Apr 26 14:12:29 knut rpm-ostree(SentinelAgent.prein)[94743]: ERROR: Found already existing sentinelone service in systemd
Apr 26 14:15:24 knut rpm-ostree(SentinelAgent.prein)[95565]: ERROR: Found already existing sentinelone service in systemd
Apr 26 14:16:17 knut rpm-ostree(SentinelAgent.prein)[95875]: ERROR: Found already existing sentinelone service in systemd
-- Boot a7d1149b06d84861b7322178381fcd4b --
Apr 26 14:20:11 knut rpm-ostree(SentinelAgent.prein)[3931]: ERROR: Found already existing sentinelone service in systemd

To Reproduce
Download signed SentinelOne Agent RPM file and install it via rpm-ostree install SentingelAgent.rpm

Expected behavior
I expect the package to be installed in the same manner as if i were running Fedora Workstation 38.

Screenshots
If applicable, add screenshots to help explain your problem.

OS version:

State: idle
BootedDeployment:
● fedora:fedora/38/x86_64/sericea
                  Version: 38.20230723.0 (2023-07-23T00:42:51Z)
               BaseCommit: ec557cda222db56984a1e366177f0b8acdde2ed8fea7cd791ffd4f006f9c0b5c
             GPGSignature: Valid signature by 6A51BBABBA3D5467B6171221809A8D7CEB10B464
      RemovedBasePackages: firefox firefox-langpacks 115.0.2-3.fc38
          LayeredPackages: 'gcc-c++' cargo cascadia-code-fonts distrobox fd-find fontawesome-fonts fzf go helm igt-gpu-tools intel-media-driver kubectl langpacks-en lastpass-cli lazygit lsd mozilla-openh264 neovim npm ripgrep rpmfusion-free-release
                           rpmfusion-nonfree-release tailscale tlp tmux wireguard xpanes zsh

Additional context
I originally created this issue in coreos repo: coreos/fedora-coreos-tracker#1481

@vinylen vinylen added the bug Something isn't working label Jul 24, 2023
@travier
Copy link
Member

travier commented Jul 24, 2023

Can you post the content of the RPM package scriptlets? You can get them via:

$ rpm  -qlp --scripts package.rpm

@travier travier added external Issue related to external project not part of Fedora f38 Related to Fedora 38 labels Jul 24, 2023
@vinylen
Copy link
Author

vinylen commented Jul 24, 2023

Sure thing, here you go @travier

3K lines of scriplet
preinstall scriptlet (using /bin/sh):
#!/bin/bash
umask 0022
sentinel_name="sentinelone"
group_name="${sentinel_name}"
user_name="${group_name}"

legacy_group_name="sentinel"
legacy_user_name="sentinel"

agent_directory="/opt/sentinelone"
libraries_directory=${agent_directory}/lib
binaries_directory=${agent_directory}/bin
home_directory=${agent_directory}/home
configuration_directory=${agent_directory}/configuration
assets_directory=${agent_directory}/assets
log_directory=${agent_directory}/log
crash_dumps_directory=${agent_directory}/crash_dumps
current_crash_dumps_directory=${crash_dumps_directory}/.current
cgroups_directory=${agent_directory}/cgroups
agent_ctl=${binaries_directory}/sentinelctl

old_agent_path="/usr/local/sentinelagent"

agent_binary="sentinelone-agent"
ctl_binary="sentinelctl"
watchdog_binary="sentinelone-watchdog"

top_directories=("${agent_directory}" "${libraries_directory}" "${binaries_directory}" "${configuration_directory}" "${assets_directory}" "${log_directory}" "${home_directory}" "${cgroups_directory}")

groups_file="/etc/group"
users_file="/etc/passwd"

uninstallation_log_path="/tmp/sentinel_uninstall.log"
installation_log_path="/tmp/sentinel_install.log"
stopped_agent_file="/tmp/sentinel_should_start_after_upgrade"

installation_log_final_path=${log_directory}/install.log

sysvinit_daemon="sentineld"
sysvinit_initd_directory="/etc/init.d/"
systemd_service_unit="sentinelone.service"
systemd_service_directory="/lib/systemd/system/"

default_no_login_location="/usr/sbin/nologin"

rpm_public_key_id="bf000751"

installation_persistent_configuration=${configuration_directory}/install_config
installation_persistent_configuration_post_uninst="/tmp/install_config"

s1_agent_management_proxy="undefined"
s1_agent_management_url="undefined"
s1_agent_dv_proxy="undefined"
s1_agent_management_token="undefined"
s1_agent_device_type="undefined"
s1_agent_auto_start="undefined"
s1_agent_customer_id="undefined"
s1_agent_package_was_repacked="undefined"
s1_agent_create_user="undefined"
s1_agent_custom_install_path="undefined"
s1_agent_should_register_service="undefined"

write_log_message() {
	should_echo=${2:-0}
	current_date=$(date +"%d-%m-%y %R:%S.%3N")

	if [ "${should_echo}" -ne "0" ]; then
		echo "$1"
	fi
	
	for log_file in "${current_log_path[@]}"; do
		echo "[${current_date}] $1" >> ${log_file}
	done
}

log_if_failed() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "WARNING: Command '${1}' failed, rc: ${rc}"
	fi
}

assert() {
	rc=$?
	code=${2:-101}
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: Command '${1}' failed, rc: ${rc}" 1
		exit ${code}
	fi
}

expect_true() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: '${1}' failed, rc: ${rc}"
	fi

	return ${rc}
}

is_agent_running() {
	"${binaries_directory}/sentinelctl" control status > /dev/null 2>&1
}

get_systemd_folder() {
	possible_systemd_paths=("/lib/systemd/system/" "/usr/lib/systemd/system/")
	for path in ${possible_systemd_paths[@]}; do
		if [ -d "$path" ]; then
			systemd_service_directory=$path
		fi
	done
}

try_unregister_systemd() {
	systemctl > /dev/null 2>&1 || return $?
	
	write_log_message "Disabling ${systemd_service_unit} service"
	systemctl disable "${systemd_service_unit}" > /dev/null 2>&1
	expect_true "systemctl disable" || return $?

	unit_file_path="$(cut -d "=" -f2 <<< $(systemctl show -p FragmentPath ${systemd_service_unit}))"
	rm -f "${unit_file_path}"
	assert "rm" 103
}

unregister_service() {
	write_log_message "Unregistering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		:
	elif try_unregister_systemd; then
		:
	elif command -v update-rc.d > /dev/null 2>&1; then
		update-rc.d -f "${sysvinit_daemon}" remove
		assert "update-rc.d" 103
	elif command -v chkconfig > /dev/null 2>&1; then
		:
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	if [ -f "${sysvinit_initd_directory}/${sysvinit_daemon}" ]; then
		rm -f "${sysvinit_initd_directory}/${sysvinit_daemon}"
		assert "rm" 103
	fi

	write_log_message "Agent service unregistered successfully"
}

validate_agent_stopped() {

	if is_agent_running; then
		write_log_message "Agent is not stopped. Please use 'sentinelctl' directly to uninstall/upgrade." 1
		exit 104
	fi
}

try_stopping_agent() {
	if is_agent_running; then
		write_log_message "Trying to stop agent ..."
		"${binaries_directory}/sentinelctl" control stop --passphrase dummy > /dev/null 2>&1
		if [ $? -ne 0 ]; then
			write_log_message "ERROR: failed to stop agent." 1
			exit 101
		fi
		write_log_message "stopped agent."
		if [[ $# -eq 1 && $1 == mark_agent_stopped ]]; then
			touch ${stopped_agent_file} 2> /dev/null
			if [ $? -ne 0 ]; then
				write_log_message "ERROR: failed to create ${stopped_agent_file}." 1
				"${binaries_directory}/sentinelctl" control start > /dev/null 2>&1
				exit 101
			fi
			write_log_message "Created ${stopped_agent_file} file."
		fi
	fi
}

try_running_pre_uninstall_command() {
	write_log_message "Trying to run pre-uninstall command ..."
	"${binaries_directory}/sentinelctl" control pre-uninstall > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		write_log_message "ERROR: failed to run pre-uninstall command." 1
		return
	fi
	write_log_message "Finished running pre-uninstall command"
}

try_register_systemd() {
	[ -d "/run/systemd/system/" ] || return $?

	get_systemd_folder
	write_log_message "systemctl was found, enabling service file"
	cp "${configuration_directory}/${systemd_service_unit}" "${systemd_service_directory}"
	expect_true "cp ${configuration_directory}/${systemd_service_unit}" || return $?
	systemctl enable "${systemd_service_unit}" > /dev/null 2>&1
	if [ $? -ne 0 ]; then
	    write_log_message "ERROR: systemctl enable failed"
	    rm -f "${systemd_service_directory}/${systemd_service_unit}"
	    return 1
	fi
}

register_service() {
	write_log_message "Registering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		service_type="sysvinit"
	elif try_register_systemd; then
		service_type="systemd"
	elif command -v update-rc.d > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "update-rc.d was found, enabling service file" 1
		update-rc.d "${sysvinit_daemon}" defaults
		assert "update-rc.d" 103
		service_type="sysvinit"
	elif command -v chkconfig > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "chkconfig was found, ${sysvinit_daemon} service was added" 1
		chkconfig --add "${sysvinit_daemon}"
		assert "chkconfig" 103
		service_type="sysvinit"
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	"${binaries_directory}/sentinelctl" control set-service-type ${service_type}
	assert "set service type" 103

	write_log_message "Agent service registered successfully"
}

remove_kprobes() {
    kprobe_names=(
                  "s1chdirenter"
                  "s1dsoenter"
                  "s1fcreate"
                  "s1unlinkenter"
                  "s1unlinkatenter"
                  "s1dounlinkatenter"
                  "s1dounlinkatexit"
                  "s1renameenter"
                  "s1renameatenter"
                  "s1renameat2enter"
                  "s1dorenameat2enter"
                  "s1dorenameat2exit"
                  "s1execve_enter"
                  "s1execve_exit"
                  "s1compatexecve_enter"
                  "s1compatexecve_exit"
                  "s1_tcp_connect_enter"
                  "s1_tcp_connect_exit"
                  "s1_inet_csk_accept_exit"
                  "s1_inet_bind_enter"
                  "s1_inet_bind_exit"
                  "s1chmodenter"
                  "s1fchmodatenter"
                  "s1dofchmodatenter"
                  "s1dofchmodatexit"
                  "s1umount_exit"
                  "s1dofilpopen_enter"
                  "s1readdir_enter"
                  "s1dofilpopen_exit"
                  "s1dsoexit"
                  "s1pivotroot_enter"
                  "s1mount_exit"
                  "s1readdir_exit"
                  "s1pivotroot_exit"
                  "s1imafilefree"
                  "s1fchdir_enter"
                  "s1mount_enter"
                  "s1doaddmount_enter"
                  "s1umount_enter"
                  )
	tracefs_path="${agent_directory}/mount"

	fs_type="$(cat /proc/self/mounts | grep sentitrace | cut -d' ' -f3)"
	if [ -z "$fs_type" ]; then
		write_log_message "Could not find mountpoint, not removing kprobes"
		return
	elif [ "$fs_type" == "debugfs" ]; then
		tracefs_path="$tracefs_path/tracing"
	fi

	write_log_message "Disabling kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo 0 > "$current_path/enable"
	done

	write_log_message "Removing kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo "-:$kprobe" > "$tracefs_path/kprobe_events" 2>/dev/null
	done

	write_log_message "Kprobes removed successfully"
}

cgroup_types=(
			  "memory"
			 )

remove_cgroups() {
	sentinel_cgroups=("agent" "perf")

	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		cgroups_directory="${s1_agent_custom_install_path}/cgroups"
	fi

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_base="${cgroups_directory}/$cgroup_type"

		if [ -d "$cgroup_type_base" ]; then
			for cgroup_name in ${sentinel_cgroups[@]}; do
				cgroup_name_dir="$cgroup_type_base/$cgroup_name"
				if [ -d "$cgroup_name_dir" ]; then
					rmdir "$cgroup_name_dir"
				fi
			done

			umount "$cgroup_type_base" >/dev/null 2>/dev/null
			rmdir "$cgroup_type_base"
		fi
	done

    umount "$cgroups_directory" >/dev/null 2>/dev/null
}

create_cgroups() {
	remove_cgroups

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_dir="${cgroups_directory}/$cgroup_type"
		if [ ! -d "$cgroup_type_dir" ]; then
			mkdir "$cgroup_type_dir"
			assert mkdir
		fi
	done
}

assert_user_access() {
	su $1 -s /bin/sh -c "exit 0" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Warning: can't verify user $1 is accessible to $2" 1
		return
	fi

	su $1 -s /bin/sh -c "ls $2" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Error: user $1 can not access path $2" 1
		exit 110
	fi
}

read_env_var() {
	ret_value="undefined"
	if [[ $# -ne 1 ]] ; then
		write_log_message "Invalid number of parameters, read_env_var got $# expected 1"
		return
	fi
	env_var_name=${1}
	s1_var="${!env_var_name}"

	if [[ ! -z ${s1_var} ]]; then
		ret_value="${s1_var}"
	fi
}

read_config_from_file() {
	ret_value="undefined"
	if [[ $# -ne 2 ]] ; then
		write_log_message "Invalid number of parameters, read_config_from_file got $# expected 2"
		return
	fi
	if [[ -f "${2}" ]]; then
		result=$(grep "${1}" "${2}")

		value=$(echo "$result" | tail -1 | cut -d= -f2-)
		if [[ $value != "" ]]; then
			ret_value=$value
		else
			write_log_message "$1 is not defined in config file or defined with bad format."
		fi
	else
		write_log_message "Couldn't find config file"
	fi
}



read_configs(){
	if [[ $# -ne 2 && $# -ne 1 ]]; then
		write_log_message "Invalid number of parameters, read_configs got $# expected 1 or 2"
		return
	fi
	if [[ "${1}" == "config_file" ]]; then
		if [[ $# -ne 2 ]] ; then
			write_log_message "Invalid number of parameters, read_configs missing <config file path> parameter"
			return
		fi
		read_config_from_file "S1_AGENT_MANAGEMENT_PROXY" "${2}"
		s1_agent_management_proxy=$ret_value
		read_config_from_file "S1_AGENT_DV_PROXY" "${2}"
		s1_agent_dv_proxy=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_URL" "${2}"
		s1_agent_management_url=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_TOKEN" "${2}"
		s1_agent_management_token=$ret_value
		read_config_from_file "S1_AGENT_DEVICE_TYPE" "${2}"
		s1_agent_device_type=$ret_value
		read_config_from_file "S1_AGENT_AUTO_START" "${2}"
		s1_agent_auto_start=$ret_value
		read_config_from_file "S1_AGENT_CUSTOMER_ID" "${2}"
		s1_agent_customer_id=$ret_value
		read_config_from_file "S1_AGENT_CREATE_USER" "${2}"
		s1_agent_create_user=$ret_value
		read_config_from_file "S1_AGENT_CUSTOM_INSTALL_PATH" "${2}"
		s1_agent_custom_install_path=$ret_value
		read_config_from_file "S1_AGENT_SHOULD_REGISTER_SERVICE" "${2}"
		s1_agent_should_register_service=$ret_value
	else
		read_env_var "S1_AGENT_MANAGEMENT_PROXY"
		s1_agent_management_proxy=$ret_value
		read_env_var "S1_AGENT_DV_PROXY"
		s1_agent_dv_proxy=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_URL"
		s1_agent_management_url=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_TOKEN"
		s1_agent_management_token=$ret_value
		read_env_var "S1_AGENT_DEVICE_TYPE"
		s1_agent_device_type=$ret_value
		read_env_var "S1_AGENT_AUTO_START"
		s1_agent_auto_start=$ret_value
		read_env_var "S1_AGENT_CUSTOMER_ID"
		s1_agent_customer_id=$ret_value
		read_env_var "S1_AGENT_CREATE_USER"
		s1_agent_create_user=$ret_value
		read_env_var "S1_AGENT_CUSTOM_INSTALL_PATH"
		s1_agent_custom_install_path=$ret_value
		read_env_var "S1_AGENT_SHOULD_REGISTER_SERVICE"
		s1_agent_should_register_service=$ret_value
	fi

	s1_agent_auto_start=$(echo -n "$s1_agent_auto_start" | tr -d '[:space:]')
	s1_agent_should_register_service=$(echo -n "$s1_agent_should_register_service" | tr -d '[:space:]')
}

__read_configs()
{
	if [[ "${s1_agent_package_was_repacked}" == "true" ]]; then
		write_log_message "Agent package was repacked."

	elif [[ ! -z "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
		if  [[ -f "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
			write_log_message "Read from config file ${S1_AGENT_INSTALL_CONFIG_PATH}"
			read_configs "config_file" "${S1_AGENT_INSTALL_CONFIG_PATH}"
		else
			write_log_message "Couldn't find config file at ${S1_AGENT_INSTALL_CONFIG_PATH}"
		fi
	else
		write_log_message "Read from environment variables."
		read_configs "env_var"
	fi
}

write_config_to_file () {
	if [[ $# -ne 3 ]]; then
		write_log_message "Invalid number of parameters, write_configs_to_file got $# expected 3"
		return
	fi

	if [[ "${1}" != "undefined" && "${1}" != "" ]]; then
		echo "${2}=${1}" >> ${3}
	fi
}

write_configs (){
	echo "" > ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_proxy} "S1_AGENT_MANAGEMENT_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_dv_proxy} "S1_AGENT_DV_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_url} "S1_AGENT_MANAGEMENT_URL" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_token} "S1_AGENT_MANAGEMENT_TOKEN" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_device_type} "S1_AGENT_DEVICE_TYPE" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_auto_start} "S1_AGENT_AUTO_START" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_customer_id} "S1_AGENT_CUSTOMER_ID" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_create_user} "S1_AGENT_CREATE_USER" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_custom_install_path} "S1_AGENT_CUSTOM_INSTALL_PATH" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_should_register_service} "S1_AGENT_SHOULD_REGISTER_SERVICE" ${installation_persistent_configuration}
}




export PATH="/sbin:/bin:/usr/sbin:/usr/bin"

get_nologin() {
	if command -v which > /dev/null 2>&1; then
		no_login=$(which nologin)
	else
		no_login="$default_no_login_location"
	fi
}

create_user() {
	write_log_message "Creating user ${user_name}"
	get_nologin
	useradd -r -U -d "${home_directory}" -s "${no_login}" "${user_name}"
	assert "useradd" 102

	write_log_message "User ${user_name} created successfully"
}

create_symlink() {
	if [ ! -d "$1" ]; then
		write_log_message "Creating directory $1" 1
		mkdir -p "$1"
		assert "mkdir -p $1"
		chown "${user_name}:${group_name}" "$1"
		assert "chown ${user_name}:${group_name} $1"
	fi

	base_dir="${agent_directory%/*}"

	if [ ! -d "$base_dir" ]; then
		mkdir -p "$base_dir"
		assert "mkdir -p $base_dir"
	fi

	assert_user_access ${user_name} "$1"
	write_log_message "Create symlink to $1" 1
	ln -s "$1" "$agent_directory"
	assert "ln -s $1 $agent_directory"
	chown -h "${user_name}:${group_name}" "$agent_directory"
	assert "chown -h ${user_name}:${group_name} $agent_directory"
}

is_legacy_username_exists() {
	existing_user_name=$(stat -c '%U' "${agent_ctl}" 2>/dev/null)
	if [ $? -ne 0 ]; then
		write_log_message "ERROR: Failed to access agent files" 1
		exit 101
	fi

	existing_group_name=$(stat -c '%G' "${agent_ctl}" 2>/dev/null)
	if [ $? -ne 0 ]; then
		write_log_message "ERROR: Failed to access agent files" 1
		exit 101
	fi

	if [ "${existing_user_name}" = "${legacy_user_name}" ] && \
		 [ "${existing_group_name}" = "${legacy_group_name}" ]; then
		return 0
	fi
	return 1
}

validate_user_not_exist() {
	if grep -q "^${user_name}:" "${users_file}"; then
		write_log_message "ERROR: Found already existing user '${user_name}'. User must be removed in order to complete installation." 1
		exit 102
	fi
	if grep -q "^${group_name}:" "${groups_file}"; then
		write_log_message "ERROR: Found already existing group '${group_name}'. Group must be removed in order to complete installation." 1
		exit 102
	fi
}

user_validation_creation() {
	if [ "${s1_agent_create_user}" != "false" ]; then
		validate_user_not_exist
		create_user
	fi
}

validate_service_not_exist() {
	systemctl > /dev/null 2>&1 || return $?

	if  [ $(systemctl list-unit-files "${systemd_service_unit}" | grep "${systemd_service_unit}" | wc -l) -gt 0 ]; then
		write_log_message "ERROR: Found already existing sentinelone service in systemd" 1
		exit 102
	fi
}

delete_legacy_user_and_group() {
	userdel "${legacy_user_name}"
	assert "userdel" 102

	if grep -q -w "^${legacy_group_name}" "${groups_file}"; then
		groupdel "${legacy_group_name}"
		assert "groupdel" 102
	fi
}

upgrade_custom_path() {
	custom_install_path="$1"
	if [ "${custom_install_path}" == "undefined" ]; then
		return
	fi

	if [ -h "$agent_directory" ]; then
		write_log_message "Upgraded agent already installed with custom install path, skipping." 1
		return
	fi
	
	shopt -s extglob
	stripped_install_path="${custom_install_path%%+(/)}"

	write_log_message "Upgrading agent and moving to '${stripped_install_path}'" 1

	base_dir="${stripped_install_path%/*}"

	if [ -d "${stripped_install_path}" ]; then
		if [ "$(ls -A "${stripped_install_path}")" != "" ]; then
			write_log_message "ERROR: trying to upgrade to custom install path '${stripped_install_path}' but dest dir is not empty" 1
			exit 101
		fi

		rmdir "${stripped_install_path}"
		assert "rmdir"
	else
		write_log_message "Creating '${base_dir}'" 1
		mkdir -p "$base_dir"
	fi

	assert_user_access "$user_name" "$base_dir"

	mv "$agent_directory" "${stripped_install_path}"
	if [ $? -ne 0 ]; then
		cp -rp "$agent_directory" "${stripped_install_path}"
		if [ $? -ne 0 ]; then
			write_log_message "Copying agent dir to the '${stripped_install_path}' failed" 1
			exit 101
		fi

		rm -rf "$agent_directory"
	fi

	ln -s "${stripped_install_path}" "$agent_directory"
	write_log_message "Symlink created from $agent_directory to ${stripped_install_path}"

	chown -h "${user_name}:${user_name}" "$agent_directory"

	echo "S1_AGENT_CUSTOM_INSTALL_PATH=$stripped_install_path" >> $installation_persistent_configuration
}

pre_install() {
	write_log_message "Starting installation 22.4.2.4"

	__read_configs

	stop_old_agent

	validate_service_not_exist

	user_validation_creation

	apply_config_on_agent

	if [[ "${s1_agent_custom_install_path}" == "undefined" ]]; then
		mkdir -p ${agent_directory}
	fi
}

apply_config_on_agent() {
	if [[ "${s1_agent_custom_install_path}" != "undefined" ]]; then
		write_log_message "Setting agent's custom install path configuration: ${s1_agent_custom_install_path}"
		create_symlink "${s1_agent_custom_install_path}"
	fi
}


pre_upgrade() {
	write_log_message "Starting upgrade 22.4.2.4"

	custom_install_path="$s1_agent_custom_install_path"

	read_configs "config_file" "${installation_persistent_configuration}"

	rm ${stopped_agent_file} 2> /dev/null

	try_stopping_agent mark_agent_stopped

	if is_legacy_username_exists ; then
		write_log_message "Changing '${existing_user_name}:${existing_group_name}' to '${user_name}:${group_name}'"
		user_validation_creation
		delete_legacy_user_and_group
	fi

	umount "${agent_directory}/mount" > /dev/null 2> /dev/null
	umount "${agent_directory}/rpm_mount" > /dev/null 2> /dev/null

	unregister_service

	write_log_message "Removing Cgroups"
	remove_cgroups

	upgrade_custom_path "$custom_install_path"
}

stop_old_agent() {
	if [ -d "${old_agent_path}" ]; then
		write_log_message "Found old agent installation, going to stop agent"
		/etc/init.d/sentineld force_stop > /dev/null 2>&1
	fi
}

validate_enough_fds() {
	max_fds=$(ulimit -Sn)
	cpu_count=$(grep -c ^processor /proc/cpuinfo)
	fds_needed=$(($cpu_count * 64))

	if [ $fds_needed -gt $max_fds ]; then
		write_log_message "Installation stopped. The Open File Descriptor limit is too low. Increase ulimit and file-max to at least 64 times the number of CPUs." 1
		exit 101
	fi
}

if [ "${1}" -eq 1 ]
then
    current_log_path=("${installation_log_path}")
    pre_install
elif [ "${1}" -gt 1 ]
then
    current_log_path=("${installation_log_path}" "${installation_log_final_path}")
    pre_upgrade
fi

# Code that will run after installation or upgrade
postinstall scriptlet (using /bin/sh):
#!/bin/bash
umask 0022
sentinel_name="sentinelone"
group_name="${sentinel_name}"
user_name="${group_name}"

legacy_group_name="sentinel"
legacy_user_name="sentinel"

agent_directory="/opt/sentinelone"
libraries_directory=${agent_directory}/lib
binaries_directory=${agent_directory}/bin
home_directory=${agent_directory}/home
configuration_directory=${agent_directory}/configuration
assets_directory=${agent_directory}/assets
log_directory=${agent_directory}/log
crash_dumps_directory=${agent_directory}/crash_dumps
current_crash_dumps_directory=${crash_dumps_directory}/.current
cgroups_directory=${agent_directory}/cgroups
agent_ctl=${binaries_directory}/sentinelctl

old_agent_path="/usr/local/sentinelagent"

agent_binary="sentinelone-agent"
ctl_binary="sentinelctl"
watchdog_binary="sentinelone-watchdog"

top_directories=("${agent_directory}" "${libraries_directory}" "${binaries_directory}" "${configuration_directory}" "${assets_directory}" "${log_directory}" "${home_directory}" "${cgroups_directory}")

groups_file="/etc/group"
users_file="/etc/passwd"

uninstallation_log_path="/tmp/sentinel_uninstall.log"
installation_log_path="/tmp/sentinel_install.log"
stopped_agent_file="/tmp/sentinel_should_start_after_upgrade"

installation_log_final_path=${log_directory}/install.log

sysvinit_daemon="sentineld"
sysvinit_initd_directory="/etc/init.d/"
systemd_service_unit="sentinelone.service"
systemd_service_directory="/lib/systemd/system/"

default_no_login_location="/usr/sbin/nologin"

rpm_public_key_id="bf000751"

installation_persistent_configuration=${configuration_directory}/install_config
installation_persistent_configuration_post_uninst="/tmp/install_config"

s1_agent_management_proxy="undefined"
s1_agent_management_url="undefined"
s1_agent_dv_proxy="undefined"
s1_agent_management_token="undefined"
s1_agent_device_type="undefined"
s1_agent_auto_start="undefined"
s1_agent_customer_id="undefined"
s1_agent_package_was_repacked="undefined"
s1_agent_create_user="undefined"
s1_agent_custom_install_path="undefined"
s1_agent_should_register_service="undefined"

write_log_message() {
	should_echo=${2:-0}
	current_date=$(date +"%d-%m-%y %R:%S.%3N")

	if [ "${should_echo}" -ne "0" ]; then
		echo "$1"
	fi
	
	for log_file in "${current_log_path[@]}"; do
		echo "[${current_date}] $1" >> ${log_file}
	done
}

log_if_failed() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "WARNING: Command '${1}' failed, rc: ${rc}"
	fi
}

assert() {
	rc=$?
	code=${2:-101}
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: Command '${1}' failed, rc: ${rc}" 1
		exit ${code}
	fi
}

expect_true() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: '${1}' failed, rc: ${rc}"
	fi

	return ${rc}
}

is_agent_running() {
	"${binaries_directory}/sentinelctl" control status > /dev/null 2>&1
}

get_systemd_folder() {
	possible_systemd_paths=("/lib/systemd/system/" "/usr/lib/systemd/system/")
	for path in ${possible_systemd_paths[@]}; do
		if [ -d "$path" ]; then
			systemd_service_directory=$path
		fi
	done
}

try_unregister_systemd() {
	systemctl > /dev/null 2>&1 || return $?
	
	write_log_message "Disabling ${systemd_service_unit} service"
	systemctl disable "${systemd_service_unit}" > /dev/null 2>&1
	expect_true "systemctl disable" || return $?

	unit_file_path="$(cut -d "=" -f2 <<< $(systemctl show -p FragmentPath ${systemd_service_unit}))"
	rm -f "${unit_file_path}"
	assert "rm" 103
}

unregister_service() {
	write_log_message "Unregistering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		:
	elif try_unregister_systemd; then
		:
	elif command -v update-rc.d > /dev/null 2>&1; then
		update-rc.d -f "${sysvinit_daemon}" remove
		assert "update-rc.d" 103
	elif command -v chkconfig > /dev/null 2>&1; then
		:
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	if [ -f "${sysvinit_initd_directory}/${sysvinit_daemon}" ]; then
		rm -f "${sysvinit_initd_directory}/${sysvinit_daemon}"
		assert "rm" 103
	fi

	write_log_message "Agent service unregistered successfully"
}

validate_agent_stopped() {

	if is_agent_running; then
		write_log_message "Agent is not stopped. Please use 'sentinelctl' directly to uninstall/upgrade." 1
		exit 104
	fi
}

try_stopping_agent() {
	if is_agent_running; then
		write_log_message "Trying to stop agent ..."
		"${binaries_directory}/sentinelctl" control stop --passphrase dummy > /dev/null 2>&1
		if [ $? -ne 0 ]; then
			write_log_message "ERROR: failed to stop agent." 1
			exit 101
		fi
		write_log_message "stopped agent."
		if [[ $# -eq 1 && $1 == mark_agent_stopped ]]; then
			touch ${stopped_agent_file} 2> /dev/null
			if [ $? -ne 0 ]; then
				write_log_message "ERROR: failed to create ${stopped_agent_file}." 1
				"${binaries_directory}/sentinelctl" control start > /dev/null 2>&1
				exit 101
			fi
			write_log_message "Created ${stopped_agent_file} file."
		fi
	fi
}

try_running_pre_uninstall_command() {
	write_log_message "Trying to run pre-uninstall command ..."
	"${binaries_directory}/sentinelctl" control pre-uninstall > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		write_log_message "ERROR: failed to run pre-uninstall command." 1
		return
	fi
	write_log_message "Finished running pre-uninstall command"
}

try_register_systemd() {
	[ -d "/run/systemd/system/" ] || return $?

	get_systemd_folder
	write_log_message "systemctl was found, enabling service file"
	cp "${configuration_directory}/${systemd_service_unit}" "${systemd_service_directory}"
	expect_true "cp ${configuration_directory}/${systemd_service_unit}" || return $?
	systemctl enable "${systemd_service_unit}" > /dev/null 2>&1
	if [ $? -ne 0 ]; then
	    write_log_message "ERROR: systemctl enable failed"
	    rm -f "${systemd_service_directory}/${systemd_service_unit}"
	    return 1
	fi
}

register_service() {
	write_log_message "Registering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		service_type="sysvinit"
	elif try_register_systemd; then
		service_type="systemd"
	elif command -v update-rc.d > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "update-rc.d was found, enabling service file" 1
		update-rc.d "${sysvinit_daemon}" defaults
		assert "update-rc.d" 103
		service_type="sysvinit"
	elif command -v chkconfig > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "chkconfig was found, ${sysvinit_daemon} service was added" 1
		chkconfig --add "${sysvinit_daemon}"
		assert "chkconfig" 103
		service_type="sysvinit"
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	"${binaries_directory}/sentinelctl" control set-service-type ${service_type}
	assert "set service type" 103

	write_log_message "Agent service registered successfully"
}

remove_kprobes() {
    kprobe_names=(
                  "s1chdirenter"
                  "s1dsoenter"
                  "s1fcreate"
                  "s1unlinkenter"
                  "s1unlinkatenter"
                  "s1dounlinkatenter"
                  "s1dounlinkatexit"
                  "s1renameenter"
                  "s1renameatenter"
                  "s1renameat2enter"
                  "s1dorenameat2enter"
                  "s1dorenameat2exit"
                  "s1execve_enter"
                  "s1execve_exit"
                  "s1compatexecve_enter"
                  "s1compatexecve_exit"
                  "s1_tcp_connect_enter"
                  "s1_tcp_connect_exit"
                  "s1_inet_csk_accept_exit"
                  "s1_inet_bind_enter"
                  "s1_inet_bind_exit"
                  "s1chmodenter"
                  "s1fchmodatenter"
                  "s1dofchmodatenter"
                  "s1dofchmodatexit"
                  "s1umount_exit"
                  "s1dofilpopen_enter"
                  "s1readdir_enter"
                  "s1dofilpopen_exit"
                  "s1dsoexit"
                  "s1pivotroot_enter"
                  "s1mount_exit"
                  "s1readdir_exit"
                  "s1pivotroot_exit"
                  "s1imafilefree"
                  "s1fchdir_enter"
                  "s1mount_enter"
                  "s1doaddmount_enter"
                  "s1umount_enter"
                  )
	tracefs_path="${agent_directory}/mount"

	fs_type="$(cat /proc/self/mounts | grep sentitrace | cut -d' ' -f3)"
	if [ -z "$fs_type" ]; then
		write_log_message "Could not find mountpoint, not removing kprobes"
		return
	elif [ "$fs_type" == "debugfs" ]; then
		tracefs_path="$tracefs_path/tracing"
	fi

	write_log_message "Disabling kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo 0 > "$current_path/enable"
	done

	write_log_message "Removing kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo "-:$kprobe" > "$tracefs_path/kprobe_events" 2>/dev/null
	done

	write_log_message "Kprobes removed successfully"
}

cgroup_types=(
			  "memory"
			 )

remove_cgroups() {
	sentinel_cgroups=("agent" "perf")

	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		cgroups_directory="${s1_agent_custom_install_path}/cgroups"
	fi

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_base="${cgroups_directory}/$cgroup_type"

		if [ -d "$cgroup_type_base" ]; then
			for cgroup_name in ${sentinel_cgroups[@]}; do
				cgroup_name_dir="$cgroup_type_base/$cgroup_name"
				if [ -d "$cgroup_name_dir" ]; then
					rmdir "$cgroup_name_dir"
				fi
			done

			umount "$cgroup_type_base" >/dev/null 2>/dev/null
			rmdir "$cgroup_type_base"
		fi
	done

    umount "$cgroups_directory" >/dev/null 2>/dev/null
}

create_cgroups() {
	remove_cgroups

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_dir="${cgroups_directory}/$cgroup_type"
		if [ ! -d "$cgroup_type_dir" ]; then
			mkdir "$cgroup_type_dir"
			assert mkdir
		fi
	done
}

assert_user_access() {
	su $1 -s /bin/sh -c "exit 0" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Warning: can't verify user $1 is accessible to $2" 1
		return
	fi

	su $1 -s /bin/sh -c "ls $2" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Error: user $1 can not access path $2" 1
		exit 110
	fi
}

read_env_var() {
	ret_value="undefined"
	if [[ $# -ne 1 ]] ; then
		write_log_message "Invalid number of parameters, read_env_var got $# expected 1"
		return
	fi
	env_var_name=${1}
	s1_var="${!env_var_name}"

	if [[ ! -z ${s1_var} ]]; then
		ret_value="${s1_var}"
	fi
}

read_config_from_file() {
	ret_value="undefined"
	if [[ $# -ne 2 ]] ; then
		write_log_message "Invalid number of parameters, read_config_from_file got $# expected 2"
		return
	fi
	if [[ -f "${2}" ]]; then
		result=$(grep "${1}" "${2}")

		value=$(echo "$result" | tail -1 | cut -d= -f2-)
		if [[ $value != "" ]]; then
			ret_value=$value
		else
			write_log_message "$1 is not defined in config file or defined with bad format."
		fi
	else
		write_log_message "Couldn't find config file"
	fi
}



read_configs(){
	if [[ $# -ne 2 && $# -ne 1 ]]; then
		write_log_message "Invalid number of parameters, read_configs got $# expected 1 or 2"
		return
	fi
	if [[ "${1}" == "config_file" ]]; then
		if [[ $# -ne 2 ]] ; then
			write_log_message "Invalid number of parameters, read_configs missing <config file path> parameter"
			return
		fi
		read_config_from_file "S1_AGENT_MANAGEMENT_PROXY" "${2}"
		s1_agent_management_proxy=$ret_value
		read_config_from_file "S1_AGENT_DV_PROXY" "${2}"
		s1_agent_dv_proxy=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_URL" "${2}"
		s1_agent_management_url=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_TOKEN" "${2}"
		s1_agent_management_token=$ret_value
		read_config_from_file "S1_AGENT_DEVICE_TYPE" "${2}"
		s1_agent_device_type=$ret_value
		read_config_from_file "S1_AGENT_AUTO_START" "${2}"
		s1_agent_auto_start=$ret_value
		read_config_from_file "S1_AGENT_CUSTOMER_ID" "${2}"
		s1_agent_customer_id=$ret_value
		read_config_from_file "S1_AGENT_CREATE_USER" "${2}"
		s1_agent_create_user=$ret_value
		read_config_from_file "S1_AGENT_CUSTOM_INSTALL_PATH" "${2}"
		s1_agent_custom_install_path=$ret_value
		read_config_from_file "S1_AGENT_SHOULD_REGISTER_SERVICE" "${2}"
		s1_agent_should_register_service=$ret_value
	else
		read_env_var "S1_AGENT_MANAGEMENT_PROXY"
		s1_agent_management_proxy=$ret_value
		read_env_var "S1_AGENT_DV_PROXY"
		s1_agent_dv_proxy=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_URL"
		s1_agent_management_url=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_TOKEN"
		s1_agent_management_token=$ret_value
		read_env_var "S1_AGENT_DEVICE_TYPE"
		s1_agent_device_type=$ret_value
		read_env_var "S1_AGENT_AUTO_START"
		s1_agent_auto_start=$ret_value
		read_env_var "S1_AGENT_CUSTOMER_ID"
		s1_agent_customer_id=$ret_value
		read_env_var "S1_AGENT_CREATE_USER"
		s1_agent_create_user=$ret_value
		read_env_var "S1_AGENT_CUSTOM_INSTALL_PATH"
		s1_agent_custom_install_path=$ret_value
		read_env_var "S1_AGENT_SHOULD_REGISTER_SERVICE"
		s1_agent_should_register_service=$ret_value
	fi

	s1_agent_auto_start=$(echo -n "$s1_agent_auto_start" | tr -d '[:space:]')
	s1_agent_should_register_service=$(echo -n "$s1_agent_should_register_service" | tr -d '[:space:]')
}

__read_configs()
{
	if [[ "${s1_agent_package_was_repacked}" == "true" ]]; then
		write_log_message "Agent package was repacked."

	elif [[ ! -z "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
		if  [[ -f "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
			write_log_message "Read from config file ${S1_AGENT_INSTALL_CONFIG_PATH}"
			read_configs "config_file" "${S1_AGENT_INSTALL_CONFIG_PATH}"
		else
			write_log_message "Couldn't find config file at ${S1_AGENT_INSTALL_CONFIG_PATH}"
		fi
	else
		write_log_message "Read from environment variables."
		read_configs "env_var"
	fi
}

write_config_to_file () {
	if [[ $# -ne 3 ]]; then
		write_log_message "Invalid number of parameters, write_configs_to_file got $# expected 3"
		return
	fi

	if [[ "${1}" != "undefined" && "${1}" != "" ]]; then
		echo "${2}=${1}" >> ${3}
	fi
}

write_configs (){
	echo "" > ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_proxy} "S1_AGENT_MANAGEMENT_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_dv_proxy} "S1_AGENT_DV_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_url} "S1_AGENT_MANAGEMENT_URL" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_token} "S1_AGENT_MANAGEMENT_TOKEN" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_device_type} "S1_AGENT_DEVICE_TYPE" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_auto_start} "S1_AGENT_AUTO_START" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_customer_id} "S1_AGENT_CUSTOMER_ID" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_create_user} "S1_AGENT_CREATE_USER" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_custom_install_path} "S1_AGENT_CUSTOM_INSTALL_PATH" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_should_register_service} "S1_AGENT_SHOULD_REGISTER_SERVICE" ${installation_persistent_configuration}
}


export PATH="/sbin:/bin:/usr/sbin:/usr/bin"

shell_rc_files=(".profile" ".login" ".shrc" ".bashrc" ".zshrc" ".tcshrc" ".kshrc")

root_files_folders=("home" "bin" "lib" "configuration/sentineld" "configuration/sentinelone.service" "ebpfs")


apply_config_on_agent() {
	if [[ "${s1_agent_management_proxy}" != "undefined" ]]; then
		write_log_message "Setting management proxy configuration: ${s1_agent_management_proxy}"
		"${binaries_directory}/sentinelctl" management proxy set "${s1_agent_management_proxy}"
	fi

	if [[ "${s1_agent_dv_proxy}" != "undefined" ]]; then
		write_log_message "Setting dv proxy configuration: ${s1_agent_dv_proxy}"
		"${binaries_directory}/sentinelctl" management dv proxy set "${s1_agent_dv_proxy}"
	fi

	if [[ "${s1_agent_management_token}" != "undefined" ]]; then
		write_log_message "Setting management token configuration: ${s1_agent_management_token}"
		"${binaries_directory}/sentinelctl" management token set "${s1_agent_management_token}"
	fi

	if [[ "${s1_agent_management_url}" != "undefined" ]]; then
		write_log_message "Setting management url configuration: ${s1_agent_management_url}"
		"${binaries_directory}/sentinelctl" management url set "${s1_agent_management_url}"
	fi

	if [[ "${s1_agent_device_type}" != "undefined" ]]; then
		write_log_message "Setting device type configuration: ${s1_agent_device_type}"
		"${binaries_directory}/sentinelctl" management type set "${s1_agent_device_type}"
	fi

	if [[ "${s1_agent_customer_id}" != "undefined" ]]; then
		write_log_message "Setting customer id configuration: ${s1_agent_customer_id}"
		"${binaries_directory}/sentinelctl" management customer_id set "${s1_agent_customer_id}"
	fi

	if [[ "${s1_agent_auto_start}" == "true" ]]; then
		write_log_message "Setting agent auto start configuration: ${s1_agent_auto_start}"
		"${binaries_directory}/sentinelctl" control start
	fi
}


post_install() {

	__read_configs
	write_configs

	create_cgroups
	set_permissions
	disable_account_login
	register_service
	add_ctl_to_path
	remove_old_agent
	fix_root_owner
	
	validate_desktop

	apply_config_on_agent

	write_log_message "Installation finished successfully"
	mv -f "${installation_log_path}" "${installation_log_final_path}"
}


start_agent_if_needed() {
	if [ -e ${stopped_agent_file} ]; then
		rm -f "${stopped_agent_file}" > /dev/null 2>&1
		write_log_message "Starting agent, since it was stopped before upgrade."
		"${binaries_directory}/sentinelctl" control start
		if [ $? -ne 0 ]; then
			write_log_message "ERROR: failed to start agent after upgrade." 1
			exit 109
		fi
	fi
}

post_upgrade() {
	read_configs "config_file" "${installation_persistent_configuration}"

	create_cgroups
	set_permissions
	disable_account_login
	register_service
	add_ctl_to_path
	remove_old_crash_dumps
	fix_root_owner

	if [ "rpm" == "deb" ]; then
		start_agent_if_needed
	fi

	write_log_message "Upgrade finished successfully"
}

post_transaction() {
	enforce_symlink_creation "$s1_agent_custom_install_path"

	start_agent_if_needed
}

enforce_symlink_creation() {
	custom_install_path="$1"
	if [ "${custom_install_path}" == "undefined" ]; then
		return
	fi

	if [[ -h "$agent_directory" || -d "$agent_directory" ]]; then
		return
	fi

	shopt -s extglob
	stripped_install_path="${custom_install_path%%+(/)}"

	if [[ ! -d "$stripped_install_path" ]]; then
		write_log_message "Failed creating symlink: custom install path does not exist '$stripped_install_path'" 1
		return
	fi

	ln -s "${stripped_install_path}" "$agent_directory"
	write_log_message "Symlink re-created from $agent_directory to ${stripped_install_path}"

	chown -h "${user_name}:${user_name}" "$agent_directory"
}

set_permissions() {
	write_log_message "Setting permissions"
	chown -R -L "${user_name}":"${group_name}" "${agent_directory}"
	write_log_message "Permissions set successfully"
}

enable_crash_dumps() {
	write_log_message "Enable crash dumps functionality"

	chown -R root:"${group_name}" "${binaries_directory}"
	assert "chown"

	chmod g+r+x "${binaries_directory}"
	assert "chmod"

	chmod g+r "${binaries_directory}/${agent_binary}"
	assert "chmod"

	write_log_message "crash dumps enabled"
}

fix_root_owner() {
	write_log_message "Fixing files to root"
	
	for ((i = 0; i<${#root_files_folders[@]}; i++)); do
		chown -R root:root "${agent_directory}/${root_files_folders[$i]}"
		assert "chown"
	done

	enable_crash_dumps

	write_log_message "Done fixing files to root"
}

disable_account_login() {
	write_log_message "Disabling ${user_name} account login"

	for ((i = 0; i<${#shell_rc_files[@]}; i++)); do
		rm -f "${home_directory}/${shell_rc_files[$i]}"
		assert "rm" 102

		ln -s "${home_directory}/login.sh" "${home_directory}/${shell_rc_files[$i]}"
		assert "ln" 102
	done

	write_log_message "${user_name} account login disabled successfully"
}

is_dir_in_path() {
	echo "$PATH" | grep "$1" > /dev/null
	if [ "$?" = "0" ]; then
		echo y
	else
		echo n
	fi
}

add_ctl_to_path() {
	write_log_message "Adding SentinelCTL to \$PATH..."

	if [ -d "/usr/local/bin" ] && [ "$(is_dir_in_path "/usr/local/bin")" = "y" ]; then
		rm -f /usr/local/bin/sentinelctl
		ln -s "${binaries_directory}/sentinelctl" /usr/local/bin/sentinelctl
	elif [ -d "/usr/bin" ] && [ "$(is_dir_in_path "/usr/bin")" = "y" ]; then
		rm -f /usr/bin/sentinelctl
		ln -s "${binaries_directory}/sentinelctl" /usr/bin/sentinelctl
	elif [ -d "/bin" ] && [ "$(is_dir_in_path "/bin")" = "y" ]; then
		rm -f /bin/sentinelctl
		ln -s "${binaries_directory}/sentinelctl" /bin/sentinelctl
	fi

	write_log_message "SentinelCTL added to \$PATH successfully"
}

validate_desktop() {
	if [ -f "/etc/os-release" ]; then
		if grep -q -i "desktop" "/etc/os-release"; then
			write_log_message "Detected desktop machine, setting correct type"
			"${binaries_directory}"/sentinelctl management type set desktop	> /dev/null 2>&1
		fi

		if grep -q -i "workstation" "/etc/os-release"; then
			write_log_message "Detected workstation machine, setting correct type"
			"${binaries_directory}"/sentinelctl management type set desktop	> /dev/null 2>&1
		fi
	fi
}

remove_old_agent() {
	if [ -d "${old_agent_path}" ]; then
		write_log_message "Removing old agent leftovers"
		rm -rf "${old_agent_path}"
	fi
}

remove_old_crash_dumps() {
	if [ -d "${crash_dumps_directory}" ]; then
		write_log_message "Removing old crash dumps"
		rm -f ${current_crash_dumps_directory}/* > /dev/null 2>&1
		rm -f ${crash_dumps_directory}/* > /dev/null 2>&1
	fi
}

if [ "${1}" -eq 1 ]
then
    current_log_path=("${installation_log_path}")
    post_install
elif [ "${1}" -gt 1 ]
then
    current_log_path=("${installation_log_path}" "${installation_log_final_path}")
    post_upgrade
fi

# Code that will run before uninstall
preuninstall scriptlet (using /bin/sh):
#!/bin/bash
umask 0022
sentinel_name="sentinelone"
group_name="${sentinel_name}"
user_name="${group_name}"

legacy_group_name="sentinel"
legacy_user_name="sentinel"

agent_directory="/opt/sentinelone"
libraries_directory=${agent_directory}/lib
binaries_directory=${agent_directory}/bin
home_directory=${agent_directory}/home
configuration_directory=${agent_directory}/configuration
assets_directory=${agent_directory}/assets
log_directory=${agent_directory}/log
crash_dumps_directory=${agent_directory}/crash_dumps
current_crash_dumps_directory=${crash_dumps_directory}/.current
cgroups_directory=${agent_directory}/cgroups
agent_ctl=${binaries_directory}/sentinelctl

old_agent_path="/usr/local/sentinelagent"

agent_binary="sentinelone-agent"
ctl_binary="sentinelctl"
watchdog_binary="sentinelone-watchdog"

top_directories=("${agent_directory}" "${libraries_directory}" "${binaries_directory}" "${configuration_directory}" "${assets_directory}" "${log_directory}" "${home_directory}" "${cgroups_directory}")

groups_file="/etc/group"
users_file="/etc/passwd"

uninstallation_log_path="/tmp/sentinel_uninstall.log"
installation_log_path="/tmp/sentinel_install.log"
stopped_agent_file="/tmp/sentinel_should_start_after_upgrade"

installation_log_final_path=${log_directory}/install.log

sysvinit_daemon="sentineld"
sysvinit_initd_directory="/etc/init.d/"
systemd_service_unit="sentinelone.service"
systemd_service_directory="/lib/systemd/system/"

default_no_login_location="/usr/sbin/nologin"

rpm_public_key_id="bf000751"

installation_persistent_configuration=${configuration_directory}/install_config
installation_persistent_configuration_post_uninst="/tmp/install_config"

s1_agent_management_proxy="undefined"
s1_agent_management_url="undefined"
s1_agent_dv_proxy="undefined"
s1_agent_management_token="undefined"
s1_agent_device_type="undefined"
s1_agent_auto_start="undefined"
s1_agent_customer_id="undefined"
s1_agent_package_was_repacked="undefined"
s1_agent_create_user="undefined"
s1_agent_custom_install_path="undefined"
s1_agent_should_register_service="undefined"

current_log_path=("${uninstallation_log_path}")
write_log_message() {
	should_echo=${2:-0}
	current_date=$(date +"%d-%m-%y %R:%S.%3N")

	if [ "${should_echo}" -ne "0" ]; then
		echo "$1"
	fi
	
	for log_file in "${current_log_path[@]}"; do
		echo "[${current_date}] $1" >> ${log_file}
	done
}

log_if_failed() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "WARNING: Command '${1}' failed, rc: ${rc}"
	fi
}

assert() {
	rc=$?
	code=${2:-101}
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: Command '${1}' failed, rc: ${rc}" 1
		exit ${code}
	fi
}

expect_true() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: '${1}' failed, rc: ${rc}"
	fi

	return ${rc}
}

is_agent_running() {
	"${binaries_directory}/sentinelctl" control status > /dev/null 2>&1
}

get_systemd_folder() {
	possible_systemd_paths=("/lib/systemd/system/" "/usr/lib/systemd/system/")
	for path in ${possible_systemd_paths[@]}; do
		if [ -d "$path" ]; then
			systemd_service_directory=$path
		fi
	done
}

try_unregister_systemd() {
	systemctl > /dev/null 2>&1 || return $?
	
	write_log_message "Disabling ${systemd_service_unit} service"
	systemctl disable "${systemd_service_unit}" > /dev/null 2>&1
	expect_true "systemctl disable" || return $?

	unit_file_path="$(cut -d "=" -f2 <<< $(systemctl show -p FragmentPath ${systemd_service_unit}))"
	rm -f "${unit_file_path}"
	assert "rm" 103
}

unregister_service() {
	write_log_message "Unregistering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		:
	elif try_unregister_systemd; then
		:
	elif command -v update-rc.d > /dev/null 2>&1; then
		update-rc.d -f "${sysvinit_daemon}" remove
		assert "update-rc.d" 103
	elif command -v chkconfig > /dev/null 2>&1; then
		:
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	if [ -f "${sysvinit_initd_directory}/${sysvinit_daemon}" ]; then
		rm -f "${sysvinit_initd_directory}/${sysvinit_daemon}"
		assert "rm" 103
	fi

	write_log_message "Agent service unregistered successfully"
}

validate_agent_stopped() {

	if is_agent_running; then
		write_log_message "Agent is not stopped. Please use 'sentinelctl' directly to uninstall/upgrade." 1
		exit 104
	fi
}

try_stopping_agent() {
	if is_agent_running; then
		write_log_message "Trying to stop agent ..."
		"${binaries_directory}/sentinelctl" control stop --passphrase dummy > /dev/null 2>&1
		if [ $? -ne 0 ]; then
			write_log_message "ERROR: failed to stop agent." 1
			exit 101
		fi
		write_log_message "stopped agent."
		if [[ $# -eq 1 && $1 == mark_agent_stopped ]]; then
			touch ${stopped_agent_file} 2> /dev/null
			if [ $? -ne 0 ]; then
				write_log_message "ERROR: failed to create ${stopped_agent_file}." 1
				"${binaries_directory}/sentinelctl" control start > /dev/null 2>&1
				exit 101
			fi
			write_log_message "Created ${stopped_agent_file} file."
		fi
	fi
}

try_running_pre_uninstall_command() {
	write_log_message "Trying to run pre-uninstall command ..."
	"${binaries_directory}/sentinelctl" control pre-uninstall > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		write_log_message "ERROR: failed to run pre-uninstall command." 1
		return
	fi
	write_log_message "Finished running pre-uninstall command"
}

try_register_systemd() {
	[ -d "/run/systemd/system/" ] || return $?

	get_systemd_folder
	write_log_message "systemctl was found, enabling service file"
	cp "${configuration_directory}/${systemd_service_unit}" "${systemd_service_directory}"
	expect_true "cp ${configuration_directory}/${systemd_service_unit}" || return $?
	systemctl enable "${systemd_service_unit}" > /dev/null 2>&1
	if [ $? -ne 0 ]; then
	    write_log_message "ERROR: systemctl enable failed"
	    rm -f "${systemd_service_directory}/${systemd_service_unit}"
	    return 1
	fi
}

register_service() {
	write_log_message "Registering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		service_type="sysvinit"
	elif try_register_systemd; then
		service_type="systemd"
	elif command -v update-rc.d > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "update-rc.d was found, enabling service file" 1
		update-rc.d "${sysvinit_daemon}" defaults
		assert "update-rc.d" 103
		service_type="sysvinit"
	elif command -v chkconfig > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "chkconfig was found, ${sysvinit_daemon} service was added" 1
		chkconfig --add "${sysvinit_daemon}"
		assert "chkconfig" 103
		service_type="sysvinit"
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	"${binaries_directory}/sentinelctl" control set-service-type ${service_type}
	assert "set service type" 103

	write_log_message "Agent service registered successfully"
}

remove_kprobes() {
    kprobe_names=(
                  "s1chdirenter"
                  "s1dsoenter"
                  "s1fcreate"
                  "s1unlinkenter"
                  "s1unlinkatenter"
                  "s1dounlinkatenter"
                  "s1dounlinkatexit"
                  "s1renameenter"
                  "s1renameatenter"
                  "s1renameat2enter"
                  "s1dorenameat2enter"
                  "s1dorenameat2exit"
                  "s1execve_enter"
                  "s1execve_exit"
                  "s1compatexecve_enter"
                  "s1compatexecve_exit"
                  "s1_tcp_connect_enter"
                  "s1_tcp_connect_exit"
                  "s1_inet_csk_accept_exit"
                  "s1_inet_bind_enter"
                  "s1_inet_bind_exit"
                  "s1chmodenter"
                  "s1fchmodatenter"
                  "s1dofchmodatenter"
                  "s1dofchmodatexit"
                  "s1umount_exit"
                  "s1dofilpopen_enter"
                  "s1readdir_enter"
                  "s1dofilpopen_exit"
                  "s1dsoexit"
                  "s1pivotroot_enter"
                  "s1mount_exit"
                  "s1readdir_exit"
                  "s1pivotroot_exit"
                  "s1imafilefree"
                  "s1fchdir_enter"
                  "s1mount_enter"
                  "s1doaddmount_enter"
                  "s1umount_enter"
                  )
	tracefs_path="${agent_directory}/mount"

	fs_type="$(cat /proc/self/mounts | grep sentitrace | cut -d' ' -f3)"
	if [ -z "$fs_type" ]; then
		write_log_message "Could not find mountpoint, not removing kprobes"
		return
	elif [ "$fs_type" == "debugfs" ]; then
		tracefs_path="$tracefs_path/tracing"
	fi

	write_log_message "Disabling kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo 0 > "$current_path/enable"
	done

	write_log_message "Removing kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo "-:$kprobe" > "$tracefs_path/kprobe_events" 2>/dev/null
	done

	write_log_message "Kprobes removed successfully"
}

cgroup_types=(
			  "memory"
			 )

remove_cgroups() {
	sentinel_cgroups=("agent" "perf")

	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		cgroups_directory="${s1_agent_custom_install_path}/cgroups"
	fi

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_base="${cgroups_directory}/$cgroup_type"

		if [ -d "$cgroup_type_base" ]; then
			for cgroup_name in ${sentinel_cgroups[@]}; do
				cgroup_name_dir="$cgroup_type_base/$cgroup_name"
				if [ -d "$cgroup_name_dir" ]; then
					rmdir "$cgroup_name_dir"
				fi
			done

			umount "$cgroup_type_base" >/dev/null 2>/dev/null
			rmdir "$cgroup_type_base"
		fi
	done

    umount "$cgroups_directory" >/dev/null 2>/dev/null
}

create_cgroups() {
	remove_cgroups

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_dir="${cgroups_directory}/$cgroup_type"
		if [ ! -d "$cgroup_type_dir" ]; then
			mkdir "$cgroup_type_dir"
			assert mkdir
		fi
	done
}

assert_user_access() {
	su $1 -s /bin/sh -c "exit 0" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Warning: can't verify user $1 is accessible to $2" 1
		return
	fi

	su $1 -s /bin/sh -c "ls $2" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Error: user $1 can not access path $2" 1
		exit 110
	fi
}

read_env_var() {
	ret_value="undefined"
	if [[ $# -ne 1 ]] ; then
		write_log_message "Invalid number of parameters, read_env_var got $# expected 1"
		return
	fi
	env_var_name=${1}
	s1_var="${!env_var_name}"

	if [[ ! -z ${s1_var} ]]; then
		ret_value="${s1_var}"
	fi
}

read_config_from_file() {
	ret_value="undefined"
	if [[ $# -ne 2 ]] ; then
		write_log_message "Invalid number of parameters, read_config_from_file got $# expected 2"
		return
	fi
	if [[ -f "${2}" ]]; then
		result=$(grep "${1}" "${2}")

		value=$(echo "$result" | tail -1 | cut -d= -f2-)
		if [[ $value != "" ]]; then
			ret_value=$value
		else
			write_log_message "$1 is not defined in config file or defined with bad format."
		fi
	else
		write_log_message "Couldn't find config file"
	fi
}



read_configs(){
	if [[ $# -ne 2 && $# -ne 1 ]]; then
		write_log_message "Invalid number of parameters, read_configs got $# expected 1 or 2"
		return
	fi
	if [[ "${1}" == "config_file" ]]; then
		if [[ $# -ne 2 ]] ; then
			write_log_message "Invalid number of parameters, read_configs missing <config file path> parameter"
			return
		fi
		read_config_from_file "S1_AGENT_MANAGEMENT_PROXY" "${2}"
		s1_agent_management_proxy=$ret_value
		read_config_from_file "S1_AGENT_DV_PROXY" "${2}"
		s1_agent_dv_proxy=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_URL" "${2}"
		s1_agent_management_url=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_TOKEN" "${2}"
		s1_agent_management_token=$ret_value
		read_config_from_file "S1_AGENT_DEVICE_TYPE" "${2}"
		s1_agent_device_type=$ret_value
		read_config_from_file "S1_AGENT_AUTO_START" "${2}"
		s1_agent_auto_start=$ret_value
		read_config_from_file "S1_AGENT_CUSTOMER_ID" "${2}"
		s1_agent_customer_id=$ret_value
		read_config_from_file "S1_AGENT_CREATE_USER" "${2}"
		s1_agent_create_user=$ret_value
		read_config_from_file "S1_AGENT_CUSTOM_INSTALL_PATH" "${2}"
		s1_agent_custom_install_path=$ret_value
		read_config_from_file "S1_AGENT_SHOULD_REGISTER_SERVICE" "${2}"
		s1_agent_should_register_service=$ret_value
	else
		read_env_var "S1_AGENT_MANAGEMENT_PROXY"
		s1_agent_management_proxy=$ret_value
		read_env_var "S1_AGENT_DV_PROXY"
		s1_agent_dv_proxy=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_URL"
		s1_agent_management_url=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_TOKEN"
		s1_agent_management_token=$ret_value
		read_env_var "S1_AGENT_DEVICE_TYPE"
		s1_agent_device_type=$ret_value
		read_env_var "S1_AGENT_AUTO_START"
		s1_agent_auto_start=$ret_value
		read_env_var "S1_AGENT_CUSTOMER_ID"
		s1_agent_customer_id=$ret_value
		read_env_var "S1_AGENT_CREATE_USER"
		s1_agent_create_user=$ret_value
		read_env_var "S1_AGENT_CUSTOM_INSTALL_PATH"
		s1_agent_custom_install_path=$ret_value
		read_env_var "S1_AGENT_SHOULD_REGISTER_SERVICE"
		s1_agent_should_register_service=$ret_value
	fi

	s1_agent_auto_start=$(echo -n "$s1_agent_auto_start" | tr -d '[:space:]')
	s1_agent_should_register_service=$(echo -n "$s1_agent_should_register_service" | tr -d '[:space:]')
}

__read_configs()
{
	if [[ "${s1_agent_package_was_repacked}" == "true" ]]; then
		write_log_message "Agent package was repacked."

	elif [[ ! -z "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
		if  [[ -f "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
			write_log_message "Read from config file ${S1_AGENT_INSTALL_CONFIG_PATH}"
			read_configs "config_file" "${S1_AGENT_INSTALL_CONFIG_PATH}"
		else
			write_log_message "Couldn't find config file at ${S1_AGENT_INSTALL_CONFIG_PATH}"
		fi
	else
		write_log_message "Read from environment variables."
		read_configs "env_var"
	fi
}

write_config_to_file () {
	if [[ $# -ne 3 ]]; then
		write_log_message "Invalid number of parameters, write_configs_to_file got $# expected 3"
		return
	fi

	if [[ "${1}" != "undefined" && "${1}" != "" ]]; then
		echo "${2}=${1}" >> ${3}
	fi
}

write_configs (){
	echo "" > ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_proxy} "S1_AGENT_MANAGEMENT_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_dv_proxy} "S1_AGENT_DV_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_url} "S1_AGENT_MANAGEMENT_URL" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_token} "S1_AGENT_MANAGEMENT_TOKEN" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_device_type} "S1_AGENT_DEVICE_TYPE" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_auto_start} "S1_AGENT_AUTO_START" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_customer_id} "S1_AGENT_CUSTOMER_ID" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_create_user} "S1_AGENT_CREATE_USER" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_custom_install_path} "S1_AGENT_CUSTOM_INSTALL_PATH" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_should_register_service} "S1_AGENT_SHOULD_REGISTER_SERVICE" ${installation_persistent_configuration}
}

pre_uninstall() {
	write_log_message "Pre-uninstallation validation started"

    cp "${installation_persistent_configuration}" "${installation_persistent_configuration_post_uninst}"

    try_stopping_agent
    try_running_pre_uninstall_command

    write_log_message "Pre-uninstallation validation finished successfully"
}

if [ "${1}" -eq 0 ]
then
    pre_uninstall
fi

# Code that will run after uninstall
postuninstall scriptlet (using /bin/sh):
#!/bin/bash
umask 0022
sentinel_name="sentinelone"
group_name="${sentinel_name}"
user_name="${group_name}"

legacy_group_name="sentinel"
legacy_user_name="sentinel"

agent_directory="/opt/sentinelone"
libraries_directory=${agent_directory}/lib
binaries_directory=${agent_directory}/bin
home_directory=${agent_directory}/home
configuration_directory=${agent_directory}/configuration
assets_directory=${agent_directory}/assets
log_directory=${agent_directory}/log
crash_dumps_directory=${agent_directory}/crash_dumps
current_crash_dumps_directory=${crash_dumps_directory}/.current
cgroups_directory=${agent_directory}/cgroups
agent_ctl=${binaries_directory}/sentinelctl

old_agent_path="/usr/local/sentinelagent"

agent_binary="sentinelone-agent"
ctl_binary="sentinelctl"
watchdog_binary="sentinelone-watchdog"

top_directories=("${agent_directory}" "${libraries_directory}" "${binaries_directory}" "${configuration_directory}" "${assets_directory}" "${log_directory}" "${home_directory}" "${cgroups_directory}")

groups_file="/etc/group"
users_file="/etc/passwd"

uninstallation_log_path="/tmp/sentinel_uninstall.log"
installation_log_path="/tmp/sentinel_install.log"
stopped_agent_file="/tmp/sentinel_should_start_after_upgrade"

installation_log_final_path=${log_directory}/install.log

sysvinit_daemon="sentineld"
sysvinit_initd_directory="/etc/init.d/"
systemd_service_unit="sentinelone.service"
systemd_service_directory="/lib/systemd/system/"

default_no_login_location="/usr/sbin/nologin"

rpm_public_key_id="bf000751"

installation_persistent_configuration=${configuration_directory}/install_config
installation_persistent_configuration_post_uninst="/tmp/install_config"

s1_agent_management_proxy="undefined"
s1_agent_management_url="undefined"
s1_agent_dv_proxy="undefined"
s1_agent_management_token="undefined"
s1_agent_device_type="undefined"
s1_agent_auto_start="undefined"
s1_agent_customer_id="undefined"
s1_agent_package_was_repacked="undefined"
s1_agent_create_user="undefined"
s1_agent_custom_install_path="undefined"
s1_agent_should_register_service="undefined"

current_log_path=("${uninstallation_log_path}")
write_log_message() {
	should_echo=${2:-0}
	current_date=$(date +"%d-%m-%y %R:%S.%3N")

	if [ "${should_echo}" -ne "0" ]; then
		echo "$1"
	fi
	
	for log_file in "${current_log_path[@]}"; do
		echo "[${current_date}] $1" >> ${log_file}
	done
}

log_if_failed() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "WARNING: Command '${1}' failed, rc: ${rc}"
	fi
}

assert() {
	rc=$?
	code=${2:-101}
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: Command '${1}' failed, rc: ${rc}" 1
		exit ${code}
	fi
}

expect_true() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: '${1}' failed, rc: ${rc}"
	fi

	return ${rc}
}

is_agent_running() {
	"${binaries_directory}/sentinelctl" control status > /dev/null 2>&1
}

get_systemd_folder() {
	possible_systemd_paths=("/lib/systemd/system/" "/usr/lib/systemd/system/")
	for path in ${possible_systemd_paths[@]}; do
		if [ -d "$path" ]; then
			systemd_service_directory=$path
		fi
	done
}

try_unregister_systemd() {
	systemctl > /dev/null 2>&1 || return $?
	
	write_log_message "Disabling ${systemd_service_unit} service"
	systemctl disable "${systemd_service_unit}" > /dev/null 2>&1
	expect_true "systemctl disable" || return $?

	unit_file_path="$(cut -d "=" -f2 <<< $(systemctl show -p FragmentPath ${systemd_service_unit}))"
	rm -f "${unit_file_path}"
	assert "rm" 103
}

unregister_service() {
	write_log_message "Unregistering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		:
	elif try_unregister_systemd; then
		:
	elif command -v update-rc.d > /dev/null 2>&1; then
		update-rc.d -f "${sysvinit_daemon}" remove
		assert "update-rc.d" 103
	elif command -v chkconfig > /dev/null 2>&1; then
		:
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	if [ -f "${sysvinit_initd_directory}/${sysvinit_daemon}" ]; then
		rm -f "${sysvinit_initd_directory}/${sysvinit_daemon}"
		assert "rm" 103
	fi

	write_log_message "Agent service unregistered successfully"
}

validate_agent_stopped() {

	if is_agent_running; then
		write_log_message "Agent is not stopped. Please use 'sentinelctl' directly to uninstall/upgrade." 1
		exit 104
	fi
}

try_stopping_agent() {
	if is_agent_running; then
		write_log_message "Trying to stop agent ..."
		"${binaries_directory}/sentinelctl" control stop --passphrase dummy > /dev/null 2>&1
		if [ $? -ne 0 ]; then
			write_log_message "ERROR: failed to stop agent." 1
			exit 101
		fi
		write_log_message "stopped agent."
		if [[ $# -eq 1 && $1 == mark_agent_stopped ]]; then
			touch ${stopped_agent_file} 2> /dev/null
			if [ $? -ne 0 ]; then
				write_log_message "ERROR: failed to create ${stopped_agent_file}." 1
				"${binaries_directory}/sentinelctl" control start > /dev/null 2>&1
				exit 101
			fi
			write_log_message "Created ${stopped_agent_file} file."
		fi
	fi
}

try_running_pre_uninstall_command() {
	write_log_message "Trying to run pre-uninstall command ..."
	"${binaries_directory}/sentinelctl" control pre-uninstall > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		write_log_message "ERROR: failed to run pre-uninstall command." 1
		return
	fi
	write_log_message "Finished running pre-uninstall command"
}

try_register_systemd() {
	[ -d "/run/systemd/system/" ] || return $?

	get_systemd_folder
	write_log_message "systemctl was found, enabling service file"
	cp "${configuration_directory}/${systemd_service_unit}" "${systemd_service_directory}"
	expect_true "cp ${configuration_directory}/${systemd_service_unit}" || return $?
	systemctl enable "${systemd_service_unit}" > /dev/null 2>&1
	if [ $? -ne 0 ]; then
	    write_log_message "ERROR: systemctl enable failed"
	    rm -f "${systemd_service_directory}/${systemd_service_unit}"
	    return 1
	fi
}

register_service() {
	write_log_message "Registering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		service_type="sysvinit"
	elif try_register_systemd; then
		service_type="systemd"
	elif command -v update-rc.d > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "update-rc.d was found, enabling service file" 1
		update-rc.d "${sysvinit_daemon}" defaults
		assert "update-rc.d" 103
		service_type="sysvinit"
	elif command -v chkconfig > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "chkconfig was found, ${sysvinit_daemon} service was added" 1
		chkconfig --add "${sysvinit_daemon}"
		assert "chkconfig" 103
		service_type="sysvinit"
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	"${binaries_directory}/sentinelctl" control set-service-type ${service_type}
	assert "set service type" 103

	write_log_message "Agent service registered successfully"
}

remove_kprobes() {
    kprobe_names=(
                  "s1chdirenter"
                  "s1dsoenter"
                  "s1fcreate"
                  "s1unlinkenter"
                  "s1unlinkatenter"
                  "s1dounlinkatenter"
                  "s1dounlinkatexit"
                  "s1renameenter"
                  "s1renameatenter"
                  "s1renameat2enter"
                  "s1dorenameat2enter"
                  "s1dorenameat2exit"
                  "s1execve_enter"
                  "s1execve_exit"
                  "s1compatexecve_enter"
                  "s1compatexecve_exit"
                  "s1_tcp_connect_enter"
                  "s1_tcp_connect_exit"
                  "s1_inet_csk_accept_exit"
                  "s1_inet_bind_enter"
                  "s1_inet_bind_exit"
                  "s1chmodenter"
                  "s1fchmodatenter"
                  "s1dofchmodatenter"
                  "s1dofchmodatexit"
                  "s1umount_exit"
                  "s1dofilpopen_enter"
                  "s1readdir_enter"
                  "s1dofilpopen_exit"
                  "s1dsoexit"
                  "s1pivotroot_enter"
                  "s1mount_exit"
                  "s1readdir_exit"
                  "s1pivotroot_exit"
                  "s1imafilefree"
                  "s1fchdir_enter"
                  "s1mount_enter"
                  "s1doaddmount_enter"
                  "s1umount_enter"
                  )
	tracefs_path="${agent_directory}/mount"

	fs_type="$(cat /proc/self/mounts | grep sentitrace | cut -d' ' -f3)"
	if [ -z "$fs_type" ]; then
		write_log_message "Could not find mountpoint, not removing kprobes"
		return
	elif [ "$fs_type" == "debugfs" ]; then
		tracefs_path="$tracefs_path/tracing"
	fi

	write_log_message "Disabling kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo 0 > "$current_path/enable"
	done

	write_log_message "Removing kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo "-:$kprobe" > "$tracefs_path/kprobe_events" 2>/dev/null
	done

	write_log_message "Kprobes removed successfully"
}

cgroup_types=(
			  "memory"
			 )

remove_cgroups() {
	sentinel_cgroups=("agent" "perf")

	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		cgroups_directory="${s1_agent_custom_install_path}/cgroups"
	fi

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_base="${cgroups_directory}/$cgroup_type"

		if [ -d "$cgroup_type_base" ]; then
			for cgroup_name in ${sentinel_cgroups[@]}; do
				cgroup_name_dir="$cgroup_type_base/$cgroup_name"
				if [ -d "$cgroup_name_dir" ]; then
					rmdir "$cgroup_name_dir"
				fi
			done

			umount "$cgroup_type_base" >/dev/null 2>/dev/null
			rmdir "$cgroup_type_base"
		fi
	done

    umount "$cgroups_directory" >/dev/null 2>/dev/null
}

create_cgroups() {
	remove_cgroups

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_dir="${cgroups_directory}/$cgroup_type"
		if [ ! -d "$cgroup_type_dir" ]; then
			mkdir "$cgroup_type_dir"
			assert mkdir
		fi
	done
}

assert_user_access() {
	su $1 -s /bin/sh -c "exit 0" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Warning: can't verify user $1 is accessible to $2" 1
		return
	fi

	su $1 -s /bin/sh -c "ls $2" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Error: user $1 can not access path $2" 1
		exit 110
	fi
}

read_env_var() {
	ret_value="undefined"
	if [[ $# -ne 1 ]] ; then
		write_log_message "Invalid number of parameters, read_env_var got $# expected 1"
		return
	fi
	env_var_name=${1}
	s1_var="${!env_var_name}"

	if [[ ! -z ${s1_var} ]]; then
		ret_value="${s1_var}"
	fi
}

read_config_from_file() {
	ret_value="undefined"
	if [[ $# -ne 2 ]] ; then
		write_log_message "Invalid number of parameters, read_config_from_file got $# expected 2"
		return
	fi
	if [[ -f "${2}" ]]; then
		result=$(grep "${1}" "${2}")

		value=$(echo "$result" | tail -1 | cut -d= -f2-)
		if [[ $value != "" ]]; then
			ret_value=$value
		else
			write_log_message "$1 is not defined in config file or defined with bad format."
		fi
	else
		write_log_message "Couldn't find config file"
	fi
}



read_configs(){
	if [[ $# -ne 2 && $# -ne 1 ]]; then
		write_log_message "Invalid number of parameters, read_configs got $# expected 1 or 2"
		return
	fi
	if [[ "${1}" == "config_file" ]]; then
		if [[ $# -ne 2 ]] ; then
			write_log_message "Invalid number of parameters, read_configs missing <config file path> parameter"
			return
		fi
		read_config_from_file "S1_AGENT_MANAGEMENT_PROXY" "${2}"
		s1_agent_management_proxy=$ret_value
		read_config_from_file "S1_AGENT_DV_PROXY" "${2}"
		s1_agent_dv_proxy=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_URL" "${2}"
		s1_agent_management_url=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_TOKEN" "${2}"
		s1_agent_management_token=$ret_value
		read_config_from_file "S1_AGENT_DEVICE_TYPE" "${2}"
		s1_agent_device_type=$ret_value
		read_config_from_file "S1_AGENT_AUTO_START" "${2}"
		s1_agent_auto_start=$ret_value
		read_config_from_file "S1_AGENT_CUSTOMER_ID" "${2}"
		s1_agent_customer_id=$ret_value
		read_config_from_file "S1_AGENT_CREATE_USER" "${2}"
		s1_agent_create_user=$ret_value
		read_config_from_file "S1_AGENT_CUSTOM_INSTALL_PATH" "${2}"
		s1_agent_custom_install_path=$ret_value
		read_config_from_file "S1_AGENT_SHOULD_REGISTER_SERVICE" "${2}"
		s1_agent_should_register_service=$ret_value
	else
		read_env_var "S1_AGENT_MANAGEMENT_PROXY"
		s1_agent_management_proxy=$ret_value
		read_env_var "S1_AGENT_DV_PROXY"
		s1_agent_dv_proxy=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_URL"
		s1_agent_management_url=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_TOKEN"
		s1_agent_management_token=$ret_value
		read_env_var "S1_AGENT_DEVICE_TYPE"
		s1_agent_device_type=$ret_value
		read_env_var "S1_AGENT_AUTO_START"
		s1_agent_auto_start=$ret_value
		read_env_var "S1_AGENT_CUSTOMER_ID"
		s1_agent_customer_id=$ret_value
		read_env_var "S1_AGENT_CREATE_USER"
		s1_agent_create_user=$ret_value
		read_env_var "S1_AGENT_CUSTOM_INSTALL_PATH"
		s1_agent_custom_install_path=$ret_value
		read_env_var "S1_AGENT_SHOULD_REGISTER_SERVICE"
		s1_agent_should_register_service=$ret_value
	fi

	s1_agent_auto_start=$(echo -n "$s1_agent_auto_start" | tr -d '[:space:]')
	s1_agent_should_register_service=$(echo -n "$s1_agent_should_register_service" | tr -d '[:space:]')
}

__read_configs()
{
	if [[ "${s1_agent_package_was_repacked}" == "true" ]]; then
		write_log_message "Agent package was repacked."

	elif [[ ! -z "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
		if  [[ -f "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
			write_log_message "Read from config file ${S1_AGENT_INSTALL_CONFIG_PATH}"
			read_configs "config_file" "${S1_AGENT_INSTALL_CONFIG_PATH}"
		else
			write_log_message "Couldn't find config file at ${S1_AGENT_INSTALL_CONFIG_PATH}"
		fi
	else
		write_log_message "Read from environment variables."
		read_configs "env_var"
	fi
}

write_config_to_file () {
	if [[ $# -ne 3 ]]; then
		write_log_message "Invalid number of parameters, write_configs_to_file got $# expected 3"
		return
	fi

	if [[ "${1}" != "undefined" && "${1}" != "" ]]; then
		echo "${2}=${1}" >> ${3}
	fi
}

write_configs (){
	echo "" > ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_proxy} "S1_AGENT_MANAGEMENT_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_dv_proxy} "S1_AGENT_DV_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_url} "S1_AGENT_MANAGEMENT_URL" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_token} "S1_AGENT_MANAGEMENT_TOKEN" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_device_type} "S1_AGENT_DEVICE_TYPE" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_auto_start} "S1_AGENT_AUTO_START" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_customer_id} "S1_AGENT_CUSTOMER_ID" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_create_user} "S1_AGENT_CREATE_USER" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_custom_install_path} "S1_AGENT_CUSTOM_INSTALL_PATH" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_should_register_service} "S1_AGENT_SHOULD_REGISTER_SERVICE" ${installation_persistent_configuration}
}


export PATH="/sbin:/bin:/usr/sbin:/usr/bin"

post_uninstall() {
    write_log_message "Starting uninstallation"

	read_configs "config_file" "${installation_persistent_configuration_post_uninst}"


	unregister_service
	remove_kprobes
	umount_mountpoint
	umount_rpm

	remove_cgroups
	remove_files
	remove_user
	remove_ctl_from_path

	write_log_message "Uninstallation finished successfully"
}

remove_files() {
	write_log_message "Removing files"
	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		write_log_message "Removing symlink at ${agent_directory}" 1
		rm -f "${agent_directory}"
		agent_directory="${s1_agent_custom_install_path}"
	fi
	write_log_message "Removing $agent_directory" 1
	rm -rf "${agent_directory}"

	write_log_message "Files removed successfully"
}

remove_user() {

	if [ "${s1_agent_create_user}" == "false" ]; then
		return
	fi

	write_log_message "Removing user ${user_name}"

	if grep -q "^${user_name}:" "${users_file}"; then
		userdel "${user_name}"
		assert "userdel"
	else
		write_log_message "WARNING: User removal failed: user ${user_name} does not exist" 1
	fi

	write_log_message "User ${user_name} removed successfully"
	write_log_message "Removing group ${group_name}"

	if grep -q "^${group_name}:" "${groups_file}"; then
		groupdel "${group_name}"
		assert "groupdel"
	fi

	write_log_message "Group ${group_name} removed successfully"
}

remove_ctl_from_path() {
	if [ -L "/usr/local/bin/sentinelctl" ]; then
		rm -f /usr/local/bin/sentinelctl
	fi

	if [ -L "/usr/bin/sentinelctl" ]; then
		rm -f /usr/bin/sentinelctl
	fi

	if [ -L "/bin/sentinelctl" ]; then
		rm -f /bin/sentinelctl
	fi
}

umount_mountpoint() {
	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		mount_dir="${s1_agent_custom_install_path}/mount"
	else
		mount_dir="${agent_directory}/mount"
	fi
	write_log_message "unmount at ${mount_dir}" 1
	umount "${mount_dir}" >/dev/null 2>/dev/null
	log_if_failed "umount ${mount_dir}"
}

umount_rpm() {
	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		mount_dir="${s1_agent_custom_install_path}/rpm_mount"
	else
		mount_dir="${agent_directory}/rpm_mount"
	fi
	write_log_message "unmount at ${mount_dir}" 1
	umount "${mount_dir}" >/dev/null 2>/dev/null
	log_if_failed "umount ${mount_dir}"
}

if [ "${1}" -eq 0 ]
then
    post_uninstall
fi

# Code that will run after rpm transactions
posttrans scriptlet (using /bin/sh):
#!/bin/bash
umask 0022
sentinel_name="sentinelone"
group_name="${sentinel_name}"
user_name="${group_name}"

legacy_group_name="sentinel"
legacy_user_name="sentinel"

agent_directory="/opt/sentinelone"
libraries_directory=${agent_directory}/lib
binaries_directory=${agent_directory}/bin
home_directory=${agent_directory}/home
configuration_directory=${agent_directory}/configuration
assets_directory=${agent_directory}/assets
log_directory=${agent_directory}/log
crash_dumps_directory=${agent_directory}/crash_dumps
current_crash_dumps_directory=${crash_dumps_directory}/.current
cgroups_directory=${agent_directory}/cgroups
agent_ctl=${binaries_directory}/sentinelctl

old_agent_path="/usr/local/sentinelagent"

agent_binary="sentinelone-agent"
ctl_binary="sentinelctl"
watchdog_binary="sentinelone-watchdog"

top_directories=("${agent_directory}" "${libraries_directory}" "${binaries_directory}" "${configuration_directory}" "${assets_directory}" "${log_directory}" "${home_directory}" "${cgroups_directory}")

groups_file="/etc/group"
users_file="/etc/passwd"

uninstallation_log_path="/tmp/sentinel_uninstall.log"
installation_log_path="/tmp/sentinel_install.log"
stopped_agent_file="/tmp/sentinel_should_start_after_upgrade"

installation_log_final_path=${log_directory}/install.log

sysvinit_daemon="sentineld"
sysvinit_initd_directory="/etc/init.d/"
systemd_service_unit="sentinelone.service"
systemd_service_directory="/lib/systemd/system/"

default_no_login_location="/usr/sbin/nologin"

rpm_public_key_id="bf000751"

installation_persistent_configuration=${configuration_directory}/install_config
installation_persistent_configuration_post_uninst="/tmp/install_config"

s1_agent_management_proxy="undefined"
s1_agent_management_url="undefined"
s1_agent_dv_proxy="undefined"
s1_agent_management_token="undefined"
s1_agent_device_type="undefined"
s1_agent_auto_start="undefined"
s1_agent_customer_id="undefined"
s1_agent_package_was_repacked="undefined"
s1_agent_create_user="undefined"
s1_agent_custom_install_path="undefined"
s1_agent_should_register_service="undefined"

current_log_path=("${installation_log_path}" "${installation_log_final_path}")
write_log_message() {
	should_echo=${2:-0}
	current_date=$(date +"%d-%m-%y %R:%S.%3N")

	if [ "${should_echo}" -ne "0" ]; then
		echo "$1"
	fi
	
	for log_file in "${current_log_path[@]}"; do
		echo "[${current_date}] $1" >> ${log_file}
	done
}

log_if_failed() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "WARNING: Command '${1}' failed, rc: ${rc}"
	fi
}

assert() {
	rc=$?
	code=${2:-101}
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: Command '${1}' failed, rc: ${rc}" 1
		exit ${code}
	fi
}

expect_true() {
	rc=$?
	if [ ${rc} -ne 0 ]; then
		write_log_message "ERROR: '${1}' failed, rc: ${rc}"
	fi

	return ${rc}
}

is_agent_running() {
	"${binaries_directory}/sentinelctl" control status > /dev/null 2>&1
}

get_systemd_folder() {
	possible_systemd_paths=("/lib/systemd/system/" "/usr/lib/systemd/system/")
	for path in ${possible_systemd_paths[@]}; do
		if [ -d "$path" ]; then
			systemd_service_directory=$path
		fi
	done
}

try_unregister_systemd() {
	systemctl > /dev/null 2>&1 || return $?
	
	write_log_message "Disabling ${systemd_service_unit} service"
	systemctl disable "${systemd_service_unit}" > /dev/null 2>&1
	expect_true "systemctl disable" || return $?

	unit_file_path="$(cut -d "=" -f2 <<< $(systemctl show -p FragmentPath ${systemd_service_unit}))"
	rm -f "${unit_file_path}"
	assert "rm" 103
}

unregister_service() {
	write_log_message "Unregistering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		:
	elif try_unregister_systemd; then
		:
	elif command -v update-rc.d > /dev/null 2>&1; then
		update-rc.d -f "${sysvinit_daemon}" remove
		assert "update-rc.d" 103
	elif command -v chkconfig > /dev/null 2>&1; then
		:
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	if [ -f "${sysvinit_initd_directory}/${sysvinit_daemon}" ]; then
		rm -f "${sysvinit_initd_directory}/${sysvinit_daemon}"
		assert "rm" 103
	fi

	write_log_message "Agent service unregistered successfully"
}

validate_agent_stopped() {

	if is_agent_running; then
		write_log_message "Agent is not stopped. Please use 'sentinelctl' directly to uninstall/upgrade." 1
		exit 104
	fi
}

try_stopping_agent() {
	if is_agent_running; then
		write_log_message "Trying to stop agent ..."
		"${binaries_directory}/sentinelctl" control stop --passphrase dummy > /dev/null 2>&1
		if [ $? -ne 0 ]; then
			write_log_message "ERROR: failed to stop agent." 1
			exit 101
		fi
		write_log_message "stopped agent."
		if [[ $# -eq 1 && $1 == mark_agent_stopped ]]; then
			touch ${stopped_agent_file} 2> /dev/null
			if [ $? -ne 0 ]; then
				write_log_message "ERROR: failed to create ${stopped_agent_file}." 1
				"${binaries_directory}/sentinelctl" control start > /dev/null 2>&1
				exit 101
			fi
			write_log_message "Created ${stopped_agent_file} file."
		fi
	fi
}

try_running_pre_uninstall_command() {
	write_log_message "Trying to run pre-uninstall command ..."
	"${binaries_directory}/sentinelctl" control pre-uninstall > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		write_log_message "ERROR: failed to run pre-uninstall command." 1
		return
	fi
	write_log_message "Finished running pre-uninstall command"
}

try_register_systemd() {
	[ -d "/run/systemd/system/" ] || return $?

	get_systemd_folder
	write_log_message "systemctl was found, enabling service file"
	cp "${configuration_directory}/${systemd_service_unit}" "${systemd_service_directory}"
	expect_true "cp ${configuration_directory}/${systemd_service_unit}" || return $?
	systemctl enable "${systemd_service_unit}" > /dev/null 2>&1
	if [ $? -ne 0 ]; then
	    write_log_message "ERROR: systemctl enable failed"
	    rm -f "${systemd_service_directory}/${systemd_service_unit}"
	    return 1
	fi
}

register_service() {
	write_log_message "Registering agent service"

	if [[ "$s1_agent_should_register_service" == "false" ]]; then
		service_type="sysvinit"
	elif try_register_systemd; then
		service_type="systemd"
	elif command -v update-rc.d > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "update-rc.d was found, enabling service file" 1
		update-rc.d "${sysvinit_daemon}" defaults
		assert "update-rc.d" 103
		service_type="sysvinit"
	elif command -v chkconfig > /dev/null 2>&1; then
		cp "${configuration_directory}/${sysvinit_daemon}" "${sysvinit_initd_directory}"
		write_log_message "chkconfig was found, ${sysvinit_daemon} service was added" 1
		chkconfig --add "${sysvinit_daemon}"
		assert "chkconfig" 103
		service_type="sysvinit"
	else
		write_log_message "ERROR: Could not locate and execute update-rc.d or chkconfig" 1
		exit 103
	fi

	"${binaries_directory}/sentinelctl" control set-service-type ${service_type}
	assert "set service type" 103

	write_log_message "Agent service registered successfully"
}

remove_kprobes() {
    kprobe_names=(
                  "s1chdirenter"
                  "s1dsoenter"
                  "s1fcreate"
                  "s1unlinkenter"
                  "s1unlinkatenter"
                  "s1dounlinkatenter"
                  "s1dounlinkatexit"
                  "s1renameenter"
                  "s1renameatenter"
                  "s1renameat2enter"
                  "s1dorenameat2enter"
                  "s1dorenameat2exit"
                  "s1execve_enter"
                  "s1execve_exit"
                  "s1compatexecve_enter"
                  "s1compatexecve_exit"
                  "s1_tcp_connect_enter"
                  "s1_tcp_connect_exit"
                  "s1_inet_csk_accept_exit"
                  "s1_inet_bind_enter"
                  "s1_inet_bind_exit"
                  "s1chmodenter"
                  "s1fchmodatenter"
                  "s1dofchmodatenter"
                  "s1dofchmodatexit"
                  "s1umount_exit"
                  "s1dofilpopen_enter"
                  "s1readdir_enter"
                  "s1dofilpopen_exit"
                  "s1dsoexit"
                  "s1pivotroot_enter"
                  "s1mount_exit"
                  "s1readdir_exit"
                  "s1pivotroot_exit"
                  "s1imafilefree"
                  "s1fchdir_enter"
                  "s1mount_enter"
                  "s1doaddmount_enter"
                  "s1umount_enter"
                  )
	tracefs_path="${agent_directory}/mount"

	fs_type="$(cat /proc/self/mounts | grep sentitrace | cut -d' ' -f3)"
	if [ -z "$fs_type" ]; then
		write_log_message "Could not find mountpoint, not removing kprobes"
		return
	elif [ "$fs_type" == "debugfs" ]; then
		tracefs_path="$tracefs_path/tracing"
	fi

	write_log_message "Disabling kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo 0 > "$current_path/enable"
	done

	write_log_message "Removing kprobes"
	for kprobe in ${kprobe_names[@]}; do
		current_path="$tracefs_path/events/kprobes/$kprobe"
		if [ ! -d "$current_path" ]; then
			continue
		fi

		echo "-:$kprobe" > "$tracefs_path/kprobe_events" 2>/dev/null
	done

	write_log_message "Kprobes removed successfully"
}

cgroup_types=(
			  "memory"
			 )

remove_cgroups() {
	sentinel_cgroups=("agent" "perf")

	if [[ "$s1_agent_custom_install_path" != "undefined" ]]; then
		cgroups_directory="${s1_agent_custom_install_path}/cgroups"
	fi

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_base="${cgroups_directory}/$cgroup_type"

		if [ -d "$cgroup_type_base" ]; then
			for cgroup_name in ${sentinel_cgroups[@]}; do
				cgroup_name_dir="$cgroup_type_base/$cgroup_name"
				if [ -d "$cgroup_name_dir" ]; then
					rmdir "$cgroup_name_dir"
				fi
			done

			umount "$cgroup_type_base" >/dev/null 2>/dev/null
			rmdir "$cgroup_type_base"
		fi
	done

    umount "$cgroups_directory" >/dev/null 2>/dev/null
}

create_cgroups() {
	remove_cgroups

	for cgroup_type in ${cgroup_types[@]}; do
		cgroup_type_dir="${cgroups_directory}/$cgroup_type"
		if [ ! -d "$cgroup_type_dir" ]; then
			mkdir "$cgroup_type_dir"
			assert mkdir
		fi
	done
}

assert_user_access() {
	su $1 -s /bin/sh -c "exit 0" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Warning: can't verify user $1 is accessible to $2" 1
		return
	fi

	su $1 -s /bin/sh -c "ls $2" > /dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		write_log_message "Error: user $1 can not access path $2" 1
		exit 110
	fi
}

read_env_var() {
	ret_value="undefined"
	if [[ $# -ne 1 ]] ; then
		write_log_message "Invalid number of parameters, read_env_var got $# expected 1"
		return
	fi
	env_var_name=${1}
	s1_var="${!env_var_name}"

	if [[ ! -z ${s1_var} ]]; then
		ret_value="${s1_var}"
	fi
}

read_config_from_file() {
	ret_value="undefined"
	if [[ $# -ne 2 ]] ; then
		write_log_message "Invalid number of parameters, read_config_from_file got $# expected 2"
		return
	fi
	if [[ -f "${2}" ]]; then
		result=$(grep "${1}" "${2}")

		value=$(echo "$result" | tail -1 | cut -d= -f2-)
		if [[ $value != "" ]]; then
			ret_value=$value
		else
			write_log_message "$1 is not defined in config file or defined with bad format."
		fi
	else
		write_log_message "Couldn't find config file"
	fi
}



read_configs(){
	if [[ $# -ne 2 && $# -ne 1 ]]; then
		write_log_message "Invalid number of parameters, read_configs got $# expected 1 or 2"
		return
	fi
	if [[ "${1}" == "config_file" ]]; then
		if [[ $# -ne 2 ]] ; then
			write_log_message "Invalid number of parameters, read_configs missing <config file path> parameter"
			return
		fi
		read_config_from_file "S1_AGENT_MANAGEMENT_PROXY" "${2}"
		s1_agent_management_proxy=$ret_value
		read_config_from_file "S1_AGENT_DV_PROXY" "${2}"
		s1_agent_dv_proxy=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_URL" "${2}"
		s1_agent_management_url=$ret_value
		read_config_from_file "S1_AGENT_MANAGEMENT_TOKEN" "${2}"
		s1_agent_management_token=$ret_value
		read_config_from_file "S1_AGENT_DEVICE_TYPE" "${2}"
		s1_agent_device_type=$ret_value
		read_config_from_file "S1_AGENT_AUTO_START" "${2}"
		s1_agent_auto_start=$ret_value
		read_config_from_file "S1_AGENT_CUSTOMER_ID" "${2}"
		s1_agent_customer_id=$ret_value
		read_config_from_file "S1_AGENT_CREATE_USER" "${2}"
		s1_agent_create_user=$ret_value
		read_config_from_file "S1_AGENT_CUSTOM_INSTALL_PATH" "${2}"
		s1_agent_custom_install_path=$ret_value
		read_config_from_file "S1_AGENT_SHOULD_REGISTER_SERVICE" "${2}"
		s1_agent_should_register_service=$ret_value
	else
		read_env_var "S1_AGENT_MANAGEMENT_PROXY"
		s1_agent_management_proxy=$ret_value
		read_env_var "S1_AGENT_DV_PROXY"
		s1_agent_dv_proxy=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_URL"
		s1_agent_management_url=$ret_value
		read_env_var "S1_AGENT_MANAGEMENT_TOKEN"
		s1_agent_management_token=$ret_value
		read_env_var "S1_AGENT_DEVICE_TYPE"
		s1_agent_device_type=$ret_value
		read_env_var "S1_AGENT_AUTO_START"
		s1_agent_auto_start=$ret_value
		read_env_var "S1_AGENT_CUSTOMER_ID"
		s1_agent_customer_id=$ret_value
		read_env_var "S1_AGENT_CREATE_USER"
		s1_agent_create_user=$ret_value
		read_env_var "S1_AGENT_CUSTOM_INSTALL_PATH"
		s1_agent_custom_install_path=$ret_value
		read_env_var "S1_AGENT_SHOULD_REGISTER_SERVICE"
		s1_agent_should_register_service=$ret_value
	fi

	s1_agent_auto_start=$(echo -n "$s1_agent_auto_start" | tr -d '[:space:]')
	s1_agent_should_register_service=$(echo -n "$s1_agent_should_register_service" | tr -d '[:space:]')
}

__read_configs()
{
	if [[ "${s1_agent_package_was_repacked}" == "true" ]]; then
		write_log_message "Agent package was repacked."

	elif [[ ! -z "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
		if  [[ -f "${S1_AGENT_INSTALL_CONFIG_PATH}" ]]; then
			write_log_message "Read from config file ${S1_AGENT_INSTALL_CONFIG_PATH}"
			read_configs "config_file" "${S1_AGENT_INSTALL_CONFIG_PATH}"
		else
			write_log_message "Couldn't find config file at ${S1_AGENT_INSTALL_CONFIG_PATH}"
		fi
	else
		write_log_message "Read from environment variables."
		read_configs "env_var"
	fi
}

write_config_to_file () {
	if [[ $# -ne 3 ]]; then
		write_log_message "Invalid number of parameters, write_configs_to_file got $# expected 3"
		return
	fi

	if [[ "${1}" != "undefined" && "${1}" != "" ]]; then
		echo "${2}=${1}" >> ${3}
	fi
}

write_configs (){
	echo "" > ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_proxy} "S1_AGENT_MANAGEMENT_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_dv_proxy} "S1_AGENT_DV_PROXY" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_url} "S1_AGENT_MANAGEMENT_URL" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_management_token} "S1_AGENT_MANAGEMENT_TOKEN" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_device_type} "S1_AGENT_DEVICE_TYPE" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_auto_start} "S1_AGENT_AUTO_START" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_customer_id} "S1_AGENT_CUSTOMER_ID" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_create_user} "S1_AGENT_CREATE_USER" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_custom_install_path} "S1_AGENT_CUSTOM_INSTALL_PATH" ${installation_persistent_configuration}
	write_config_to_file ${s1_agent_should_register_service} "S1_AGENT_SHOULD_REGISTER_SERVICE" ${installation_persistent_configuration}
}


export PATH="/sbin:/bin:/usr/sbin:/usr/bin"

shell_rc_files=(".profile" ".login" ".shrc" ".bashrc" ".zshrc" ".tcshrc" ".kshrc")

root_files_folders=("home" "bin" "lib" "configuration/sentineld" "configuration/sentinelone.service" "ebpfs")


apply_config_on_agent() {
	if [[ "${s1_agent_management_proxy}" != "undefined" ]]; then
		write_log_message "Setting management proxy configuration: ${s1_agent_management_proxy}"
		"${binaries_directory}/sentinelctl" management proxy set "${s1_agent_management_proxy}"
	fi

	if [[ "${s1_agent_dv_proxy}" != "undefined" ]]; then
		write_log_message "Setting dv proxy configuration: ${s1_agent_dv_proxy}"
		"${binaries_directory}/sentinelctl" management dv proxy set "${s1_agent_dv_proxy}"
	fi

	if [[ "${s1_agent_management_token}" != "undefined" ]]; then
		write_log_message "Setting management token configuration: ${s1_agent_management_token}"
		"${binaries_directory}/sentinelctl" management token set "${s1_agent_management_token}"
	fi

	if [[ "${s1_agent_management_url}" != "undefined" ]]; then
		write_log_message "Setting management url configuration: ${s1_agent_management_url}"
		"${binaries_directory}/sentinelctl" management url set "${s1_agent_management_url}"
	fi

	if [[ "${s1_agent_device_type}" != "undefined" ]]; then
		write_log_message "Setting device type configuration: ${s1_agent_device_type}"
		"${binaries_directory}/sentinelctl" management type set "${s1_agent_device_type}"
	fi

	if [[ "${s1_agent_customer_id}" != "undefined" ]]; then
		write_log_message "Setting customer id configuration: ${s1_agent_customer_id}"
		"${binaries_directory}/sentinelctl" management customer_id set "${s1_agent_customer_id}"
	fi

	if [[ "${s1_agent_auto_start}" == "true" ]]; then
		write_log_message "Setting agent auto start configuration: ${s1_agent_auto_start}"
		"${binaries_directory}/sentinelctl" control start
	fi
}


post_install() {

	__read_configs
	write_configs

	create_cgroups
	set_permissions
	disable_account_login
	register_service
	add_ctl_to_path
	remove_old_agent
	fix_root_owner
	
	validate_desktop

	apply_config_on_agent

	write_log_message "Installation finished successfully"
	mv -f "${installation_log_path}" "${installation_log_final_path}"
}


start_agent_if_needed() {
	if [ -e ${stopped_agent_file} ]; then
		rm -f "${stopped_agent_file}" > /dev/null 2>&1
		write_log_message "Starting agent, since it was stopped before upgrade."
		"${binaries_directory}/sentinelctl" control start
		if [ $? -ne 0 ]; then
			write_log_message "ERROR: failed to start agent after upgrade." 1
			exit 109
		fi
	fi
}

post_upgrade() {
	read_configs "config_file" "${installation_persistent_configuration}"

	create_cgroups
	set_permissions
	disable_account_login
	register_service
	add_ctl_to_path
	remove_old_crash_dumps
	fix_root_owner

	if [ "rpm" == "deb" ]; then
		start_agent_if_needed
	fi

	write_log_message "Upgrade finished successfully"
}

post_transaction() {
	enforce_symlink_creation "$s1_agent_custom_install_path"

	start_agent_if_needed
}

enforce_symlink_creation() {
	custom_install_path="$1"
	if [ "${custom_install_path}" == "undefined" ]; then
		return
	fi

	if [[ -h "$agent_directory" || -d "$agent_directory" ]]; then
		return
	fi

	shopt -s extglob
	stripped_install_path="${custom_install_path%%+(/)}"

	if [[ ! -d "$stripped_install_path" ]]; then
		write_log_message "Failed creating symlink: custom install path does not exist '$stripped_install_path'" 1
		return
	fi

	ln -s "${stripped_install_path}" "$agent_directory"
	write_log_message "Symlink re-created from $agent_directory to ${stripped_install_path}"

	chown -h "${user_name}:${user_name}" "$agent_directory"
}

set_permissions() {
	write_log_message "Setting permissions"
	chown -R -L "${user_name}":"${group_name}" "${agent_directory}"
	write_log_message "Permissions set successfully"
}

enable_crash_dumps() {
	write_log_message "Enable crash dumps functionality"

	chown -R root:"${group_name}" "${binaries_directory}"
	assert "chown"

	chmod g+r+x "${binaries_directory}"
	assert "chmod"

	chmod g+r "${binaries_directory}/${agent_binary}"
	assert "chmod"

	write_log_message "crash dumps enabled"
}

fix_root_owner() {
	write_log_message "Fixing files to root"
	
	for ((i = 0; i<${#root_files_folders[@]}; i++)); do
		chown -R root:root "${agent_directory}/${root_files_folders[$i]}"
		assert "chown"
	done

	enable_crash_dumps

	write_log_message "Done fixing files to root"
}

disable_account_login() {
	write_log_message "Disabling ${user_name} account login"

	for ((i = 0; i<${#shell_rc_files[@]}; i++)); do
		rm -f "${home_directory}/${shell_rc_files[$i]}"
		assert "rm" 102

		ln -s "${home_directory}/login.sh" "${home_directory}/${shell_rc_files[$i]}"
		assert "ln" 102
	done

	write_log_message "${user_name} account login disabled successfully"
}

is_dir_in_path() {
	echo "$PATH" | grep "$1" > /dev/null
	if [ "$?" = "0" ]; then
		echo y
	else
		echo n
	fi
}

add_ctl_to_path() {
	write_log_message "Adding SentinelCTL to \$PATH..."

	if [ -d "/usr/local/bin" ] && [ "$(is_dir_in_path "/usr/local/bin")" = "y" ]; then
		rm -f /usr/local/bin/sentinelctl
		ln -s "${binaries_directory}/sentinelctl" /usr/local/bin/sentinelctl
	elif [ -d "/usr/bin" ] && [ "$(is_dir_in_path "/usr/bin")" = "y" ]; then
		rm -f /usr/bin/sentinelctl
		ln -s "${binaries_directory}/sentinelctl" /usr/bin/sentinelctl
	elif [ -d "/bin" ] && [ "$(is_dir_in_path "/bin")" = "y" ]; then
		rm -f /bin/sentinelctl
		ln -s "${binaries_directory}/sentinelctl" /bin/sentinelctl
	fi

	write_log_message "SentinelCTL added to \$PATH successfully"
}

validate_desktop() {
	if [ -f "/etc/os-release" ]; then
		if grep -q -i "desktop" "/etc/os-release"; then
			write_log_message "Detected desktop machine, setting correct type"
			"${binaries_directory}"/sentinelctl management type set desktop	> /dev/null 2>&1
		fi

		if grep -q -i "workstation" "/etc/os-release"; then
			write_log_message "Detected workstation machine, setting correct type"
			"${binaries_directory}"/sentinelctl management type set desktop	> /dev/null 2>&1
		fi
	fi
}

remove_old_agent() {
	if [ -d "${old_agent_path}" ]; then
		write_log_message "Removing old agent leftovers"
		rm -rf "${old_agent_path}"
	fi
}

remove_old_crash_dumps() {
	if [ -d "${crash_dumps_directory}" ]; then
		write_log_message "Removing old crash dumps"
		rm -f ${current_crash_dumps_directory}/* > /dev/null 2>&1
		rm -f ${crash_dumps_directory}/* > /dev/null 2>&1
	fi
}

post_transaction
/opt/sentinelone/.storage
/opt/sentinelone/agent_modules
/opt/sentinelone/artifacts
/opt/sentinelone/artifacts/filetypes
/opt/sentinelone/artifacts/filetypes/python.compiled
/opt/sentinelone/artifacts/yara
/opt/sentinelone/assets
/opt/sentinelone/auto_uploads
/opt/sentinelone/benchmarks
/opt/sentinelone/benchmarks/linux-cis-benchmark
/opt/sentinelone/bin
/opt/sentinelone/bin/sentinelctl
/opt/sentinelone/bin/sentinelone-agent
/opt/sentinelone/bin/sentinelone-watchdog
/opt/sentinelone/certificates
/opt/sentinelone/cgroups
/opt/sentinelone/comm_sdk
/opt/sentinelone/configuration
/opt/sentinelone/configuration/installation_params.json
/opt/sentinelone/configuration/sentineld
/opt/sentinelone/configuration/sentinelone.service
/opt/sentinelone/crash_dumps
/opt/sentinelone/crash_dumps/.current
/opt/sentinelone/detectors.pkg
/opt/sentinelone/ebpfs
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_bash_bind_variable
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_bash_unbind_variable
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_execv
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_execv_compat
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_file_close_write
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_file_close_write_compat
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_file_read
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_files
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_files_compat
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_files_stress
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_mounts
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_pam_login
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_policy_enforcer
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_python_exec
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_python_exec_compat
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_setuid_root
/opt/sentinelone/ebpfs/3.10.0-1160.2.1.el7/test_unauthorized_splice
/opt/sentinelone/ebpfs/5.11.0-16
/opt/sentinelone/ebpfs/5.11.0-16/bash_bind_variable_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/bash_readline.o
/opt/sentinelone/ebpfs/5.11.0-16/bash_unbind_variable_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/file_close_write_compat_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/file_close_write_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/file_read_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/files_compat_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/files_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/mounts_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/pam_login_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/python_exec_compat_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/python_exec_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/setuid_root_kern.o
/opt/sentinelone/ebpfs/5.11.0-16/test_bash_bind_variable
/opt/sentinelone/ebpfs/5.11.0-16/test_bash_unbind_variable
/opt/sentinelone/ebpfs/5.11.0-16/test_execv
/opt/sentinelone/ebpfs/5.11.0-16/test_execv_compat
/opt/sentinelone/ebpfs/5.11.0-16/test_file_close_write
/opt/sentinelone/ebpfs/5.11.0-16/test_file_close_write_compat
/opt/sentinelone/ebpfs/5.11.0-16/test_file_read
/opt/sentinelone/ebpfs/5.11.0-16/test_files
/opt/sentinelone/ebpfs/5.11.0-16/test_files_compat
/opt/sentinelone/ebpfs/5.11.0-16/test_files_stress
/opt/sentinelone/ebpfs/5.11.0-16/test_mounts
/opt/sentinelone/ebpfs/5.11.0-16/test_pam_login
/opt/sentinelone/ebpfs/5.11.0-16/test_policy_enforcer
/opt/sentinelone/ebpfs/5.11.0-16/test_python_exec
/opt/sentinelone/ebpfs/5.11.0-16/test_python_exec_compat
/opt/sentinelone/ebpfs/5.11.0-16/test_setuid_root
/opt/sentinelone/ebpfs/5.11.0-16/test_unauthorized_splice
/opt/sentinelone/ebpfs/5.11.0-16/unauthorized_splice_kern.o
/opt/sentinelone/ebpfs/btf
/opt/sentinelone/ebpfs/btf/amzn
/opt/sentinelone/ebpfs/btf/amzn/2
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.101-91.76.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.104-95.84.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.106-97.85.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.109-99.92.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.114-103.97.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.114-105.126.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.121-109.96.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.123-111.109.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.128-112.105.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.133-113.105.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.133-113.112.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.138-114.102.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.143-118.123.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.146-119.123.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.146-120.181.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.152-124.171.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.152-127.182.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.154-128.181.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.158-129.185.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.165-131.185.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.165-133.209.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.171-136.231.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.173-137.228.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.173-137.229.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.177-139.253.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.177-139.254.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.181-140.257.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.181-142.260.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.186-146.268.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.192-147.314.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.193-149.317.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.198-152.320.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.200-155.322.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.203-156.332.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.209-160.335.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.209-160.339.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.214-160.339.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.219-161.340.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.219-164.354.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.225-168.357.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.225-169.362.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.231-173.360.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.231-173.361.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.232-176.381.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.232-177.418.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.238-182.421.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.238-182.422.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.241-184.433.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.243-185.433.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.246-187.474.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.248-189.473.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.252-195.481.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.252-195.483.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.256-197.484.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.26-54.32.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.262-200.489.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.268-205.500.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.273-207.502.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.275-207.503.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.276-211.499.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.281-212.502.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.285-215.501.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.287-215.504.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.290-217.505.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.291-218.527.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.294-220.533.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.33-59.34.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.33-59.37.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.42-61.37.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.47-63.37.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.47-64.38.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.51-66.38.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.55-68.37.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.59-68.43.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.62-70.117.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.67-71.56.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.70-72.55.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.72-73.55.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.77-80.57.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.77-81.59.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.77-86.82.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.88-88.73.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.88-88.76.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.94-89.73.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.14.97-90.72.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.62-10.57.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.70-2.243.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.75-1.56.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.76-38.79.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.77-41.59.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.81-44.57.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.85-46.56.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2/4.9.85-47.59.amzn2.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.101-75.76.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.104-78.84.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.106-79.86.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.109-80.92.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.114-82.97.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.114-83.126.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.121-85.96.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.123-86.109.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.128-87.105.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.133-88.105.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.133-88.112.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.138-89.102.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.143-91.122.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.146-93.123.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.152-98.182.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.154-99.181.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.158-101.185.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.165-102.185.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.165-103.209.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.171-105.231.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.173-106.229.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.177-107.254.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.181-108.257.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.186-110.268.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.193-113.317.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.200-116.320.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.203-116.332.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.209-117.337.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.214-118.339.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.219-119.340.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.225-121.357.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.225-121.362.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.232-123.381.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.238-125.421.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.238-125.422.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.248-129.473.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.252-131.483.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.262-135.486.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.262-135.489.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.268-139.500.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.273-140.502.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.275-142.503.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.281-144.502.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.285-147.501.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.287-148.504.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.33-51.34.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.33-51.37.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.42-52.37.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.47-56.37.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.51-60.38.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.55-62.37.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.59-64.43.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.62-65.117.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.67-66.56.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.70-67.55.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.72-68.55.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.77-69.57.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.77-70.59.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.77-70.82.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.88-72.73.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.88-72.76.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.94-73.73.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/amzn/2018/4.14.97-74.72.amzn1.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos
/opt/sentinelone/ebpfs/btf/centos/7
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.1.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.1.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.12.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.18.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.4.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.4.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.4.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.7.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.9.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1062.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1127.10.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1127.13.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1127.18.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1127.19.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1127.8.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1127.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.11.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.15.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.2.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.2.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.21.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.25.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.31.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.36.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.41.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.42.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.45.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.49.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.53.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.59.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.6.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.62.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.66.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.71.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.76.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-1160.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.1.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.13.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.13.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.20.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.4.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.4.4.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.6.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.8.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.9.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.9.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-123.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-229.1.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-229.11.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-229.14.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-229.20.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-229.4.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-229.7.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-229.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.10.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.13.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.18.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.22.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.28.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.28.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.3.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.36.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.36.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.36.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.4.4.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.4.5.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-327.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.10.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.16.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.2.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.21.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.21.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.26.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.26.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.6.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.6.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-514.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.1.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.11.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.11.6.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.17.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.2.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.2.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.21.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.5.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-693.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.11.6.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.14.4.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.2.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.3.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.3.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.6.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.9.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-862.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.1.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.10.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.12.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.12.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.21.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.21.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.27.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.5.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/3.10.0-957.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/4.19.104-300.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/4.19.110-300.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/4.19.113-300.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/4.19.84-300.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/4.19.94-300.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/7/5.4.28-200.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/8
/opt/sentinelone/ebpfs/btf/centos/8/4.18.0-147.0.3.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/8/4.18.0-147.3.1.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/8/4.18.0-147.5.1.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/8/4.18.0-147.8.1.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/8/4.18.0-147.el8.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/8/4.18.0-80.7.1.el8_0.x86_64.btf
/opt/sentinelone/ebpfs/btf/centos/8/4.18.0-80.el8.x86_64.btf
/opt/sentinelone/ebpfs/btf/debian
/opt/sentinelone/ebpfs/btf/debian/10
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-17-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-17-cloud-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-17-rt-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-18-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-18-cloud-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-18-rt-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-20-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-20-cloud-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-20-rt-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-21-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-21-cloud-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/10/4.19.0-21-rt-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/9
/opt/sentinelone/ebpfs/btf/debian/9/4.9.0-13-amd64.btf
/opt/sentinelone/ebpfs/btf/debian/9/4.9.0-13-rt-amd64.btf
/opt/sentinelone/ebpfs/btf/fedora
/opt/sentinelone/ebpfs/btf/fedora/29
/opt/sentinelone/ebpfs/btf/fedora/29/4.18.16-300.fc29.x86_64.btf
/opt/sentinelone/ebpfs/btf/fedora/29/5.3.11-100.fc29.x86_64.btf
/opt/sentinelone/ebpfs/btf/fedora/30
/opt/sentinelone/ebpfs/btf/fedora/30/5.0.9-301.fc30.x86_64.btf
/opt/sentinelone/ebpfs/btf/fedora/30/5.6.13-100.fc30.x86_64.btf
/opt/sentinelone/ebpfs/btf/fedora/31
/opt/sentinelone/ebpfs/btf/fedora/31/5.3.7-301.fc31.x86_64.btf
/opt/sentinelone/ebpfs/btf/fedora/31/5.8.18-100.fc31.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol
/opt/sentinelone/ebpfs/btf/ol/7
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.0.0.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.10.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.10.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.13.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.13.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.18.2.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.18.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.19.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.19.1.0.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.19.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.8.2.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1127.8.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.11.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.11.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.15.2.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.15.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.2.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.2.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.2.2.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.2.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.21.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.21.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.24.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.24.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.25.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.25.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.31.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.31.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.36.2.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.36.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.41.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.41.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.42.2.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.42.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.45.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.45.1.0.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.45.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.6.1.0.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.6.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/3.10.0-1160.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.300.11.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.301.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.302.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.302.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.302.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.303.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.303.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.303.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.303.4.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.303.5.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.304.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.304.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.304.6.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.304.6.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.304.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.305.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.305.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.305.4.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.305.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.12.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.13.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.14.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.7.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.8.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1902.306.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1903.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1904.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1905.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1906.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1907.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1908.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1909.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1910a.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1911.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1912.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1915.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1916.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1917.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1923.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1929.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1933.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-1941.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2013.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2015.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2016.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2017.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2018.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2019.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2020.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.400.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.400.8.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.400.9.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.400.9.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.401.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.402.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.402.2.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.403.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.403.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.403.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.403.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.403.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.404.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.404.1.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.404.1.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.405.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.405.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2025.405.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2039.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2040.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2041.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.500.10.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.500.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.500.9.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.500.9.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.501.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.501.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.501.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.502.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.502.4.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.502.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.502.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.503.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.503.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.504.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.504.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.504.2.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.504.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.4.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.4.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.4.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.505.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.506.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.506.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.506.10.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.506.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.506.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.506.8.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.506.8.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.507.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.507.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.507.7.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.507.7.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.507.7.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.508.3.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.508.3.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.508.3.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.508.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.509.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.509.2.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.509.2.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.4.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.5.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.5.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.5.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.5.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.510.5.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.5.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.5.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.7.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.8.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.511.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.512.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.512.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.512.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.512.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.512.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.512.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.513.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.513.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.513.2.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.513.2.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.513.2.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.513.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.514.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.514.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.514.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.514.5.1.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.514.5.1.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.514.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.515.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.516.1.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.516.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.516.2.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.516.2.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.516.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.517.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.517.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2047.518.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2048.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2049.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2050.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2051.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2052.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2102.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2103.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2104.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2105.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2106.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2108.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2109.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2110.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2111.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2112.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2113.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2114.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2115.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2116.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2118.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2120.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2121.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2122.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/4.14.35-2124.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.0-1948.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2006.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.0.7.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.1.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.2.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.3.2.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.4.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.4.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.5.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.6.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2011.7.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2028.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.100.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.100.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.100.6.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.100.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.101.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.101.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.101.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.102.0.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.102.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.103.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.103.3.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.103.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.104.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.104.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.104.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.104.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.105.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2036.105.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2040.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2041.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2051.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.200.13.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.200.7.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.200.9.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.201.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.202.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.202.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.203.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.203.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.203.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.203.6.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.204.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.204.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.204.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.204.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.204.4.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.204.4.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.204.4.4.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.205.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.205.7.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.205.7.3.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2102.206.1.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2106.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2108.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2109.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2111.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2114.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2118.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2120.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2122.303.5.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2122.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2136.300.7.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.17-2136.301.0.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/ol/7/5.4.2-1950.2.el7uek.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel
/opt/sentinelone/ebpfs/btf/rhel/7
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.1.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.1.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.12.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.18.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.4.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.4.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.4.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.7.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.9.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1062.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1127.10.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1127.13.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1127.18.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1127.19.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1127.8.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1127.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.11.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.15.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.2.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.2.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.21.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.24.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.25.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.31.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.36.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.41.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.42.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.45.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.49.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.53.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.6.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-1160.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.1.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.13.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.13.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.20.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.4.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.4.4.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.6.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.8.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.9.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.9.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-123.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-229.1.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-229.11.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-229.14.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-229.20.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-229.4.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-229.7.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-229.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.10.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.13.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.18.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.22.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.28.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.28.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.3.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.36.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.36.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.36.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.4.4.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.4.5.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-327.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.10.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.16.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.2.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.21.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.21.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.26.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.26.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.6.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.6.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-514.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.1.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.11.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.11.6.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.17.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.2.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.2.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.21.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.5.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-693.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.11.6.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.14.4.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.2.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.3.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.3.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.6.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.9.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-862.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.1.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.10.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.12.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.12.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.21.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.21.3.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.27.2.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.5.1.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/7/3.10.0-957.el7.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-147.0.2.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-147.0.3.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-147.3.1.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-147.5.1.el8_1.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-147.el8.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-193.1.2.el8_2.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-193.13.2.el8_2.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-193.14.3.el8_2.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-193.19.1.el8_2.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-193.28.1.el8_2.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-193.6.3.el8_2.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-240.1.1.el8_3.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-240.10.1.el8_3.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-240.15.1.el8_3.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-240.22.1.el8_3.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-240.8.1.el8_3.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-240.el8.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.10.2.el8_4.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.12.1.el8_4.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.17.1.el8_4.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.19.1.el8_4.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.25.1.el8_4.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.3.1.el8_4.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.7.1.el8_4.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-305.el8.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-348.12.2.el8_5.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-348.2.1.el8_5.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-348.7.1.el8_5.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-348.el8.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-80.1.2.el8_0.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-80.11.1.el8_0.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-80.11.2.el8_0.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-80.4.2.el8_0.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-80.7.1.el8_0.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-80.7.2.el8_0.x86_64.btf
/opt/sentinelone/ebpfs/btf/rhel/8/4.18.0-80.el8.x86_64.btf
/opt/sentinelone/ebpfs/btf/ubuntu
/opt/sentinelone/ebpfs/btf/ubuntu/18.04
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1006-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1007-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1008-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1009-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1009-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1009-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-101-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1010-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1010-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1011-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1012-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1013-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1014-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1014-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1015-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1016-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1017-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1017-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1018-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1018-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1019-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1019-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1019-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1020-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1021-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1021-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1021-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1022-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1023-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1023-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1023-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1024-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1025-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1025-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1025-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1026-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1027-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1027-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1028-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1028-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1029-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1029-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1030-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1030-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1030-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1031-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1031-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1032-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1032-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1032-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1032-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1033-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1033-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1033-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1034-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1034-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1034-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1035-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1035-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1036-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1036-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1036-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1037-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1037-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1037-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1037-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1039-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1040-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1040-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1040-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1041-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1041-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1042-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1042-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1043-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1044-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1044-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1044-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1045-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1045-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1046-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1047-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1048-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1048-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1049-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1050-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1050-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1051-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1052-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1052-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1054-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1055-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1056-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1057-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1057-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1058-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1058-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1059-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-106-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1060-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1063-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1063-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1064-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1065-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1066-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1066-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1067-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1067-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1069-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1070-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1072-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1073-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1073-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1076-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1076-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1077-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1077-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1078-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1079-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1079-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-108-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1080-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1082-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1082-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1083-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1083-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1086-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1087-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1089-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-109-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1090-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1091-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1091-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1092-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1092-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1093-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1093-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1093-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1094-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1094-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1095-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1095-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1095-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1096-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1096-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1096-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1097-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1097-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1098-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1098-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1099-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1099-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1099-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1100-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1101-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1102-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1102-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1103-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1103-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1103-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1104-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1106-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1106-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1106-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1107-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1108-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1108-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1109-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1109-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1109-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-111-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1110-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1110-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1110-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1111-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1111-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1111-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1112-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1112-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1112-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1113-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1114-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1114-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1114-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1115-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1115-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1115-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1116-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1116-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1118-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1118-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1118-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1119-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1119-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-112-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1120-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1121-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1121-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1121-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1122-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1122-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1123-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1123-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1124-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1124-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1124-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1125-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1126-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1126-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1127-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1127-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1127-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1128-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1129-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1130-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1130-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1130-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1131-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1131-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1133-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1133-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1134-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1134-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1135-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1136-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1136-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1136-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1137-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1137-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1138-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1139-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1139-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1140-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1141-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1142-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1142-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1145-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1149-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-115-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1150-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1151-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-1153-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-117-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-118-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-121-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-122-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-123-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-124-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-128-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-129-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-130-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-132-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-134-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-135-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-136-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-137-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-139-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-140-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-141-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-142-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-143-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-144-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-147-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-151-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-153-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-154-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-156-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-158-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-159-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-161-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-162-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-163-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-166-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-167-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-169-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-171-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-173-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-175-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-176-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-177-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-180-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-184-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-187-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-188-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-191-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-192-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-193-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-194-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-20-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-22-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-23-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-24-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-29-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-30-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-32-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-33-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-34-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-36-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-38-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-39-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-42-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-43-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-44-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-45-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-46-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-47-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-48-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-50-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-51-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-52-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-54-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-55-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-58-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-60-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-62-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-64-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-65-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-66-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-69-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-70-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-72-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-74-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-76-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-88-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-91-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-96-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/4.15.0-99-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1018-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1019-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1020-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1020-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1021-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1022-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1022-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1022-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1023-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1024-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1024-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1025-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1025-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1025-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1025-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1026-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1027-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1028-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1028-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1029-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1029-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1029-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1031-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1032-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1032-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1032-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1033-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1033-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1034-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1034-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1034-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1035-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1035-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1035-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1036-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1036-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1036-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1037-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1037-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1037-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1038-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1038-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1039-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1039-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1039-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1040-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1040-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1040-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1041-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1041-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1041-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1042-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1042-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1043-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1043-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1043-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1043-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1044-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1044-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1044-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1045-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1046-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1046-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1046-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1047-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1047-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1048-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1048-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1049-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1049-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1049-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1049-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1051-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1051-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1051-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1051-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1052-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1052-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1053-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1053-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1054-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1054-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1055-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1055-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1055-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1055-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1056-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1056-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1056-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1056-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1057-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1057-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1057-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1058-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1058-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1058-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1059-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1059-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1059-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1060-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1061-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1061-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1062-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1062-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1063-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1063-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1064-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1065-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1066-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-1067-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-37-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-39-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-40-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-42-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-45-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-47-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-48-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-51-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-52-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-53-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-54-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-58-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-59-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-60-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-62-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-64-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-65-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-66-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-67-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-70-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-71-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-72-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-73-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-74-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-77-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-80-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-81-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-84-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-86-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-87-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-89-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-90-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/18.04/5.4.0-91-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1007-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1009-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1009-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1012-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1013-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1014-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1014-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1015-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1016-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1017-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1017-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1017-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1018-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1019-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1019-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1020-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1020-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1020-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1021-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1021-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1022-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1022-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1023-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1024-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1025-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1026-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1027-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.11.0-1028-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1009-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1009-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1010-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1011-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1011-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1012-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1015-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1015-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1016-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1017-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1018-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1018-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1019-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1019-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1020-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1020-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1021-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1021-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1022-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1022-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1022-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1023-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1024-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1024-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1025-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1025-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1025-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1026-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1028-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1028-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1029-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1029-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1031-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1032-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1032-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1033-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1033-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1034-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1034-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1034-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1035-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1035-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1035-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1036-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1036-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1036-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1037-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1037-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1037-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1038-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1038-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1039-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1039-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1039-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1040-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1040-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1041-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1041-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1041-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1041-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1042-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1042-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1043-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1043-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1043-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1043-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1044-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1044-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1044-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1045-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1046-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1046-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1046-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1047-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1047-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1048-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1048-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1049-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1049-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1049-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1049-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1051-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1051-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1051-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1051-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1052-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1052-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1053-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1053-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1054-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1054-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1055-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1055-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1055-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1055-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1056-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1056-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1056-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1056-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1057-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1057-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1057-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1058-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1058-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1058-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1059-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1059-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1059-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1060-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1061-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1061-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1062-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1062-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1063-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1063-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1064-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1065-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1066-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-1067-gke.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-26-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-28-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-29-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-31-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-33-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-37-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-39-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-40-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-42-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-45-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-47-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-48-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-51-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-52-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-53-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-54-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-58-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-59-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-60-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-62-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-64-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-65-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-66-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-67-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-70-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-71-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-72-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-73-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-74-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-77-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-80-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-81-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-84-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-86-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-88-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-89-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-90-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.4.0-91-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1032-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1033-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1035-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1035-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1036-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1038-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1038-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1039-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1039-gcp.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1040-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1041-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1041-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1042-aws.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1042-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-1043-azure.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-23-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-25-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-28-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-29-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-33-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-34-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-36-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-38-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-40-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-41-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-43-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-44-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-45-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-48-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-49-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-50-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-53-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-55-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-59-generic.btf
/opt/sentinelone/ebpfs/btf/ubuntu/20.04/5.8.0-63-generic.btf
/opt/sentinelone/ebpfs/core
/opt/sentinelone/ebpfs/core/bash_bind_variable_kern.o
/opt/sentinelone/ebpfs/core/bash_unbind_variable_kern.o
/opt/sentinelone/ebpfs/core/execv_compat_kern.o
/opt/sentinelone/ebpfs/core/execv_kern.o
/opt/sentinelone/ebpfs/core/file_close_write_compat_kern.o
/opt/sentinelone/ebpfs/core/file_close_write_kern.o
/opt/sentinelone/ebpfs/core/file_read_kern.o
/opt/sentinelone/ebpfs/core/files_compat_kern.o
/opt/sentinelone/ebpfs/core/files_kern.o
/opt/sentinelone/ebpfs/core/mounts_kern.o
/opt/sentinelone/ebpfs/core/policy_enforcer_kern.o
/opt/sentinelone/ebpfs/core/python_exec_compat_kern.o
/opt/sentinelone/ebpfs/core/python_exec_kern.o
/opt/sentinelone/ebpfs/core/setuid_root_kern.o
/opt/sentinelone/ebpfs/core/test_bash_bind_variable
/opt/sentinelone/ebpfs/core/test_bash_unbind_variable
/opt/sentinelone/ebpfs/core/test_execv
/opt/sentinelone/ebpfs/core/test_execv_compat
/opt/sentinelone/ebpfs/core/test_file_close_write
/opt/sentinelone/ebpfs/core/test_file_close_write_compat
/opt/sentinelone/ebpfs/core/test_file_read
/opt/sentinelone/ebpfs/core/test_files
/opt/sentinelone/ebpfs/core/test_files_compat
/opt/sentinelone/ebpfs/core/test_files_stress
/opt/sentinelone/ebpfs/core/test_mounts
/opt/sentinelone/ebpfs/core/test_pam_login
/opt/sentinelone/ebpfs/core/test_policy_enforcer
/opt/sentinelone/ebpfs/core/test_python_exec
/opt/sentinelone/ebpfs/core/test_python_exec_compat
/opt/sentinelone/ebpfs/core/test_setuid_root
/opt/sentinelone/ebpfs/core/test_unauthorized_splice
/opt/sentinelone/ebpfs/core/unauthorized_splice_kern.o
/opt/sentinelone/ebpfs/ebpf.metadata.json
/opt/sentinelone/home
/opt/sentinelone/home/login.sh
/opt/sentinelone/lib
/opt/sentinelone/lib/libbpf.so
/opt/sentinelone/lib/libdfi.so
/opt/sentinelone/lib/libdfi_alt.so
/opt/sentinelone/lib/libelf.so
/opt/sentinelone/log
/opt/sentinelone/model
/opt/sentinelone/mount
/opt/sentinelone/rpm_mount
/opt/sentinelone/rso
/opt/sentinelone/rso/packages
/opt/sentinelone/tmp
/opt/sentinelone/uploads

@travier
Copy link
Member

travier commented Jul 24, 2023

I just want to note here that this is a 3k line long scriptlet (which in general is not a good idea) and thus this might be hard to debug.

@vinylen
Copy link
Author

vinylen commented Jul 24, 2023

Yes i totally understand :)

@LorbusChris
Copy link

Looks like the error is thrown here:

validate_service_not_exist() {
	systemctl > /dev/null 2>&1 || return $?

	if  [ $(systemctl list-unit-files "${systemd_service_unit}" | grep "${systemd_service_unit}" | wc -l) -gt 0 ]; then
		write_log_message "ERROR: Found already existing sentinelone service in systemd" 1
		exit 102
	fi
}

Do you already have a sentinelone.service unit file installed on your system?

@vinylen
Copy link
Author

vinylen commented Jul 24, 2023

@LorbusChris
Hmm yes seems like it:

sudo find / -name "sentinelone.service"

find: ‘/proc/7491/task/7491/net’: Invalid argument
find: ‘/proc/7491/net’: Invalid argument
find: ‘/proc/15665/task/15665/net’: Invalid argument
find: ‘/proc/15665/net’: Invalid argument
find: ‘/run/user/1000/doc’: Permission denied
/sysroot/ostree/repo/extensions/rpmostree/private/commit/usr/lib/opt/sentinelone/configuration/sentinelone.service
find: File system loop detected; ‘/sysroot/ostree/deploy/fedora/deploy/3a0c887f317af1eae9b582f784fdfee0e28dcc4239c9fb9ce700652605810b90.0’ is part of the same file system loop as ‘/’.

How would i go about cleaning out that file in /sysroot as that is read-only?

/sysroot/ostree/repo/extensions/rpmostree/private/commit/usr/lib/opt/sentinelone/configuration/sentinelone.service

Thanks

EDIT: I ran rpm-ostree cleanup -mb to remove the file on the filesystem, which was successful. But then i tried to install the package again in the same way as before and i got the same error again:

error: Running %prein for SentinelAgent: bwrap(/bin/sh): Child process killed by signal 102; run `journalctl -t 'rpm-ostree(SentinelAgent.prein)'` for more information

And i now have the file on the fs again:

/sysroot/ostree/repo/extensions/rpmostree/private/commit/usr/lib/opt/sentinelone/configuration/sentinelone.service

@travier
Copy link
Member

travier commented Jul 24, 2023

There are errors, but does the installation actually fail? Finding the unit in /sysroot suggests that rpm-ostree successfully created the new deployment.

Edit: My bad, it's from the repo, not a deployment, so it did fail, and it is expected that the unit file is in the repo (as cache).

@travier
Copy link
Member

travier commented Jul 24, 2023

Oh, this is running in pre-installation I assume? rpm-ostree installs the files from the RPM first and then calls out to all the scripts so this is failing because it's checking if the unit does not exists before installation (which is not a correct way to do it) and fails as the files already exists.

@vinylen
Copy link
Author

vinylen commented Jul 25, 2023

I think so yes, this is the output from the command sudo rpm-ostree install Signed-SentinelAgent_linux_v22_4_2_4.rpm:

Inactive requests:
  foot (already provided by foot-1.15.0-1.fc38.x86_64)
Checking out tree 741eb92... done
Enabled rpm-md repositories: fedora-cisco-openh264 fedora-modular updates-modular updates fedora rpmfusion-free-updates rpmfusion-free rpmfusion-nonfree-updates rpmfusion-nonfree google-chrome rpmfusion-nonfree-nvidia-driver rpmfusion-nonfree-steam phracek-PyCharm kubernetes tailscale-stable copr:copr.fedorainfracloud.org:atim:lazygit updates-archive
Importing rpm-md... done
rpm-md repo 'fedora-cisco-openh264' (cached); generated: 2023-03-14T10:56:46Z solvables: 4
rpm-md repo 'fedora-modular' (cached); generated: 2023-04-13T20:30:47Z solvables: 1082
rpm-md repo 'updates-modular' (cached); generated: 2023-07-12T02:11:07Z solvables: 1078
rpm-md repo 'updates' (cached); generated: 2023-07-24T01:21:58Z solvables: 19520
rpm-md repo 'fedora' (cached); generated: 2023-04-13T20:37:10Z solvables: 69222
rpm-md repo 'rpmfusion-free-updates' (cached); generated: 2023-07-24T16:09:21Z solvables: 104
rpm-md repo 'rpmfusion-free' (cached); generated: 2023-04-14T11:37:11Z solvables: 468
rpm-md repo 'rpmfusion-nonfree-updates' (cached); generated: 2023-07-20T11:45:09Z solvables: 74
rpm-md repo 'rpmfusion-nonfree' (cached); generated: 2023-04-14T12:02:51Z solvables: 235
rpm-md repo 'google-chrome' (cached); generated: 2023-07-21T21:48:55Z solvables: 3
rpm-md repo 'rpmfusion-nonfree-nvidia-driver' (cached); generated: 2023-07-20T14:33:41Z solvables: 31
rpm-md repo 'rpmfusion-nonfree-steam' (cached); generated: 2023-06-23T13:24:43Z solvables: 2
rpm-md repo 'phracek-PyCharm' (cached); generated: 2023-07-16T06:58:28Z solvables: 5
rpm-md repo 'kubernetes' (cached); generated: (invalid timestamp) solvables: 992
rpm-md repo 'tailscale-stable' (cached); generated: 2023-07-22T00:40:05Z solvables: 80
rpm-md repo 'copr:copr.fedorainfracloud.org:atim:lazygit' (cached); generated: 2023-07-24T11:44:27Z solvables: 6
rpm-md repo 'updates-archive' (cached); generated: 2023-07-24T01:42:34Z solvables: 25090
Resolving dependencies... done
Applying 2 overrides and 148 overlays
Processing packages... done
Running pre scripts... done
error: Running %prein for SentinelAgent: bwrap(/bin/sh): Child process killed by signal 102; run `journalctl -t 'rpm-ostree(SentinelAgent.prein)'` for more information

@travier
Copy link
Member

travier commented Jul 25, 2023

There isn't much we can do here. They need to fix their pre-installation scriptlet.

@vinylen
Copy link
Author

vinylen commented Jul 25, 2023

I see, thank you.

Is this error specific to Fedora Sericea (ostree) or any .rpm based distro?

Thanks

@travier
Copy link
Member

travier commented Jul 25, 2023

This is specific to rpm-ostree based distros (currently Silverblue, Kinoite, Sericea, Onyx, CoreOS, IoT).

@vinylen
Copy link
Author

vinylen commented Jul 31, 2023

Closing this since there's really not that much we can do.

Thanks for the assistance!

@vinylen vinylen closed this as completed Jul 31, 2023
@strugee
Copy link

strugee commented Jan 22, 2025

I worked around this with rpmrebuild. Make sure you're on the latest version of rpmrebuild. In particular, the version shipped by Fedora 41 is out of date and extremely buggy. You need to make sure you have the Fedora updates repo enabled (it is by default) and then run dnf upgrade in your Toolbx container.

Run rpmrebuild -ep ~/Downloads/SentinelAgent_linux_x86_64_v24_2_2_20.rpm (adjust the path for the exact filename and path), search for validate_service_not_exist(), and add a new line that says return 0 at the beginning of the function. Then, find the try_register_systemd() function and remove the first line. Do the same to the try_unregister_systemd() function. Exit your editor, and hit Y to continue.

To install: sudo rpm-ostree install ~/rpmbuild/RPMS/x86_64/SentinelAgent-*.x86_64.rpm.

You may or may not need to import the SentinelOne GPG signing key in order to work around an rpmrebuild bug (specifically, rpm --query ./SentinelAgent_linux_x86_64_v24_2_2_20.rpm outputting warning: ./SentinelAgent_linux_x86_64_v24_2_2_20.rpm: Header V4 RSA/SHA256 Signature, key ID bf000751: NOKEY<newline>SentinelAgent-24.2.2.20-1.x86_64, which causes rpmrebuild to bail out with ERROR: (IsPackageInstalled) too many packages match './SentinelAgent_linux_x86_64_v24_2_2_20.rpm'). I don't know because I hit this bug with an older version of rpmrebuild, and I don't feel like deleting the key out of my keyring to find out if the bug still exists.

% curl https://raw.githubusercontent.com/Sentinel-One/ansible_collection_s1agents/refs/heads/main/roles/s1_import_gpg_key/files/sentinel_one.gpg > sentinel_one.gpg     
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3183  100  3183    0     0   119k      0 --:--:-- --:--:-- --:--:--  124k

% sudo rpmkeys --import sentinel_one.gpg

@travier
Copy link
Member

travier commented Jan 22, 2025

This RPM would also be a good candidate to convert to a sysext: https://github.com/travier/fedora-sysexts

@strugee
Copy link

strugee commented Jan 22, 2025

Oh interesting, this is the first I've heard of sysexts. I'll have to read more about them. Are you thinking (proprietary) upstream would package this as a sysext?

@strugee
Copy link

strugee commented Jan 22, 2025

For those following along at home, SentinelOne attempts to keep mutable state in /opt, which is a problem; see coreos/rpm-ostree#233. You can fix with:

sudo mkdir /var/sentinelone/
sudo cp -a /usr/lib/opt/sentinelone/configuration /var/sentinelone
sudo cp -a /usr/lib/opt/sentinelone/log /var/sentinelone/log
sudo cp -a /usr/lib/opt/sentinelone/crash_dumps /var/sentinelone/
echo '/var/sentinelone/configuration /usr/lib/opt/sentinelone/configuration none defaults,bind 0 0' | sudo tee -a /etc/fstab
echo '/var/sentinelone/log /usr/lib/opt/sentinelone/log none defaults,bind 0 0' | sudo tee -a /etc/fstab
echo '/var/sentinelone/crash_dumps /usr/lib/opt/sentinelone/crash_dumps none defaults,bind 0 0' | sudo tee -a /etc/fstab
sudo systemctl daemon-reload # Not sure if this is strictly necessary, but `mount` warned me about it
sudo mount /usr/lib/opt/sentinelone/configuration
sudo mount /usr/lib/opt/sentinelone/log
sudo mount /usr/lib/opt/sentinelone/crash_dumps

Turns out you'll need to manually enable the SentinelOne systemd service. You can do this with sudo systemctl enable --now sentinelone.service.

@travier
Copy link
Member

travier commented Jan 24, 2025

Oh interesting, this is the first I've heard of sysexts. I'll have to read more about them. Are you thinking (proprietary) upstream would package this as a sysext?

It's unlikely upstream would do that, but you can try it using the examples from the repo I linked above.

@strugee
Copy link

strugee commented Jan 24, 2025

It's unlikely upstream would do that, but you can try it using the examples from the repo I linked above.

Agreed, I guess I was mostly asking if the intended use case is for third party packaging or if the system is designed around upstreams providing these (which would mean that it's good to know about personally, but probably not going to help this particular problem)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working external Issue related to external project not part of Fedora f38 Related to Fedora 38
Projects
None yet
Development

No branches or pull requests

4 participants