發表文章

目前顯示的是有「How to」標籤的文章

Kubernetes Dashboard登入?

圖片
圖1 登入畫面截圖 依照線上文件安裝Kubernetes Dashboard(Web UI)後,是不是會遇到需要登入的畫面? 安裝的文件參考https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/ 目前Kubernetes Dashboard驗證提供兩種方式,在圖1中可以到可以使用Token或是Kubeconfig的方式來登入Kubernetes Dashboard,這邊我主要來介紹使用Token的方式來登入。 步驟 1. 建立dashboard service帳號 $kubectl create serviceaccount dashboard-admin-sa 透過kubectl建立帳號dashboard-admin-sa在預設的namespace中 2. 將dashboard-admin-sa關聯到cluster-admin role $kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=default:dashboard-admin-sa 3. 取出帳號的token $kubectl get secrets 圖2 secrets資源列表 $kubectl describe secret dashboard-admin-sa-token-lcr24 圖3 列出token 圖3顯示透過kubectl指令取得token就可以登入Kubernetes dashboard 圖4 登入後畫面

如何測試伺服器端CORS是否有正常作用

圖片
如何測試與驗證CORS是否有正常運作,首先先檢查關於HTTP Header的組態設定是否有正確。 CORS的HTTP header組態指定參數如下: 伺服器端的HTTP header設定完成後,要確定設定沒有生效可以使用cURL工具在客戶端來,直接觀察驗證HTTP header資訊。 以www.example.com為例,我們可以透過觀察HTTP OPTIONS的header資訊來驗證。 # curl -v -X OPTIONS https://www.example.com 透過cURL輸出的header資訊如下: < HTTP/1.1 200 OK < Date: Tue, 19 May 2020 00:55:22 GMT < Content-Type: application/json < Content-Length: 0 < Connection: keep-alive < x-amzn-RequestId: a1b2c3d4-5678-90ab-cdef-abc123 < Access-Control-Allow-Origin: * < Access-Control-Allow-Headers: Content-Type,Authorization < Access-Control-Allow-Methods: DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT 透過HTTP Header資訊輸出來觀察伺服器端的CORS設定是否正確。由輸出的資訊我們可以確認有包含 Access-Control-Allow-Origin Access-Control-Allow-Headers Access-Control-Allow-Methods 有這三個Header其對應的值,依據自行服務的不同有不同的設定。

如何在Nginx所設置的Proxy中可以取得真實客戶的IP位址

如何在Nginx所設置的Proxy架構中可以取得真實客戶的IP位址 常見的情境是需要對客戶端IP進行特定的處理,例如:限定存去次數、流量或是啟用快取服務,此時及需要藉由來源客戶端的IP位置來關聯。 設定前先來說明一下一些變數名稱: $remote_addr Nginx核心模組中( ngx_http_core_module )中的內建變數$remote_addr就是用戶端的IP位址。 X-Forwarded-For X-Forwarded-For(XFF),是一個用來辨識通過HTTP Proxy或是load balance連接到web server,用戶端最原始的IP位址使用的HTTP Request header欄位。 X-Real-IP X-Real-IP為傳統上HTTP reverse proxy會使用非標準的header去告知upstream server關於來源戶端的IP位址,之一個HTTP header欄位。在Nginx的文件( http://nginx.org/en/docs/http/ngx_http_proxy_module.html )範例中可以看到。 $proxy_add_x_forwarded_for Nginx Http proxy模組中( ngx_http_proxy_module )中的內建變數$proxy_add_x_forwarded_for,會使用HTTP Request Header, X-Forwarded-For將來源IP記錄於此,當request經過多台proxy或是load balance產生的多筆IP位址會以逗號分開來,如果一開始沒有設置X-Forwarded-For,那麼在模組中的$proxy_add_x_forwarded_for的值就會跟$remote_addr一樣。 通常可以透過下列的指令來設定 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 設定方法: 在第一層的proxy或是load balancer就先設定nginx的default.conf proxy_set_header X-Real-IP $remote_addr; proxy_set_hea...

如何安裝Microsoft SQL Drivers在PHP中

Installing the Microsoft PHP Drivers 4.3 for SQL Server 安裝環境: Ubuntu 16.04 for PHP 7.0 安裝步驟: Step 1: 安裝PHP與相關的套件 # apt-get -y install php7.0 mcrypt php7.0-mcrypt php-mbstring php-pear php7.0-dev php7.0-xml Step 2: 安裝編譯PHP SQLSRV, PDO_SQLSRV相關套件 #curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - #curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list #apt-get update #ACCEPT_EULA=Y apt-get install msodbcsql mssql-tools #apt-get install unixodbc-dev #'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile #'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc #source ~/.bashrc Step 3: 安裝PHP SQLSRV, PDO_SQLSRV # pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system #pecl install sqlsrv #pecl install pdo_sqlsrv Step 4: 修改php.ini檔案,新增extension #echo "ext...

如何擷取網頁畫面使用selenium在command line

這邊主要介紹,如何使用Selenium來擷取網站的畫面。 實作的方式是在一台Ubuntu Server沒有安裝Xwindow的機器上,編寫Python的程式來執行。 第一步:先安裝下列套件: sudo apt install xvfb xserver-xephyr firefox 第二步:透過python pip來安裝selenium sudo pip install selenium 第三步:安裝PyVirtualDisplay sudo pip install pyvirtualdisplay 第四步:建立一個1920x1080x24bit的虛擬螢幕 sudo Xvfb :10 -ac -screen 0 1920x1080x24 & sudo export DISPLAY=:10 第五步:範例程式,執行www.tradingvalley.com網站頁面抓取 from pyvirtualdisplay import Display from selenium import webdriver display = Display(visible=10, size=(1920, 1080)) display.start() browser = webdriver.Firefox(executable_path='/root/geckodriver') browser.get('http://www.tradingvalley.com') #browser.execute_script("") print browser.title time.sleep(5) browser.save_screenshot('tradingvalley.png') browser.quit() display.stop()

如何安裝與使用Rabbitmq Server在Ubuntu

圖片
如何安裝與使用Rabbitmq Server在Ubuntu 本篇文章介紹如何在Ubuntu上安裝Rabbitmq server並且使用Python編寫helloworld範例程式來驗證rabbitmq server可以正常運作。 安裝 在ubuntu上安裝rabbitmq server很簡單只需要一個安裝指令就可以完成。 sudo apt-get install rabbitmq-server 啟動 安裝完成後,透過service指令來啟動 sudo service start rabbitmq-server 確認rabbitmq-server是否有啟動成功 sudo service status rabbitmq-server 管理 rabbitmq client連線過來server這邊需要有使用者與認證,開始使用之前先透過rabbitmqctl指令來設定 列出所有使用者 sudo rabbitmqctl list_users Listing users ... guest [administrator] 上述顯示只有一個guest使用者,該使用者權限等級為Administrator 目前一共有四種權限 none management policymaker monitoring administrator 建立一個使用者 sudo rabbitmqctl add_users abay password 設定使用權限 sudo rabbitmqctl set_user_tags abay administrator Setting tags for user "abay" to [administrator] ... sudo rabbitmqctl list_users Listing users ... guest [administrator] abay [administrator] 啟用Web管理介面 sudo rabbitmq-plugins enable rabbitmq_management The following plugins ...

如何升級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/

如何找到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 ...

如何在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...

如何啟用ESXi MOB在vSphere 6.0

圖片
遇到問題 如果你安裝vSphere 6.0 ESXi server完成後,想透過MOB進入了解與管理主機的狀態卻發現,無法使用了並且出現了這樣的錯誤訊息 503 Service Unavailable (Failed to connect to endpoint: [N7Vmacore4Http20NamedPipeServiceSpecE:0x1f09b228] _serverNamespace = /mob _isRedirect = false _pipeName =/var/run/vmware/proxy-mob) 如下圖所示: 這個問題主要的原因是,ESXi 6.0 預設不會啟用vSphere MOB,你必須手動啟用。 解決方式 使用vSphere Client(C#) 開啟進階設定,找到Config.HostAgent.plugins.solo.enableMob,然後勾選啟用。 使用vSphere Web Client 開啟進階設定,找到Debug Managed Object Browser enabled,然後選擇YES。 使用vim-cmd 透過SSH的方式,進入主機直接下指令修改即可。 指令: vim-cmd hostsvc/advopt/update Config.HostAgent.plugins.solo.enableMob bool true 參考連結 http://www.virtuallyghetto.com/2015/02/quick-tip-vsphere-mob-is-disabled-by-default-in-esxi-6-0.html

如何建立Mercurial(hg) Server + lighttpd 在ubuntu

圖片
如何建立Mercurial Server運行在ubuntu server版本機器上並且透過lighttpd server執行hgwebdir CGI。 安裝的步驟如下: 1. 安裝mercurial sudo apt-get install mercurial 2. 設定hg repository 位置 cd /var/ sudo mkdir hg sudo mkdir hg/repos sudo chown -R www-data:www-data hg/repos 這個範例中,我將hg的repository建立在/var/hg/repos 3. 建立hgwebdir.cgi cd /var/hg sudo cp /usr/share/doc/mercurial/examples/hgweb.cgi . sudo chmod a+x hgweb.cgi 修改範例CGI 使用文字編輯器修改一下"config ="這個設定,改成你所指定的位置,這邊接同時設定為/var/hg/hgweb.config sudo nano hgweb.config 改為 config = "/var/hg/hgweb.config" 4. 建立hgweb.config [collections] /var/hg/repos = /var/hg/repos [web] allow_push = * push_ssl = false 5. 建立使用者密碼 cd /var/hg htpasswd -mc hgusers admin 6. 修改server modules server.modules += ( "mod_cgi" ) server.modules += ( "mod_rewrite" ) url.rewrite-once = ( "^/hg([/?].*)?$" => "/hgwebdir.cgi$1", ...

如何以指令方式啟用你的藍芽音樂裝置(A2DP)

圖片
How to bluetooth with Ubuntu Desktop Environment ? Are you looking for a way to manipulate your Bluetooth device in console in Ubuntu ? Stop, searching. This is it. Using D-Bus interface to communicate with your Bluetooth. The following example demonstrates how to connect to your Bluetooth Audio Sink device by using D-Bus. 如何在Ubuntu的指令模式下,操作與控制你的藍芽裝置。假設你所使用的環境是Ubuntu 桌面操作環境,你想編寫或是透過指令的方式,快速操作你的藍芽裝置,這裡提供一個不錯的方式給你參考,可以使用 D-Bus 的方式結合shell script的方式來達成。   操作實例說明: 利用dbus的方式啟用你的藍芽ASDP裝置,假設你的藍芽裝置已經配對成功過了,只需要重新連線。那麼操作指令如下。 操作步驟: 1. 掃描藍芽裝置 $hcitool scan 2. 取得藍芽裝置在D-Bus的位置 $ dbus-send --system --type=method_call --print-reply --dest=org.bluez "/" org.bluez.Manager.ListAdapters 3. 主機跟藍芽裝置連線 $dbus-send --system --type=method_call --print-reply --dest=org.bluez "/org/bluez/XXXX /hci0/dev_XX_XX_XX_XX_XX_XX" org.bluez.AudioSink.Connect 如果打算斷線就把後面改成org.bluez.AudioSink.Disconnet 資料參考: http://www.spinics.net/lists/linux-bluetooth/msg13332.html http://...

How to enable PAE in Ubuntu

如何在Ubuntu中啟用Physical Address Extension, PAE模式。 電腦使用者將作業系統更換為64bit版本,其中一個原因是主記憶體超過4GB,在32bit的作業系統環境雖然定址可以到2的32次方之大,等於4GB的空間但實際使用時會發現會發現,安裝了4GB的記憶體,剩下約 2 至 3.8 GB的可用位址空間,這是因為這是因為部分作業系統保留了一部分空間供作業系統程序使用。 在Linux作業系統要解決這個問題,方法很簡單就是安裝支援PAE模式的kernel就可以了。目前最新版本的32bit版本的Ubuntu在安裝的過程中,只要偵測到該主機的記憶體超過4GB,就會自動安裝PAE版本的kernel。 手動安裝的步驟也很簡單:  To check if your processor supports PAE grep --color=always -i PAE /proc/cpuinfo Intstall PAE kernel into your computer sudo aptitude install linux-generic-pae linux-headers-generic-pae 重新開機後,檢查一下你的記憶體是否有成功辨識。 空間有了,接著你會發現記憶體好像不容易用完,如果你的主機只是當台簡單的桌機來使用的話,這時候可以考慮使用ramdisk來加速你的系統。我的作法是將整個/tmp掛載到ramdisk,方法很簡單: 在/etc/fstab裡面多加一行   tmpfs /tmp tmpfs defaults 0 0 參考來源: https://help.ubuntu.com/community/EnablingPAE http://www.larmeir.com/2009/07/enabling-pae-on-a-32-bit-ubuntu-desktop-supporting-up-to-64-gb/ http://zh.wikipedia.org/zh-tw/64%E4%BD%8D%E5%85%83

如何在Android上建立HTTP GET連線

圖片
在Android上建立一個HTTP GET連線,是最基本也是最重要的功能,因為你可以透過HTTP GET讓你的APP連上網際網路取得所需要的資源。實作的方式有很多種,在此介紹利用Java.net的類別, urlConnection 來建立一個HTTP GET連線。 1. 設計步驟流程: 設定urlConnection 連線 讀取回傳結果值 2. Android存取權限: android.permission.INTERNET 3. 程式編寫提示:   URL url = new URL("http://www.google.com"); //要連線的網址 URLConnection urlConnection = url.openConnection(); URLConnection.setDefaultRequestProperty("Content-type", "text/html; charset=utf8"); InputStream in = new BufferedInputStream(urlConnection.getInputStream()); //使用InputStream來接收HTTP server傳回結果 if(in != null){ int dleng = 0; byte[] databuffer = new byte[100]; byte[] htmldata = new byte[0]; int htmldata_leng = 0; do //利用do-while迴圈來處理傳回值 { dleng = in.read(databuffer); if (dleng > 0){ htmldata_leng += dleng; byte[] ...

Take a Screenshot With the HTC Sensation

圖片
Sometimes maybe you want to capture a screen of your phone to send to your friends. To take a screenshot with your HTC Sensation, just press the Power and Home buttons at the same time. After pressing the buttons, you will get a the camera shutter sound, and your screen will be captured. The screenshot will be saved in default camera folder (/sdcard/DCIM). Activate the Gallery app to view the screenshot. 如果你想要抓取HTC Sensation手機上的螢幕畫面,只要同時按下電源與Home這兩個按鍵就可以了。 See what I done.