---
# System prepended metadata

title: 安裝套件 PKMS
tags: [Linux Shell]

---

---
title: '安裝套件 PKMS'
disqus: kyleAlien
---

安裝套件 PKMS
===

## Overview of Content

如有引用該文章請標明 :smile_cat: 

這個章節介紹 Linux 的工具套件的安裝，每個 Linux 發行版都有不同的包管理系統(`Package managerment system`, PMS)

> 我個人習慣稱為 PKMS，避免讓我跟 Power manager system 搞混，所以以下都使用 **PKMS** 簡稱

:::success
* 如果喜歡讀更好看一點的網頁版本，可以到我新做的網站 [**DevTech Ascendancy Hub**](https://devtechascendancy.com/)
    
    本篇文章對應的是 [**探索 Debian 系統上的套件管理系統（PKMS 概念）| 套件倉庫**](https://devtechascendancy.com/debian-pkms-overview_pms/)
:::
[TOC]

## 認識系統 PKMS 

每個 Linux 發行版都有不同的包管理系統(Package managerment system, PMS)，但他們仍有相同的功能（如下）

* 當前系統已安裝的套件工具

* 每個套件工具個使用了什麼文件

* 每個安裝的套件版本

Linux 透過 PKMS 來取得工具、套件，而 PKMS 又會透過訪問網路來取得工具包，這些工具都由一個倉庫（repository）集成 (概念圖如下)

> ![](https://i.imgur.com/zcnuZue.png)

:::info
* 每個發行版的 Linux 它的 PKMS 工具都有很大的差異，而 **Linux 中廣泛使用的主要有兩種：^1.^ `dpkg`、^2.^ `rpm` 工具**
    
    1. **`dpkg`**：基於 Debian 的發行版基本上都是使用 dpkg 工具
    
    2. **`rpm`**：基於 RedHat 的發行版基本上都是使用 rpm 工具，該命令是 PKMS 的底層基礎
:::

## 基於 Debian 系統的 PKMS

dpkg 命令是基於 Debian 系統的 PKMS 工具，相關指令如下

| 命令 | 簡介 |
| - | - |
| dpkg | 查看本機軟體包 |
| apt-get | 取得包工具的命令 |
| apt-cache | 獲取緩存的包 |
| apt | 匯聚整合 apt-get、apt-cache 的工具 |
| aptitude | 文字介面 UI 管理包 |


### 查看本機軟體包：dpkg

* **dpkg 命令（`Debian Package Manager`）**：
    
    主要是用於安裝、管理和操作本地系統上已經下載的 Debian 軟體包；它通常不用於訪問遠端 repository；
    
    訪問遠端 repository 的話，會透過 `apt-get`、`apt` 的命令來處理與遠端 repository 通訊

* **以下看幾個 dpkg 常用的操作**

    1. 查看軟體包安裝了哪些文件在你的系統

        ```shell=
        dpkg -L vim-common
        ```
        > `-L`: List files installed to your system from package-name
        > 
        > ![](https://i.imgur.com/qkJn2EL.png)

    2. 反向操作，**查看某文件是屬於哪個軟體包**（該文件內哪個應用、指令使用）
        
        :::info
        可能一個文件有多個文件共享
        :::


        ```shell=
        dpkg --search /usr/lib/mime/packages
        ```
        如下圖，查看有哪些指令、應用依賴於 `/usr/lib/mime/packages`

        > ![](https://i.imgur.com/BURqOlk.png)

### aptitude 指令：GUI 查找/搜尋/安裝

```shell=
## 先安裝 aptitude 工具

sudo apt install aptitude

## 啟動文字介面
aptitude
```

* `aptitude` 工具是一種交互式介面，可以輕鬆查看當前裝置所安裝的所有軟體包、待升級的軟體包、未安裝... 等等訊息
    
    > ![](https://i.imgur.com/9rPf8dF.png)

* 以下有幾個 `aptitude` 常用命令

    | 功能 | 命令 |
    | - | - |
    | 查找 | aptitude show <package name\> |
    | 搜尋 | aptitude search <package name\> |
    | 安裝 | aptitude install <package name\> |

    1. **`show` 查詢軟體包**：如果已經知道你要使用的軟體包，也可以直接查詢相關訊息
    
        ```shell=
        ## 查看 lvm2 軟體包
        
        aptitude show lvm2
        ```
        > ![](https://i.imgur.com/Ug6GS99.png)

    2. **`search` 搜尋相關軟體包**：

        ```shell=
        ## 查詢 wine 相關軟體
        
        aptitude search wine
        ```
        > 前面的字母代表 `p、v` 可以安裝，`p、i` 尚未安裝
        > 
        > ![](https://i.imgur.com/jFXHjWV.png)

    3. **`install` 安裝軟體包**：(需升級到管理員權限)

        ```shell=
        ## 查詢 wine 相關軟體
        
        sudo aptitude install wine
        ```

### aptitude 指令：升級/卸載

* aptitude 安裝軟體工具時有不同的依賴關係，**隨意升級的話可能會導致系統不穩定**；以下列出幾個 aptitude 升級的方式


    | 功能 | 命令 |
    | - | - |
    | 安全升級 | aptitude safe-upgrade |
    | 不檢查就升級 | aptitude full-upgrade |

    ```shell=
    sudo aptitude safe-upgrade 
    ```
    > ![](https://i.imgur.com/WbWvxA8.png)
    :::success
    * 使用 `apt` 命令
        
        **`apt` 命令解決了軟體包之間的依賴關係，可以安全的升級**
        
        ```shell=
        sudo apt upgrade
        ```
    :::

* **aptitude 卸載包** 命令如下
    
    | 功能 | 命令 |
    | - | - |
    | 卸載 | aptitude purge <package name\> |

    ```shell=
    # 解除 wine 應用包

    sudo aptitude purge wine
    ```

### 倉庫來源設置

* 我們知道 PKMS 會從遠端倉庫（repository）中取得軟體工具，那就一定會有一個網址來源，這個網址來源就存在 `/etc/apt/sources.list`
    
    > 如果有要添加倉庫網址那也可以放入 `/etc/apt/sources.list` 文件中

    ```shell=
    cat /etc/apt//sources.list
    ```
    > 如下圖所示，Ubuntu 22 倉庫如下
    > 
    > ![](https://i.imgur.com/fOFOcUZ.png)

    每個倉庫資訊出顯示的內容不同，其格式如下：
    
    ```shell=
    # repository 格式
    # <deb/dev-src> <address> <distribution_name> <package_type_list> [descriptions...]
    
    deb     # <deb/dev-src>
        http://deb.debian.org/debian     # <address>
        bulleye            # <distribution_name> 
        main            # <package_type_list>
        contrib        # descriptions
        non-free        # descriptions
    ```
    
    其中一行顯示 `deb http://deb.debian.org/debian bullseye main contrib non-free`，而它的描述方式如下表


    | 原數據 | 說明 | 補充 |
    | - | - | - |
    | deb | 軟體包類型 | `deb`(已編譯)、`deb-src`(尚未編譯的源代碼) |
    | http://deb.debian.org/debian | 倉庫網址 | Web url |
    | bullseye | 軟體倉庫發行版的名稱 | bullseye 是 Debian 系統的下一個發行版代號 |
    | main | 倉庫內工具包的類型 |  |
    | contrib | 額外描述 | contrib 是第三方或是自由軟體 |
    | non-free | 額外描述 | non-free 代表非自由軟體，有受到一些規範條約限制 |


## 手動安裝

在 rpm, dpkg 這些 PKMS 工具出現之前，我們必須自己下載 source code 來編譯並安裝

> 這些源碼通常打包成 tarball 讓我們使用

### 安裝範例 - sysstat

:::success
* **systat 工具**：該工具可以用來監看系統上的許多事件 [**systat 下載連結**](http://sebastien.godard.pagesperso-orange.fr/download.html)

    ```shell=
    ## 使用只領下載 tarball
    wget http://pagesperso-orange.fr/sebastien.godard/sysstat-12.7.2.tar.gz
    ```
    > ![](https://i.imgur.com/R1RgOMQ.png)
:::

* 手動安裝步驟如下
    
    1. 解壓縮、進入軟件包目錄

        ```shell=
        ## 解壓縮包
        tar -xvf sysstat-12.7.2.tar.gz
        
        cd sysstat-12.7.2/
        ```

    2. **檢查、編譯**：按照文檔所說的步驟去安裝軟體套件
        :::info
        * 不知道如何安裝可以查看 `README.md` 文件，通常會有教你如何安裝的步驟
        
            > ![](https://i.imgur.com/9ZYx4lm.png)
        :::
        
        ```shell=
        ## 檢查當前環境是否有缺少啥依賴，如果有缺少則須先安裝
        ./configure 
        
        ## 編譯源碼 (最終會產生一個二進制文件)
        make
        ```
        > 這個步驟結束後通常就可以使用了，不過只有在你進入該資料夾時才可以使用 
    
    3. **安裝**：透過 `make install` 就可以將軟體安裝進你常用的目錄之下

        ```shell=
        sudo make install
        ```

## Appendix & FAQ

:::info
:::

###### tags: `Linux Shell`
