2016年9月3日 星期六

考試必考 IP (誤

127.0.0.1
255.255.255.0

168.95.1.1
168.95.192.1
139.175.55.244
139.175.252.16
61.31.1.1

2014年5月6日 星期二

Ubuntu 14.04 Desktop Installation 簡易安裝程序


設備環境:
- CPU: Intel Q9400
- RAM: 4GB
- HDD: SATA on SATA0

--

下載:
- http://www.ubuntu-tw.org/modules/tinyd0/
- Ubuntu 桌面版本 / 14.04 LTS / 64 位元版本 

--

步驟 1: Welcome
- 左邊: 選 English
# 雖然有 中文(繁體) 可以選, 還是習慣用英文界面.
- 右邊: 點 [Install Ubuntu]


步驟 2:
# 此步驟被略過, 可能有兩個原因: 1.使用空的硬碟  2.網路線有連接且DHCP自動取得IP


步驟 3: Preparing to install Ubuntu
> V has at least 6.4GB available drive space
> V is connected to the Internet
- 放空 [ ] Download updates while installing
# 裝完系統之後, 預設每天都會進行更新的檢查及處理, 不急著在這個階段抓更新檔案.
- 放空 [ ] Install this third-party software
# 裝完系統之後, 瀏覽器需要用 flash 再去抓, 影音也是有用到再去抓, 不急著這個階段裝.
# 若是桌面顯示不正常/黑畫面, 或是無線網路不通, 就需要勾這個選項自動去抓 driver.
# 有線網路若是因為 driver 不通, 那就會卡在步驟 2.
- 點 [Continue]


步驟 4: Installation type
# 硬碟已經有別的作業系統, 就會詢問要怎麼處理, 請自行選擇.
# 若是完全不要硬碟裡的資料, 可選 [ ] Something else
# 選完之後點 [Continue]

# 以下是分割硬碟為 16G swap 以及一個 / 的設定方式, 請自行依喜好/需求變動.
- 點 [New Partition Table...] 清除所有硬碟分割設定
- 點點 畫面中間的 free space, 進入 Create partition 建立硬碟分割區畫面.
  - Size: 16000 MB
  - Type for the new partition: Primary
  - Location for the new partition: Beginning of this space
  - Use as: swap area
  - 點 [OK]
# 理論上畫面中間會看到新增一行 /dev/sda1 swap
- 點點 畫面中間的 free space, 進入 Create partition 建立硬碟分割區畫面.
  - Size: N MB
# 剩下的所有硬碟空間.
  - Type for the new partition: Primary
  - Location for the new partition: Beginning of this space
  - Use as: Ext4 journaling file system
# 預設值是這個選項, 想用其它的請自行選擇.
  - Mount point: /
  - 點 [OK]
# 理論上畫面中間會看到新增一行 /dev/sda2 ext4 / 記得勾選 Format
- Device for boot loader installation: /dev/sda
# 目前只有一顆 SATA 硬碟接在 SATA0, 其它狀況請自行選擇.
- 點 [Install Now]


步驟 5: Where are you?
- 選 Taipei
# 點選地圖設定這台設備所在的時區, 我在台灣就選 Taipei.
- 點 [Continue]


步驟 6: Keyboard layout
- 左邊: 選 English(US)
- 右邊: 選 English(US)
# 基本 pc/server 是這樣選, 其它狀況請自行選擇.
- 點 [Continue]


步驟 7: Who are you?
- Your name: 輸入你的稱呼/全名, 像是 Thomas A. Anderson
- Your computer's name: 輸入這台設備的名稱, 像是 Ubuntu-matrix
- Pick a username: 輸入你的設備帳號, 像是 neo , 建議英文只使用小寫字.
- Choose a password: 輸入你要用的密碼
- Confirm your password: 再輸入你要用的密碼確認無誤
- 勾選 [O] Require my password to log in
- 點 [Continue]


開始安裝檔案.... 最後會提醒你拿出光碟後, 按 enter 重開機進入系統.

成功安裝系統後, 在網路通暢的情況下, 再繼續進行設定及軟體安裝.
(以下內容緩慢更新/修正...)


--

更新軟體套件:
- 左邊: 點 [Software Updater]
- 點 [Install Now]
# 預設的自動更新設定就夠用了, 其它狀況請點 [Settings...] 修改設定.
# 有更新的時候才會出現在左邊, 或是自動跳出更新界面.

--

Terminal: rxvt
- 左邊: 點 [Ubuntu Software Center]
- 右上角搜尋: rxvt
> Rxvt Color Unicode Terminal (rxvt-unicode)
> Rxvt Color Unicode Terminal (rxvt-unicode-256color)
# 二選一, 我個人用的是 rxvt-unicode-256color 這個
# 預設是白底黑字, 要改成常見的黑底白字, 修改 ~/.Xdefaults 這兩行:
URxvt*foreground: gray
URxvt*background: black
# 同場加映, 設定啟動 rxvt 後的寬高大小:
URxvt*geometry: 140x50

--

中文環境:
- 左邊: 點 [System Settings]
  - 點 [Language Support]
  - 點 [Install]
# 缺少語言環境所需的檔案, 就會跳出安裝界面.
# 如果想要整個桌面界面顯示中文, Language for menus and windows 就選 漢語(台灣)
# 想要加裝別的語言(=日文), 點 [Install/Remove Languages...] 勾選後, 點 [Apply Changes]
- 重開機, 讓中文環境整個重新載入使用.
--

中文輸入法:
- 左邊: 點 [System Settings]
  - 點 [Text Entry]
  - 左邊 Input sources to use: 點 [+] 選 [Chinese (Chewing)] 後, 點 [Add]
  - 右邊 Switch to next/previous source using 可設定輸入法的切換組合鍵.
# 我習慣用 L-ctrl+shift 和 R-ctrl+shift 做這兩種方式的切換.
- 重新登入帳號, 讓輸入法正常啟動.

--

firefox + flash
- 左邊: 點 [Ubuntu Software Center]
- 右上角搜尋: flash
> Adobe Flash plugin
# 系統內建 firefox, 需要外安裝 adobe flash.

--

chrome + flash
- 左邊: 點 [Ubuntu Software Center]
- 右上角搜尋: Chromium
> Chromium Web Browser
- 右上角搜尋: pepperflashplugin
> Pepper Flash Player - browser plugin

--

video player: smplayer
- 左邊: 點 [Ubuntu Software Center]
- 右上角搜尋: smplayer
> SMPlayer

--

vmware player
- https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/6_0
- VMware Player for Linux 64-bit
  - 點 [Download] 得到檔案 ~/Downloads/VMware-Player-6.0.2-1744117.x86_64.bundle
  - 左邊: 點 [rxvt] 執行 sudo sh ~/Downloads/VMware-Player-6.0.2-1744117.x86_64.bundle
# 檔案版本有變動時, 得到的檔案名稱也會不同.
# 有需要用網路銀行/網路報稅這些 IE only 的網站, 再用 vmware player 裝一個 windows xp 起來用

--

其它: (開一個 rxvt 手動安裝軟體)
- sudo apt-get -y install joe
- sudo apt-get -y install vim
- sudo apt-get -y install nmap
- sudo apt-get -y install tcsh
# 用 tcsh 的範例設定 https://raw.github.com/slzzp/install_script/master/debian/etc/csh.cshrc 放到 /etc/

--
snmp:
- sudo apt-get -y install snmp snmpd snmp-mibs-downloader

--
mrtg:
- sudo apt-get -y install mrtg

--
How to restore privacy: https://fixubuntu.com/

--
將 Linux 的 Firefox、Chrome 暫存區設定到 RAM 裡面
http://blog.longwin.com.tw/2011/01/linux-firefox-chrome-ram-2011/

2014年2月7日 星期五

2013年9月20日 星期五

鐵架式松果收納

用塑膠抽屜的好處是方便存取+防灰塵+乾燥劑有效利用, 搬家的時候也省得再裝箱, 繩子綁一下就方便搬動.

用鐵架則是堅固耐用, 不太容易積灰塵, 相較於木頭櫃子也經濟實惠又耐久壓使用.

鐵架是用這種鍍鉻鐵架: 【鐵架王】四層鍍鉻架(90x45x150cm)

不過我用的規格是 90x45x180cm, 大潤發就有賣, 不過現在大都是會生銹, 層網中間軟趴趴的便宜貨...

塑膠抽屜用這個規格: R099 R099特大彩虹抽屜整理箱 Rainbow Drawer Storage Box (XL)


考慮層板的承重, 以及塑膠抽屜疊放的承受力, 鐵架就用上面那張圖的方式來組層板, 一層可以左右兩個疊兩個總共四個, 三個層板就可以放十二個抽屜.


下層抽屜的外殼底部有用繩子綁在鐵架層板上, 以免遇到地震搖晃過大而滑動.

下層放比較重的小說, 一整個抽屜約 30KG 左右, 上層就放漫畫, 通常不到 20KG. 塑膠抽屜的外殼承重久了會變形, 還在研究怎麼用 L 型鐵片做結構補強.

鐵架最下面的底層一定要裝層板(卡在柱子的最下面一格刻度), 這樣子整個鐵架會比較穩固, 另一個原因是比較不會受潮, 打掃地板也比較方便.

最上面因為沒有柱子卡住抽屜, 所以可以就用來放滑輪整理箱, 裡面裝些比較輕的松果以策安全.


至於 CD 試到這種塑膠抽屜, 剛好可以放兩排 CD, 中間的縫隙可以留著方便拿 CD, 或是多塞一片進去放.


鐵架的層板若是用 120x45 的話, 就可以左右各放ㄧ個大抽屜, 中間塞這種放 CD 的小抽屜剛好.

150x45 的層板目前還沒試出最有效利用空間的抽屜組法.

有人問為什麼不用 90x60 120x60 150x60 這種寬 60 規格的層板? 這樣 R099 不就剛好整個放在層板上, 而不會在鐵架後面凸出來?

因為在用寬 45 的層板放 R099 的時候, 剛好是層板的邊框堅固地撐住抽屜的重量, 用寬 60 的層板就會有一邊是軟趴趴的層網撐住抽屜, 不夠堅固, 而且放久了之後層網會受重變形.

目前這種鐵架的便宜版本說層板支撐重量有幾十到一百公斤的, 實際上是框架才有這種支撐力, 中間的層網大都軟趴趴不堪負重, 長 120 或 150 的層板才有在層網做結構補強的設計, 不過目前還是 90x45 層板的空間使用效率最高, 就像上面的照片一樣一組剛好塞滿滿十二個抽屜.

有的地方可以買到木板的取代鐵網的版本(像是特力屋), 這種我覺得反而不耐庫存使用, 從重量來猜測這是木屑膠合板, 重量相當重, 而且承重久了會變形, 木頭材質也有機會受潮後散發出不酥胡的霉味, 當書桌用倒是還不錯.

2013年8月16日 星期五

Synology DS213j 測試文


官方網站: DS213j

在 pchome 線上購物 Synology DS213j 2Bay網路儲存伺服器 買入, 圖片亦取自此網頁





測試硬碟: Seagate 500G SATA2 HDDx2

運作模式: Synology Hybrid RAID (SHR) (With data protection of 1 disk fault-tolerance) 也就是 RAID 1


開始使用的時候要先把硬碟裝好(請參考隨箱附上的快速安裝說明)再打開電源開關, 在個人電腦執行瀏覽器, 從網頁介面連進去.

初次安裝需要上傳隨箱附上的光碟片裡的 DSM 檔案之後, 進行初始化硬碟(預設運作模式就是上面寫到的 SHR)及其他設定程序.

再次重開後需要等久一點, 才連得上網頁介面, 然後會自動跑 RAID 1 的 parity check(這詞用在 RAID 1 怪怪的), 放著跑就可以先睡覺去.
(500G 就可以從 22:52:05 跑到 04:26:29 才結束, 那裝 4TB 硬碟不就更久了...)


建好的檔案系統是 ext4, 故意直接拔掉電源再插回去開機後, 並不會因為 fsck 卡很久.


在 Control Panel 的 Shared Folder 設定分享資料夾之後, 透過網路芳鄰塞一些糟糕的壓縮檔跟比一雞還大的糟糕影片進去,

大略測試得到循序寫入速度/sequential write 70MB/sec 左右, 循序讀取速度/sequential read 90MB/sec 左右.

小檔案會被 DS213j cache 住, 重複讀取的時候不會產生硬碟 I/O 動作, 真不愧是 embedded linux.


故意關機拔掉一顆硬碟(這機型沒有熱插拔設計), 開機後會持續嗶嗶叫提醒有故障狀況發生.
(可以在 Storage Manager 的 Volumn 點 Beep off 關掉, 或是在 Control Panel 的 Hardware 的 Beep Control 關掉)

此時 RAID 狀態是降級(degrade)運作, 網芳仍然能夠存取 NAS 裡面的檔案. 

再次關機把硬碟接回去, 開機後仍然會持續嗶嗶叫, Storage Manager 裡面會顯示不認插上去的硬碟, 就算是本來 RAID 1 的另外一顆硬碟也是不認, 得在 Storage Manager 的 Volume 的 Manage 選 repair 進行修復, 並不會自動 rebuild.

修復的行為是從原本 RAID 1 的硬碟 raw read 再 raw write 到插上去的硬碟裡, 速度還比 parity check 快 -_-
(500G 的 10% 進度需時約 13~15 分鐘, 整個跑完將近兩個半小時)

跑完後有出現提醒訊息, 表示這種狀況要修復的話, 原本的 RAID 1 的硬碟至少要有一顆維持接在上面, 拔了再插就不認來用了.


目前唯一有問題的地方是... pchome 跟官方網頁上都是寫記憶體 512MB, 可是我在 System Information 怎麼只看到 256MB, 難道連記憶體也 RAIDM 1 了嗎?

寫信去客服問 -_-

--
官方回信:

很抱歉,因軟體問題造成您的困擾,還請多多包涵。

您遇到的問題是已知的軟體BUG,我們已於 8/8 修復錯誤狀況 http://www.synology.com.tw/releaseNote_cht/DS213j.php?lang=cht。

您可至官網上 DS213j 的下載中心去更新作業系統的版本:DSM 4.2-3226,以解決記憶體顯示錯誤問題,按此連結

2013年7月1日 星期一

strcmp() 傳 NULL 進去的神秘現象...

作業環境:
Linux li475-173 3.5.2-linode45 #1 SMP Wed Aug 15 14:10:55 EDT 2012 i686 GNU/Linux
gcc version 4.4.5 (Debian 4.4.5-8)

-

test code: (已經簡化到最少)

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *na = NULL;
    char *nb = NULL;
    int ret = 1234;

    strcmp(NULL, NULL);  // case 1
    strcmp(na, nb);  // case 2
    ret = strcmp(NULL, NULL);  // case 3
    ret = strcmp(na, NULL);  // case 4
    ret = strcmp(NULL, nb);  // case 5
    ret = strcmp(na, nb);  // case 6

    printf("%d\n", ret);

    return 0;
}

case 1-6 只會使用其中一行進行編譯(gcc test.c), 不加其他編譯參數.

若加上 -Wall 可以看到類似這樣的警告訊息:
warning: null argument where non-null required

-

case 1 2 3 可以執行無誤, case 4 5 6 都會噴 Segmentation fault

-rwxr-xr-x  1 slzzp admin      4520 Jul  1 20:35 a.out.1
-rwxr-xr-x  1 slzzp admin      4520 Jul  1 20:36 a.out.2
-rwxr-xr-x  1 slzzp admin      4520 Jul  1 20:36 a.out.3
-rwxr-xr-x  1 slzzp admin      4622 Jul  1 20:36 a.out.4
-rwxr-xr-x  1 slzzp admin      4622 Jul  1 20:36 a.out.5
-rwxr-xr-x  1 slzzp admin      4622 Jul  1 20:36 a.out.6

b3b2d33b3f5dca1b9df14eed6056d216  a.out.1
b3b2d33b3f5dca1b9df14eed6056d216  a.out.2
015e405413b165b7539f3dfd6f0601f2  a.out.3
2e64c7055fae7e606412ef2adede6d87  a.out.4
8b620ac644f8a18e5cbb953d19b8ede5  a.out.5
d8987fb39dbb7046b772cb86a11f149e  a.out.6

故意把 case 1 跟 case 2 多複製幾行, 編譯後的 a.out 檔案大小跟 md5 
都相同, case 3 的執行結果 ret 是 0, 應該都被自動 -O 過了.

所以 case 1 2 3 根本沒進去 strcmp 執行過... oroz

補充: ret 是 0 表示 strcmp() 的結果是 TRUE, 理論上來說 NULL 跟 NULL
相比的確是一樣的沒錯.


那 case 4 5 6 的狀況呢...

查了幾下之後, 得到這個結論:
Passing a null pointer to strcmp() results in undefined behaviour.
Don't do it.

--
嗚嗚, libc/strcmp 沒有做防呆檢查...
只好再想想 test unit / test process 要怎麼改了... T_T