Debian 檔案庫
軟體包管理工具
可以讓使用者從檔案庫安裝 統一設定 的二進位制軟體包到系統中
目前 Debian 的軟體包管理系統是 高階軟體包工具 APT
APT 前端使用者程式和後端的不同存取方式
APT 輔助工具
apt-get 和 apt-cache 是最基礎的基於 APT 的軟體包管理工具,意味快但功能不豐富
apt-get 和 apt-cache 可以使用 /etc/apt/preferences
來管理軟體包的多個版本,但這非常繁瑣
在成功安裝下載的軟體包後,apt 將預設刪除快取的 .deb
軟體包
對於典型的 HTTP 存取,檔案庫在 /etc/apt/sources.list
檔案
# 源的資訊組成 deb/deb-src URL stable/testing/unstable [area ...]
deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free
一行一條
第一個引數
第二個引數 Debian 檔案庫 的根 URL
第三個引數是發行版名稱,這個一般需要檢視一下
後面全部引數是 Debian 檔案庫的有效檔案庫範圍名稱
自由軟體
下面是一個小指令碼可以幫助你新增 第三方檔案庫,前提是你的預設 /etc/apt/sources.list 沒有被破壞並且會 Linux 的 CLI 介面的基本操作,此指令碼是根據預設的 sources.list 建立,當然你可以不用指令碼用手動編輯 φ(゜▽゜*)♪
第一步,在命令列執行以下內容
# 建立一個資料夾 test 名稱隨意
mkdir test
# 建立指令碼,可以使用 vi, vim, ... 編輯,建議不會對應編輯器可以查詢一下用法
vi apt-sources.sh
第二步,編輯 apt-sources.sh
指令碼,注意:在進入 vi 編輯模式後 小心 每個操作,如果 不確定 或 有問題,可以按 ESC
進入命令模式再按 u
復原
按照 i
輸入下面內容,只要按 i
就可以進入編輯模式
#!/bin/bash
if [ -r $1 ]; then
while read -r url; do
filename=${url#*.}
grep "^deb.*" /etc/apt/sources.list | sed -E "s~http.*\.[[:lower:]]{2,5}~$url~" > /etc/apt/sources.list.d/${filename%%.*}.list
done < "$1"
apt update
else
echo "檔案不存在或無法許可權讀取"
fi
輸入完上面內容,按 Esc
進入命令模式,按 :wq
儲存退出 vi 編輯器,如果有問題按照上面警告可以復原操作按 :q!
退出 vi
注:讀不懂指令碼,可以在 此處 瞭解 shell 指令碼的基本知識
第三步,編輯第三方檔案庫資訊,vi sources.txt
像第二步一樣輸入下面內容,當然你可以新增其他你知道的 第三方檔案庫資訊,注意一條地址一行
http://mirrors.ustc.edu.cn
https://mirrors.aliyun.com
第四步,執行指令碼
# 賦予指令碼執行權
chmod +x apt-sources.sh
# 執行指令碼
sudo ./apt-sources.sh sources.txt
# 檢視新增是否成功
cd /etc/apt/sources.list.d/ && ls -lh
sudo
進行臨時提權,關於 sudo 資訊說明:
/etc/apt/sources.list.d/
目錄中找到不同第三方檔案庫進行調整/etc/apt/sources.list.d/
目錄中最好一個檔案庫一個檔案/etc/apt/sources.list.d/
是官方為我們準備的不是指令碼建立的.list
檔案存放在 /etc/apt/sources.list.d/
目錄中網上直接複製的源一般存在以下問題
協定問題,一般是 HTTP 協定,部分對 HTTPS 協定不友好需要安裝 apt-transport-https
或 ca-certificates
的支援
發行版號不匹配,這個建議檢視自己當前系統 uname -a
然後在官網檢視,或看看 /etc/apt/sources.list 預設的內容,所以一般別改 /etc/apt/sources.list
deb-src
一般含義此行需要下載大量原始碼資訊,一些不必的可以註釋掉,不一定每個倉庫需要拉取
GPG error
問題,這個一般是版本問題或安裝時是離線安裝,導致發行版的後設資料檔案 Release 不同步出現 GPG 驗證錯誤,或者離線安裝沒有網路在安裝時 apt 自動設定根據 CD/DVD 的資料設定等可能,建議瞭解 GPG
解決方法是新增上對應的簽名即可,兩種方法,都需要 wget 這個一般有自帶,解決時的兩種關於簽名的檔案 .asc
或 .gpg
直接使用 gpg 程式
確認 gpg 是否安裝,沒有就安裝一下
sudo apt-get install gpg
得到 .gpg
檔案,具體名字隨便,建議有辨識度,比如阿里雲記為 aliyun.gpg
# 根據對應檔案庫的 Release.gpg 檔案下載
wget -qO- https://mirrors.aliyun.com/debian/dists/buster/Release.gpg?spm=a2c6h.25603864.0.0.25864a07v5Lsgz > aliyun.gpg
# 如果是 .asc 檔案,使用 gpg --dearmor 轉化
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
新增 .gpg
檔案,兩種方法
# 方法一:安裝 /etc/apt/keyrings/ 目錄
sudo install -D -o root -g root -m 644 aliyun.gpg /etc/apt/keyrings/aliyun.gpg
# 方法二:安裝 /etc/apt/trusted.gpg.d/ 目錄
sudo install -D -o root -g root -m 644 aliyun.gpg /etc/apt/trusted.gpg.d/aliyun.gpg
方法一需要改變 list 檔案,在 deb/deb-src
和 url
之間新增一條資訊 [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/aliyun.gpg]
# 這是 /etc/apt/sources.list.d/aliyun.list 檔案,其中 ... 是簡化的需要根據情況填寫,參考預設的 /etc/apt/sources.list
deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/aliyun.gpg] https://mirrors.aliyun.com/debian ...
使用 apt 預設的 apt-key
使用非常方便,首先下載 .asc 或 .gpg 檔案,然後使用 apt-key 安裝
# 下載
wget https://archive.kali.org/archive-key.asc
wget -qO- https://mirrors.aliyun.com/debian/dists/buster/Release.gpg?spm=a2c6h.25603864.0.0.25864a07v5Lsgz > aliyun.gpg
# 安裝
sudo apt-key archive-key.asc
sudo apt-key aliyun.gpg
Release.gpg 檔案在每個檔案庫都有的,比如阿里的存取 https://mirrors.aliyun.com/debian/dists/buster 就可以看到,.asc
檔案也差不多在檔案庫中但位置不定,不同檔案庫可能不同需要自己查,Debian 官方檔案庫 的 keys 倉庫 地址
/etc/apt/sources.list 不要包含 testing 或 unstable
/etc/apt/sources.list 不要在標準的 Debian 中混合使用其它非 Debian 的檔案庫
第三方檔案庫放在 /etc/apt/sources.list.d 分類以 .list
字尾結尾的檔案中
不要建立 /etc/apt/preferences
不瞭解會造成的全部影響,就不要通過組態檔改變軟體包管理工具的預設行為
不要使用 dpkg -i random_package
或 dpkg --force-all -i random_package
安裝任何軟體包
不要刪除或修改 /var/lib/dpkg/ 中的檔案
不要讓從原始碼直接安裝的程式覆蓋系統檔案
沒有在安全的條件下使用你特定的設定進行徹底地測試,就不要從 Debian 安裝任何軟體包
使用 non-free 和 contrib 中的軟體包所需要冒的風險
Debian 系統通過其控制檔案欄位中的版本化二進位制依賴宣告機制
Conflicts, Replaces, Provides 定義到一個虛擬的軟體包,確保了在任何一個時間只能安裝一個提供該虛擬包的真正軟體包
更新後設資料: apt update, apt-get update, aptitude update
安裝軟體: apt install ..., apt-get install ..., aptitude install ...
升級軟體: apt upgrade/full-upgrade, pt-get upgrade/dist-upgrade, aptitude safe-upgrade/full-upgrade
移除軟體: apt remove ..., apt-get remove ..., aptitude remove ...
清除軟體: apt purge ..., apt-get purge ..., aptitude purge ...
apt | aptitude | apt-get/apt-cache | 描述 |
---|---|---|---|
apt update | aptitude update | apt-get update | 更新軟體包檔案庫後設資料 |
apt install foo | aptitude install foo | apt-get install foo | 安裝 foo 軟體包的候選版本以及它的依賴 |
apt upgrade | aptitude safe-upgrade | apt-get upgrade | 安裝已安裝的軟體包的候選版本並且不移除任何其它的軟體包 |
apt full-upgrade | aptitude full-upgrade | apt-get dist-upgrade | 安裝已安裝的軟體包的候選版本,並且需要的話會移除其它的軟體包 |
apt remove foo | aptitude remove foo | apt-get remove foo | 移除 foo 軟體包,但留下組態檔 |
apt autoremove | N/A | apt-get autoremove | 移除不再需要的自動安裝的軟體包 |
apt purge foo | aptitude purge foo | apt-get purge foo | 清除 foo 軟體包的組態檔 |
apt clean | aptitude clean | apt-get clean | 完全清除本地倉庫的軟體包檢索檔案 |
apt autoclean | aptitude autoclean | apt-get autoclean | 清除本地倉庫中過時軟體包的軟體包檢索檔案 |
apt show foo | aptitude show foo | apt-cache show foo | 顯示 foo 軟體包的詳細資訊 |
apt search regex | aptitude search regex | apt-cache search regex | 搜尋匹配 regex 的軟體包 |
N/A | aptitude why regex | N/A | 解釋匹配 regex 的軟體包必須被安裝的原因 |
N/A | aptitude why-not regex | N/A | 解釋匹配 regex 的軟體包不必安裝的原因 |
N/A | aptitude search '~i!~M' | apt-mark showmanual | 列出手動安裝的軟體包 |
注意: