Compilação e Instalação do BlueZ 5.66 a partir do Código-Fonte no Ubuntu 22.04

Preparação do Ambiente e Dependências

Para compilar a pilha de protocolo Bluetooth BlueZ no Ubuntu 22.04, é necessário garantir que o sistema possua as ferramentas de compilação básicas e as bibliotecas de desenvolvimento. Atualize os repositórios e instale o conjunto de ferramentas de build:

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential autoconf automake libtool pkg-config git

Em seguida, instale as bibliotecas essenciais para o BlueZ. Vale ressaltar que no Ubuntu 22.04, o pacote python-docutils foi totalmente substituído por sua versão para Python 3:

sudo apt install -y libglib2.0-dev libdbus-1-dev libical-dev libreadline-dev python3-docutils
sudo apt install -y libudev-dev libusb-dev libncurses5-dev

Obtenção e Extração do Código-Fonte

O download do código-fonte pode ser feito diretamente dos repositórios oficiais do kernel. Após o download, extraia os arquivos e acesse o diretório criado:

wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.66.tar.xz
tar -xf bluez-5.66.tar.xz
cd bluez-5.66

Configuração e Compilação

Para padronizar o processo de configuração, podemos criar um script shell que define os parâmetros de build. Neste exemplo, utilizaremos o prefixo /opt/bluez para isolar a instalação e habilitaremos ferramentas e recursos experimentais:

cat << 'EOF' > setup_build.sh
#!/bin/bash
# Script de configuração customizado para BlueZ
./configure \
  --prefix=/opt/bluez \
  --sysconfdir=/etc \
  --localstatedir=/var \
  --enable-experimental \
  --enable-library \
  --enable-tools \
  --enable-testing
EOF

chmod +x setup_build.sh
./setup_build.sh

Caso a configuração seja concluída sem erros, inicie a compilação utilizando múltiplos núcleos de processamento para otimizar o tempo:

make -j$(nproc)

Após o término da compilação, instale os binários no sistema e atualize o cache de bibliotecas dinâmicas:

sudo make install
sudo ldconfig

Para garantir que os comandos compilados sejam acessíveis globalmente, crie links simbólicos no diretório padrão de executáveis:

sudo ln -s /opt/bluez/bin/bluetoothctl /usr/local/bin/bluetoothctl
sudo ln -s /opt/bluez/bin/btmon /usr/local/bin/btmon

Integração com o Systemd e D-Bus

Para gerenciar o daemon do Bluetooth como um serviço nativo do sistema, crie um arquivo de unidade do systemd:

sudo tee /etc/systemd/system/bluetooth.service > /dev/null << 'EOF'
[Unit]
Description=Daemon do Serviço Bluetooth
Requires=dbus-org.bluez.service
After=dbus-org.bluez.service

[Service]
Type=dbus
BusName=org.bluez
ExecStart=/opt/bluez/libexec/bluetooth/bluetoothd --experimental
NotifyAccess=main
LimitNPROC=1
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service
EOF

Copie o arquivo de serviço D-Bus para o diretório de configuração do sistema, recarregue o daemon do systemd e ative o serviço:

sudo cp /opt/bluez/share/dbus-1/system-services/org.bluez.service /usr/share/dbus-1/system-services/
sudo systemctl daemon-reload
sudo systemctl enable --now bluetooth

Solução de Problemas Comuns

Durante a etapa de configuração e compilação, falhas relacionadas a dependências ausentes são frequentes. Abaixo estão as soluções para os erros mais comuns:

  • Configuração falha por falta de glib, dbus ou libical: Resolvido ao instalar os pacotes libglib2.0-dev, libdbus-1-dev e libical-dev.
  • Ferramenta rst2man não encontrada: O pacote python3-docutils resolve esta dependência de documentação.
  • Adaptador Bluetooth invisível ou sem energia: Verifique o estado do serviço com systemctl status bluetooth e confirme se o módulo do kernel está carregado utilizando lsmod | grep bluetooth. Caso negativo, carregue manualmente com sudo modprobe btusb.

Para diagnóstico avançado, o daemon pode ser executado em modo de depuração detalhada diretamente no terminal:

sudo systemctl stop bluetooth
sudo /opt/bluez/libexec/bluetooth/bluetoothd -n -ddd

Tags: BlueZ Ubuntu Bluetooth compilacao systemd

Publicado em 8-7 06:39