iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

[機派X] 無人機與樹莓派的相遇 Linux不只是過客系列 第 7

[機派X] Day 7 - 啊我就怕 Nvidia 顯卡驅動裝不起來啊

引言

今天是機派X系列文章的第七天。
昨天介紹了 Ubuntu Server 常用的網路管理指令,今天繼續介紹套件管理軟體。

本篇大綱:

  • 引言
  • 什麼是套件管理軟體
  • apt 簡介
  • 更新 apt 資料庫
  • 使用 apt 安裝軟體
  • 使用 apt 移除軟體
  • 使用 apt 升級軟體
  • 使用 apt 查詢軟體
  • 從遠端登入 Ubuntu Server
  • 安裝圖形化使用者界面
  • 關於本文章系列

什麼是套件管理軟體

傳統的軟體安裝過程通常是:軟體製造商將製作好的軟體燒錄至光碟中,使用者再購買光碟來安裝軟體。近年網路發達,讓許多使用者也能透過網路渠道取得軟體的安裝程式,透過網路上下載的安裝程式來完成軟體安裝。

傳統的軟體安裝過程容易有資訊安全上的疑慮,例如:誤入釣魚網站,因而下載到含有惡意程式的軟體。安裝的過程也比較不方便,需要同意從來沒閱讀過的授權條款,還需要重複的按下一步直到軟體安裝結束。當要解除安裝軟體時,有時候會面臨解除安裝程式未能將相關檔案清除乾淨的狀況,導致硬碟中的垃圾資料量在無形中增加。

使用者條款迷因
圖源傳送門

套件管理軟體(Package Management Software)是一種軟體,其中匯集了使用者經常使用的各種軟體的安裝資訊,使用者可以藉由套件管理軟體尋找自己需要的軟體並執行安裝,安裝的過程中通常由套件管理軟體自動完成。若安裝的軟體後續有推出更新,套件管理軟體也能協助使用者執行更新。當要解除安裝軟體時,套件管理軟體通常也能讓使用者按個按鈕來解決,並協助清理軟體解除安裝後殘留的檔案或資料。

熟悉微軟 Windows 系統的使用者應該對 Microsoft 商店(Microsoft Store) 不陌生,透過 Microsoft 商店能快速尋找符合自己需求的軟體,並享有快速又便利的軟體安裝過程,相比於傳統的軟體安裝方式更安全也方便。
Microsoft 商店

在 Linux 上也有許多套件管理軟體可供使用,例如:apt、pacman、yum 等,我們使用的 Ubuntu 中預裝的套件管理軟體是 apt ,因此接下來將以 apt 為主角來介紹套件管理軟體。

apt 簡介

apt 是一個套件管理軟體,全名是 Advanced Package Tool。

apt 蒐羅了各式各樣的軟體,例如:gnome-2048、GIMP、network-manager 等,並將軟體的相關資訊儲存在雲端資料庫中。使用者只需要在電腦上執行 apt 並連線至雲端資料庫即可得知 apt 蒐集的軟體有哪些、以及每個軟體的基本資訊。當使用者要安裝軟體時,只需要再告訴 apt 要安裝哪些軟體,apt 就會自動在雲端資料庫中檢索相關資訊,並將軟體下載並安裝至電腦中。當我們要解除安裝某個軟體時,apt 也會自動搜尋當時軟體的安裝路徑並移除相關檔案。

更新 apt 資料庫

正如前面簡介中提到的,apt 運作時需要先取得雲端資料庫中的軟體資訊,這些資訊從雲端取得後也會被儲存在本機電腦中,apt 執行時會以本機電腦中的軟體資訊為優先。為了讓本機的軟體資訊保持更新,安裝軟體前我們通常會讓本機的軟體資訊與雲端資料庫中的內容同步。

可以使用 apt update 來更新本機的軟體資訊。由於這些軟體資訊是全域性的資料,因此不是儲存於使用者的家目錄,而是儲存在需要 root 權限才能存取的地方,所以操作 apt 時大都需要給予 sudo 才能順利執行。

sudo apt update

apt update 執行截圖

使用 apt 安裝軟體

可以使用 apt install 來安裝新軟體,其中的 PACKAGE 是指軟體在資料庫中的的名稱。

sudo apt install PACKAGE1 [PACKAGE2]......

例如,前一篇文章有提到 network-manager 的安裝:

sudo apt install network-manager

apt install 執行截圖

有些軟體撰寫時並非獨立開發,而是奠基在前人開發的軟體上,我們稱這些前人開發的軟體為相依套件(Dependency Package)。安裝軟體時若有需要其他相依套件才能使軟體正常運作,則 apt 也會自動完成相依套件的安裝,這些額外安裝的相依套件也會納入 apt 的管理範疇中。

有時候當你安裝某個軟體時,會發現 apt 還額外安裝了其他軟體,通常那些「多餘」的軟體就是相依套件或是建議安裝的軟體,不安裝建議的軟體通常不會導致主軟體不工作,只是一些常用的功能或延伸功能無法使用而已。

如果不希望 apt 一併安裝建議的軟體,可以加入參數:

sudo apt install --no-install-recommends PACKAGE1 [PACKAGE2]......

以 network-manager 為例:

sudo apt install --no-install-recommends network-manager

apt install --no-install-recommends 執行截圖

使用 apt 移除軟體

可以使用 apt remove 來解除安裝軟體。

sudo apt remove PACKAGE1 [PACKAGE2]......

例如解除安裝 network-manager:

sudo apt remove network-manager

apt remove 執行截圖

apt remove 僅會移除軟體,但是軟體衍生的設定檔並不會被被清除,如果希望這些檔案也一併被清除的話,請使用 apt purge。

sudo apt purge PACKAGE1 [PACKAGE2]......

當移除某個軟體後,有些殘存的套件不會被主動移除,可以使用 autoremove 來清除:

sudo apt autoremove

apt autoremove 執行截圖

使用 apt 升級軟體

可以使用 apt list 搭配 --upgradable 引數來列出可供更新的軟體。由於只是查詢資料,因此無須 root 權限。

apt list --upgradable

apt list --upgradable 執行截圖

如果希望更新所有軟體,可以直接使用 upgrade:

sudo apt upgrade

apt upgrade 執行截圖

如果希望更新特定軟體,可以直接使用 install(跟前面用法一樣):

sudo apt install PACKAGE1 [PACKAGE2]......

若是執行更新時需要下載其他軟體,或是相依套件需要更新,apt 都會自動處理!

使用 apt 查詢軟體

講了那麼多,也許你會覺得奇怪!要如何知道 apt 提供哪些軟體呢?
總要知道 apt 提供哪些軟體,以及軟體名稱才能夠安裝吧!

別著急 apt search 可以解決你的問題,其中的查詢內容 QUERY 可以是 regex。

apt search QUERY

例如,查詢 libreoffice 套件,輸出結果會有套件名稱以及一行簡短描述。

apt search libreoffice

apt search 執行截圖

為了減少輸出的資訊量,我們縮小一下範圍,使用 regex 查詢 libreoffice 套件:

apt search ^libreoffice$

apt search 執行截圖

從圖中可以看到 libreoffice 的套件名稱為 libreoffice(正斜線前的部份)。

apt search 顯示的資訊較少,可以使用 apt show 查詢套件的完整資訊:

apt show PACKAGE1 [PACKAGE2]......

查詢 libreoffice 套件的詳細資訊:

apt show libreoffice

apt show 執行截圖

安裝圖形化使用者界面

了解 apt 的基本用法後,當然要安裝幾個軟體來玩玩看囉!
為了讓大家可以安裝一些人性的遊戲、好好暢玩一番,因此接下來要教大家在 Ubuntu Server 上安裝圖形化使用者界面。

由於 Linux 本身很具有彈性,可以安裝不同的圖形化使用者界面,因此下面我提供三種讓大家自行選擇。

第一個是 xubuntu,是 Ubuntu 官方推薦的輕量 GUI。

sudo apt install xubuntu-desktop

第二個是 lubuntu,也是 Ubuntu 官方推薦的輕量 GUI。

sudo apt install lubuntu-desktop

第三個是 xfce,是我自己慣用的輕量 GUI。(已於2022/11/13更新)

#!/bin/bash

echo 'Please run this script as root.'
read -p 'Press ENTER to continue ......' trash

# Update metadata of database.
apt update

# Install xserver and xserver utilities.
apt install xorg xserver-xorg-legacy -y

#  Install xfce desktop environment.
apt install lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings -y
apt install xfce4 xfce4-screenshooter xscreensaver -y

# Install applications.
apt install nautilus firefox gedit -y

# Install language support and input method.
apt install xfonts-intl-chinese fonts-wqy-microhei -y
apt install im-config zenity fcitx fcitx-chewing fcitx-config-gtk -y

# Edit Xwrapper.conf
sed -i 's/allowed_users=console/allowed_users=anybody/1' /etc/X11/Xwrapper.config

# Do this for ubuntu.
update-rc.d lightdm enable 2

if [[ -e /etc/profile.d/boottoscratch.sh ]]
then
    rm -f /etc/profile.d/boottoscratch.sh
    sed -i /etc/inittab -e "s/^#\(.*\)#\s*BTS_TO_ENABLE\s*/\1/" -e "/#\s*BTS_TO_DISABLE/d"
    telinit q
fi

以下是在 xfce 桌面環境下執行 gnome 2048 的截圖。
xfce 執行截圖

從遠端登入 Ubuntu Server

不知讀者是否還記得 Ubuntu Server 與 Ubuntu Desktop 的差異呢?
Day 2 安裝 Ubuntu 時,選擇版本的教學已經做過說明了:

如果你的樹莓派要當作伺服器使用(例如:檔案伺服器、網頁伺服器等),請選擇這個版本。通常你會透過 ssh 或是其他遠端存取工具來管理樹莓派,所以這個版本沒有圖形化使用者界面,不過許多伺服器會用到的軟體或設定會事先幫你裝好。

到目前為止我們都還離不開樹莓派,直接在樹莓派外接出來的螢幕、鍵盤上做事。
接下來要教大家使用 ssh 利用網路連接至樹莓派上,讓大家可以回到熟悉的 Windows 環境中操作樹莓派。

首先,要先在樹莓派上安裝相對應的 ssh 伺服端軟體。
由於我們使用的是 Ubuntu Server,所以已經事先裝好了,我們無須再次安裝。

接著需要在你的電腦上安裝 ssh 客戶端軟體。
如果你使用的是 Windows 10 基本上已經預裝好了,不過如果是較古老的 Windows 或是沒有預裝 ssh 客戶端的版本可以再 手動安裝

最後只需要在你的電腦上,打開 cmd 並輸入以下指令即可透過 ssh 連接至樹莓派!
USERNAME 是使用者名稱,HOSTNAME 則是樹莓派的 IP。

ssh USERNAME@HOSTNAME

以我的樹莓派來說,之前創的使用者名稱是 crazylab ,IP 是 192.168.0.193 。

ssh crazylab@192.168.0.193

以下是在 Windows 10 透過 ssh 連接至樹莓派的截圖。
ssh 在 Windows 10 的執行截圖

以下是在 Linux 透過 ssh 連接至樹莓派的截圖。
ssh 在 Linux 的執行截圖

大家可能已經發現一些端倪了!
我上面放的所有 apt 操作截圖其實都是透過 ssh 連接至樹莓派遠端操作的成果。
畢竟拿著手機拍樹莓派連接的螢幕真的是很不方便,畫面也很模糊。

結尾部份,大家可以討論以下四種狀況下的系統資源用量、便利性、系統回應延遲等。

  1. 直接操作樹莓派的命令列界面
  2. 透過 ssh 遠端操作樹莓派的命令列界面
  3. 直接操作樹莓派的圖形化使用者界面
  4. 安裝 VNC 來實現遠端操作圖形化使用者界面

Note :
系統資源用量可以透過 htop 指令來觀察。

關於本文章系列

如果對於文章內容有建議、糾錯或圖源標示不正確的問題,歡迎參考 [機派X] Day 1 嘗試與文章作者聯絡。
想看更多本系列的文章,請連結至 [機派X] Day 1 查看大綱。


上一篇
[機派X] Day 6 - Linux 沒網路,我要怎麼發鐵人賽的文章
下一篇
[機派X] Day 8 - 我是 Bash 我調皮,令人匪夷所思的 Bash 語法
系列文
[機派X] 無人機與樹莓派的相遇 Linux不只是過客15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言