Target problem

在 BIOS 中的 Boot order 中, 沒有網卡開機的選項, 甚至是找不到網卡; 進入到 OS 之後,網卡就出現了並且能正常運作。

Environment

Item Value/Settings
OS RHEL 7.4
NIC Intel xv520

Solution

  • Step 1:

從 Intel 官網中, 下載 BootUtil:

然後上傳至 RHEL 中並解壓縮:

  • Step 2:

安裝 Kernel Source:

1
sudo yum install kernel-devel
  • Step 3:

執行 ./bootutil64e 可以先列出當前的網卡狀態:

1
2
3
4
5
6
Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
1 90E2BAB1EF88 218:00.0 10GbE N/A FLASH Disabled
2 90E2BAB1EF89 218:00.1 10GbE N/A FLASH Disabled
3 90E2BAB1F154 28:00.0 10GbE N/A FLASH Disabled
4 90E2BAB1F155 28:00.1 10GbE N/A FLASH Disabled

在上述例子中, NIC 的 firmware 是設定成不能 flash, 這時候必須要先開啟 flash 功能。
執行 ./bootutil64e -NIC=3 -FLASHENABLE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Connection to QV driver failed - please reinstall it!

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.6.57.0
Copyright (C) 2003-2017 Intel Corporation

Enabling boot ROM on port 3...Success

Reboot the system to enable the boot ROM on this port

Port Network Address Location Series WOL Flash Firmware Version
==== =============== ======== ======= === ============================= =======
1 90E2BAB1EF88 218:00.0 10GbE N/A FLASH Disabled
2 90E2BAB1EF89 218:00.1 10GbE N/A FLASH Disabled
3 90E2BAB1F154 28:00.0 10GbE N/A Reboot Required
4 90E2BAB1F155 28:00.1 10GbE N/A FLASH Disabled

接下來執行 ./bootutil64e -NIC=3 -BOOTENABLE=PXE,就可以打開網卡的 PXE 功能了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Connection to QV driver failed - please reinstall it!

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.6.57.0
Copyright (C) 2003-2017 Intel Corporation

Enabling boot ROM on port 1...Success

Reboot the system to enable the boot ROM on this port

Port Network Address Location Series WOL Flash Firmware Version
==== =============== ======== ======= === ============================= =======
1 90E2BAB1EF88 218:00.0 10GbE N/A FLASH Disabled
2 90E2BAB1EF89 218:00.1 10GbE N/A FLASH Disabled
3 90E2BAB1F154 28:00.0 10GbE N/A PXE 2.1.40
4 90E2BAB1F155 28:00.1 10GbE N/A FLASH Disabled

完成, 並重開機驗證 PXE 是否正常啟動。

Comment and share

在 Ubuntu 透過 WebUpd8 team ppa 安裝 Java:

1
2
3
sudo add-apt-repository ppa:webupd8team/java
sudo apt update
sudo apt install oracle-java9-installer

安裝的過程中發生 404 Not found:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Downloading Oracle Java 9...
--2017-10-19 08:41:59-- http://download.oracle.com/otn-pub/java/jdk/9+181/jdk-9_linux-x64_bin.tar.gz
Resolving download.oracle.com (download.oracle.com)... 210.61.248.163, 210.61.248.216
Connecting to download.oracle.com (download.oracle.com)|210.61.248.163|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://edelivery.oracle.com/otn-pub/java/jdk/9+181/jdk-9_linux-x64_bin.tar.gz [following]
--2017-10-19 08:41:59-- https://edelivery.oracle.com/otn-pub/java/jdk/9+181/jdk-9_linux-x64_bin.tar.gz
Resolving edelivery.oracle.com (edelivery.oracle.com)... 104.116.18.92, 2600:1417:1b:188::2d3e, 2600:1417:1b:184::2d3e
Connecting to edelivery.oracle.com (edelivery.oracle.com)|104.116.18.92|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://download.oracle.com/otn-pub/java/jdk/9+181/jdk-9_linux-x64_bin.tar.gz?AuthParam=1508373839_4021b0b2a88845635225f537490b9b5a [following]
--2017-10-19 08:42:00-- http://download.oracle.com/otn-pub/java/jdk/9+181/jdk-9_linux-x64_bin.tar.gz?AuthParam=1508373839_4021b0b2a88845635225f537490b9b5a
Connecting to download.oracle.com (download.oracle.com)|210.61.248.163|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-10-19 08:42:01 ERROR 404: Not Found.

download failed
Oracle JDK 9 is NOT installed.
dpkg: error processing package oracle-java9-installer (--configure):
subprocess installed post-installation script returned error exit status 1
E: Sub-process /usr/bin/dpkg returned an error code (1)

在等待官方之餘,嘗試先自己修改 deb 來解決這個問題。

Continue reading

本文記錄如何在 Ubuntu 16.04 (14.04) 上搭建 Cuda, Matlab 與 OpenCV 的開發環境。

Troubleshooting

先把 troubleshooting 放前面是因為本來就是為了解決第一個 error 才有了這一篇紀錄XD。

Error 1 與 error 2 都是發生在 Matlab R2015b 已經安裝好的情況下才產生。更準確來說是程式讀取到 Matlab 自帶的 libtiff.h 才產生的 error。

Error 1

某人開發的程式,在 Matlab 安裝完畢後,編譯時 include Matlab library 與 header 然後出現錯誤:

Compile error

如果編譯時不引用到 Matlab 的東西,就不會有事情。但是這道程式就是必須要同時使用 Matlab 與 OpenCV。

根據 google 來的資料,應該是 OpenCV 編譯時沒有啟用 TIFF (?)
所以解決方法就是重新編譯 OpenCV 並且啟用 TIFF。

Error 2

重新編譯 OpenCV 時,出現錯誤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFReadDirectory@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFWriteEncodedStrip@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFIsTiled@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFOpen@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFReadEncodedStrip@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFSetField@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFWriteScanline@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFGetField@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFScanlineSize@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFNumberOfStrips@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFSetWarningHandler@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFSetErrorHandler@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFReadEncodedTile@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFReadRGBATile@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to TIFFClose@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFRGBAImageOK@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'
collect2: error: ld returned 1 exit status
tools/CMakeFiles/compute_image_mean.dir/build.make:134: recipe for target 'tools/compute_image_mean' failed
make[2]: *** [tools/compute_image_mean] Error 1
CMakeFiles/Makefile2:473: recipe for target 'tools/CMakeFiles/compute_image_mean.dir/all' failed
make[1]: *** [tools/CMakeFiles/compute_image_mean.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

同樣根據 error 1 的參考資料:https://github.com/BVLC/caffe/issues/4436。
CMakeCache.txt 裡面發現:WITH_TIFF=ON, BUILD_TIFF=OFF
看起來原本 cmake 就有偵測到系統的 libtiff,因此預設不編譯 tiff。
既然這樣,所以解決方法就是在 cmake 時,增加參數 -D BUILD_TIFF=ON

Error 3

OpenCV 已經編譯完成,但原本的程式重新編譯時出現:

1
/usr/bin/ld: cannot find -lippicv

根據查到的資料,解決方法就是在編譯 OpenCV 時,cmake 階段增加 -D WITH_IPP=ON


System environment

兩套環境:

  1. Ubuntu 16.04 with Nvidia GeForce GTX 970
  2. Ubuntu 14.04 with Nvidia GeForce GT 620 OEM

第一套環境是從 OS 開始安裝;
第二套是一個已經存在的環境,只是再重新編譯 OpenCV (為了解決 TIFF 問題)。

其他的系統資訊:

  • OpenCV: 3.2
  • CUDA: 8.0
  • Matlab: R2015b (or Octave 4.2)
  • Nvidia driver: 375
  • Java:
    • Oracla Java 8 (on site 1)
    • Oracle Java 7 (on site 2)
Continue reading

Heat 是 OpenStack 中,負責提供 Orchestration 服務的 component。

Heat 用 resource 來描述 OpenStack 的狀態。例如你設定一個 network resource,在這個 resource 中,設定名稱為 default。接下來 Heat 將會在你的 project 中,檢查是否有一個名稱為 default 的 network;如果沒有,則 Heat 將會在 project 建立 network。除了 network 之外,image、volume、port、instance 等都可以是 Heat 的 resource。

Resource 之間可以建立關連性,例如你可以先建立一個 volume resource。接下來再設定一個 instance resource ,並且在 instance resource 的 block_device_mapping 的屬性中,設定與 volume resource 建立關連性。這樣 Heat 就會先檢查 volume 是否存在,然後檢查 instance 是否存在並且 volume 是否已掛載到 instance 中。

這個想法與許多 deployment 軟體相同,例如 Puppet 是讓使用者設定 resource,然後 Puppet 根據 resource 的描述去配置 Linux;而 Saltstack 則是根據 user 設定的 state 來配置 Linux。

在開始之前,你必須要先準備:

  1. 一個 OpenStack Account。同時你必須要確定該 platform 有安裝 Heat 服務。本文是使用 SSCloud 做 demo。
  2. 熟悉 OpenStack 的基本操作:使用 OpenStack dashboard 或是使用 OpenStack command client。

Template

先前已經提過 Heat Resource 。在 Heat 中,由眾多 resource 所組合而成的檔案/物件就是樣版(template)。
你可以使用 heat 指令來查詢你的 OpenStack platform 支援哪些 template。

執行 heat template-version-list 會得到:

Imgur

Continue reading

VIM 在純 terminal 的環境下, 如果你設定 bg=light (預設),註解的顏色真是令人看到眼睛都快瞎了。

VIM Color (set bg=light)

Solution

一般來說,解決的方法通常有:

  • 設定 bg=dark

    ~/.vimrc or /etc/vimrc 中設定: set bg=dark
    這樣整個配色都會調整成:

    VIM Color (set bg=dark)

    但是這種配色又不合我的胃口。

  • 套用別人寫好的 color scheme 或是自己寫 color scheme

    網路上已經有不少人寫好了 scheme,如果想要套用別人的 scheme,可以參考 Tsung’s Blog 的挑選 Vim 顏色(Color Scheme)這篇做設定;自己編輯的話,嗯,自己 google 吧XD

    不過對於我這種懶到不行的人來說,套用別人的 scheme 還是太麻煩惹~

Continue reading

FFmpeg 是一套跨平臺開發原始碼的影音轉換軟體。
利用 FFmpeg 我們可以在 Linux 上將 DVD 轉換成 mp4 或是其他格式。

Ubuntu 15.04 以上可以直接以 apt-get 安裝。不過我的平臺是 Ubuntu 14.04。
因此只能通過兩種方式安裝: ppa、手動編譯。

如果要從 PPA 安裝,請參考: https://launchpad.net/~mc3man/+archive/ubuntu/trusty-media

不過我是採用編譯的方式:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

Continue reading

執行 ceph -s 出現:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cluster 1a1d374a-c6e9-48cb-9b45-525a6fdaa91e
health HEALTH_WARN
64 pgs degraded
64 pgs stale
64 pgs stuck degraded
64 pgs stuck stale
64 pgs stuck unclean
64 pgs stuck undersized
64 pgs undersized
monmap e1: 1 mons at {twin-storage-01=172.16.91.1:6789/0}
election epoch 2, quorum 0 twin-storage-01
mdsmap e5: 1/1/1 up {0=twin-storage-01=up:active}
osdmap e92: 7 osds: 7 up, 7 in
pgmap v685: 832 pgs, 7 pools, 43573 kB data, 38 objects
7491 MB used, 14889 GB / 14896 GB avail
769 active+clean
37 stale+active+undersized+degraded+remapped
26 stale+active+undersized+degraded

很多 pg 卡在 degraded + undersized 狀態。

Continue reading

Squid 作為 Transparent proxy 時,不但可以加快區域網絡內的速度、降低網路流量
還可以控管區網內是否要開放/封鎖網站(監看區網內誰在玩FB或是看色情網站XD)

通常 Transparent proxy 都會放在區網對外的那台 server 上,例如下圖:

Squid-transparent-proxy.jpeg

對於 Proxy , Transparent proxy 沒有概念的人,可以先看鳥哥的文章,這邊就很不負責的說不再贅述了((懶~

實驗環境

Item Value
OS Gentoo
Docker version 1.7.9
Docker image sameersbn/squid:3.3.8-4

只要能跑 Docker, 實體機的 OS 是什麼都不重要 :D

Continue reading

古振浩 Chen-Hao Ku

Taiwanese working in ShangHai


Backend Develop Engineer, UCloud


ShangHai, China