我正在尝试在 Ubuntu 16.04 上安装 BlueZ 5.50,因为我需要 MIDI 支持。
我编译并安装如下:
sudo apt-get install libudev-dev
sudo apt-get install libical-dev
sudo apt-get install libreadline-dev
cd bluez-5.50
./configure --enable-midi
make -j8
sudo make install
问题是它没有更新/usr/sbin/bluetoothd
,这是我重新启动时启动的默认版本。
bluetoothd -v
导致5.37
但./src/bluetoothd -v
导致5.50
。
路径中唯一的版本似乎是旧版本:
whereis bluetoothd
bluetoothd: /usr/sbin/bluetoothd /usr/share/man/man8/bluetoothd.8.gz
为什么安装脚本会保留旧版本?我如何将所有内容更新到新版本?我必须这样做吗?
现在,即使使用旧版本的 bluetoothd,MIDI BLE 似乎也可以正常工作。
答案1
如果您从源代码编译程序并且不使用预编译的 dpkg 包,则 dpkg 包将不会受到任何影响或更改。
通常,该configure
步骤指示构建使用/usr/本地作为安装前缀,而不是/usr。这是为了防止自编译的内容覆盖二进制文件或 dpkg 包中附带的其他文件。
因此你的bluetoothd
二进制文件位于/usr/本地。
root@localhost:~/bluez-5.50# find /usr/local -name bluetoothd
/usr/local/libexec/bluetooth/bluetoothd
不幸的是或幸运的是,不太确定,确实make install
将systemd
服务和目标放在/lib/systemd/系统,它将覆盖 dpkg 包中的文件bluez
。
在我看来,这两个文件应该放入/etc/systemd/system
以防止更新bluez
覆盖您手动安装的版本。为此,您还应该添加到命令--with-systemdsystemunitdir=/etc/systemd/system
中configure
并重新安装新的 bluez 和旧的 bluez。
root@localhost:~/bluez-5.50# ./configure --enable-midi --with-systemdsystemunitdir=/etc/systemd/system
root@localhost:~/bluez-5.50# make
root@localhost:~/bluez-5.50# make install
root@localhost:~/bluez-5.50# apt-get install --reinstal bluez