mirror of
https://github.com/stornic56/debianito-post-install.git
synced 2026-10-31 13:08:06 +00:00
9828ea439c
- Extracted hardware detection logic from firmware.sh into new modules/hw_detect.sh. Declares shared arrays (PCI_NET_DEVS, USB_WIFI_DEVS, etc) and _detect_all_network_devices() function. The main script now sources hw_detect.sh immediately after utils.sh. firmware.sh retains only _DETECTED_FW_PKGS and _FW_PLAN_PKG_LINES plus installation logic — the detection loop is fully removed, eliminating the circular dependency with bluetooth.sh. - Fixed interrupt safety in main script: removed pkill -f "apt.*install" and pkill -f "dpkg.*configure" from _on_interrupt(); updated exit message to "Temp files cleaned." Only the signal handler (trap _on_interrupt INT TERM) remains. - Added strict URL validation to modules/gaming/heroic.sh and modules/gaming/tools.sh using regex ^https://[A-Za-z0-9./_-]+\.deb$ before passing $deb_url to _run_cmd. Blocks command substitution, non-https URLs, and path traversal attempts that could bypass shell quoting. - Implemented real Bullseye Archive rewrite in modules/bullseye/legacy.sh: adds idempotency check (grep -q archive.debian.org && return 0), creates timestamped backup of /etc/apt/sources.list with sudo cp, writes exact archive Debian sources via sudo tee heredoc, and runs sudo apt-get update || true on failure. - Added local scope to modules/bluetooth.sh variable service_enable_only=false before the conditional assignment, preventing state bleed from the previous global-only declaration. - Applied safe array pattern (while IFS= read -r _pkg; do ...) across 32+ files in modules/extras/* and modules/bullseye/legacy.sh, replacing all vulnerable for pkg in $cleaned / for pkg in $install_list loops. Eliminates word-splitting and command-injection risks.
94 lines
3.7 KiB
Bash
94 lines
3.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# modules/bluetooth.sh
|
|
# Requires: modules/utils.sh (globals + helpers), modules/firmware.sh (PCI_BT_DEVS, USB_BT_DEVS, USB_WIFI_DEVS)
|
|
|
|
_install_bluetooth_stack() {
|
|
local has_bt=false
|
|
[ ${#PCI_BT_DEVS[@]} -gt 0 ] && has_bt=true
|
|
[ ${#USB_BT_DEVS[@]} -gt 0 ] && has_bt=true
|
|
if ! $has_bt; then
|
|
for dev in "${USB_WIFI_DEVS[@]}"; do
|
|
if echo "$dev" | grep -qi 'bluetooth'; then
|
|
has_bt=true; break
|
|
fi
|
|
done
|
|
fi
|
|
if ! $has_bt; then
|
|
echo " → No Bluetooth hardware detected, skipping."
|
|
return
|
|
fi
|
|
|
|
local stack_failed=false
|
|
local service_enable_only=false
|
|
if is_installed bluez; then
|
|
echo " → Bluetooth stack already installed."
|
|
service_enable_only=true
|
|
fi
|
|
|
|
if [ ! ${service_enable_only:-false} = true ]; then
|
|
local bt_pkgs=()
|
|
! is_installed bluez && bt_pkgs+=(bluez)
|
|
! is_installed bluez-tools && bt_pkgs+=(bluez-tools)
|
|
! is_installed bluez-obexd && bt_pkgs+=(bluez-obexd)
|
|
if [ ${#bt_pkgs[@]} -gt 0 ]; then
|
|
if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y ${bt_pkgs[*]}" "Installing Bluetooth stack..."; then
|
|
_msg_red "Bluetooth" "Failed to install the Bluetooth stack."
|
|
stack_failed=true
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if command -v rfkill &>/dev/null; then
|
|
if rfkill list bluetooth 2>/dev/null | grep -q "Soft blocked: yes"; then
|
|
echo " → Unblocking Bluetooth (rfkill)..."
|
|
sudo rfkill unblock bluetooth
|
|
fi
|
|
fi
|
|
|
|
case "${DESKTOP_ENV:-other}" in
|
|
kde)
|
|
if ! is_installed bluedevil; then
|
|
if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y bluedevil" "Installing bluedevil..."; then
|
|
_msg_red "Bluetooth" "Failed to install bluedevil."
|
|
fi
|
|
fi
|
|
if [ "${AUDIO_SERVER:-}" = "pipewire" ]; then
|
|
if ! is_installed pipewire-pulse; then
|
|
if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y pipewire-pulse" "Installing pipewire-pulse..."; then
|
|
_msg_red "Bluetooth" "Failed to install pipewire-pulse."
|
|
fi
|
|
fi
|
|
if ! is_installed wireplumber; then
|
|
if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y wireplumber" "Installing wireplumber..."; then
|
|
_msg_red "Bluetooth" "Failed to install wireplumber."
|
|
fi
|
|
fi
|
|
fi
|
|
;;
|
|
gnome)
|
|
echo " → GNOME Bluetooth support already in gnome-control-center."
|
|
;;
|
|
xfce|other)
|
|
if ! is_installed blueman; then
|
|
if ! _run_cmd "Bluetooth" "sudo DEBIAN_FRONTEND=noninteractive apt install -y blueman" "Installing blueman..."; then
|
|
_msg_red "Bluetooth" "Failed to install blueman."
|
|
fi
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if ! systemctl is-enabled bluetooth &>/dev/null 2>&1; then
|
|
sudo systemctl enable bluetooth 2>/dev/null || true
|
|
fi
|
|
if ! systemctl is-active bluetooth &>/dev/null 2>&1; then
|
|
sudo systemctl start bluetooth 2>/dev/null || true
|
|
fi
|
|
|
|
if $stack_failed; then
|
|
_msg_red "Bluetooth Setup" "Bluetooth setup finished with errors.\n\nThe stack may be incomplete.\nA session restart or reboot is\nrecommended to load the desktop\napplets and tray icons." 10 60
|
|
else
|
|
_msg "Bluetooth Setup" "Bluetooth stack installed.\n\nA session restart or reboot is\nrecommended to load the desktop\napplets and tray icons." 10 60
|
|
fi
|
|
}
|