# Khắc phục sự cố Construct

Các lỗi thường gặp khi cài đặt và chạy, kèm cách khắc phục.

Xác minh lần cuối: **2026-02-20**.

## Cài đặt / Bootstrap

### Không tìm thấy `cargo`

Triệu chứng:

- bootstrap thoát với lỗi `cargo is not installed`

Khắc phục:

```bash
./install.sh --install-rust
```

Hoặc cài từ <https://rustup.rs/>.

### Thiếu thư viện hệ thống để build

Triệu chứng:

- build thất bại do lỗi trình biên dịch hoặc `pkg-config`

Khắc phục:

```bash
./install.sh --install-system-deps
```

### Build thất bại trên máy ít RAM / ít dung lượng

Triệu chứng:

- `cargo build --release` bị kill (`signal: 9`, OOM killer, hoặc `cannot allocate memory`)
- Build vẫn lỗi sau khi thêm swap vì hết dung lượng ổ đĩa

Nguyên nhân:

- RAM lúc chạy (<5MB) khác xa RAM lúc biên dịch.
- Build đầy đủ từ mã nguồn có thể cần **2 GB RAM + swap** và **6+ GB dung lượng trống**.
- Bật swap trên ổ nhỏ có thể tránh OOM RAM nhưng vẫn lỗi vì hết dung lượng.

Cách tốt nhất cho máy hạn chế tài nguyên:

```bash
./install.sh --prefer-prebuilt
```

Chế độ chỉ dùng binary (không build từ nguồn):

```bash
./install.sh --prebuilt-only
```

Nếu bắt buộc phải build từ nguồn trên máy yếu:

1. Chỉ thêm swap nếu còn đủ dung lượng cho cả swap lẫn kết quả build.
1. Giới hạn số luồng build:

```bash
CARGO_BUILD_JOBS=1 cargo build --release --locked
```

1. Bỏ bớt feature nặng khi không cần Matrix:

```bash
cargo build --release --locked --no-default-features --features hardware
```

1. Cross-compile trên máy mạnh hơn rồi copy binary sang máy đích.

### Build rất chậm hoặc có vẻ bị treo

Triệu chứng:

- `cargo check` / `cargo build` dừng lâu ở `Checking construct`
- Lặp lại thông báo `Blocking waiting for file lock on package cache` hoặc `build directory`

Nguyên nhân:

- Thư viện Matrix E2EE (`matrix-sdk`, `ruma`, `vodozemac`) lớn và tốn thời gian kiểm tra kiểu.
- TLS + crypto native build script (`aws-lc-sys`, `ring`) tăng thời gian biên dịch đáng kể.
- `rusqlite` với SQLite tích hợp biên dịch mã C cục bộ.
- Chạy nhiều cargo job/worktree song song gây tranh chấp file lock.

Kiểm tra nhanh:

```bash
cargo check --timings
cargo tree -d
```

Báo cáo thời gian được ghi tại `target/cargo-timings/cargo-timing.html`.

Lặp nhanh hơn khi không cần kênh Matrix:

```bash
cargo check --no-default-features --features hardware
```

Lệnh này bỏ qua `channel-matrix` và giảm đáng kể thời gian biên dịch.

Build với Matrix:

```bash
cargo check --no-default-features --features hardware,channel-matrix
```

Giảm tranh chấp lock:

```bash
pgrep -af "cargo (check|build|test)|cargo check|cargo build|cargo test"
```

Dừng các cargo job không liên quan trước khi build.

### Không tìm thấy lệnh `construct` sau cài đặt

Triệu chứng:

- Cài đặt thành công nhưng shell không tìm thấy `construct`

Khắc phục:

```bash
export PATH="$HOME/.cargo/bin:$PATH"
which construct
```

Thêm vào shell profile nếu cần giữ lâu dài.

## Runtime / Gateway

### Không kết nối được gateway

Kiểm tra:

```bash
construct status
construct doctor
```

Xác minh `~/.construct/config.toml`:

- `[gateway].host` (mặc định `127.0.0.1`)
- `[gateway].port` (mặc định `3000`)
- `allow_public_bind` chỉ bật khi cố ý mở truy cập LAN/public

### Lỗi ghép nối / xác thực webhook

Kiểm tra:

1. Đảm bảo đã hoàn tất ghép nối (luồng `/pair`)
2. Đảm bảo bearer token còn hiệu lực
3. Chạy lại chẩn đoán:

```bash
construct doctor
```

## Sự cố kênh

### Telegram xung đột: `terminated by other getUpdates request`

Nguyên nhân:

- Nhiều poller dùng chung bot token

Khắc phục:

- Chỉ giữ một runtime đang chạy cho token đó
- Dừng các tiến trình `construct daemon` / `construct channel start` thừa

### Kênh không khỏe trong `channel doctor`

Kiểm tra:

```bash
construct channel doctor
```

Sau đó xác minh thông tin xác thực và trường allowlist cho từng kênh trong config.

## Chế độ dịch vụ

### Dịch vụ đã cài nhưng không chạy

Kiểm tra:

```bash
construct service status
```

Khôi phục:

```bash
construct service stop
construct service start
```

Xem log trên Linux:

```bash
journalctl --user -u construct.service -f
```

## URL cài đặt

```bash
curl -fsSL https://raw.githubusercontent.com/KumihoIO/construct-os/main/install.sh | bash
```

## Vẫn chưa giải quyết được?

Thu thập và đính kèm các thông tin sau khi tạo issue:

```bash
construct --version
construct status
construct doctor
construct channel doctor
```

Kèm thêm: hệ điều hành, cách cài đặt, và đoạn config đã ẩn bí mật.

## Tài liệu liên quan

- [operations-runbook.md](operations-runbook.md)
- [one-click-bootstrap.md](one-click-bootstrap.md)
- [channels-reference.md](channels-reference.md)
- [network-deployment.md](network-deployment.md)
