2012/07/06

System-wide Environment Variables

Ubuntu 的環境變數想要在系統層面進行設定,建議是編輯 /etc/environment 檔案,最好不要寫在 /etc/profile 和 /etc/bash.bashrc 檔案裡。

# dpkg-reconfigure locales

這樣可以產生 /etc/environment 檔案,舉例來說,再把 LC_COLLATE=POSIX 寫進去,就可以指定我想要的檔案排序方式。

2012/05/11

Ubuntu Sudo NOPASSWD

根據 https://help.ubuntu.com/community/Sudoers 的說明,像

marr    ALL=(ALL) NOPASSWD: ALL

這樣的設定值,要放在

%admin ALL = (ALL) ALL

後面,順序不對是無效的。

2012/05/07

Maragda: Running Linux from CD

zh-tw version of http://www.linuxjournal.com/article/4396

這個計畫在這邊描述更進一步的證明Linux是一個強有力且多樣化的系統。

我的大學中有幾台推車,上面放了電腦和錄放影機,並且同時接上一台投影機。它們有太多的使用者所以很難確保它們能夠正常的運作。這尤其在電腦上是如此;你永遠無法確定可以在硬碟上找到甚麼軟體。我決定利用投影機來介紹程式設計課程,透過它來展示給我的學生這些C的程  當然我想要使用Linux和它的相關程式設計工具來讓我的學生學習並讓他們知道Windows並非唯一的選擇。我的第一個想法是嘗試將Linux安裝在Iomega Zip 250MB 並列埠版本的機器上。接著幾天的工作後我達到這個目標。它需要一張磁片來開機,而且運作的速度還不錯。接著我重複了這樣的動作,這回我將Linux安裝到IDE介面的硬碟中,並且將其透過並列埠的外接盒接到並列埠上來安裝。這樣的方式消除了250MB的磁碟空間限制而且加速了Linux的執行速度。在這些的工作中我學習到,我自問,為什麼不在光碟上執行Linux呢?這將會更  此外,學生們也可以藉此機會開始學習如何使用Linux而不需要安裝在他們的電腦上。  最後的產品是一張可開機的光碟,所以你必須先設定讓你的BIOS可以從光碟機開機。如果你的BIOS不支援光碟開機,那有另一個解決方式:一張開機磁片也可以從光碟開啟Linux。事實上,一個軟碟機的開機映像檔也是光碟用來開機的檔案。安裝在光碟上的Linux軟體  第一種是全部安裝的。它包含了基本系統,印表機支援,X視窗系統,VGA 16及framebuffer的X伺服器,GNOME(或者你可以編輯.xinitrc並且將你喜歡的視窗管理員選擇起來),網路伺服器,編輯和排版工具(LaTeX,等等),Emacs,開發工具(make,egcs,等等),DOS/Windows的連結工具,郵件,WWW和新聞群組工具,和其他的套件諸如rhide,ssh支援和  第二個系列,我稱為Maragda教學版,僅安裝了部分的套件,有基本系統和X(使用fvwm2),包含完整的開發工具和其他的工具例如gv和rhide。完整版的Maragda需要至少64MB的記憶體,而Maragda教學版則需要32MB。也有第二種的完全版Maragda只需要32MB的記憶體,但不包含部分的工具例如Emacs或Netscape這類需要更多記憶體的軟體。在這兩個狀況中,都使用了相同的核心。它的版本是2.2.14,而且它支援了網路,framebuffer裝置,和loop-  一個問題是任何的系統都必須具備可攜性,以便來適應不同的硬體。最低限度下,滑鼠和X視窗必須能夠設定,接著是密碼,網路特性和其它方面。在Maragda的狀況中,它必須記得沒有辦法殘存設定,因為光碟是唯讀的。完整版的Maragda被預設支援PS2的滑鼠,及32bit的framebuffer顯示模式。網路使用3c59x(一張3Com的網路卡)的模組,並且識別為maragda.gnd.upv.es(192.168.0.1)。完整的Maragda有一個開放的方式讓你決定是否自行來設定。只要在主系統被掛載完成後,開機的程序會暫停並且要求一張格式化成ext2的磁片,在  如果你對這些檔案或者其他設定檔都不瞭解的話,那麼仍然有一點希望。你必須要繼續開機的程序並且用root登入。這張光碟會被掛載在/mnt/cdrom。在/mnt/cdrom/system/config-touch你會發現兩個描述檔(scripts)。執行Touch_all會建立系統中的所有檔案。接著執行你需要的設定工具(setup,xconfiturator或X中的control-panel)。最後執行Find_newer。它會將所有設定工具產生的設定檔找到,並且複製一份叫config的檔案到每一相對應的目錄./config。將這些檔案放到軟碟中。Maragda教學版限制更多。它不會向你要求放入  二、將所有的原始程式分別放至兩個大檔案上,ROOT.FS及WHOLE.FS;他們都應該要裝  三、開發一個開機的機制來自動偵測光碟機並且能夠找到在光碟上的ROOT.FS。接著他應該要能夠將ROOT.FS載入成為虛擬磁碟中(Ram Disk)並且準備將此當成根檔案系統(roo  你可以在光碟上找到這些目錄(和doc目錄在一起)。它們是我工作目錄的複製,你可以從那裡找到所有需要用來建立Maragda的東西。你必須將它們複製到一個至少有1GB空間的磁碟中。我必須要先指出,或許有些設備檔(在/dev下面的檔案)可能會在從ext2的檔案系統複製到光碟檔案系統(iso9660)的過程中變得不正確。這樣的狀況下,你必須要將這些檔案再從你的系統中置換成正確的。現在,我們來開始描繪這些有關建立的程序和這些描述檔的目的及主要的設定檔。如果你決定要自行建立一個屬於你自己的類Maragda系統,你應  圖一顯示主要的開機步驟。這裡主要的目的是要建立一張開機磁片好整合進入光碟中,讓光碟可以開機。開機磁片上的啟動程式我們選用syslinux。它可以用來將Linux從一個DOS格式的磁片中啟動,其中包含核心及壓縮過的啟始虛擬磁碟(initial RAM disk),此虛擬磁碟內容包含根檔案系統。所以我們需要一個核心及其可動態載入的模組。(目前只需要核心)。我將不會解釋如何編譯核心,但是將會告知哪些部分需要標記起來以便得到該有的支(你可以在doc/developer.html中找到我的核心設定檔)現在我們需要建立啟始虛擬磁碟(initrd),將根檔案系統在第一階段的開機中放入。最簡單的方式是從一張救援磁片中借得。但是我遵從"自己動手做"的原則。在boot/initrd這個檔案是我的虛擬記憶體的大綱。Init_initrd這個描述檔主要用來從原始程式中複製檔案。它建立目錄,複製一份裝置檔案到initrd/dev並且移植部分到initrd/bin。Initrd的大小一定要保持很小的狀態,所以你應該只留必要的執行檔在initrd/bin中。當你完成後,執行Make_initrd_fs_gz。它會建立一個檔案(Minix 的格式),將檔案複製到boot/initrd並且壓縮起來。現在你有了核心和一個啟始虛擬磁碟。接著,你應該利用syslinux產生一個可開機的磁片。Syslinux的設定檔SYSLINappend initrd=initrd.gz ramdisk_size=20480 vga=0x315這是指示開機啟動程式去載入啟始虛擬磁碟並且將兩個參數傳給核心告知它需要的虛擬磁碟大小和framebuffer的顯示模式。這個虛擬磁碟的大小應該根據ROOT.FS的大小來設定。最後,這張開機磁片要透過Write_syslinux_boot_floppy這個描述檔來建立。它會解開這個raw映像檔到磁片上並準備整合進光碟中。在這裡意義最大的是boot/initrd/linuxrc這個檔案(/linuxrc在啟始虛擬磁碟上),因為這個描述檔會再一開機時就被執行到。它會在這個階段執行主要的工作:'D 它會尋'D 最後,如果找到.FS的檔案它會將cdrom_dev寫入。這個檔案會在第二階段的開機過程中參考到。如果每件事情都完成後,開機的程序會繼續來執行在新的根檔案系統上的init。舊  這些檔案室透過在系統工作目錄的描述檔來建立,並且所有檔案都可以在那被找到,原始檔也在那。Cp_root是用來建立ROOT.FS,當然Cp_whole會建立WHOLE.FS。這兩個描述檔使用Make_fs來在一個檔案中建立檔案系統。ROOT.FS會包含那些需要寫入且無法存在於read-only的檔案系統的檔案及目錄。在ROOT.FS存在於虛擬磁碟時也是可以寫入的。困難的是如何找到真正需要放在ROOT.FS的東西。在幾次的嘗試後,我決定複製至少下列的目錄:bin,sb  對於那些沒有複製到的,會建立符號連結,指向WHOLE.FS掛載的目錄(/mnt/whole_fs)。此外,執行檔和函示庫都是unstripped(移除符號)來減少空間。而ROOT.FS的設定檔都在system/config。一當ROOT.FS從原始程式檔中被展開,system/config的檔案會寫入覆'D /etc/X11/X和/etc/X11/XF86Config用來設定X 'D /etc/hosts*和/etc/sysconfig/netwo'D /etc/rc.d/init.d/*,用來控制啟始的程序特別重要的是在system/config/etc/rc.d/rc.sysinit這個描述檔。它是透過init來執行的(第二階段的開機)。我修補過這個檔案為了完整的Maragda系統。它增加了在Maragda中/etc/fstab的幾行,為了用來映射光碟在哪,及WHOLE.FS在哪。記得這是透過在/initrd/cdrom_dev的linuxrc(第一階段的開機)來公布的  當然為了測試你的救援系統,你不需錄製成光碟。它應該可以簡單的透過LILO來開機,  當你已經學到,原始檔安裝程序是一個目錄,包含有完整安裝好的Linux系統。它可以是用來複製給ROOT.FS和WHOLE.FS檔案系統的原始程式,甚至可以用來安裝到硬碟或者到250MB的zip磁碟。Prepare_install(在系統工作目錄)描述檔是用來設定接收RPM套件。接著,你可以使用Install_rpm來將那些套件安裝到原始碼安裝的目錄。Install_rpm會從Red Hat 6.2的光碟中安裝套件(或者從任何地方,如果你修改它的話)。被安裝的套件名稱可以在system/RPM_lists找到。例如,base_inst會列出基本系統安裝用的套件。我是透過在Red Hat光碟上RedHat/base/comps的檔案來建立這個列表。如果你照著正確的順序來安裝套件(如在Install_rpm中顯示的),那他們在安裝中應該不會有問題。Install_rpm也會報告出哪些套件沒有被安裝。在base_inst的狀況中,它會建立一個base_inst_not_installed。只有部分的rpm會產生問題。但是如果你告訴Install_rpm將base_inst_not_installed中的套件安裝進去,最後還是會被安裝進去。你可以在http://navel.eugan.upv.es/maragda/doc找到文件。

2012/03/06

Configure Plone and Joomla RSS Feeds

這算是 Plone User's Joomla Adventure 第二集,比較兩者設定 RSS Feed 的方法。

Plone 的 RSS 設定對象是 collection,在網址後面加上 /RSS 就行,例子像是 http://localhost/news/aggregator/RSS,搭配 portal_actions 還可以自動產生 RSS link/icon。

Joomla 的設定對象通常是 category 和 section,也可以首頁之類的任何網址,在網址後面加上 ?format=feed&type=rss 就行,例子像是 http://localhost/index.php?format=feed&type=rss 或 http://localhost/index.php?option=com_content&view=category&id=48&format=feed&type=rss。

2012/02/09

Interactive Programming Learning

在 http://ask.inside.com.tw/ 看到「如何教國一的弟弟寫程式」,順便找到幾個線上資源:

  • http://www.codecademy.com/
  • http://tryruby.org/
  • http://www.trypython.org/

2012/02/03

Canonical URL Links

如果網站裡存在不同網址,卻回傳同樣 (或類似) 的內容,考慮將這些網頁"整併"掉時,一項稱為 Canonical Link Element 的方式,值得參考。

2012/01/17

Plone User's Joomla Adventure

我下載的說明文件是 http://downloads.joomlacode.org/docmanfileversion/1/6/0/16087/1.5_Installation_Manual_version_0.4.pdf 寫得很詳細,像是在讀論文,常讓我有找不到重點的感覺。作業系統環境是 CentOS,第一個卡關的地方,新版的 PHP 把 MySQL 的支援設定,改到 php.ini 檔案裡,這在文件裡是寫成 You must ensure that you have the MySQL, XML, and Zlib modules functionality enabled within your Apache Web server installation. These are controlled within the php.ini file. 平常太少跟 Apache 打交道,所以遇到 configuration.php Writable 的問題,把目錄擁有者改成 apache.apache 就行了。 進入管理介面後,沒馬上搞懂的是: extension, module, plugin 有何差別,對於 Category 也不清楚。

以上是初體驗的心得。

2012/01/03

Vim Auto-indenting for Code Paste

編輯程式碼時,雞婆聰明的 Vim 會自動縮排,這時可以用 :set paste 來處理,更多資訊可參考 http://vim.wikia.com/wiki/VimTip906