Ubuntu安裝源

最近在Ubuntu上面安裝軟件,折騰了一段時間,把一些關於安裝源的內容總結一下。

1 前言

安裝源和系統的版本(16.04,18.04等)、架構(x86,arm64等)都相關,所以在使用源之前,需要先確定所安裝機器的系統和架構。

1.1 查看系統發行版本

cat /etc/issue

Ubuntu 16.04.2 LTS \n \l

CentOS release 6.3 (Final)
Kernel \r on an \m

或者

lsb_release -a

No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.2 LTS
Release:	16.04
Codename:	xenial

LSB Version:	:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID:	CentOS
Description:	CentOS release 6.3 (Final)
Release:	6.3
Codename:	Final

1.2 查看系統內核版本

cat /proc/version

Linux version 4.4.77 (zouxf@mid-server) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #329 SMP Mon Dec 18 15:44:03 CST 2017

Linux version 3.10.0.514.26.2.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #4 SMP Wed Aug 16 17:09:53 CST 2017

1.3 查看架構

uname -a

Linux hostname 3.10.0.514.26.2.el7.x86_64 #4 SMP Wed Aug 16 17:09:53 CST 2017 x86_64 x86_64 x86_64 GNU/Linux

Linux username 4.4.77 #329 SMP Mon Dec 18 15:44:03 CST 2017 aarch64 aarch64 aarch64 GNU/Linux

Darwin appledeMacBook-Pro.local 19.4.0 Darwin Kernel Version 19.4.0: Wed Mar  4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64 x86_64

或者 

arch

返回
x86_64 、aarch64 、i386

2 源列表文件

在Ubuntu系統中,控制軟件安裝更新的源服務器地址的文件是 /etc/apt/sources.list (在CentOS中是 /etc/yum.conf, /etc/yum.repos.d/, /etc/yum/)。和sources.list功能一樣的是/etc/apt/sources.list.d/*.list(*代表一個文件名,只能由字母、數字、下劃線、英文句號組成)。sources.list.d目錄下的*.list文件爲在單獨文件中寫入源的地址提供了一種方式,通常用來安裝第三方的軟件。

2.1 示例

deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

以上是Ubuntu官方的14.04版本的源列表文件內容。

2.2 具體含義

deb      http://archive.ubuntu.com/ubuntu/ trusty   main    restricted universe multiverse
檔案類型  鏡像URL                            發行版本  軟件倉庫1 軟件倉庫2   軟件倉庫3  軟件倉庫4

2.2.1 檔案類型 (Archive type)

  • deb關鍵字表示二進制預編譯軟件包來源,我們一般用的就是這種檔案類型。
  • deb-src關鍵字表示軟件包的源代碼包來源。

2.2.2 鏡像url

表示源文件的地址,其中以 ubuntu 結尾表示支持 x86 的架構版本,以 ubuntu-port 結尾表示支持 arm64 的架構版本。

發行版本distributions內容所在目錄

pool/main/目錄下按源碼包名稱的首字母歸檔

每一個源目錄下都應該至少包含distspool兩個目錄,否則就是無效的源。以下是各目錄詳情:

  • /dists/ 目錄內存放着各 發行版(distributions)文件,如 trusty,xenial等。
  • /pool/ 目錄爲軟件包的物理地址。軟件包均放進一個巨大的 池子(pool),按照源碼包名稱分類存放。爲了方便管理,pool 目錄下按屬性再分類(main,restricted, universe, multiverse),分類下面再按源碼包名稱的首字母歸檔。這些目錄包含的文件有:運行於各種系統架構的二進制軟件包生成這些二進制軟件包的源碼包。你可以執行命令 apt-cache showsrc packageNameToBeInstalled 查找看源碼包的文件信息,其中 Directory 會顯示該軟件包的存放位置。例如: apache2 軟件包存放在 pool/main/a/apache2/ 目錄中。另外,由於lib*軟件包數量巨大它們以特殊的方式歸檔,例如libpaper 軟件包存放在 pool/main/libp/libpaper/。
  • /indices/ 目錄爲維護人員文件和重載文件。
  • /project/ 目錄大部分爲開發人員的資源,如 project/experimental/,本目錄包含了處於開發中的軟件包和工具,它們均處於 alpha 測試階段。用戶不應使用這些軟件因爲即使是經驗豐富的用戶也會被搞得一團糟。

2.2.3 開發版本

發行版有兩種分類方法:

  • 發行版的具體代號,如18.04是bionic,16.04是xenial,trusty,precise 等。
  • 發行版的發行類型,如oldstable,stable,testing 和 unstable。

後面的進一步指定詞具體含義如下:

  • -security:僅修復漏洞,並且儘可能少的改變軟件包的行爲。低風險。

  • -backports:backports的團隊則認爲最好的更新策略是security策略加上新版本的軟件(包括候選版本的)。但不會由Ubuntu security team審查和更新。

  • -updates:修復嚴重但不影響系統安全運行的漏洞,這類補丁在經過QA人員記錄和驗證後才提供,和security那類一樣低風險。

  • -proposed:update類的測試部分,僅建議提供測試和反饋的人進行安裝。

2.2.4 軟件倉庫

各倉庫的名稱代表其軟件自由度,含義如下(原文

  • main: Officially Supported, Open-Source Software,官方支持的,且開源的軟件
  • restricted: Officially Supported, Closed-Source Software,官方支持的,閉源的軟件
  • universe: Community-Maintained, Open-Source Software,社區/論壇維護的,開源的軟件
  • multiverse: Unsupported, Closed-Source and Patent-Encumbered Software,不受支持的,閉源的,有專利限制或阻礙的軟件

從上述的具體含義可以看出,我們用的示例,表示的是 Ubuntu 14.04 版本 x86架構 的軟件源列表。

 

3 國內源

由於官方源在國外,安裝軟件時速度比較慢,所以在這裏整理了一些國內的鏡像源地址。

注意,這裏有一些是arm64的源地址。

 

4 更新軟件源

cd /etc/apt
cp sources.list  sources.list.bak 備份原來的自帶的源
sudo vi  /etc/apt/sources.list    將新源列表信息寫入該文件

之後執行

sudo apt-get update

這個命令,會訪問源列表裏的每個網址,並讀取軟件列表,然後保存在本地電腦。我們在軟件包管理器裏看到的軟件列表,都是通過update命令更新的。

在這之後還可以執行

sudo apt-get upgrade

這個命令,會把本地已安裝的軟件,與剛下載的軟件列表裏對應軟件進行對比,如果發現已安裝的軟件版本太低,就會提示你更新。如果你的軟件都是最新版本,會提示:升級了 0 個軟件包,新安裝了 0 個軟件包,要卸載 0 個軟件包,有 0 個軟件包未被升級。

總之,update是更新軟件列表,upgrade是更新各軟件本身。

 

5 常用命令

5.1 apt-get命令

apt-get 命令一般用於軟件包的安裝,更新和移除,下面是它的一些常用命令

命令 功能介紹
update 將軟件倉庫中的軟件包列表更新到本地,一般我們在安裝軟件之前需要執行該操作
upgrade 升級系統中的所有軟件包,如果一個軟件包在升級時會導致其他已安裝的軟件包被刪除,那麼這個軟件包將不會被升級
dist-upgrade 該命令時upgrade的升級版,它會嘗試去解決安裝時出現衝突,比如會刪除已安裝的軟件包,所以慎用
remove 卸載軟件包(保留配置文件),同時也會卸載依賴於該軟件的包,A依賴於B,卸載B時也會卸載A
install 安裝軟件包
source 下載源碼包
clean 刪除本地緩存的所有軟件安裝包
check 檢查是否存在有問題的依賴關係

當然,在使用apt-get時還可以帶一些選項,關於apt-get的詳細說明可以查看手冊man apt-get

5.2 apt-cache命令

apt-cache一般用於軟件包查找和顯示軟件包信息。當我們安裝某個軟件包時,但是卻不知道具體包名時可以使用apt-cache進行查找

查找mysql數據庫安裝包的包名
apt-cache search mysql

顯示mysql-server(也就是mysql數據庫)的安裝包信息
apt-cache show mysql-server

 

6 aarch64 和 arm64

在上面提到,源列表和CPU架構有關,分 x86 和 arm64。而我們通過arch命令獲取到的系統架構,返回的是 aarch64。那麼這個 aarch64 和 arm64 是什麼關係呢?

這裏找到一段文字

AArch64 is the 64-bit state introduced in the Armv8-A architecture (https://en.wikipedia.org/wiki/ARM_architecture#ARMv8-A). The 32-bit state which is backwards compatible with Armv7-A and previous 32-bit Arm architectures is referred to as AArch32. Therefore the GNU triplet for the 64-bit ISA is aarch64. The Linux kernel community chose to call their port of the kernel to this architecture arm64 rather than aarch64, so that's where some of the arm64 usage comes from.

As far as I know the Apple backend for aarch64 was called arm64 whereas the LLVM community-developed backend was called aarch64 (as it is the canonical name for the 64-bit ISA) and later the two were merged and the backend now is called aarch64.

So AArch64 and ARM64 refer to the same thing.

AArch64 是 在Armv8-A 架構中 被引入的 64位狀態。32位狀態 對應着 AArch32,它吉向後兼容 Armv7-A 和 以前的 32位 Arm架構。因此,64位的工業標準體系結構 的 GNU 三元組接口 是 aarch64。Linux內核社區選擇 將 內核到這個架構 的端口 叫成 arm64 而不是 aarch64,這就是 arm64 用法的來源。

據我說知,Apple的 aarch64 後端 曾被叫做 arm64,而 LLVM 社區開發版的 後端 被叫做 aarch64 (因爲這是64位工業標準體系結構中收錄的經典叫法),在這之後,這兩者合併,於是後端現在被叫做 aarch64。

所以,AArch64 和 ARM64 指向同一個東西。

官方的arm64源地址是 http://ports.ubuntu.com/ubuntu-ports/dists 。我們可以通過在源文件中,查找 binary_arm64 字樣的文件,來確認該源是否支持arm64架構的系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章