Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

March 5, 2014

Awesome WM vocabulary widget

No comments:
換到 awesome wm 之後,上方的 bar 其實有很多空間。因為自己的記性不好,乾脆寫個小 widget,大約 60 秒就 show 一個單字,不然每次五十音我都會一直忘記

抄抄寫寫一堆很醜的 lua code 的結果如下,他會讀取 .vocabulary 這個檔案,每 60 秒亂數取其中一行顯示

檔案更新怎麼辦?重開一下 awesome 就好囉!

vocabulary_widget = widget({ type = "textbox" })

function vocabularyUpdate(lines)
    vocabulary_widget.text = lines[math.random(0, #lines)]
end

function readFile(filename)
    local arr = {}
    local i = 0
    local file=io.open(filename, "r")
    if not file then return "empty" end
    for line in file:lines() do
        arr[i] = line
        i = i + 1
    end
    return arr
end

local file = "/home/walkingice/.vocabulary"
local period = 60

math.randomseed(os.time())
content = readFile(file)

vocabulary_timer = timer({timeout = period})
vocabulary_timer:add_signal("timeout", function()  vocabularyUpdate(content) end)
vocabulary_timer:start()

April 30, 2013

mSATA + HDD on Thinkpad x220

No comments:
前一陣子發現自己的硬碟的聲音有點怪怪的,擔心出了問題而在緊急的時刻壞掉,開始著手換新硬碟的事情。雖然平常有備份的習慣,仍然把所有的生活照片都放在筆電裡頭,畢竟照片要是弄丟可是再多錢也買不回來,帶在身邊總是比較安心。身邊有阿宅勸敗 SSD,著實讓我心動了一下,經常編譯 image 的人都知道,花上一兩個小時編譯的時間有多麼煩人。不過拿 SSD 儲存照片感覺有點浪費

耳聞 SSD 有壽命問題,也有人說硬碟並不見得比較長壽。無論如何,如果我要用 SSD 必定是為了工作,也一定會用很粗暴的方式對待。看了 x220 的 [手冊] 才注意到有 mSATA 這個東西。

無論是選用 SSD 或是一般的 HDD (硬碟),都還有另外一個 mSATA,因此我選用 HDD + mSATA,它的優點是
  • 我仍然有足夠容量的 HDD 放我的照片
  • 工作中的程式碼就丟到 mSATA 上面
  • 系統放在 HDD 上頭,不必擔心 mSATA 掛掉,也因為吃重的工作都丟給 mSATA,HDD 的壽命應該要比之前還要久一點
把最繁重的讀寫隔離在獨立的裝置上,對我個人而言,這大概是最好的解決方案了。在 Facebook 的 [Thinkpad 正體中文社團] 詢問鄉親的意見之後,我買了 Plextor 64M5M,現在的 Android BSP 一份大概是 20+G,64G 已經足夠我用好一陣子。(等到玩壞了,128G 應該也降價了XD),再買個 WD 500G 的硬碟,兩個加起來 3990,還算能接受。

「mSATA 爛掉,程式碼找不回來怎麼辦?」身為一個阿宅,當然要隨時用 git 管理,隨時把程式碼備份在遠端呀!

底下稍微紀錄一下這兩天做的事情,給未來的我當作筆記 (兩天後的我一定會忘光光怎麼做=.=)

Install mSATA

mSATA 也不過兩片 SD-Card 大小,拆下幾顆螺絲之後,把鍵盤跟支撐手腕的蓋子打開,撥開天線之後就可以看到插槽,整個安裝非常簡單,Youtube 上面有許多教學。只是看到天線用膠帶很隨意地黏在那裡,感覺有點....(聳肩)

藍色與白色天線底下的就是放置 mSATA 的空間
裝完之後用 gparted 分割一下就好,最前端留了 1MB 之後我用 ext4 當作 filesystem。接著在 fstab 讓它 mount 起來即可

/dev/sdb1 /mnt/msata     auto    defaults,noatime,nodiratime,discard,errors=remount-ro  0       0

Change HDD

HDD 比較費工,由於 x220 有 7mm 的限制,我選的是 WD 藍標 500G 的硬碟,硬體的更換 x220 已經相當簡單了,也是 Youtube 看一下,隨便拆幾顆螺絲就搞定。軟體部份,我把 home 整個 tar 起來放到外接硬碟,裝完系統之後再解開放回(恰好我的 uid 都是 1000 :P)。

備份

# 先把 X window 關掉吧,然後該 umount 的東西先卸載,沒用的東西先清掉
$ cd /media/external_storage
$ rm -rf /home/myid/.cache
$ sudo tar cf myid.tar /home/myid

接著匯出安裝過的 packages list
$ sudo dpkg --get-selections > dpkg_selections
那 etc 目錄的東西也可以備份一下

安裝系統

安裝 Debian 很輕鬆,抓下 netinst 的 CD ISO 檔之後,直接 dd 塞到 usb stick,就可以用 usb 開機安裝了。x220 有兩個 USB2.0 以及一個 USB3.0 的 port,如果 usb 碟插在 3.0 的 Port 會在接下來的安裝過程找不到檔案,不知詳細原因為何,換到 USB 2.0 的 port 就沒問題了

因為我習慣對系統加密,安裝的時候記得要進 Advanced Options/Expert install。一直到磁碟分割的階段,我用 GPT 對 HDD 分出四個 Partition
  1. /boot - 不加密
  2. / - 加密
  3. /swap - 加密
  4. /home - 加密
第一個 Partition 是 boot,當然不能加密,否則就不能開機了。建立完 boot 之後,依序再建立三個 partition,但是在各個 partition 的細項設定,把「用途」設定為「要進行加密的 Physical Volume



接著再選擇上方的「設定已加密的 Volume」來真正為該 partition 加密。系統會先清光該 Partition 上頭的東西,因為這是新硬碟沒必要浪費時間,所以清空的步驟可以取消跳過。


此時會多出三個已加密的 Partition,依序再為他們設定 mount point 與 filesystem 即可



安裝的時候可以不用安裝 desktop 的東西,基本系統安裝完成之後會把之前的 package 全部裝回來

回復備份

盡可能在 console 底下下指令,把之前的 packages 裝回來
# dpkg --set-selections < dpkg_selections
# apt-get update
# apt-get dselect-upgrade
重開機之後如果沒問題,關掉 X 回到 console 繼續把 home 給倒回來
# rm -rf /home/myid
# cd /home
# tar xf /media/external_storage/myid.tar

其他

其他一些眉眉角角的東西就順便紀錄一下吧

救回 Touchpad 中鍵

按住中鍵並且用 Trackpoint scroll,把 /etc/X11/xorg.conf 的 Synaptics 的區塊清掉 (對,我不想用它) 並加入以下這段
Section "InputClass"
 Identifier "Trackpoint Wheel Emulation"
 MatchProduct "TPPS/2 IBM TrackPoint"
 MatchDevicePath "/dev/input/event*"
 Option "EmulateWheel" "true"
 Option "EmulateWheelButton" "2"
 Option "Emulate3Buttons" "false"
 Option "XAxisMapping" "6 7"
EndSection

盡可能少用 swap


記憶體目前還滿夠用,叫系統沒事不要亂寫到 swap,在 /etc/sysctl.conf 加入
vm.swappiness=0

把 tmp 掛在記憶體上面


目前用 tmpfs 的方式把 tmp 掛起來,這樣讀寫都是在記憶體上頭。但我還不確定用 tmpfs 或是 ramfs 哪個好。(許多大廠的工程師會在 BSP build script 假設 /tmp 用不完,然後寫入一兩 G 的暫存檔 =.=)

我指定的大小是 200M,不夠的時候再重新 mount /tmp -o remount,size=300m 就好了
tmpfs /tmp tmpfs defaults,size=200m,mode=1777 0 0

安裝舊的 package


需要一些超舊,只存在於 stable 的 package,如 ia32-libs 與 sun-jdk。所以把 stable 加進 sources.list
deb http://debian.nctu.edu.tw/debian/ squeeze main contrib non-free

指定 Firefox 的 Cache Directory 到 mSATA


在 Firefox 的網址列打開 about:config,新增以下兩個 key 與 value

  • browser.cache.disk.parent_directory = /mnt/msata/myid/cache
  • browser.cache.offline.parent_directory = /mnt/msata/myid/cache

重開 Firefox 再打開 about:cache 就可以看見 cache 目錄放在 mSATA 上面了

December 11, 2012

Dupcility 備份檔案

No comments:

前言

寫在最前面希望比較多人看到

大學時代經常看到有人在痛哭實驗室的電腦在畢業前夕失竊,心血結晶的論文一併消失。其實只要有備份的習慣就能夠將傷害降到最低,要維持備份的習慣最重要的是備份的流程要很簡單

另外,一顆隨身硬碟一千多元,比起丟失重要資料的風險,這筆成本幾乎可以忽略不計。

正文

我們用相機拍攝許多數位照片並存進電腦裡,一不小心因為硬碟的毀損或失竊,人生的重要回憶就不見了。

老婆現在用 Ubuntu 當成日常使用的桌面環境(真的!),當然要為老婆找出備份的解決方案,這樣才能長久保存美美的照片。

找了一個看起來最簡單的工具就是 Deja-Dup,不論在 debian 或 ubuntu 底下一個指令就能裝起來了。

$ sudo aptitude install deja-dup

這個工具簡單到應該不需要再寫什麼,注意 Deja-dup design 的 screenshot 頁面說,開頭那個美美的保險箱畫面只會在第一次顯示(到底為什麼啊!?)

Deja-dup 只是一個前端工具,後端使用的是很棒的 duplicity,duplicity 有以下特點
  • 備份的檔案會打包成一個 tar.gz 檔,因此備份的東西不會綁死在 duplicity 上面
  • 漸進式的備份,存下有差異的部份
  • 可以用密碼或 gpg 加密

附帶一提
  1. Deja-dup 僅提供密碼的對稱式加密
  2. Deja-Dup 在 restore 的時候,有時候顯示成功卻看不見還原的檔案,介面顯示的錯誤訊息不夠。此時通常是權限問題,譬如說要還原一個備份檔,備份檔裡面包含需要 root 權限的路徑,或是解開還原檔案的目錄本身權限有問題,檢查一下應該都可以成功

Duplicity

因為 Deja-dup 太簡單不需介紹。這邊簡述一下 duplicity 的指令用法,熟悉的阿宅直接看 man page 吧。

duplicity 的 man page 可以看到兩個參數 URL 與 Directory。URL 代表的是備份檔要放置的位置,Directory 就是要被使用的目錄,兩者前後調換就會有 backup/restore 的功能。

不加密

# 不加密,把 /home/foo/files 備份到 /tmp/foo 底下
$ duplicity --no-encryption /home/foo/files/ file:///tmp/foo
# 把不加密的 /tmp/foo 備份還原到 /home/bar/files
$ duplicity --no-encryption file:///tmp/foo /home/bar/files

如果備份檔放置的目錄,有許多份 full tarball,會選擇日期最新的解開。

備份多個目錄

利用 include 與 exclude,似乎一定要兩者都有才會動。放在前面的優先權比較高,相關的解釋看 man page 的 ‘FILE SELECTION’

$ duplicity  --include /tmp/pathA --include /tmp/pathB --exclude '**' /tmp file:///tmp/backup

甚至可以寫到檔案裡面,globbing 指的是 pattern 能夠使用「* ** ?」這些特殊字元

$ cat list
/tmp/pathA
/tmp/pathB
$ duplicity --include-globbing-filelist list --exclude '**' /tmp file:///tmp/backup

對稱式加密

# 備份或還原時都需要輸入同一組密碼
$ duplicity /home/foo/files/ file:///tmp/foo
$ duplicity file:///tmp/foo /home/bar/files

非對稱式加密

使用 gpg 來做非對稱式加密

$ gpg --list-secret-keys 先列出有哪些 key 可用,選一組
$ duplicity --encrypt-key THEKEYID /home/foo/files/ file:///tmp/foo
$ duplicity --encrypt-key THEKEYID file:///tmp/foo /home/bar/files
如果該 key 有設定 passphrase,備份的時候不會問你 passphrase,因為是使用 public key 加密。但是在還原解開的時候會用到 private key,因此會需要 passphrase。

刪除過久的備份

備份多次以後會有數不清的檔案。可以再備份一次 full 然後刪除舊的檔案
$ duplicity full YOUR_BACKUP_COMMAND
$ duplicity remove-all-but-n-full 1 file:///path/to/repository # 列出可能會被刪除的檔案
$ duplicity remove-all-but-n-full 1 --force file:///path/to/repository # 真正刪除
幾個指令配合起來,寫個小 script。真的要備份的時候,只要把外接硬碟接上,執行 script 再出去喝口飲料,回來就可以把硬碟拔掉,應該夠簡單了吧?

Update

duplicity 備份的時候也會透過 gzip 壓縮,因此時間會長一點。如果不需要壓縮就加上參數 --no-compression。預設以 25 MB 為大小弄成一包,如果要改變這個大小就利用參數 --volsize,後接 100 就是以 100MB 為大小分割。