
本博客所有文章除特別聲明外,均采用CC BY-NC-SA 4.0許可協(xié)議。轉(zhuǎn)載請(qǐng)注明來(lái)自 唯你
簡(jiǎn)介
cargo deny 是一個(gè) Rust 工具,用于檢查項(xiàng)目依賴項(xiàng)的許可證、安全性和其他合規(guī)性問(wèn)題。在 Rust CI(持續(xù)集成)中,cargo deny 扮演著重要角色:
- 許可證檢查:確保項(xiàng)目使用的所有依賴項(xiàng)的許可證都符合項(xiàng)目的許可政策。
- 安全漏洞掃描:檢查依賴項(xiàng)是否存在已知的安全漏洞。
- 依賴項(xiàng)合規(guī)性:驗(yàn)證依賴項(xiàng)是否符合項(xiàng)目的其他要求,如版本限制或來(lái)源限制。
- 禁用特定依賴項(xiàng):允許明確禁止使用某些依賴項(xiàng)。
在 CI 流程中,cargo deny 通常作為一個(gè)檢查步驟運(yùn)行,以確保項(xiàng)目在構(gòu)建和部署之前滿足所有合規(guī)性要求。這有助于維護(hù)項(xiàng)目的質(zhì)量、安全性和法律合規(guī)性。
一句話:cargo deny 讓你合法合規(guī)放心使用第三方依賴
使用
- 地址:Cargo deny
- 安裝命令:
cargo install --locked cargo-deny && cargo deny init && cargo deny check
常見(jiàn)錯(cuò)誤
使用 cargo-deny 報(bào)錯(cuò) failed to open advisory database
Installed package `cargo-deny v0.16.1` (executable `cargo-deny.exe`)
PS E:\Rust\easy-publish> cargo deny check
2024-11-11 02:07:34 [ERROR] failed to fetch advisory database https://github.com/RustSec/advisory-db: An IO error occurred when talking to the server: error sending request for url (https://github.com/RustSec/advisory-db/info/refs?service=git-upload-pack)
方案一: 可以嘗試:
- 刪除 ~/.cargo/advisory-db/ 目錄,然后使用 cargo deny fetch / cargo deny check 重新下載它。多試幾次?
- 在 deny.toml 配置中的 git 地址修改為 gitee 上的鏡像地址:https://gitee.com/tyr-rust-bootcamp-mirror/advisory-db.git
- 刪掉 deny.toml,執(zhí)行 cargo deny init 重新生成一個(gè),然后按照你的需要修改。
- 檢查你的網(wǎng)絡(luò),想辦法~
方案二:可以嘗試通過(guò)運(yùn)行:cargo deny check advisories 解決
升級(jí)最新版本,大量 this key has been removed

image.png
解決辦法:
- 先刪除原項(xiàng)目下的 deny.toml 配置文件
- 在項(xiàng)目根目錄下運(yùn)行命令行
cargo deny init重新生成一份新版本 deny.toml 文件 - 在 deny.toml 中找到 allow 然后將原來(lái) allow 中許可證,類似如下代碼,拷貝到新 deny.toml 中即可
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"Unicode-DFS-2016",
"MPL-2.0",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"CC0-1.0",
"OpenSSL",
]
- 運(yùn)行
cargo deny check重新檢測(cè)一波,是否正常