發表文章

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

如何取得docker container中的ip address與網路界面

How to discover the IP address and interface for a docker container 這篇主要講述如何取得docker container的IP位置與網路界面資訊。當你的docker container中並沒有安裝IP相關的工具程式,無法透過docker exec的方式執行ip相關的工具程式來取得IP位置與網路界面資訊,並且該網路界面的IP設定與docker DHCP預設配發的不一樣的時候,你可以這樣做。 Step 1 取得network namespace file # docker inspect abay-test -f "{{.NetworkSettings.SandboxKey}}" 假設我們要取得的docker container的名稱為abay-test,執行這行指令後會得到/var/run/docker/netns/6f6c87265050  Step 2.  建立network namespace連結 # ln -s /var/run/docker/netns/6f6c87265050 /var/run/netns/6f6c87265050 這個檔案會在下次重新開機的時候就會不見 Setp 3. 在指定namespace下執行ip a # ip netns exec 6f6c87265050 ip a 輸出的結果 abay@vm-01:~$ sudo ip netns exec 6f6c87265050 ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 87: eth0@if88: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP ...

如何動態新增執行中的docker container對外的port

圖片
How to expose port on a running container? 如果你已經建立了一個docker container,並且成功運行中,但需要臨時增加對外的port這時候又不想將container停下來的時候,可以直接修改docker host的網路設定達到此目的。 注意:以下提供的修改方法,並不會影響container本身的設定,當docker host或是docer 重新啟動後,設定值就會還原。 假設你開啟了一個Web server的container但卻忘記要開啟 HTTP port,這時候除了透過 docker commit方式還可以動態新增對外的port,可以參照下列的步驟。 這邊的實作是針對運行在Linux上的docker所建立出的container來示範。 Step 1: 取得目標container的IP位址 # docker inspect <your container name> (假設你的container的IP是172.18.0.3) Step 2: 設定iptables # iptables -t nat -A DOCKER -p tcp --dport 80 -j DNAT --to-destination 172.18.0.3:80 # iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source 172.18.0.3 --destination 172.18.0.3 --dport 80 #iptables -A DOCKER -j ACCEPT -p tcp --destination 172.18.0.3 --dport 80 Step 3: 進行HTTP連線測試,觀察是否可以連到該container的Web服務。

如何關閉nouveau-kernel-driver,解決無法安裝Nvidia driver問題

圖片
如何關閉nouveau-kernel-driver,解決無法安裝Nvidia driver問題 在安裝Nvidia官方的驅動程式時遇到無法執行安裝的情況,並且出現這樣的訊息: 問題環境: 1. Ubuntu 18.04 處理方式: 1. 移除所有已經安裝的Nvidia相關的套件: sudo apt-get remove nvidia* && sudo apt autoremove 2. 安裝相關套件用來重新編譯kernel(安裝Nvidia-driver使用) sudo apt-get install dkms build-essential linux-headers-generic 3. 編輯modprobe設定檔,停用 nouveau kernel driver sudo vim /etc/modprobe.d/blacklist.conf 加入下列的設定: blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0 alias nouveau off alias lbm-nouveau off 4. 停用kernal nouveau echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf 5. 重新更新kernel sudo update-initramfs -u 6. 重新開機 sudo update-initramfs -u 最後再繼續安裝官方的driver即可。

如何安裝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...

如何使用ssh key登入不用密碼在ubuntu

這篇文章要介紹如何使用ssh key來登入Linux系統,不需要使用密碼的方式登入。 建立一個帳號 使用adduser指令來建立,並使用 --disabled-password選項設定為不要使用密碼 sudo adduser abay --disabled-password 切換到新建立的使用者,並且建立設定檔 sudo su - abay 建立.ssh目錄與設定權限為700 mkdir .ssh chmod 700 .ssh 建立 authorized_keys檔案在.ssh中並且設定權限為600 touch .ssh/authorized_keys chmod 600 .ssh/authorized_keys 使用文字編輯器打開authorized_keys並將public key加入 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE 完成後就可以透過你自己的私鑰來登入系統,不需要使用密碼的方式。 如何由pem檔取得public key: ssh-keygen -y [-f input_keyfile] 指令回覆的結果就是RSA

如何安裝與使用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

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

如何建立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