2017年7月5日 星期三

shell script 特殊技巧收集

動態改變命令列的提示(prompt)

PROMPT_COMMAND

PROMPT_COMMAND 是 bash 的環境變數,每執行一道命令列命令後,存在此變數的指令都會被執行一遍,我們可以利用此一特性改變我們每一次的命令列提示。

以下所示範的是:

  1. 顯示上一次執行命令的狀態碼(Exit Code)。
  2. 若現行工作目錄未改變,則顯示目前的名錄名即可,否則顯示完整的路徑名。
  3. 部份 code 引用原來的 Ubuntu 家目錄(home)底下的 .bashrc 的 PS1 設定,如:debian_chroot,其他系統需要作相對應的修改。
__var_show_dirpath__=
__var_show_dirpath__='\w'
PROMPT_COMMAND='__prompt_command__'
__prompt_command__() {
    PS1="[$?] "
    if [ "$__var_show_dirpath__" = "$PWD" ]; then
        __show_dirpath__='\W'
    else
        __show_dirpath__='\w'
        __var_show_dirpath__=$PWD
    fi
    PS1+='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]'
    PS1+=$__show_dirpath__
    PS1+='\[\033[00m\]\$ '
}

你可以將以上的程式碼嵌入進你家目錄的 .bashrc 中,重開啟 shell 便能看到效果,如以下所示:
[0] cy@cyvm:~/tmp$ pwd
/home/cy/tmp
[0] cy@cyvm:tmp$ ls
mnt  old  test
[0] cy@cyvm:tmp$ cd test
[0] cy@cyvm:~/tmp/test$ ls

2017年7月2日 星期日

[便攜式 Debian 系統實作] - 創建第一個 ISO hybrid 映像檔

(本文主要依據 Debian Live Systems Manual 翻譯)

不管映像檔類型為何,創建的基本步驟大致上都相同:

  1. 建立一個工作目錄,更改到該目錄。工作目錄的名稱可由你自己決定。在這個示範裡,我們使用 live-default 做為我們的工作目錄。
  2. 執行以下 live-build 命令序列,以創建一個基本的 ISO hybrid 映像檔(一個已預設好的不包含 X.org 的【便攜式系統】)。適用於刻錄到CD或DVD介質上,也可以復製到U盤上。部份指令需要系統管理員權限才能正確執行,為了方便起見,建議你一開始執行的時候,就直接切換為系統管理員登入。
mkdir live-default && cd live-default
lb config
lb build

創建【便攜式系統】需要花一點時間,當建好的時候,你可以在工作目錄下看到一個名為 binary.hybrid.iso 的映像檔(譯註:不同系統的  live-build ,產出的檔名有區別,我在 Ubuntu 下產生的檔名如上,另外在 Debian 8 64bits 版本下產生的則為 live-image-amd64.hybrid.iso)。

除了自己動手做外,你也可以使用其他人已經預先構建好的映像檔。live-images 即是一個用 git 儲存庫 (git repository) 管理的便攜式 Debian 系統專案。官方穩定版本發佈在在 https://www.debian.org/CD/live/ (譯註:其實就是 Debian 安裝光檔)。而舊版與即將發行的版本,以及包含非免費軟韌體的非官方版本則是發佈在 http://debian-live.alioth.debian.org/cdimage/release/ (譯註:似乎已不存在)。


[便攜式 Debian 系統實作] - 基礎作業系統架構

(本文主要依據 Debian Live Systems Manual 翻譯)

【便攜式系統】包含了一個根據目標環境而建立的作業系統,包括了以下幾個部份:


  1. Linux內核映像檔(Linux kernel image)。通常命名為 vmlinuz。
  2. 初始虛擬磁碟映像檔(Initial RAM disk image)。通常命名為 initrd。為 Linux 開機時所使用的虛擬磁碟,包含了一些用來掛載系統映像檔可能需要的模組,以及一些用來設置的腳本。
  3. 系統映像檔(System image)。此為作業系統的檔案系統映像檔。我們可使用 SquashFS 壓縮式檔案系統來縮小系統映像檔。這映像檔內容是唯讀的。因此,在開機過程中,【便攜式系統】將啟用虛擬磁碟和「聯合(union)」的機制來啟用系統執行時所需要寫入的檔案。只是,所有修改將在機器關機時丟失,除非我們使用永久性寫入功能(這是可選用的功能)。
  4. 關機加載程式(Bootloader)。一小段特製的程式可從選定的介質中載入,可用來選擇或配置系統,可能使用提示列或從一個選單輸入。當使用者選定了之後,它加載 Linux 內核及相對應的 initrd 以運行相關的系統檔案系統。根據介質和檔案系統格式,我但可使用不同的解決方案:
    • isolinux:從使用 ISO9660 格式的光碟載入。
    • syslinux:從使用 VFAT 分區啟動的硬碟或 USB 隨身碟載入。
    • extlinux:則是從 ext2/3/4 或 btrfs 分區的硬碟或 USB 隨身碟載入。
    • pxelinux:從 PXE 進行網路開機 (netboot)
    • GRUB:則是從 ext2/3/4 分區的硬碟或 USB 隨身碟載入。

[便攜式 Debian 系統實作] - 工具安裝

(本文主要依據 Debian Live Systems Manual 翻譯)

需求

  • 系統管理員(root)權限
  • live-build
  • bash
  • debootstrap or cdebootstrap
  • Linux 2.6 以上版本

安裝 live-build

apt-get update
apt-get install live-build

安裝 live-bootlive-config

以 apt-get 安裝 live-build 時,即會自動安裝此兩套件。