---
# System prepended metadata

title: '[docker] 安裝 dbus'
tags: [重啟, container, dbus, 啟動, pod, docker, 安裝]

---

[docker] 安裝 dbus
===
###### tags: `docker`
###### tags: `docker`, `container`, `pod`, `dbus`, `安裝`, `啟動`, `重啟`

<br>

[TOC]

<br>

## 困境：容器/Pod 沒有 systemd
```
$ sudo sssctl domain-status ldapdomain
Unable to connect to system bus!
```

<br>

## 安裝 dbus
```bash
# 安裝 dbus
apt update
apt install -y dbus

# 啟動 system bus（容器沒有 systemd，所以手動起 daemon）
mkdir -p /var/run/dbus

# 跑在前景
dbus-daemon --system --nofork --print-address

```
- 確認 `/var/run` 是否是 `/run` 的 symlink（多數發行版是）：
    ```bash
    $ ls -ld /var/run
    lrwxrwxrwx 1 root root 4 Aug  5 10:07 /var/run -> /run
    ```

<br>

## 重啟 dbus

### 避免「刪目錄」重啟 bus 的方式
> 以 SSSD 服務為例

不要在 SSSD 正在跑時 `rm -rf /var/run/dbus`。這會把還在使用的 socket 移除，IFP 需要時間偵測並重連。

```
$ dbus-daemon --system --nofork --print-address
unix:path=/run/dbus/system_bus_socket,guid=1de0268b52f50cdf86a27eb768d5f31f

dbus-daemon[4514]: [system] Activating service name='org.freedesktop.sssd.infopipe' requested by ':1.0' (uid=0 pid=4515 comm="sssctl domain-status ldapdomain" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[4514]: [system] Activated service 'org.freedesktop.sssd.infopipe' failed: Invalid configuration (missing or empty <user>?)
```
- 沒有 `User=`（或路徑不對）時，**D-Bus 代啟 IFP 會失敗**，就會看到那串「`missing or empty <user>?`」訊息。

---

### 正確啟動順序（讓 IFP 立即掛到 bus）

> 目標：先把 **system bus** 啟好，再讓 **SSSD（含 IFP）** 起來註冊到 bus
> 之後就算你真的要重啟 bus，也記得**順手重啟 IFP responder**，避免卡在「能連 bus 但 IFP 尚未重註冊」的空窗期。

- **Terminal-1**
    - 先中斷 sssctl 執行，等 dbus ready 再啟動
        ```bash
        <CTRL> + C
        ```
    - **Terminal-2**：先把 **system bus** 啟好
        ```bash
        # 刪除 socket，並重建
        rm -rf /var/run/dbus
        mkdir -p /var/run/dbus

        # 重啟 system bus
        dbus-daemon --system --nofork --print-address
        ```
    - 重啟 sssctl 執行
        讓 **SSSD（含 IFP）** 起來註冊到 bus
- **Terminal-3**
    ```bash
    # 現在就能查 domain 狀態了
    sudo sssctl domain-status ldapdomain
    ```

---

### 重啟失敗 - Troubleshooting
```
dbus-daemon[4587]: Failed to start message bus: \
  The pid file "/run/dbus/pid" exists, \
  if the message bus is not running, remove this file
```
- 忘記刪除 socket 檔案
- 執行
    ```
    rm -rf /var/run/dbus
    ```

<br>

{%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}