Linux中國

如何使用 GNU Stow 來管理從源代碼安裝的程序和點文件

目的

使用 GNU Stow 輕鬆管理從源代碼安裝的程序和點文件(LCTT 譯註: 點文件 dotfile ,即以 . 開頭的文件,在 *nix 下默認為隱藏文件,常用於存儲程序的配置信息。)

要求

  • root 許可權

難度

簡單

約定

  • # - 給定的命令要求直接以 root 用戶身份或使用 sudo 命令以 root 許可權執行
  • $ - 給定的命令將作為普通的非特權用戶來執行

介紹

有時候我們必須從源代碼安裝程序,因為它們也許不能通過標準渠道獲得,或者我們可能需要特定版本的軟體。 GNU Stow 是一個非常不錯的 符號鏈接工廠 symlinks factory 程序,它可以幫助我們保持文件的整潔,易於維護。

獲得 stow

你的 Linux 發行版本很可能包含 stow,例如在 Fedora,你安裝它只需要:

# dnf install stow

在 Ubuntu/Debian 中,安裝 stow 需要執行:

# apt install stow

在某些 Linux 發行版中,stow 在標準庫中是不可用的,但是可以通過一些額外的軟體源(例如 RHEL 和 CentOS7 中的EPEL )輕鬆獲得,或者,作為最後的手段,你可以從源代碼編譯它。只需要很少的依賴關係。

從源代碼編譯

最新的可用 stow 版本是 2.2.2。源碼包可以在這裡下載:https://ftp.gnu.org/gnu/stow/

一旦你下載了源碼包,你就必須解壓它。切換到你下載軟體包的目錄,然後運行:

$ tar -xvpzf stow-2.2.2.tar.gz

解壓源文件後,切換到 stow-2.2.2 目錄中,然後編譯該程序,只需運行:

$ ./configure
$ make

最後,安裝軟體包:

# make install

默認情況下,軟體包將安裝在 /usr/local/ 目錄中,但是我們可以改變它,通過配置腳本的 --prefix 選項指定目錄,或者在運行 make install 時添加 prefix="/your/dir"

此時,如果所有工作都按預期工作,我們應該已經在系統上安裝了 stow

stow 是如何工作的?

stow 背後主要的概念在程序手冊中有很好的解釋:

Stow 使用的方法是將每個軟體包安裝到自己的目錄樹中,然後使用符號鏈接使它看起來像文件一樣安裝在公共的目錄樹中

為了更好地理解這個軟體的運作,我們來分析一下它的關鍵概念:

stow 文件目錄

stow 目錄是包含所有 stow 軟體包的根目錄,每個包都有自己的子目錄。典型的 stow 目錄是 /usr/local/stow:在其中,每個子目錄代表一個軟體包。

stow 軟體包

如上所述,stow 目錄包含多個「軟體包」,每個軟體包都位於自己單獨的子目錄中,通常以程序本身命名。包就是與特定軟體相關的文件和目錄列表,作為一個實體進行管理。

stow 目標目錄

stow 目標目錄解釋起來是一個非常簡單的概念。它是包文件應該安裝到的目錄。默認情況下,stow 目標目錄被視作是調用 stow 的目錄。這種行為可以通過使用 -t 選項( --target 的簡寫)輕鬆改變,這使我們可以指定一個替代目錄。

一個實際的例子

我相信一個好的例子勝過 1000 句話,所以讓我來展示 stow 如何工作。假設我們想編譯並安裝 libx264,首先我們克隆包含其源代碼的倉庫:

$ git clone git://git.videolan.org/x264.git

運行該命令幾秒鐘後,將創建 x264 目錄,它將包含準備編譯的源代碼。我們切換到 x264 目錄中並運行 configure 腳本,將 --prefix 指定為 /usr/local/stow/libx264 目錄。

$ cd x264 && ./configure --prefix=/usr/local/stow/libx264

然後我們構建該程序並安裝它:

$ make
# make install

x264 目錄應該創建在 stow 目錄內:它包含了所有通常直接安裝在系統中的東西。 現在,我們所要做的就是調用 stow。 我們必須從 stow 目錄內運行這個命令,通過使用 -d 選項來手動指定 stow 目錄的路徑(默認為當前目錄),或者通過如前所述用 -t 指定目標。我們還應該提供要作為參數存儲的軟體包的名稱。 在這裡,我們從 stow 目錄運行程序,所以我們需要輸入的內容是:

# stow libx264

libx264 軟體包中包含的所有文件和目錄現在已經在調用 stow 的父目錄 (/usr/local) 中進行了符號鏈接,因此,例如在 /usr/local/ stow/x264/bin 中包含的 libx264 二進位文件現在符號鏈接在 /usr/local/bin 之中,/usr/local/stow/x264/etc 中的文件現在符號鏈接在 /usr/local/etc 之中等等。通過這種方式,系統將顯示文件已正常安裝,並且我們可以容易地跟蹤我們編譯和安裝的每個程序。要反轉該操作,我們只需使用 -D 選項:

# stow -d libx264

完成了!符號鏈接不再存在:我們只是「卸載」了一個 stow 包,使我們的系統保持在一個乾淨且一致的狀態。 在這一點上,我們應該清楚為什麼 stow 還可以用於管理點文件。 通常的做法是在 git 倉庫中包含用戶特定的所有配置文件,以便輕鬆管理它們並使它們在任何地方都可用,然後使用 stow 將它們放在適當位置,如放在用戶主目錄中。

stow 還會阻止你錯誤地覆蓋文件:如果目標文件已經存在,並且沒有指向 stow 目錄中的包時,它將拒絕創建符號鏈接。 這種情況在 stow 術語中稱為衝突。

就是這樣!有關選項的完整列表,請參閱 stow 幫助頁,並且不要忘記在評論中告訴我們你對此的看法。

via: https://linuxconfig.org/how-to-use-gnu-stow-to-manage-programs-installed-from-source-and-dotfiles

作者:Egidio Docile 譯者:MjSeven 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國