在 kernel module 裡參考 /proc/cmdline 裡的字串

基本上是不行,沒辦法取得。那在 u-boot 裡指定參數以後,又是誰收到?

所以我就參考 Documentation/kernel-parameters.txt,然後以 acpi_backlight 當例子去找。在 drivers/acpi/video_detect.c 的最後有看到宣告 static init __init acpi_backlight(char* str) {},這邊看起來是在處理字串,然後做處理;緊接其後則是 __setup(“acpi_backlight=”, acpi_backlight); ,而這行看起來就是 kernel 會有一個地方去 parse cmdline ,如果有符合 acpi_backlight,就把之後的字串丟給 acpi_backlight 函式去處理。

因此,就應該可以依樣畫葫蘆。在 u-boot 傳參數給 kernel,而 kernel 的 module 則用類似 acpi_backlight 的方式去處理,就可以解析到需要的字串。

CentOS 5 升級 MySQL 為 MariaDB

早上看完這篇毫無理由使用 MySQL:MariaDB、MySQL 創始者 Michael Widenius 的訪談,很衝動的就想來升級,找了文章,發現 MariaDB 早就提供 CentOS 5 的 yum repository 了,那就沒理由不衝了。

大致的步驟是參考這篇:How can I upgrade from MySQL to MariaDB? – AskMonty KnowledgeBase

我的步驟:

  1. 先去 mariadb 參考 repository 設定,然後新增:https://downloads.mariadb.org/mariadb/repositories/
  2. service stop httpd
  3. service stop mysql
  4. 備份 /var/lib/mysql 下的檔案
  5. yum remove mysql-server mysql-libs mysql-devel mysql*
  6. 因為我有用 remi repository,所以依照前文指示,要以特別的步驟安裝 compat-mysql: yum –enablerepo=remi-test –disablerepo=remi install compat-mysql55
  7. 安裝 MariaDB:yum install MariaDB-client MariaDB-common MariaDB-compat MariaDB-devel MariaDB-server MariaDB-shared  php-mysql
  8. 啟動 mariadb:service mysql start
  9. 啟動 httpd:service httpd start
  10. 收工

其實那個備份是多餘的,依照 MariaDB 的說法是完全相容,接下來就是是用一陣子看看囉。

取 CPU core 數目

純練功。

第一個單純的想法就是 cat /proc/cpuinfo ,然後算裏面以 processor 開頭的有幾行,所以可以很直白的寫下 cat /proc/cpuinfo | grep processor | wc -l

grep 可以帶檔案,這樣就可以省掉 cat:grep processor /proc/cpuinfo | wc -l

可以用 awk 一行搞定嗎?應該是可以喔~但有點小複雜,先用 regular expression 找出以 processor 開頭的行,然後累加變數,在 END 時再印出結果:awk ‘/^processor/{x+=1;}END{print x;}’ /proc/cpuinfo

預載 Windows 8 + Ubuntu 12.10 安裝經驗分享

我的環境:Toshiba Portege R930 + 預載的 Windows 8

身為自由軟體愛好者,當然是要裝上 Ubuntu 來試試看。這次安裝花了不少時間,才摸索出來。

原本打算用 wubi 的,但是看到這篇 AskUbuntu 上的問答 ,就發現用 wubi 是不可行的了。問答的二樓建議不要用 wubi,先在win8挪出分割區,到 BIOS 把secure boot 關掉,開機順序改由live cd/usb 開,然後裝上ubuntu 12.10,裝完開機選單找不到 win8 的話,用ppa:yannubuntu/boot-repair去修,這樣大概就沒啥問題。最後去電源選項改成不要快速關機。

基本上我照著步驟做了,但是重新開機時,還是 Windows 8 的 boot loader 起來,根本無從選 ubuntu,也沒得用 boot-repair。後來想說,可不可以像 XP 一樣,改 Windows boot loader 的開機選單就行,於是就下載了 EasyBCD 軟體來改,可是還是不行,之後又重新裝了幾次 Ubuntu 都不行。

直到今天早上,今天早上想說還沒有試過 boot-repair,就用 LiveUSB 開機進去,然後安裝 boot-repair 、執行。boot-repair 會偵測環境然後亮出介面,介面上有個 Advanced Options,點進去一看,這設定還真多,當下就又縮回去,不調整,依照原先介面上的建議進行 repair。基本上 repair 的動作是自動的,直到最後才要你開 terminal 打指令,就依樣打完,重開機,GRUB 的選單就出現了。試著開機到 Windows、Linux 都沒問題,大功告成。

詳細步驟:

  1. 進 Windows 8 的磁碟分割,壓縮原來的 C:\ 以取得空間給 Ubuntu 使用。
  2. 關機,按下關機前,先按下 shift,這樣可以確定是真正的關機。
  3. 開機,按 F2 進 BIOS,將 Secure boot 設為 disabled,修改開機順序,改為由 USB 或 CD 開機。
  4. 用 Ubuntu Live USB/CD 開機,開始安裝,我這邊是採取自行分配,不是交給 Ubuntu 幫我分配,我將在步驟 1 切出來的剩餘空間分為: /boot 256MB,/ 40GB,swap 8GB,然後剩下的都給 /home。
  5. 安裝完成,重新開機,會進 Windows 8。依照步驟 2 關機,然後再以 Live USB/CD 開機。
  6. 進入 Ubuntu 以後,安裝 boot-repair:開啟 terminal,輸入 sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update && sudo apt-get install boot-repair -y
  7. 安裝完成以後,執行 boot-repair,我是直接按下上面那個按鈕,也就是依照 boot-repair 的建議進行修復。
  8. 重新開機,大功告成。

參考資料:

  • Ubuntu Document – UEFI

 

xdg-utils, nautilus 與 nemo

因為想知道怎麼把 nautilus 改為 nemo,就開始追代碼了。主要是先從 xdg-open 開始,因為 xdg-open ~ 就可以叫出檔案總管並把位置帶到家目錄。

我忘了是怎麼知道 xdg-open 這指令的了,這指令就相似於 Windows 的 start 指令,Windows 的 start 是這樣,只要打 start xxx.doc 或是 start http://www.google.com.tw 就可以自動打開相應的程式,像 xxx.doc 就會開 MS Word,網址就會開瀏覽器。xdg-open 也是一樣,輸入 xdg-open xxx.doc 就會用 Open Office 或 LibreOffice 開啟 xxx.doc,以此類推。

xdg-open 是由 xdg-utils 所提供,是用 perl 寫的,再看裏面,會發現程式會根據目前的桌面環境來自動決定要呼叫哪個桌面環境的 open 程式來開啟指定檔案或位置。GNOME 就是 gnome-open,KDE 就是 kde-open,XFCE 就是 exo-open,LXDE 就是 pcmanfm,不一樣的情況可能會改呼叫 gvfs-open, kfmclient 等等的。

所以在 GNOME 環境下打 xdg-open 或 gnome-open 是一樣的。那 gnome-open 又是怎麼做到的呢?gnome-open 是收錄在 libgnome 裡,source code 可以在這裡看到 git.gnome.org/browse/libgnome/tree/libgnome/gnome-open.c ,程式很短,就先判斷檔案的位置,然後就呼叫 glib gio 的 g_app_info_launch_default_for_uri 進行啟動。再更深入,就沒有細究了,總之是根據 GNOME 內建的 MIME 對應來得知該使用哪個程式的。

記得有可以編輯 MIME 的程式,就可以去改,但我忘了程式的名字,一時在系統設定裡也找不到。最後是用了 ubuntu-tweak 來做修改,就把 nautilus 改為 nemo 了。

Upgrade Subversion to 1.7 in CentOS5

也忘了是從什麼時候開始,在更新時,就一直遇到 subversion-perl 無法升級的問題,說需要 subversion 1.7,可是 CentOS 裡包的是 subversion 1.6,而這個 subversion-perl 是 rpmforge 提供的。

拖了好久,在更新時都以 –skip-broken 避開,可是日子久了,總是會覺得這樣很麻煩,決定還是設法把 subversion 升級到 1.7。當然自己編譯當然是可以,但上上策當然還是有人打包最好,所以上網搜索了一下,就發現有人問,而答案是利用 WANdisco 提供的 yum repository。WANdisco 比較麻煩的是,如果你要下載,網站會要求你輸入資料,然後才寄給你 .repo 檔案。收到 .repo 檔案,就放在 /etc/yum.repos.d ,接著執行 sudo yum update 就可以了。

wireshark

以前用 wireshark 時,都是直接上 sudo,以 root 權限執行,沒注意提示訊息的說明。這次認真看了,原來是說可以不用以 root 權限執行,那麼該怎麼做呢?首先要使用 sudo dpkg-reconfigure wireshark-common 重新設定,這時候會跳出詢問視窗,問說是不是要在非 root 模式下使用,請選 yes,然後系統群組裡會多出一個 wireshark 群組。接著請把自己加入到 wireshark 群組裡,登出以後再登入,確定自己有在 wireshark 群組裡以後,就可以使用 wireshark ,而不需要有 root 權限了。

Ubuntu第二個螢幕的解析度只有640×480

家裡是用 Ubuntu 12.10,顯卡是用 nVidia GT630,主要螢幕是 ViewSonic 22″,第二個螢幕則是 Dell 17″。都接上去以後,第二個螢幕卻只有 640×480,當然還是可以用,但是就是礙眼,而且很多程式根本不適用於640×480了,操作會很麻煩。

打開 nVidia X Server Settings,想說去設定為高一點的解析度,可是能選的解析度就只能到 640×480。找了 GT630 的規格,原本以為是規格限制,但後來換算了一下,發現應該不是,而且 17″ 應該是要可以跑到 1024×768 才對,再者,以前都沒問題的。後來再用 nvidia gt630 “Virtual screen size” 去找,才在 nVidia 驅動程式的 README 裡找到 MetaModes 這關鍵字。參考了自己原來的 xorg.conf,裏面是這樣寫:Option “metamodes” “CRT-0: nvidia-auto-select +0+0, CRT-1: nvidia-auto-select +1680+0″,仔細研究了好一會兒,牙一咬,心一橫,想說應該是這個沒錯,就調整為 Option “metamodes” “CRT-0: nvidia-auto-select +0+0, CRT-1: 800×600 +1680+0” ,重新啟動就可以讓第二個螢幕到 800×600 了,這時候再打開 nVidia X Server Settings,赫然發現,第二個螢幕的解析度也可以調整了,於是就調整為 1024×768,打完收工。

 

VBoxHeadless 與 3D acceleration

今天用 VBoxHeadless 開 VM 時,出現了這樣的錯誤:

VBoxManage: error: This VM was configured to use 3D acceleration. However, the 3D support of the host is not working properly and the VM cannot be started. To fix this problem, either fix the host 3D support (update the host graphics driver?) or disable 3D acceleration in the VM settings (VERR_NOT_AVAILABLE)

看起來就是要我關 3D 加速選項,查了一下,有找到這篇很有用的導引文,完全在 console 下進行建立、啟動 VM 的動作。在文章裡有看到使用 VBoxManage modifyvm 來變更 vm 選項,所以我就用 VBoxManage modifyvm –help 查了說明,接著就用 VBoxManage modifyvm –accelerate3d off 把 vm 的 3D 給關閉,然後就可以啟動了。這次有學到另外一個可以不用直接使用 VBoxHeadless 的方式,就是一樣用 VBoxManage startvm 來啟動,但加上 –type headless 這樣:VBoxManage startvm “Windows XP” –type headless ,這樣就跟使用 VBoxHeadless 一樣了。

ubuntu 12.04 ia32-libs 無法安裝

約莫半年前,我的桌機從 11.10 升級到 12.04 precise 以後,就沒辦法安裝 ia32-libs,這問題一直卡關,卡到現在才找到解。

安裝的時候,apt 會告訴你:

  • ia32-libs 相依於 ia32-libs-multiarch
  • ia32-libs-multiarch 相依於 bluez-alsa:i386
  • bluez-alsa:i386 相依於 bluez:i386
  • bluez:i386 相依於 python-dbus-dev:i386
  • 族繁不及備載…bala…bala…

有發現有人提報了這個問題,也有人貼到討論區上討論,但是都沒解。

其實主要問題是卡在 bluez 上面,後來用 bluez:i386 ia32-libs-multiarch 這幾個關鍵字去找,就找到:Solving ia32-libs installation problem in Ubuntu 12.04 precise pangolin ,然後就照著他的方法去做,順利解決了問題。

他的方法是這樣子的:

  1. 移除 ia32-libs 跟 bluez 等相關套件:sudo apt-get remove bluez ia32-libs
  2. 安裝 ia32-libs-multiarch:i386 :sudo apt-get install ia32-libs-multiarch:i386
  3. 安裝 ia32-libs :sudo apt-get install ia32-libs

是故,現在可以用 google earth,也可以編譯 Android 4.x 了。