2014年1月4日 星期六

從現有系統直接安裝SteamOS

1 SteamOS

SteamOS 是 valve 公司基於 Debian 7 推出的客製化作業系統,目標是打造一個無痛使用的家用 娛樂環境。

2 為什麼要從現有的 Linux 下安裝

SteamOS 目前尚在測試中,valve 公司提供的安裝程式是專為 Steam Machine 量身訂作的版本, 安裝過程中會將你的第一顆硬碟內的 partition 刪除後重新分割成四個 partition。SteamOS 的 安裝程式是標準的 Debian Installer,所以非常適合直接從現有的系統進行安裝。 另外 SteamOS 目前只支援使用 UEFI 開機,連 repository 裡也只有提供 grub-efi 而已,以 現有的系統開機便成了不支援 UEFI 的機器較好的選擇。

3 安裝步驟

  • 安裝 debootstrap
  • 使用 fdisk 或 parted 分割磁碟、格式化並掛載
  • 使用 debootstrap 安裝基本系統
  • 修改系統設定,安裝桌面
  • 重開機後安裝 SteamOS 客製化設定
  • 再次重開機,初次執行 steam

3.1 安裝 debootstrap

debootstrap 是用來安裝一個基本的 Debian 系統的程式,也是 Debian Installer 裡的重要 項目1。Debian 系的 distro (如 Ubuntu、Mint 等) 可以直接使用 apt-get 安裝。其 他 distro 裡多半也有提供,或者也可以到 packages.debian.org 下載源碼安裝。

3.2 使用 fdisk 或 parted 分割磁碟、格式化並掛載

SteamOS 的安裝程式貼心的提供了還原的功能,這也是為什麼預設情況下會把硬碟分割成四個 partition 的原因。由於內建的還原功能其實就是把剛安裝好的系統 cp 一份起來,所以個人並不特 別推薦使用,以下的文章便以「不使用還原功能」為前題。故硬碟的分割也就不需要用到四份,只要一 個夠大的 partition 就可以。系統安裝完成後使用不到 20G 的空間,再視個人是否會下載遊戲回來 玩,大約 50~100G 的空間足矣。分割、格式化完之後,假設是 /dev/sdb1,並把它掛載在 /mnt 下。

3.3 使用 debootstrap 安裝基本系統

debootstrap 選項 版本 套件庫的URL 使用的script 由於 SteamOS 套件庫的簽章與現行系統的不同 (除非是從 SteamOS 裡再裝一個 SteamOS),必須 使用 –no-check-gpg 選項跳過簽章的檢查。有一些套件應該要先裝起來的,也在此一併以參數的方 式指定。 debootstrap 預設會使用與版本同名的 script,當然你不會在 debootstrap 內建的 script 裡找到 SteamOS 的 alchemist 這個版本,所以必須指定要用的 script。

debootstrap --no-check-gpg --components=main,contrib,non-free --include=aptitude,tzdata,console-setup,locales,locales-all,linux-image-amd64 alchemist http://repo.steampowered.com/steamos /usr/share/debootstrap/scripts/wheezy

3.4 修改系統設定,安裝桌面

修改系統設定、安裝桌面皆以 chroot 的方式進行。

  • 首先以 blkid 取得 rootfs 的 UUID
blkid /dev/sdb1
  • 產生 fstab
echo "UUID=剛剛取得的uuid / ext4 errors=remount-ro 0 0" > /mnt/etc/fstab
  • 視需要修改 /mnt/etc/hosts 及 /mnt/etc/hostname
  • chroot /mnt
  • 設定時區、預設語系、鍵盤配置
dpkg-reconfigure tzdata
dpkg-reconfigure locales
dpkg-reconfigure console-setup
  • 安裝基本桌面
    • 執行 aptitude
    • 按 u 更新套件列表
    • 按 / 啟用尋找功能,鍵入 valve-archive-keyring,按 Enter 確定
    • 按 + 加入安裝清單
    • 按 g 兩次安裝
    • 再次更新套件列表
    • 尋找 task-gnome-desktop 並加入安裝清單
    • 尋找 steam,把找到的都加入安裝清單 (按 n 可以找下一個)
    • 開始安裝
    • 按 q 離開 aptitude
    • 新增兩個使用者
adduser desktop
adduser --disabled-password --gecos "" steam
  • 進行基本設定
usermod -a -G  desktop,audio,dip,video,plugdev,netdev,bluetooth,pulse-access steam
usermod -a -G pulse-access desktop
echo "steam:steam" | chpasswd
date > /etc/skel/.imageversion
cp /etc/skel/.imageversion /home/steam/
  • 下載設定小工具 (從 SteamOS 安裝程式截取出來的設定)
wget https://dl.dropboxusercontent.com/u/14089653/post_install.sh -O /home/desktop/post_install.sh
chmod a+x /home/desktop/post_install.sh
  • 修改 sudo 設定 (為求簡便,這裡的設定是完全沒有任何限制,請視需要自行用 visudo 修改)
echo "desktop ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers
  • exit 離開 chroot 環境
  • update-grub

3.5 重開機後安裝 SteamOS 客製化設定

以 dekstop 登入後,開啟終端機,以 root 權限執行設定小工具

sudo ./post_install.sh

3.6 再次重開機,初次執行 steam

由於 steam 會檢查 3D 加速功能,所以要先確認顯卡有正常驅動起來,最簡單的方式就是看 GNOME 是 fallback 模式還是正常模式。由於顯卡品牌很多,無法一一提列,如果沒有正確驅動, 請自行 google 解法。一般來說,移除所有 nvidia 相關的套件應該會有幫助。 初次執行 steam 請以 desktop 帳號登入,因為 64bit 系統會需要安裝其他套件。 確認執行成功之後,,重新以 steam 帳號登入,enjoy your steam life。

Footnotes:

1

Debian Installer 使用的其實是 cdebootstrap,除了是使用 C 語言撰寫以外,基本上與 debootstrap 沒有什麼差異。

Author: Ronmi Ren

Created: 2014-01-04 六 14:54

Emacs 24.3.1 (Org mode 8.2.4)

Validate

2013年11月16日 星期六

淺談 debian packaging - 5

延續先前對於control檔的介紹,該正式地找一個control檔來動動手腳了。

目前 Debian 的發行版是 Wheezy(Debian 7),在 Wheezy 裡的 upower 版本是0.9.17,這版並不支援羅技的部份無線鍵鼠電量查詢。upower 自0.9.23版才開始對羅技有較完整的支援(感謝Julien Danjou,所以我們就來把 Wheezy 的 upower 更新到0.9.23吧。

Debian 套件列表 中可以查到,在 jessie 裡的 upower 是0.9.23版的,剛好符合需求。所以先確認你的sources.list 裡有 jessie 的 deb-src 項目,並準備一個暫存的目錄方便後續的處理,就假設是 /tmp/upower 好了。然後打開終端機,切換到暫存的目錄、下載原始碼:

cd /tmp/upower apt-get source upower=0.9.23-2

完成後,用文字編輯器打開 upower-0.9.23-2/debian/control,可以發現它以空行分隔成好幾段。第一段是 source package 的部份,寫的是這個套件的名稱、分類、重要性、負責維護及打包的人、編譯所需的額外套件、版本,以及其他相關訊息。其下的各段是做為範本使用,指出了 upower 經過編譯之後應該包成 upower, libupower-glib1, libupower-glib-dev, gir1.2-upowerglib-1.0 這四個 binary package。

2013年11月15日 星期五

Gjs Style Guide 中譯

譯註:這篇文章適合已經對 Gtk/GLib 程式設計及 JavaScript 語言有一定基礎的人閱讀。 原文在此


原始碼排版格式

本文的目標是讓所有 GNOME 專案中的 JavaScript 程式碼有一致的排版風格。在像 JavaScript 這樣的動態語言裡,嚴格地要求排版格式(及單元測試)是有其必要性的,否則你很快便會發現你的程式碼像攪成一團的義大利麵一樣難以理清頭緒。

分號(; Semicolons)

雖然 JavaScript 允許你省略行末的分號,但千萬不要這麼做。請務必在每個敘述結束時加上分號。

js2-mode

如果你習慣使用 Emacs,試看看 js2-mode。它有點像 "lint",會以不同的顏色為你強調漏寫的分號或其他語法單元。

引用模組

當你需要引用模組時,使用 CamelCase 來和普通的變數區別,如下所示: const Big = imports.big; const GLib = imports.gi.GLib;

2010年4月18日 星期日

淺談 debian packaging - 4

上回書說 control 檔裡的幾個重要標籤。整個 debian 的套件管理幾乎可以說是靠這麼少少的數個標籤所撐起來的。那麼延續著 control 檔的話題,這次就先把相依關係更清楚的講解一下,然後談談我個人認為 debian package 管理中最偉大的東西 - 虛擬套件。

我認為最快的學習就是先強記一些基本的概念及關鍵字之後,透過實例或操作來印證。要理解套件之間的相依,最好的工具就是 aptitude 和 synaptics。
俗話說:「沒圖沒真相。」,以下就以一張 aptitude 的螢幕擷圖來實際說明幾個最常用的標籤。

這是在 Ubuntu 9.10 (karmic) 裡,對 apt 這個套件按 Enter (查看詳細資訊)的結果。以下列舉一些相依關係,用比較自話的方式來描述他們。

  • 必須要安裝 libc 2.4 版 (或比 2.4 還新的版本,如 2.4.1、2.5 等等),apt 這個套件裡的東西才能正常執行。
  • apt-doc 裝不裝都可以,有裝有保庇,沒裝無要緊。
  • ubuntu-keyring 最好是裝一下,沒裝的話還是可以執行啦,不過可能需要調整一下、修改個設定檔,或者是某些常用的功能會錯誤一類的。
  • 如果你有裝 libapt-pkg-dev (比 0.3.7 更舊的版本),有一部份的檔案會被 apt 這個套件蓋掉。
  • apt 這個套件會提供 libapt-pkg-libc6.10-6-4.8 這個虛擬套件。
  • 如果你有裝 apt-move 的話,最好裝一下這個 apt。(注意到了嗎,apt-move 是歸類在依賴於 apt 的套件之中的,所以被推薦的是 apt 才對。
看到這邊,喝杯茶思考一下,相信對套件之間的相依關係已經有一幅清晰的圖案浮現了吧。


2010年3月18日 星期四

為 RhythmBox 啟用 Acer 4920G 的 MediaTouch

其實之前9.04的時候有弄過,只是某天不小心砍掉了orz

先來大致解釋一下原理:目前的 Xorg 抓到的 MediaTouch 是 Synaptics TouchPad,而且和底下那個真正的觸控板完全一樣。比如說我的 4920G 用 xinput list 來看是這樣的

"SynPS/2 Synaptics TouchPad" id=2 [XExtensionPointer]
 Type is TOUCHPAD
 Num_buttons is 12
 Num_axes is 2
 Mode is Relative
 Motion_buffer is 256
 Axis 0 :
  Min_value is 1472
  Max_value is 5472
  Resolution is 1
 Axis 1 :
  Min_value is 1408
  Max_value is 4448
  Resolution is 1
"SynPS/2 Synaptics TouchPad" id=11 [XExtensionPointer]
 Type is TOUCHPAD
 Num_buttons is 12
 Num_axes is 2
 Mode is Relative
 Motion_buffer is 256
 Axis 0 :
  Min_value is 1472
  Max_value is 5472
  Resolution is 1
 Axis 1 :
  Min_value is 1408
  Max_value is 4448
  Resolution is 1
第一行的 id= 是這個裝置在 xinput 中的代號。理論上這個編號每台電腦都有可能不同,但 MediaTouch 應該都是第一個才對。
有了裝置的編號,接下來就是先用 xinput 把原來的按鈕重新綁定到四個不同的、未使用的按鈕,然後再用 xbindkeys 把這些按鈕綁定到 RhythmBox 的相關動作。

接下來是實作的時間了:
剛剛有提到,我的電腦上 MediaTouch 的編號是 2。所以 xinput 重新綁定的命令要這樣下

xinput set-button-map "2" 1 2 3 17 18 19 20 8 9 10 11 12 13 14 15 16
這樣會把第 4 個按鈕(通常是向上捲動,在 MediaTouch 上則是播放/暫停)綁定為第 17 個按鈕,以下類推。

再來是用 xbindkeys 把 17~20 這幾個按鈕(現在是 MediaTouch 上那四個鈕了)對應到 RhythmBox 上。RhythmBox 有提供一個小程式,可以在命令列控制播放、暫停、下一首、上一首…等功能(這也是為什麼我選擇 RhythmBox 的原因之一),詳細的用法可以查看 rhythmbox-clinet 的 manpage
設定 xbindkeys 的方式也很簡單,設定檔的語法非常好懂

"rhythmbox-client --no-present --play-pause"
  b:17
第一行是要執行的指令,外面用雙引號括起來就好了。第二行是要綁定的按鈕或按鍵, b:17 就是綁定在第 17 個按鈕上。所以完整的設定檔會像這樣:
"rhythmbox-client --no-present --play-pause"
  b:17

"rhythmbox-client --no-start --pause --hide"
  b:18

"rhythmbox-client --no-present --no-start --previous"
  b:19

"rhythmbox-client --no-present --no-start --next"
  b:20
設定檔寫好之後,要存在家目錄裡,檔名是 .xbindkeyrc。存好之後執行 xbindkeys,就能用 MediaTouch 來控制 RhythmBox 了

現在萬事具備,只要再把剛剛有執行過的兩個程式 ( xinput 和 xbindkeys ) 加到「啟動應用程式」裡就可以了。

為了方便,這邊提供一個小小的 bash script 來啟動這兩個程式

2010年3月6日 星期六

淺談 debian packaging -3

既然要談 control 檔,當然不能不提到 maintainer's guide 裡關於 control 檔的說明
這份說明是關於 source package 中的 control 檔,與 binary package 裡的大同小異。

幾個比較主要的標籤有

  • Source: source package 的名字
  • Package: binary package 的名字
  • Section: 套件的分類。在 debian 裡,套件依授權的方式分為 main(完全採用自由授權的軟體)、contrib(本身是自由軟體,但依賴一些非自由軟體,比如 java-package - 將 sun 的 java 打包成 deb 檔的程式,打包程式本身是 GPL 的自由軟體,但它會去下載 sun 的 java,這就不是自由軟體了)、non-free(非自由的軟體,比如 sun-java)三大類,底下再依功能細分成文件、程式庫、網際網路…等等。
    而在 ubuntu 裡則是依授權和更新及支援的方式分成 main(由官方提供更新及支援的自由軟體)、universe(官方不提供支援的自由軟體)、multiverse(官方不提供支援的非自由軟體)、restricted(不提供原始碼的非自由軟體,主要是驅動程式)四大類,底下一樣細分成很多小類。
    如果看不懂 maintainer's guide 所寫的意思,這裡有幾張圖可以參考一下
    1. Aptitude 中文介面,multiverse/doc
    2. Aptitude 英文介面,main/doc
    3. Synaptic 中文介面,main/doc
    4. Synaptic 英文介面,main/doc
  • Priority: 套件的優先程度,這可以想成是「系統有多需要這個套件」。像是 adduser 的優先程度,在ubuntu 裡標為 important(重要),而 fuseiso 這個套件則是 optional(次要)。
  • Maintainer: 套件維護者的連絡方式,格式就是標準的 email 地址。
  • Architecture: 支援的 CPU 種類。最常見的就是 i386(INTEL 80386 相容的 CPU,幾乎INTEL、AMD 的 CPU 都算在內了)、amd64(64bit 的 CPU)、arm(常用於嵌入式系統的 ARM CPU),還有一個特殊的 any,如同字面上的意思,是和硬體無關的,比如文件檔或用 python、php、java 等語言開發的程式。
  • Description: 套件的說明


2010年2月27日 星期六

A note about ffmpeg - convert video to DVD/VCD/SVCD

4th aunt request me to burn her video into svcd. After trying Avidemux, I decide google for better solution.

I can type many options in console to convert it in fact. But it's not possible for my aunt to use a terminal. I found an option seems very useful when writing scripts for my aunt.

Below are copied from ffmpeg's manual.
-target type
   Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ... ). All the format options (bitrate, codecs, buffer sizes) are then set automatically. You can just type:

         ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

   Nevertheless you can specify additional options as long as you know they do not conflict with the standard, as in:

         ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
So I can write an script, using zenity for file selection, then convert it using "ffmpeg -i source_file -target svcd target_file" command.