Debian新一代的APT軟件源配置文件格式DEB822詳解

Debian 的 DEB822 格式詳解:新一代 APT 源配置

DEB822 是一種基于 RFC 822 數據格式的配置文件語法,Debian 新一代的 APT 軟件源配置文件格式就采用了 DEB822。DEB822 格式從 Debian 11 (Bullseye) 開始被引入,并在 Debian 12 (Bookworm) 中成為了默認配置,DEB822 格式旨在取代傳統的單行 sources.list 格式,以提供更清晰、更強大、更不易出錯的配置體驗。

APT 軟件源配置為什么需要新的格式?

傳統的 /etc/apt/sources.list 文件雖然簡單,但也存在一些問題:

  • 可讀性差: 當一個源有多個組件(components)或需要添加復雜選項時,單行格式會變得非常長且難以閱讀。
  • 不便解析: 腳本或程序需要通過復雜的字符串匹配和解析來修改配置,容易出錯。
  • 信息冗余: 不同的發行版(如 stablestable-updates)往往需要重復書寫幾乎完全相同的行,只是套件名(suite)不同。
  • 選項限制: 在單行格式中添加架構(architectures)或簽名密鑰(Signed-By)等選項,語法較為繁瑣。

DEB822 格式通過其“字段: 值”的塊狀結構,完美地解決了以上所有問題。

文件位置和命名

與將所有內容都放在 /etc/apt/sources.list 文件中不同,DEB822 格式倡導模塊化管理:

  • 位置: /etc/apt/sources.list.d/,所以在老版本的 Debian 中,使用 sed -i 's#http://deb.debian.org#http://mirrors.aliyun.com#g' /etc/apt/sources.list 命令更改源時就會報錯 sed:?can't?read?/etc/apt/sources.list:?No?such?file?or?directory.

  • 文件擴展名: 必須使用 .sources 作為文件擴展名(例如 debian.sources, google-chrome.sources)。

  • 傳統文件兼容: 舊的 .list 文件仍然可以被識別,以保證向后兼容,但新系統上不建議混用。

語法結構

DEB822 格式的核心是段落(Stanza),每個段落代表一個或一組軟件源配置。

  • 段落: 由多個 字段: 值 對組成,段落之間用一個或多個空行分隔。
  • 字段(Field): 字段名不區分大小寫(但通常遵循首字母大寫的慣例),以冒號結尾,例如 Types:
  • 值(Value): 字段的值可以包含多個單詞,通常用空格分隔。
  • 注釋(Comment):# 號開頭的行被視為注釋,會被 APT 忽略。

一個典型的 .sources 文件可以包含一個或多個段落。

核心字段詳解

以下是 DEB822 格式中最常用和最重要的字段:

字段名說明示例
Types[必需] 定義源的類型。最常見的是 deb (二進制包) 和 deb-src (源代碼包)。Types: deb deb-src
URIs[必需] 定義一個或多個軟件倉庫的根 URI (統一資源標識符)。可以列出多個鏡像地址,APT 會自動選擇可用的。URIs: http://mirrors.aliyun.com/debian
Suites[必需] 定義要使用的發行版“套件”名(也叫 distribution)。可以列出多個,例如穩定版和其更新。Suites: bookworm bookworm-updates
Components[必需] 定義要啟用的軟件“組件”。Debian 官方倉庫通常包含 main, contrib, non-free, non-free-firmwareComponents: main contrib non-free-firmware
Signed-By[強烈推薦] 指定用于驗證此倉庫簽名的 GPG 密鑰文件的絕對路徑。這是比 apt-key 更安全的方式。Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Architectures限制此源僅對指定的 CPU 架構生效。如果不指定,則默認為系統支持的所有架構。Architectures: amd64 arm64
Enabled控制此段落(源)是否啟用。值為 yesno。默認為 yes。這提供了一種無需注釋掉整個塊就能臨時禁用源的便捷方法。Enabled: no
Description為源添加一段描述性文字,方便人類閱讀和理解。APT 本身不使用此字段。Description: Google Chrome official repository
Pdiffs是否使用 Pdiffs (Package-Patches) 來增量更新索引文件。值為 yesno。默認為 yes,可以加速 apt updatePdiffs: no

與舊格式的對比

看一個實際的例子,將一個包含主倉庫、安全更新和系統更新的舊格式 sources.list 轉換為新的 DEB822 格式。

舊格式 (/etc/apt/sources.list)
# 主倉庫
deb http://deb.debian.org/debian/ bookworm main contrib non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm main contrib non-free-firmware# 系統更新
deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware# 安全更新
deb http://security.debian.org/debian-security/ bookworm-security main contrib non-free-firmware
deb-src http://security.debian.org/debian-security/ bookworm-security main contrib non-free-firmware

分析:

  • 總共 6 行配置。
  • 大量的 URL 和組件信息被重復書寫。
  • 需要兩個不同的域名來處理主倉庫和安全倉庫。
新格式 (/etc/apt/sources.list.d/debian.sources)
# Debian Official Archives
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: bookworm bookworm-updates
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg# Debian Security Updates
Types: deb deb-src
URIs: http://security.debian.org/debian-security/
Suites: bookworm-security
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

分析:

  • 更簡潔: 只用了兩個段落就定義了所有內容。
  • 無冗余: bookwormbookworm-updates 共享同一個 URI 和組件列表,只需在 Suites 字段中同時列出即可。
  • 結構化: 每個信息的用途都由字段名清晰標出,一目了然。
  • 更安全: Signed-By 字段明確了密鑰來源,提升了安全性。

如何管理 DEB822 文件

  • 手動創建/編輯: 可以使用任何文本編輯器(如 nanovim)在 /etc/apt/sources.list.d/ 目錄下創建和修改 .sources 文件。
  • 自動轉換: APT 提供了一個非常方便的工具來將舊的 .list 文件轉換為新的 .sources 格式。
    sudo apt modernize-sources
    
    該命令會讀取現有的 /etc/apt/sources.list/etc/apt/sources.list.d/*.list 文件,并生成對應的 .sources 文件,同時會自動備份舊文件。

小結

DEB822 格式是 Debian 和相關發行版(如 Ubuntu)在軟件包管理方面的一大進步。通過提供一種結構化、可擴展且更易于人類和機器理解的語法,解決了傳統單行格式的諸多痛點。對于系統管理員和開發者來說,掌握 DEB822 格式將使得 APT 源的管理工作變得更加高效、安全和可靠。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93326.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實戰 AI8051U 音視頻播放:USART-SPI→DMA-P2P→SPI+I2S 例程詳解

視頻P2P播放,時間計算:fps20,50ms 周期刷屏時間:160*80 一幀刷屏時間28.2ms幀間隔:50ms-28.2ms21.8ms音頻雙緩沖區交叉播放,利用視頻播放幀間隔加載下一個緩沖區音頻數據,時間計算:16000采樣率 …

解釋器模式C++

解釋器模式(Interpreter Pattern)是一種行為型設計模式,它用于定義一種語言的語法規則,并構建一個解釋器來解釋該語言中的句子。這種模式適用于需要處理固定語法規則的場景,如表達式解析、配置文件解析等。 解釋器模式…

debian 13 顯示中文字體 不再顯示菱形塊 終端顯示中文

找了很多坑。。其它就安裝一下中文字體即可 。 apt install ttf-wqy-zenhei 之后測試命令 fc-list :langzh 顯示了剛字體的路徑和中文字即成功了。 rootdebian:~# dpkg-reconfigure locales 以上命令配置中文語言。 debian 12.11 安裝 MySQL 下載配置文件 &am…

51單片機-驅動蜂鳴器模塊教程

本章概述思維導圖: 51單片機驅動蜂鳴器模塊教程 蜂鳴器簡介 蜂鳴器是一種將電信號轉換為聲音信號的電子元件,廣泛應用于報警、提示、通知等場景。其核心原理基于壓電效應或電磁感應:因此可分為兩種類型蜂鳴器:壓電式蜂鳴器和電磁…

常用Linux指令:Java/MySQL/Tomcat/Redis/Nginx運維指南

一、基礎Linux指令1. 文件與目錄操作ls -lh # 查看文件詳情(人類可讀格式) pwd # 顯示當前目錄路徑 cd /path # 切換目錄 mkdir dirname # 創建目錄 rm -rf dirname # 強制刪除目錄 cp -r src dest # 遞歸復制目錄 mv old new # 移動/重命…

小紅書帖子評論的nodejs爬蟲腳本

從小紅書上爬取評論,但是目前還不能完全爬取子評論,使用GPT沒能解決這個問題。后續博主可能會改進。或者如果你懂的話,可以在博主代碼基礎上改進。需要安裝nodejs軟件,部署環境變量。博主是在pycharm中運行的。代碼無套路獲取。自…

【iOS】多線程原理

目錄 前言 基本概念及原理 線程、進程與隊列 線程的定義: 進程的定義: 線程與進程之間的聯系與區別: 線程和runloop的關系 影響任務執行速度的因素 多線程 多線程生命周期 線程池的原理 iOS中多線程的實現方式 線程安全問題 互斥…

藥房發藥的“時間密碼”:同步時鐘用藥安全?

在醫院的藥房里,每一粒藥片的流轉都暗藏“時間密碼”。從藥品入庫到患者服藥,時間記錄的精確性直接關乎生命安全。一旦時間數據出現偏差,輕則導致用藥爭議,重則引發醫療事故。近年來,隨著醫療數字化進程加速&#xff0…

UI-TARS-Desktop 深度解析:下一代智能自動化桌面平臺

目錄 1. 產品概述 2. 核心功能與技術架構 2.1 關鍵技術 2.2 功能亮點 3. 競品對比分析 4. 部署與成本分析 4.1 部署方案 4.2 隱性成本 5. 商業化前景 5.1 目標市場 5.2 盈利模式 5.3 風險挑戰 6. 未來演進方向 7. 總結 1. 產品概述 UI-TARS-Desktop 是一款基于A…

STM32L051同時處理Alarm A和Alarm B中斷

同時處理Alarm A和Alarm B中斷 當同時啟用Alarm A和Alarm B時,需要在中斷處理程序中準確判斷是哪個鬧鐘觸發了中斷。以下是完整的解決方案: 中斷判斷與處理流程 1. 在RTC中斷服務程序中判斷中斷源 // stm32l0xx_it.c void RTC_IRQHandler(void) {/* USER…

OpenCV---morphologyEx形態學操作

在計算機視覺與圖像處理領域,形態學操作是一種基于圖像形狀的非線性處理方法,廣泛應用于噪聲去除、邊緣檢測、目標分割等任務。OpenCV提供的morphologyEx函數是形態學操作的“瑞士軍刀”,它整合了多種高級形態學運算,能夠實現開運…

RuoYi-Cloud 接入 Sentinel 的 3 種限流方式

場景: 服務:ruoyi-robot(對外接口統一在 /external/gs/**) 網關:ruoyi-gateway(轉發到 ruoyi-robot) 注冊/配置:Nacos 流控:Sentinel 1.8.x 控制臺 Dashboard&#x…

快速搭建python HTTP Server測試環境

這里用python http.server搭建一個api測試環境,自定義請求處理程序,以模擬不同api相應。 1 服務代碼 /api/data,端口8000,GET 返回json數據為"{"message": "This is a sample API response"}" 代…

Docker容器定時任務時區Bug導致業務異常的環境變量配置解決方案

Docker容器定時任務時區Bug導致業務異常的環境變量配置解決方案 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都是…

解鎖Dify與MySQL的深度融合:MCP魔法開啟數據新旅程

文章目錄解鎖Dify與MySQL的深度融合:MCP魔法開啟數據新旅程引言:技術融合的奇妙開篇認識主角:Dify、MCP 與 MySQL(一)Dify:大語言模型應用開發利器(二)MCP:連接的橋梁&am…

雜記 02

1 WSL安裝 WSL的安裝遇到了問題,睡醒起來發現電腦藍屏了,linux系統沒裝好,但是好像大部分開發環境都是linux下需要的,先這樣用一下吧,到時候再說。可以問下前輩開發細節,主要是網絡代理問題,保…

劇本殺小程序系統開發:重構推理娛樂生態

在娛樂產業蓬勃發展的今天,推理娛樂作為一種充滿智慧和挑戰的娛樂形式,受到了越來越多人的喜愛。劇本殺,作為推理娛樂的代表之一,正以其獨特的魅力吸引著大量玩家。而劇本殺小程序系統開發,則為推理娛樂生態的重構帶來…

力扣習題:基本計算器

本片內容我們將針對于一個力扣中的一道很經典的習題:基本計算器。 這道題目十分經典,在很多大廠的面試題中都有出現過 因此我們將進一步來學習 該題目代碼已經上傳作者的個人gitee:CPP 學習代碼庫: C代碼庫新庫,舊有C倉庫滿員了喜…

Element用法---Loading 加載

僅供參考 文章目錄一、加載動畫二、Loading 組件1、指令調用 Loading2、服務調用 Loading一、加載動畫 當我們打開某個頁面時,如果需要加載的數據很多或者網絡很差,頁面加載就會非常緩慢,中間可能會很長時間顯示空白,那么就需要加…

飛算AI 3.2.0實戰評測:10分鐘搭建企業級RBAC權限系統

飛算AI 3.2.0實戰評測:10分鐘搭建企業級RBAC權限系統 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都…