Access Hub Agent
Đồng bộ từ mã nguồn lúc 10:57, 03/10/2026
Skip to content
ADR 0001Chấp nhận

ADR 0001. Binary tĩnh, không dùng CGO ​

Biên dịch với CGO_ENABLED=0, -trimpath, liên kết tĩnh. Một binary cho mỗi cặp hệ điều hành và kiến trúc. Không dùng thư viện cần CGO (ví dụ một số binding systemd, libvirt). Với systemd dùng D-Bus thuần Go hoặc gọi systemctl khi cần.

Ngày quyết định
30/09/2026
Chấp nhận
30/09/2026
Phạm vi
Agent
Người chấp nhận
Chưa ghi
  1. Đề xuất30/09/2026
  2. Chấp nhận30/09/2026
  • Trạng thái: Đã chấp nhận
  • Ngày: 2026-09-30

Bối cảnh ​

Agent chạy trên nhiều bản phân phối Linux (glibc cũ như CentOS 7, glibc mới, musl) và Windows. Phụ thuộc thư viện hệ thống làm phức tạp việc đóng gói và gây lỗi khó tái hiện trên hàng nghìn máy.

Quyết định ​

Biên dịch với CGO_ENABLED=0, -trimpath, liên kết tĩnh. Một binary cho mỗi cặp hệ điều hành và kiến trúc. Không dùng thư viện cần CGO (ví dụ một số binding systemd, libvirt). Với systemd dùng D-Bus thuần Go hoặc gọi systemctl khi cần.

Hệ quả ​

  • Chạy trên CentOS 7 (glibc 2.17), Alpine, kernel từ 3.10 mà không cần thư viện.
  • Gói đơn giản, không khai báo phụ thuộc.
  • Không thể dùng resolver cgo của Go: dùng resolver thuần Go, chấp nhận khác biệt nhỏ (ví dụ nsswitch phức tạp). Ghi vào tài liệu vận hành.
  • Không dùng SQLite CGO cho WAL, tự viết WAL đơn giản (xem ADR 0002).
  • CI kiểm tra binary không có CGO và kích thước không vượt 20 MB.

Phương án đã cân nhắc ​

Phương ánLý do không chọn
CGO với glibcVướng phiên bản glibc, phải dựng theo từng bản phân phối
Python hoặc scriptCần runtime trên máy, tài nguyên khó kiểm soát, khó ký và bảo vệ
RustTốt, nhưng đội đã chọn Go để dùng chung kỹ năng với nhóm Collector và sinh mã giao thức từ cùng tệp .proto
Trang này có giúp được bạn không?
Sửa trang này

Nội dung đồng bộ từ kho mã access-hub-agent lúc 10:57, 03/10/2026. Khi tài liệu và mã khác nhau, mã thắng.