The Debian Administrator’s handbook

這本電子書是免費的,你可以在 The Debian Administrator’s handbook 網站上取得。

之前在 LinuxToy 上看到這本書可以下載,有利用 git 去抓取原始碼,後來就擱在硬碟裡。最近在整理硬碟時,看到這份原始碼,看了一下,居然可以產生 epub ,又看到 publican.cfg,以為是用 Python Pelican 產生的,就想說要找一天來仔細看看。今天再仔細一看,發現這誤會可大了,原來人家是用 publican,不是 pelican。

publican 的安裝很簡單,依照原始碼裡的文件,就用 sudo apt-get install publican 就可以,但在 Ubuntu 12.04 下,並沒有 publican-debian 。執行 publican 時,會有錯誤訊息:”Failed to load brand file”。所以我修改了 publican.cfg 裡的 brand,將其改為 common 就可以順利執行。指令是這樣下的,要產生 PDF:publican build –format=pdf –langs=en-US ;要產生 epub:publican build –format=epub –langs=en-US 。看原始碼裡有簡體中文的翻譯,有試著產生一份,但是發現並沒有翻譯完全,在 gitcafe 有看到 fork 一份出來,但是一樣不全,看來是停止翻譯了。

innobackupex

在噗浪上看到有人分享 innobackupex 這工具,就決定來試用看看。這指令其實是被包含在 xtrabackup 工具裡,使用 Perl 寫的,所以只要安裝 xtrabackup 就可以。

CentOS 5 上的安裝可以透過 yum,步驟可以參考 Percona 上的說明,首先用 rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm 安裝 Percona 的 repo 檔案,接著用 yum install percona-xtrabackup 就可以了。

我使用的是 MariaDB 5.5,試著要備份時,卻出現沒有指定 datadir 參數的問題。innobackupex 裡實際上使用的是 xtrabackup_55 (不同的資料庫需要用不同的指令,innobackupex 是自動判斷),大致追蹤指令原始碼,發現它是讀取 my.cnf 來得知 datadir 的值; MariaDB 的 my.cnf 很簡潔,直接 include /etc/my.cnf.d 下的所有 cnf 檔案,再查看裡面各個 cnf,都非常的簡潔,看起來是都採用預設值,所以不需要額外設置。因此我在 /etc/my.cnf.d/server.cnf 的 [mysqld] 之後加上 datadir=/var/lib/mysql 以後,innobackupex 就可以順利運作了。

  • 備份:innobackupex –user=DB_USER –password=DB_PASSWORD /path/to/BACKUP-DIR
  • 回存:innobackupex –copy-back /path/to/BACKUP-DIR

extundelete

之前一直以為在 Linux 上反刪除是很麻煩的,直到過年前自己誤刪了檔案,去 Google 解法之後,才知道現在有 extundelete 這工具。

根據 extundelete 的網站說明,在反刪除之前,第一要先卸載,如果是系統分割區,那最好就是趕緊重開機,以 LiveCD 開機;第二就是用 extundelete 進行搜索被刪除的檔案。

我自己的情況是不小心移除了系統分割區上的檔案,所以我趕緊重新開機以 Ubuntu 12.04 LiveCD 開機。重開機以後,去系統設定裡的 “Software & Updates” ,把 main, universe, restricted, multiverse 都勾選起來,接著到 terminal 裡執行 sudo apt-get udpate && sudo apt-get install extundelete ,安裝 extundelete。安裝完成後,執行 sudo extundelete –restore-all –restore-directory /home/user –after 1390881600 /dev/sda1 就會開始進行反刪除的動作,反刪除後的檔案會放置在當前目錄下的 RECOVERED_FILES 資料夾下。”–after” 表示只拯救指定日期後的檔案,而其後的數字,是用 date -d “2014-01-28 12:00” +%s 取得,extundelete 不接受日期時間字串,只能透過 date 指令取得數字來使用,這部份可以在 extundelete 的 man page 裡看到。

只是 Ubuntu 12.04 的 extundelete 有問題,我後來再用 Ubuntu 13.10 的 LiveCD,才能正常使用。但最後還是拯救失敗,因為從刪除到重開機,我還是做了太多動作,導致一些檔案已經被覆蓋掉,殘念,只能安慰自己說那些檔案其實不重要。

參考資料:

puddletag 的編碼轉換

puddletag 跟 Windows 上的 mp3tag 軟體一樣都是編輯 MP3 id3 資訊的工具,Linux 上同類的軟體有 easytag。這套軟體的介面基本上就是向 mp3tag 看齊,有使用過 mp3tag 的話,使用上應該不太有困難。

除了介面與 mp3tag 相似以外,我覺得 puddletag 最大的特色是 action/function 這功能,你可以用 action 跟 function 組合出各式各項快捷的新組合,讓你在編輯上能更方便,例如可以對歌曲重新編 track 並且填入 album 。

我在使用時,遇到有亂碼的問題,我大概知道是編碼的問題,之前是使用 big5 填 id3 tag v1,所以如果沒 id3 tag v2 的欄位時,會拿 id3 tag v1 的欄位來用,這時候因為不知道要從何種編碼轉為 unicode ,就會有亂碼的發生。本來我已經捲起袖子要寫 Plugin 來解決問題了,後來看了 puddletag 本身提供的 function,發現已經有 “Convert from non-standard encoding” 這個 function,只是裏面的選項沒有 big5 可以選。

追蹤 puddletag 的原始碼,這個 function 是定義在 /usr/share/pyshared/puddlestuff/functions.py 裡,內容大致是這樣:

因此,只要在 “&Encoding, combo,” 後加上 “big5,” 就可以多出 big5 的選項,日文就是 shiftjis,簡體中文就是 gb2312。有了這選項,編碼轉換的功能也可以順利運作了。為了避免更動原始碼,就寫了一個 plugin function,其實只是增加多的編碼,網址在 https://github.com/elleryq/puddletag_pluginfunction_extended_enconvert

CentOS OpenSSL

今天看到這篇 Secure Web API ,提到可以用 SSL Server Test 這個網站服務來檢查 SSL 憑證的安全性,所以就來試試看。

我的機器用的是 CentOS 5,因為是從很早以前的版本升級來的,設定幾乎都是照舊,今天重新整理,對照設定檔跟新設定檔以後,才發現 certification 位置已經更換了。

CentOS 5 的 SSL certification 改放在  /etc/pki/tls/certs ,所以要到該目錄下輸入 make your.crt ,依照步驟回答問題後,就可以製作出 your.crt 跟 your.key ,接著把 your.key 複製到 /etc/pki/tls/private 。然後去調整 /etc/httpd/conf.d/ssl.conf ,並且參考 Configuring Apache, Nginx, and OpenSSL for Forward Secrecy 去修改設定檔案,但不要加入這行 SSLCipherSuite 。不加入的原因是因為 CentOS 的 OpenSSL 並沒有加入 EC support ,如果要加入的話,目前看來是要重新編譯 OpenSSL 套件 (Bounty : OpenSSL with EC for Fedora/RH/CentOS : 3.6 BTC),裡面提到的步驟是下載 source RPM,修改 .spec 裡的 configure 該行,改為 enable-cms enable-md2 no-idea no-mdc2 no-rc5 enable-ec enable-ecdh enable-ecdsa 。

最後再重新啟動 Apache 。

ArchLinux 裡的 locale 設定

ArchLinux 的全域 locale 設定 (LANG)是在 /etc/locale.conf ,如果個別使用者想要設定自己的 locale 怎麼辦呢?

在登入,執行 bash 以後,bash 會先去載入 /etc/profile ,通常 /etc/profile 會去載入並執行 /etc/profile.d 下的所有 .sh 的檔案,這裡有個 locale.sh ,這邊就註明了會去哪裡載入。

首先會看是否有 $XDG_CONFIG_HOME/locale.conf ,有就載入;然後再看 $HOME/.config/locale.conf ,有就載入;再來才是看前面提到的 /etc/locale.conf ;最後才是參考 rc.conf。

所以只要在 $HOME/.config/locale.conf 裡寫 LANG=zh_TW.UTF-8 就可以囉。

同場加映,ArchLinux 已經不再使用 sysv ,這表示再也沒有 /etc/init.d 這類的目錄,ArchLinux 已經改用 systemd 了。

ArchLinux Yaourt/Pacaur

今天再次把 ArchLinux 開來玩。裝了 Razor-QT 以後,發現 Razor 設定中心裡的圖示都沒有出現,以為是安裝的問題,就想說用 yaourt 重新裝一次。

yaourt 是一個輔助 pacman 的工具,除了可以當作 pacman 來用之外,它還會自動從 AUR 取得軟體並進行編譯跟安裝。詳細的說明可以參考 ArchLinux Wiki 上的說明。依照指示設定以後,安裝失敗,我遇到是 GPG 驗證失敗的訊息,用 sudo pacman-key –init 無效,後來是在 /etc/pacman.conf 裡 [archlinuxfr] 的地方增加 SigLevel = Optional TrustAll ,然後重新執行 sudo pacman -Syu yaourt 才裝好。

執行 yaourt razor-qt 重新編譯安裝以後,圖示仍然沒有出現,再請 Google 大神幫忙以後,才知道是沒裝圖示套件的緣故,就用 sudo pacman -Ss oxygen-icons 就順利解決了。

另外在噗浪的回應裡看到說,除了 Yaourt 之外,還有一個 pacaur ,同樣也是類似 Yaourt 的工具,所以就順便裝上來試試看。但 pacaur 不在官方套件庫裡,只能用 yaourt 來裝,執行 yaourt -S pacaur 就可以了。

 

ArchLinux 初體驗

在 VirtualBox VM 裡裝的。

我是下載 CD image 來安裝,光碟是 LiveCD,只是沒圖形介面,所以拿光碟開完機就是 console,讓我小錯愕一下,還特別重新開機再確認一次。詳細安裝可以參考 Beginners’ Guide ,我是照這篇來安裝的。步驟很詳細,我覺得缺點是初學者可能會不知道要選哪一個。每個章節裡是一個大項目,然後裏面才會提到選擇,例如 bootloader 你可以選 syslinux, grub … 或是磁碟配置你可能要依照情況使用 cgdisk 或 fdisk 等工具。做完,一個乾淨的系統就安裝完成了,開完機會進 Console 模式。

由於是在 VirtualBox 裡,VirtualBox guest utility 必裝:Arch Linux as a guest in a Virtual Machine

pacman 是必學的指令,詳細的說明可以閱讀 ArchLinux Wiki,這邊只提幾個常用的:

  • pacman -Syy :類似 apt-get update
  • pacman -Syu :類似 apt-get upgrade
  • pacman -S :類似 apt-get install
  • pacman -R :類似 apt-get remove
  • pacman -Q :類似 dpkg -l
  • pacman -Ss :類似 apt-ache search

接著是安裝一些必裝的:

  • sudo :總不能一直都用 root 登入,裝這個以後,先新增使用者,設置群組,將使用者加到 wheel 群組裡,然後在 /etc/sudoers 裡取消 wheel 該行的註解。
  • vim :我用 vim …
  • base-devel :為了要編譯 razor-qt 用,這邊我是參考 AURAUR 有點像是寫好的 script,下載 AUR 裡套件的 PKGBUILD 以後,就可以用 makepkg 來包出所需的 package。
  • slimxorg :就為了圖形介面,不過 xorg 連結裡提到的 hal,我沒辦法安裝。有人說是新版已經不需要了。
  • gcin :好用的輸入法
  • firefox :好用的瀏覽器
  • terminator :好用的終端機
  • openbox :搭配 razor-qt 用的,LXDE 也用這個。

桌面環境,我是用 razor-qt,用 pacman -Ss 找不到,所以自己去 AUR 找 PKGBUILD,然後 build,再安裝。接著依照 Wiki 上的說明去設置 .xinitrc。

最後就大功告成了。裝完以後的感想是,對終端機的操作有點基礎會比較適合使用這個 distro。

參考資料:

Fork gedit-git-plugin

gedit-git-plugin 這個 plugin 不錯,就類似 vim-gitgutter 的功能,但是它用的是 libgit2-glib,這個還真麻煩,所以就 fork 出來改,看可不可以擺脫 libgit2-glib。

為此,我先讀了 vim-gitgutter 的程式,vim-gitgutter 主要是在 GitGutter 函式裡,這邊會先去 git diff,然後解析結果,再去作畫面的處理,gedit-git-plugin 也很類似。

程式主要是在 viewactivatable.py ,在啟用 plugin 的時候,會觸發 do_activate(),這時會去繫結相關的事件到程式裡。主要的處理在 update_location(),這裡就調用 libgit2-glib 函式庫去取得 git repository,然後再取得當前檔案的 blob ,最後再去呼叫 update();update() 是在做檔案比對,根據比對結果去顯示,這裡的比對用的是 python 內建的 difflib,而不是用 git diff 的結果。

分析完,大致知道要處理的部份就在 update_location(),只要這裡將使用 libgit2-glib 改為用 subprocess 呼叫 git 取得結果就可以了。第一個要做的事情是取得當前檔案的位置,這個只要套原來的程式,呼叫 self.location.get_path() 就可以。接著要去找 .git 資料夾,這邊我參考了 repo 裡找 .repo 的函式去找 .git 。基於以上兩者,可以取得相對於 .git 所在路徑的檔案路徑,也就是假設 .git 是在 /home/user/project1/.git ,編輯的是 /home/user/project1/dir1/readme,就可以得出 dir1/readme,接著只要用 git show HEAD:dir1/readme 就可以取得原始 blob 內容。依照原來程式的邏輯,把原始 blob 內容替換為 git show 程式的輸出之後,就可以擺脫 libgit2-glib 了!

最後,將 git.plugin 裡的 Loader=python3 改為 python ,再更新 README 並補上 setup.py 就收工了。現在就不用 libgit2-glib 啦~

我 fork 出來的專案放在 github 上。

gedit-git-plugin 二三事

同事都用 gedit ,只有我是用 vim。vim 有個 vim-gitgutter 的 plugin,可以直接顯示你目前的 code 跟 git repository 裡的 code 之間的差異點,用 ]h 或 [h 就可以快速搜尋,我想 gedit 應該也有。找了一下,就找到這個 gedit-git-plugin

安裝這個 plugin 相當簡單,依照說明去做,很快就可以裝好,但是安裝他背後所依賴的 library 就稍嫌麻煩了。他所需要的 library 有 libgit2, libgit2-glib。libgit2 有人已經包好在 ppa,只要 sudo add-apt-repository ppa:pressureman/ppa 再 sudo apt-get update && sudo apt-get install libgit2 即可。libgit2-glib 沒有人包,只能自己包,於是就又重練了一次打包 debian packages,真的太久沒包會忘記。大致列一下步驟,下次可以快速的回憶起來。

  1. 用 git 把 libgit2-glib clone 下來,輸入指令壓縮為 tarball:git archive –prefix=libgit2-glib-0.0.6/ –format=tar master | gzip > ../libgit2-glib-0.0.6.tar.gz
  2. 到上一層目錄之後,解壓縮,照理會解開到 libgit2-glib-0.0.6 ,接著切到該目錄下。
  3. 用 dh_make -f ../libgit2-glib-0.0.6.tar.gz 產生 debian 目錄。
  4. 修改 debian/control:這裡要修改的重點有 Depends、Homepage、Description、Package name
  5. 修改 debian/changelog:這邊就是加上變更的說明,調整名稱等等的,如果要上傳到 ppa,那個 unstable 要改為 ubuntu 欽定的名稱,像是 precise、raring 等等的。記得有 dch 指令可以做編修,用編輯器是比較快。
  6. 修改 debian/rules:內容出乎意料的簡單,在修改時,則是用 override_ prefix 去修你想調整的 target。例如:想改安裝地點,就用
    override_dh_install:
        $(MAKE) DESTDIR=$(PWD)/debian/tmp install

    想調整 configure,就用

    override_dh_auto_configure:
        dh_auto_configure -- --enable-python=yes

    想忽略自動測試,就用

    override_dh_auto_test-indep:

    這樣子,這也是手冊上建議的作法。

  7. 安裝相關的套件:python-gi-dev、python3.2-dev、libgirepository1.0-dev、libgio2.0-cil-dev、libgit2-dev、gobject-introspection。
  8. 好了就可以用 dpkg-buildpackages -b 來建立 debian package 了。

建立完之後,把該裝的都裝好,發現 gedit plugin 還是不能用,說找不到 python3。

結論是,這是一篇用來回憶打包 debian package 的文。

 

參考資料: