發表文章

目前顯示的是 2016的文章

如何升級CentOS上的C++編譯器版本

最近,在CentOS上編譯一個程式發生編譯器錯誤,編譯器抱怨沒有這個選項"-std=c++11",Google了一下發現是編譯器的版本太舊了。你可以透過"gcc --version"得知你的編譯器環境版本。 # gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO 步驟: 1. 安裝來源 wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo 2. 套件管理資料庫更新 yum upgrade 3. 安裝編譯器相關套件 yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++ 4. 啟用編譯環境 scl enable devtoolset-2 bash 5. 確認編譯器版本是否已經更新 # gcc --version gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO 參考來源 C++11 on CentOS 6, https://edwards.sdsu.edu/research/c11-on-centos-6/

使用Apache來實現Forward / Reverse Proxy服務

Apache可以設定為Gateway模式,換句話說,可以透過Apache來當做Forward/Reverse Proxy,這個可以運用在要存取防火牆內部的伺服器或是當作伺服器的快取。 應用實例: 透過Apache Gateway模式,來產生web socket中wss服務模式。假設你的web socket沒有憑證,可以直接透過網站主機的https來提供,實作方式就是透過Apache Gateway的方法來完成。 Apache需啟用下列兩個模組 Apache Module mod_proxy mod_proxy_wstunnel 修改http.conf設定檔 ProxyPass "/ws/" "ws://echo.websocket.org/" ProxyPass "/wss/" "ws://echo.websocket.org/" 重新啟動Apache Server就可以 參考資料 Apache Module mod_proxy Apache Module mod_proxy_wstunnel

如何找到php.ini設定檔?

不同的Linux distribution上的PHP環境設定會有所不同,我常常有個困擾,到底要如何找到PHP的設定檔呢? 其實,有個簡單的方法,那就是根據目前系統運行的環境參數來找就可以了,因為,實際上的設定檔位置,可能因為系統管理者的習慣與其他原因會有些不同。 只要登入該主機,然後透過PHP -i 輸出目前的所有設定參數,再grep一下就可以知道了。 php -i | grep "php.ini" 或者想要查詢PHP Extension的位置 php -i | grep "extension_dir"

如何mount一個virtual disk image?

這篇文章說明如何直接掛載一個虛擬磁碟的映象檔(VDI, VHD, VMDK)? 在Linux環境中,如果你需要將一個磁碟的映象檔掛載起來當作一個磁碟來使用的時候,這裡的說明就是你可以參考的文件。 步驟 RAW格式的image: 1. 先查看你要掛載的映象檔的分割 $ /sbin/fdisk -lu disk.img 2. 透過losetup來設定 # losetup /dev/loop0 disk.img -o {Start sector * bytes} 這邊offset的大小計算方式,就是你要掛載的partition的起始sector,乘上每個sector的大小。如果虛擬磁碟中沒有分割的話,就可以直接掛載,或者offset設定為0。 3. 確認一下檔案系統 # file -s /dev/loop0 4. 掛載檔案 # mount /dev/loop0 /mnt 5. 如果磁碟的檔案系統是系統可以直接支援的,也可以直接mount # mount -o loop,offset=$((10860003 * 512)) disk.img /mnt 其他格式的image: 如果你的虛擬磁碟格視為VMDK這個時候就可以透過qemu來協助 1. 先載入nbd kernel module # modprobe nbd max_part=16 2. 連接vmdk的印象檔到一個nbd裝置 # qemu-nbd -c /dev/nbd0 image.vmdk 3. 掛載這個nbd裝置 # mount /dev/nbd0p1 /mnt/image 卸載的時候,記得要qemu-nbd -d /dev/nbd0來解除連結。 參考 Loop-mounting partitions from a disk image, http://madduck.net/blog/2006.10.20:loop-mounting-partitions-from-a-disk-image/ https://en.wikibooks.org/wiki/QEMU/Images#Mounting_an_image_on_the_host

如何建立一個Ceph RADOS simple block device?

圖片
前言 如果你想透過Ceph RBD(block device service client)來建立一個simple block device來使用,你可以按照這篇文章的步驟來實作。 下列的例子會建立一個名稱為vpool01的pool,並且在這個pool上建立一個4GB的image(vdisk01)來使用。然後在Client端在使用RBD來map這個image,建立一個block device,直接這個4GB的空間。 步驟 1. 在Admin Node上,建立一個新的pool ~$ ceph osd pool create vpool01 256 256 2. 在Admin Node上,建立一個大小為4GB的simple block device image ~$ rbd create vpool01/vdisk01 --size 4096 確認一下,剛剛建立的device image是否有成功 ~$ rbd list vpool01 ~$ rbd info vpool01/vdisk01 3. 使用ceph-deploy安裝Client ~$ ceph-deploy new {client node} ~$ ceph-deploy admin {client node} Client節點為使用block device的主機,透過ceph-deploy安裝RBD與相關的驅動程式與kernel module。這邊的Client是一台Ubuntu Linux主機。 4. 在Client Node上,確認simple block device image狀態 ~$ rbd info vpool01/vdisk01 成功安裝完成的Client節點,可以透過rbd指令來查詢Image的資訊,由圖中可以確認該大小為4GB。 5. 修改/etc/ceph/rbdmap設定檔 將預使用的image加入到rbdmap這個設定檔中。 vpool01/vdisk01 id=admin,keyring=/etc/ceph/ceph.client.admin.keyring 6. 將image map到一個block device透過rbd kernel

如何快速安裝Ceph的物件式儲存服務?

圖片
前言 這篇文章主要依據文件[1],來介紹如何安裝Ceph的物件式儲存服務。如果原官方文件有修改,請以官方文件為準。實際安裝的Linus版本為Ubuntu 14.04。 進一步了解Ceph可以參考另一篇文章, 了解Ceph的儲存服務 。 安裝步驟 使用ceph-deploy這個工具來快速架設。這邊的範例,一共有四個節點分別為,管理節點adm、監控節點mon, 還有兩個OSD節點,osd0, osd1。 安裝程序由管理節點(adm node)開始進行。 1. 建立ceph-deploy在管理節點上 系統安裝的第一步,先建置管理節點(adm node),這個節點主要負責管理與建置其他節點使用。ceph-depoly這個工具就是安裝在此節點上。 a. 加入ceph的金鑰 wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add - 加入ceph下載的金鑰,使系統可以取得目前的套件。 b. 將ceph packages下載到系統的repository上 echo deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list 將{ceph-stable-release}改成你要安裝的版本代號,例如,你要安裝0.9版本,就改成inferanalis c. 更新你系統的repository並且安裝ceph-deploy: sudo apt-get update && sudo apt-get install ceph-deploy 2. 安裝NTP服務 完成ceph-deply的安裝後,接著就是安裝NTP Server來提供各節點時間校正。 安裝NTP在admin node上 sudo apt-get install ntp 3. 建立一個user用來安裝ceph,給ceph-deploy使用 a. 在每個ceph節點上建立一個user ssh user@c

如何在Ubuntu中不用密碼的SSH連線?

在Linux主機之間,如何啟用免密碼可以透過SSH連線進入主機(Enable password-less ssh connection)? 這個讓彼此信任的主機直接存取,無需要每次皆要輸入密碼。簡單說就是你可以透過SSH連到遠端的機器主機上,再登入的時候不用打密碼就可以直接連線登入主機。 設定步驟如下: 1. 產生SSH金鑰 先確認目前系統的使用者有沒有公私鑰(private/public key)。如果沒有公私鑰,得先產生用來存取其他主機的使用者的公私鑰,例如:本機端的使用者abay,要能夠存取其遠端主機,這時我們就必須先建立使用者abay的公私鑰,透過指令 ssh-keygen 來產生金鑰。 注意:在產生金鑰的時候,不要輸入密碼。 ssh-keygen Generating public/private key pair. Enter file in which to save the key (/ceph-admin/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/abay/.ssh/id_rsa. Your public key has been saved in /home/abay/.ssh/id_rsa.pub. 完成公私鑰的建立我們可以看到指令ssh-keygen已經將公鑰id_rsa.pub建立在/home/abay/.ssh下,私鑰id_rsa也在這個資料夾下。 2. 將金鑰複製到遠端的機器上 將剛剛產生好的金鑰傳送到預登入的機器上。下列例子透過指令 ssh-copy-id 將金鑰傳送到主機192.168.1.1上。 ssh-copy-id abay@192.168.1.1 如果你的電腦上沒有ssh-copy-id這個指令,你可以直接開啟使用者的公鑰/home/abay/.ssh/id_rsa.pub將內容複製,然後貼到對方機器的使用者/home/abay2/.ssh/ authorized_keys

如何設定使用者有sudo權限且不需要輸入密碼?

在Ubuntu的環境下如果需要將使用者的權限設定為可以sudo要如何作呢? 只需要執行下列指令,來進行設定即可: 產生sudo的設定檔: echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username} 例如要修改使用者abay echo "abay ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/abay 修改設定檔的權限: sudo chmod 0440 /etc/sudoers.d/{username} 完成上述指令該使用者即可使用sudo來切換使用者權限。 另外一個簡單的方式: 直接透過visudo指令編輯sudo設定檔就可以了。

如何安裝.NET Core在Ubuntu Linux上

圖片
期待已久個.NET Framework現在可以跨平台執行。這篇文章主要說明在Ubuntu平台上來安裝並且啟動.NET Framework,然後成功執行範例應用程式。 這邊安裝的.NET跟在Windows平台上使用的.NET Framework有些許的不同。主要是使用.NET Core,來實現.NET。.NET Core是一個依據ASP .NET 5來實作的跨平台的.NET。.NET Core包括CoreCLR的runtime還有CoreFX的framework函式庫。 步驟 按照官方網站[1]的說明只要四個步驟就可以簡單完成系統的安裝與設定。 第一步 增加一個apt-get的套件來源,與安裝一把金鑰。最後在更新一下套件資料庫。 sudo sh -c 'echo "deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 sudo apt-get update 第二步 安裝.NET Core,透過apt-get安裝整個dotnet與相關的套件。 sudo apt-get install dotnet 第三步 初始化要執行的應用程式。 dotnet new 第四步 執行應用程式。在執行dotnet run這個指令之前,你必須先執行dotnet restore這個指令,取得所需要的相關聯的dotnet套件,這邊的套件指的是程式所需要的函式庫,例如:System.Threading.Tasks, System.Text,Encoding等等,這個指令會自動下載所需要的套見到本地端。以我的環境為例,會將這些函式庫存放在/home/abay/.dnx/packages/ dotnet restore dotnet run 下列螢幕截圖為成功執行一個Console application,列印出"Hello