2010年4月24日 星期六

YUM筆記

YUM簡史

YUM(Yellow dog Updater, Modified)是Redhat系列的linux最重要的套件管理程式,他的前身是YUP(Yellow dog UPdater)。Yellow Dog很多人是很陌生的,他是在早期運行在IBM的power平台上的linux,也是使用rpm based。當時能夠跑在power上的linux大概就只有Debian以及Redhat/Fedora Linux;後來在社群不斷地維護、改善下,就產生了重大的改版--YUM。

很顯然的,YUP或是YUM的出現是因為rpm的相依性、版本、套件間衝突的問題用手動很難解決,必須要依靠一個機制來自動替我們解決所有相依性地獄(dependency hell)的問題。yum提供的服務大致有四項:

  1. 自動解決相依性問題
  2. 能夠用command自動化管理,也能有圖形化介面(pirut)
  3. 能夠管理多個套件庫來源
  4. 能夠跟rpm一樣精確的管理套件的版本以及適用平台的種種情況

Repostories

一個Redhat Linux標準的repostories設定檔,是放置在/etc/yum.repos.d/底下,任何以.repo結尾的檔案都會被視為一個套件庫。以一個RHEL5.repo為例,他的格式如下:

[Server]
name= Server catagory
enable = 1
baseurl=http://192.168.2.254/RHEL5/Server/
gpgcheck=0

[VT]
name= Virtualization catagory
enable = 1
baseurl=http://192.168.2.254/RHEL5/VT/
gpgcheck=0

[Cluster]
name= Cluster catagory
enable = 1
baseurl=http://192.168.2.254/RHEL5/Cluster/
gpgcheck=0

[ClusterStorage]
name= ClusterStorage catagory
enable = 1
baseurl=http://192.168.2.254/RHEL5/ClusterStorage/
gpgcheck=0
其中,[XX]就是yum認定的repo category名稱;利用enable變數可以開關一個category。習慣上相同來源不同的category會放在同一個.repo便於維護,當然你也可以將所有來源寫成同一個檔案,或是每個category都獨立成一個.repo,yum都能夠正確解讀。
想知道有哪些categories是enable/disable,或是全部列出,可以使用repolist:
yum repolist all
repo id             repo name                                    status
Cluster             Cluster catagory                             enabled:     32
ClusterStorage      ClusterStorage catagory                      enabled:     30
RHEL5               RHEL5                                        disabled
Server              Server catagory                              enabled:  2,797
VT                  Virtualization catagory                      enabled:     34
rhel-debuginfo      Red Hat Enterprise Linux 5Server - i386 - De disabled
rhel-debuginfo-beta Red Hat Enterprise Linux 5Server Beta - i386 disabled
rpmforge            Red Hat Enterprise 5Server - RPMforge.net -  enabled: 10,305
rpmforge-testing    Red Hat Enterprise 5Server - RPMforge.net -  disabled
repolist: 13,198

安裝(install)

yum有著非常直觀的命令列:install用來安裝數個套件:

yum install foo1 foo2 foo3
如果你的機器是x86_64,你還可以選擇安裝x86版本的套件,此時只要在多指定名稱即可:
yum install f001.x86_64 f002.x86 f003
對於沒有指定平台的套件,如果套件庫兩者都存在,則兩種平台都會安裝;因此還是強烈建議把平台名稱也寫上去。yum的運行機制會先更新yumdb,然後從dbcache裡得知所有套件資訊,因此當你執行yum install foo時,yum已經更新了他的yumdb,並且列出滿足安裝該套件所需要額外安裝的套件,並等待徵求你的同意。有時候你想自動回答yes,那麼就加個-y:
yum install foo3 -y
不過如果你沒有匯入gpg公開金鑰,yum下載完rpm會拒絕你繼續安裝。解決的方法是在.repo檔裡設定gpgcheck=0,或是直接使用nogpgcheck:
yum install foo3 --nogpgcheck -y
如果想忽略訊息,就加個-q吧。當然,你可以用yum安裝一個rpm,讓yum幫你解決惱人的相依性問題(如果yum可以解決的話):
yum localinstall foo3-1.2.3-5.el5-x86_64.rpm
or
yum localupdate foo3-1.2.3-9.el5-x86_64.rpm
yum也支援安裝一個群組套件,這比較少用到,除非你知道有哪些群組套件可用:
yum groupinstall "GNOME Desktop Environment"
當然,yum也可以讓你很容易的重新安裝:
yum reinstall foo

更新(update/upgrade)

更新是很重要的事情。除非一個系統只專門為了某項服務而設立(例如網格計算之類的高速電腦),或是在一個非常封閉的環境裡(例如無法連入的私有網路),否則更新套件以及安全性更新是很重要的。update就是最常用的更新指令:

yum update foo2 foo2
這樣一來便能夠更新這兩個套件。如果不加任何套件名稱,則系統內所有套件都會被更新。yum也可以讓你只看看有哪些東西需要更新,而不會真的更新:
yum check-update
另一個類似的用法:upgrade
yum upgrade
其實等同於
yum update --obsoletes
讓套件的更新會刪除已淘汰(repo不再被維護)的舊套件。通常這個指令只建議做同版本的升級(例如CentOS 4.3->4.4),如果想要從CentOS4.4升級到目前的5.4,恐怕還是建議拿光碟升級或重灌系統。
或是讓你降級安裝:
yum downgrade foo1

許多關鍵的server並不希望更新kernel或是gcc版本,我們可以從yum的設定檔下手:在/etc/yum.conf多加一行
exclude=kernel gcc
就可以防止被yum升級。

移除(remove/erase)

利用remove或是erase:

yum remove foo1 -y
利用yum remove比rpm -e來得方便多了,因為yum能自動幫我們解決相依性的問題。

查詢(list/search/info)

list可使用的對象分成七大類:installed(已安裝套件), available(所有repos裡的套件), updates(可供更新套件), extras(已安裝但不在repos裡), obsoletes(系統內已被repos廢棄的套件), recent(新被加入到repos的套件)以及all(所有安裝到系統的套件)。list可提供套件名稱的模糊搜尋。要查看有沒有可以更新的套件:

yum list updates
查看有沒有安裝http:
yum list installed http*
查看整個套件庫有多少套件:
yum list avaliable | wc -l
search則是比list提供更廣義的搜尋。利用search可以提供套件名稱、描述、摘要以及與該套件相關的模糊搜尋。
yum search python
便會發現所有欄位包含python都會被納入搜尋範圍。
info會列出套件的詳細資訊。如果只下yum info,則會列出所有套件庫內的套件資訊,那是非常龐大且沒有幫助的訊息。一樣可以用list的規範:
yum info installed | grep nfs
當然,info也可以直接指定套件名稱,但也僅限於套件名稱的模糊搜尋:
yum info nfs*
其他的類別就各憑需求去執行囉。

進階查詢(provides/whatprovides)

provides與whatprovides是相同的意義,通常用在尋找某個檔案是由哪個套件所帶來的。

yum provides /etc/passwd
setup-2.5.58-1.el5.noarch : A set of system configuration and setup files.
Repo        : Server
Matched from:
Filename    : /etc/passwd

setup-2.5.58-7.el5.noarch : A set of system configuration and setup files.
Repo        : installed
Matched from:
Other       : Provides-match: /etc/passwd
如果有多個repos,就會有多比資料。provides也可提供套件的模糊搜尋。

清除(clean)

cache指的是rpm本身。yum從站台下載下來的rpm都會存在暫存資料夾下安裝,但是安裝成功後並不會幫你清除。

yum clean packages
可以清除的對象還有headers/metadata/dbcache等。你可以直接用一個all代表清除全部:
yum clean all
刪除某套件的cache

建立一個自己的repo

建立一個yum repo比想像中更容易,你只要把rpm放在一個指定的目錄下,就可以建立一個repo:

createrepo -v /path/to/rpmrepo
這個指令在於產生一個repodata的目錄,內含filelists.xml.gz這類重要的檔案。產生一個新的.repo把這個位置加進來,可以是local硬碟file://,也可以是ftp://,也可以是http://。

參考文章:
1. Redhat Enterprise Linux Administration Unleashed, Chapter 3.
2. YUM的使用-PHP5網管實驗室
3. 使用 yum 來做套件管理並建置 yum Server

2010年4月23日 星期五

rpm速記

rpm的基本安裝過程:
RPM(Redhat package Manager)是Redhat系的linux最必須要熟知的套件管理程式,許多非Redhat系的linux也沿用這個管理程式,例如SuSE Linux, Mandirva以及其衍生的PCLinuxOS等。rpm的功能非常完備,比起dpkg管理程式更勝一籌。
rpm的所有動作都會與rpmdb進行互動,也就是透過rpm所安裝的程式都能夠被記錄下來;手動安裝的程式則不在db內,因此也無法享受這方面的便利性。安裝、移除、升級rpm時都會更新rpmdb,但是仍然可以手動更新:

rpm --rebuilddb
rpm檔的命名遵循一定的格式:
Filename-version-release.arch.rpm
例如GConf2-2.14.0-9.el5.i386.rpm,其中的GConf2就是檔案名稱,2.14.0為版本號,9為釋出番號,el5.i386表示這是一個適用於RHEL5 x86平台的rpm檔。一個rpm的安裝會有下列過程:
  1. 檢查數位簽章
  2. 進行相依性檢查
  3. 執行pre script
  4. 複製檔案內容至指定位置
  5. 執行post script

GPG(GNU Private Guard) key數位簽章驗證

GPG key(或稱為signature key)是rpm的發行商應該提供的一個數位簽章(也就是一組公開金鑰)在安裝前rpm會進行檢查。如果rpm檔沒有數位簽章,或是rpmdb沒有紀錄該發行商的公鑰,則rpm數位簽章認證則會出錯:

rpm --checksig http://192.168.2.254/RHEL5/Server/GConf2-2.14.0-9.el5.i386.rpm
http://192.168.2.254/RHEL5/Server/GConf2-2.14.0-9.el5.i386.rpm: 
(SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#37017186)
假設我們想匯入GPG key到系統裡,應該用--import:
rpm --import http://192.168.2.254/RHEL5/RPM-GPG-KEY-redhat-release
我再試一次:
rpm --checksig http://192.168.2.254/RHEL5/Server/GConf2-2.14.0-9.el5.i386.rpm
http://192.168.2.254/RHEL5/Server/GConf2-2.14.0-9.el5.i386.rpm: 
(sha1) dsa sha1 md5 gpg OK
其中,--checksig可以用-K來代替。GPG key的簽章校驗失敗並不會讓安裝無法進行,只是rpm被包裹成類似cpio的格式,沒辦法輕易得知裡面的內容是否被有心人士更動過,因此匯入發行商的公開金鑰進行數位簽章的認證其實是常被忽略但極為重要的一個步驟。

安裝:

rpm -ivh foo.rpm
其中,-i表示install, -v為verbose,-h則是用50個#(hash marks)來顯示進度。如果你對debug rpm感興趣,你還可以用-vv顯示更詳盡的內容。
rpm -i --test foo.rpm
非常有趣的一種方式,利用--test測試安裝,過程並不會真的安裝,而是把-i之後的結果先印給使用者。如果結果符合預期,可以把--test拿掉進行真正的安裝。

升級:

rpm的升級可用兩種方式:

rpm -Uvh foo.rpm
-U表示Upgrade and install的意思。如果系統內已經有舊版本的套件,則會移除後再安裝新版本;如果沒有既有套件,則等同於-i全新安裝;這也是很多人常用-Uvh來安裝rpm的原因。
rpm -Fvh foo.rpm
-F為Freshen之意,意思比upgrade更像upgrade。使用-F,系統內必須已經安裝了較舊或相同版本的套件,她並不會像-U自動升級安裝。
需切記核心的升級要使用-i全新安裝,而不要使用-U/-F。原因是rpm -U會移除舊的kernel並安裝新的,但是我們並無法確定新核心是否有問題,甚至不確定能否正常開機。使用-i進行一個新的安裝,一旦新核心有問題,還可以開回舊核心繼續作業。

重新安裝:

rpm -ivh --replacepkgs foo.rpm
雖然名為replace,但是就是reinstall的意思。適用於相同版本號的套件。
rpm -ivh --replacefiles foo.rpm
如果既有檔案與foo.rpm會安裝到系統的檔案有重複或是套件間有conflict,則會覆蓋掉系統的舊檔案,也就是忽略套件間衝突。
rpm -ivh --oldpackage foo.rpm
如果為了讓某些程式可以跑,需要舊一點的套件(最常見的就是舊版的gcc),你可能需要downgrade你的套件。利用--oldpackage指定一個比現有套件還舊的package來安裝。強制安裝一個rpm檔,完全忽略相依性未解決的問題。如果你根本不想理會到底是降級到舊版本或是覆蓋舊檔的問題,你可以用--force代替上面三個範例:
rpm -ivh --force foo.rpm
完全等同於
rpm -ivh --replacefiles --replacepkgs --oldpackage foo.rpm
不過這樣硬幹並非好事,而且還是沒辦法解決相依性的問題。如果你只想忽略相依性而強制安裝,應該用--nodeps:
rpm -ivh --nodeps foo.rpm
如果你是x86_64的機器,可是binaries只有for x86且沒有source code可供編譯,可以試試看安裝不同arch的rpm:
rpm -ivh --ignorearch foo.x86.rpm
如果你的硬碟空間非常有限,系統又跑的是你再熟悉不過的服務跟指令,你可以選擇不裝man pages:
rpm -ivh --excludedocs foo.rpm
如此一來雖然你可以執行一個命令,但是沒有他的man page。

移除:

rpm -e foo
不用接版本號就可以移除(erase)該套件。假設該套件同時安裝了x86及x86_64兩種版本,則只好辛苦一點,指定全名:
rpm -e foo-version-arch

查詢已安裝的rpm檔:

印出套件名稱及版本號:

rpm -q foo
如果要列出系統所安裝『所有』套件,則可用
rpm -qa
來觀察。不過-qa列出的資訊太過龐雜,因此較常見的用法是搭配grep搜尋關鍵字:
rpm -qa | egrep "*samba*"
當然,也可以利用-qa來列出系統已安裝的public key:
rpm -qa gpg-pubkey
如果知道套件名稱,想知道他的詳細訊息(info):
rpm -qi foo
如果想知道系統的某個檔案(file)是由哪個套件提供,可以使用-f:
rpm -qf /etc/passwd
反之,如果你想知道這個rpm究竟裝了哪些東西到你的系統(這恰好是windows最不希望使用者知道的...),可以讓rpm列表(list):
rpm -ql foo
不過,列出的訊息實在太多了,應該可以使用grep撈出有用的資訊,看看有哪些是doc,又有哪些是設定檔;你可以用-qd指查詢docs:
rpm -qd foo
或是-qc來查看conf檔:
rpm -qc foo
或是進一步查看套件的相依性:
rpm -q --requires foo
這個指令應該反過來理解:foo套件(或指令)需要哪些套件(或檔案)。例如,python指令需要哪些套件或libs:
rpm -q --requires python
/bin/sh  
/usr/bin/env  
libbz2.so.1  
libc.so.6
...以下略  
相反的,查詢某套件提供了哪些指令或libs,例如,python提供了哪些套件跟libs:
rpm -q --provides python
Distutils  
_bisect.so  
_bsddb.so  
_codecs_cn.so
...中間略  
python = 2.4.3-27.el5
顯示python提供了Distutils套件等,也提供了python自己。
rpm -q --provides foo
跟上面相反:foo套件提供了哪些能力。例如:
rpm -q --provides passwd
config(passwd) = 0.73-1
passwd = 0.73-1
與--provides/--requires類似的兩個options分別是--whatprovides與--whatrequires。
rpm -q --whatprovides python
python-2.4.3-27.el5
rpm -q --whatprovides /etc/passwd
setup-2.5.58-7.el5
被查詢的對象可以是一個檔案,也可以是套件本身。python由python-2.4.3-27.el5提供而來,/etc/passwd則由setup-2.5.58-7.el5而來。
rpm -q --whatrequires bash
info-4.8-14.el5
gpm-1.20.1-74.1
initscripts-8.45.30-2.el5
ypbind-1.19-12.el5
sysklogd-1.4.1-46.el5
vixie-cron-4.1-77.el5_4.1
sendmail-8.13.8-8.el5
squid-2.6.STABLE21-6.el5
vnc-server-4.1.2-14.el5_3.1
bash套件被這些套件所依賴。
rpm -q --whatrequires `which bash`
bash-3.2-24.el5
iproute-2.6.18-11.el5
gpm-1.20.1-74.1
groff-1.18.1.1-11.1
iputils-20020927-46.el5
xorg-x11-filesystem-7.1-2.fc6
crontabs-1.10-8
...族繁不及備載
/bin/bash這個檔案被更多的套件所依賴,不難想像linux就是一個大量shell script架構出來的系統。透過--provides/--whatprovides/--requires/--whatrequires這四個參數就可以把rpm的相依性完全釐清,只是在使用--what參數時總是容易令人混淆。 甚至你也可以檢查這個套件在安裝時的狀態(status):
rpm -qs foo

查詢一個rpm檔:

很幸運的,剛剛我們所列出的options都還可以繼續沿用,要查詢一個rpm檔而不是已經安裝的套件名稱,只需要多加一個-p即可。例如查詢一個rpm的info:

rpm -qpi foo.rpm
想知道這個rpm究竟包含哪些binaries以及libraries:
rpm -qp --provides foo.rpm
以及她需要哪些套件或libs:
rpm -qp --requires foo.rpm
甚至你可以清楚的查看安裝這個rpm的blockquote script以及post script:
rpm -qp --script foo.rpm
在安裝前就先看看這個rpm會裝哪些東西到系統裡:
rpm -qpl foo.rpm
當然還是可以搭配--what,只是別忘了記得加-p

patch檔的查詢:

很多時候我們會下載一個小的patch檔而非一整個全新的rpm,要查看這個rpm patch會更新哪些檔案只需要多一個-P:

rpm -qPpl foo.patch.rpm
有了先前的經驗,我們也可以知道某patch套件更新了哪些檔案:
rpm -qPl foo
當然,你更可以查詢整個系統所有被patch過的檔案有哪些:
rpm -qaP

稽核(Verifying)rpm檔;

稽核rpm檔是比較rpm安裝在檔案系統內的檔案與rpmdb所紀錄的檔案資訊做比較。比對的項目有八項:

  1. file size
  2. 檔案大小是否改變 (S)
  3. file type
  4. 檔案狀態(權限、類型)是否被改變 (M)
  5. MD5 checksum
  6. 以md5sum指令進行計算 (5)
  7. device
  8. 裝置檔是否改變 (D)
  9. linkage
  10. 是否指向另一檔案 (L)
  11. owner
  12. user是否改變 (U)
  13. group
  14. group是否改變 (G)
  15. mtime
  16. 修改時間 (T)
例如,檢查vim套件有哪些檔案被修改過:
rpm -V vim-common
S.5....T  c /etc/vimrc
校驗rpm的結果用上述八個欄位表示,上面的結果表示vimrc在安裝之後大小改變,因此md5 checksum也必定改變,修改時間也改變了。"."表示從未改變。假設這個檔案被移除了,則會顯示missing;如果你是用一般使用者的身份查詢系統檔案,很可能因為權限不足而產生"?"的狀態,請切至root執行rpm -V即可正常檢查。

解開rpm:rpm2cpio

rpm2cpio能解一個rpm檔導入cpio解開成檔案。利用上面所學檢查系統是否有rpm2cpio這個程式:

rpm -qf `which rpm2cpio`
可見這個指令就是包含在rpm套件裡面。
rpm2cpio foo.rpm | cpio -idmv
其中,-i表示解開一個cpio檔,-d建立目錄樹(man pages上說cpio只會解檔案不解目錄,但我測試結果,加不加-d是相同效果),-m使還原後能保留mtime,-v為詳細輸出。
如果只是要查看rpm內容,可以不需要輸出:
rpm2cpio foo.rpm | cpio -vt

參考文獻:
1. Redhat Linux網路及系統管理指南(學貫),第26章
2. 鳥哥的私房菜第23章
3. How To Extract an RPM Package Without Installing It.

2010年4月9日 星期五

批次修改圖片大小-convert

最近在BBS上看到有網友詢問如何利用convert指令做批次轉換。在先前的批次修改圖片大小裡有提到一些方法。不過當時我一直忘記把script寫上來,今天特地補上。

#!/bin/bash

for files in *.ps; do
    name=$(echo $files | cut -d. -f1).pdf
    convert $files $name
done

這個作法的好處就是只要修改.ps跟.pdf這兩個關鍵字即可。當然他不是一個完美script-- 你還可以讓他變得更人性:

#!/bin/bash
## Author: Jim T. Tang (http://maxubuntu.blogspot.com)
if [ -z $1 -a -z $2 ]; then
    echo "usage: $0 jpg png";
    exit 0;
elif [ -z $2 ]; then
    echo "need target format. e.g. ps"
else
    for files in *.$1 ; do
        name=$(echo $files | cut -d. -f1).$2
        convert $files $name
        echo "$name is made."
    done
fi 

2010年3月9日 星期二

終於拿到NCLP證照了(二)!

這個標題很奇怪,但我不得不說一下...Novell這間公司有時候證照辦得太多,也是很容易出錯的。終於拿到NCLP award!這篇文章中,可以發現我只收到NCLA,但是我考的NCLP呢?我從未拿到。由於我從認證資料庫裡查到我確實有CLP的紀錄在,因此也就沒有多疑,即使我沒有拿到紙本的NCLP證照!不過我越想越不對,前幾天又寫信給Novell負責教育訓練的窗口,我列出我所拿到的證照,也就是我在終於拿到NCLP award!這篇文章所列出的證照是否為NCLP所應該有的全部:

Greeting Sir,
In August 2008, I passed NCLP exam.
yesterday I get a Linux Technical Specialist cert in my email box, 
I suddenly found that what I got is a NCLA certification, 
but what I should take is the NCLP cert, right? 
the attached files are what i have, may I know if these are all licences for a NCLP passer?
if these are all for a NCLP passer, why what we got is NCLA instead of NCLP?
if there is NCLP certification but for some reason I never receive awarded emails from Novell,
would you please resend it to me?

And the final question is for NCLP11. If I pass NCLP11 in the future,
will Novell award me both NCLA and NCLP or NCLP only?
thank you! 
--------------------------------
Name: JIM TING TANG
Registration Key:  CSP-XXXXXXXXXX
Candidate ID: 100XXXXX
Email:  maxXXXXXXX@gmail.com
Phone:  886XXXXXXXXXX
Test:  Certified Linux Professional 10

Test Dates:
      08/31/2008  14:30
      08/31/2008  17:00
---------------------------------

我想知道CLP11是不是還會像以前一樣同時送CLA,他的回答如下:

Hello Jim,

Your CLP 10 is showing in your certification progress as completed. I have re-sent the pdf file to you for your certificate. If you complete the CLP you will also be a CLA. Thanks,

Tyler

果然,剛剛我就收到了睽違快要兩年的NCLP證照...雖然已經是過往雲煙了,但這種心情很奇怪,沒啥高興的感覺,我想這大概就是遲來的正義的感覺吧!而且也解決了一個小疑點:即使是SLES 11的版本,拿到NCLP還是一樣同時擁有NCLA的證照,不會改變。

Dear JIM TING TANG:

Congratulations! On behalf of Novell Technical Training, it is a pleasure to grant you the title of:

Novell Certified Linux Professional (Novell CLP)
SUSE Linux Enterprise Server 10

Your Certification ID number is: 100XXXXX

Novell CLP certification allows you access to the Novell Certification Community. From the Community, you may connect to “My Certifications” to view and update your information. Please check this often and keep your contact information updated.

The first time you access the Novell Certification Community, you will need the Registration ID and exam date from your recent exam. All of this information can be found on the score report you received when you took your exam. Please email edcustomer@novell.com if you have any questions.

In order to do our part to protect the environment, Novell is "going green" and discontinuing the mailing of hard copy certificates. I encourage you to print out your attached PDF certificate and display it proudly.

I commend you for your commitment, dedication, and effort in earning the Novell Certified Linux Professional certification.

Sincerely,

MaryJo Swenson
Executive Director
Novell Technical Training

所以雖然我很開心收到了證照,但我還是很客氣的跟他小抱怨了一下,請他補寄紙本的證照給我!

2010年3月8日 星期一

IE6的葬禮

Internet Explore 6(以下簡稱IE6)是全世界使用率最高,使用時間最長的瀏覽器。包含筆者在內從windows 98時代使用IE5,到後來的windows ME, 2000都還是IE5的時代;XP的強勢進攻,IE6也搭這順風車成為全世界最普及的瀏覽器;在XP即將壽終之前,IE7已經推出而且還包含在XP的線上更新內,只是IE7的秀斗與缺陷實在罄竹難書,許多學校、廠商或各級單位甚至都要求使用者不要升級成IE7:IE6的重要性反而在IE7推出之際越顯重要。中道的衰落,從firefox跟opera崛起之後就注定了這個命運;更悲慘的是,chrome來勢洶洶,IE8是否能力挽狂瀾呢?下文轉載自iThome: 設計公司幫IE6舉行葬禮一文:


根據外電報導,這場葬禮甚至還收到微軟IE團隊送來的花藍,IE團隊在卡片上寫著:「感謝IE6所帶來的美好時光」。

一家位於丹佛的設計公司Aten Design Group在上周一(3/1)隨著YouTube將在當天停止對IE6的支援,而舉辦了一場詼諧的IE6葬禮。

Aten藉由一家Pub舉辦IE 6葬禮,並安排了棺木、假的屍體、頭上鑲有IE 6扭曲的表情,墓誌銘上標示著IE6生於2001年8月27日,死於2010年3月1日。參與該場葬禮的入士皆依照傳統禮節盛裝出席。根據外電報導,這場葬禮甚至還收到微軟IE團隊送來的花藍,IE團隊在卡片上寫著:「感謝IE6所帶來的美好時光」。

Aten並且打造了一個專為IE6葬禮所設計的網站,說明享年8歲的IE6因禁不住Google的職業傷害而在3月1日壽終正寢,但IE6的兒子IE7及孫女IE8將會延續其生命。該站並銷售印有相關圖案的T恤,售價25美元。

IE6近來遭受重重打擊,最嚴重的莫過於資安業者發現駭客鎖定包括Google在內的全球數十家企業的攻擊行動,就是利用IE6的安全漏洞,這項指控一度促使歐洲國家呼籲使用者改用IE以外的瀏覽器,另外,Google在今年1月初就表示自3月1日起將分階段陸續淘汰對IE6等舊版瀏覽器的支援,率先執行該政策的就是全球最受歡迎的YouTube影片分享網站。

但根據網路調查機構Net Applications的數據顯示,目前市佔率最高的瀏覽器版本為IE8,市佔率為22.52%,而已經舉行過葬禮的IE6還有高達19.76%的市佔率,排名第二,IE7以13.57%排第四,落後Firefox 3.5的14.54%。各界預期微軟將在本月舉行的MIX會議上揭露IE6曾孫─IE9的面貌。(編譯/陳曉莉)


圖片來源:IE6Funeral.com

實在是很佩服老外的詼諧,也實在是佩服他們的幽默感跟時間多...難怪台灣人常說沒那美國時間理你,是非常切中實際的一句話。Good to go, IE6!

2010年3月7日 星期日

Java方塊字

許多Java應用程式在輸入中文時會出現方塊字,其實這個時候只要把字型設定給Java即可。以我的Ubuntu為例,我安裝的是sun-java6-jre,此時只要幾個步驟:

cd /usr/lib/jvm/java-6-sun/jre/lib/fonts
mkdir fallback
ln -s /usr/share/fonts/truetype/LiHei_ProPC.ttf .

其中LiHei_ProPC.ttf是我要指定讓Java應用程式使用的字體,因此千萬確定你所使用的字體支援中文,否則就失去意義了。
把你的Java應用程式重新啟動,應該就可以看到正常的中文字體了。

2010年3月4日 星期四

Firefox/Chrome遇到flash方塊字

這個問題已經持續好幾個版本了,問題雖然知道是出在字型設定,但為何問題出在字型就不是我感興趣的部份。大致爬了一下大家的blog都提到了/etc/fonts/conf.d/49-sansserif.conf這個檔案。他是一個軟連結,來源是/etc/fonts/conf.avail/49-sansserif.conf。他原本是這樣:

  1. <?xml version="1.0"?>
  2. <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
  3. <fontconfig>
  4. <!--
  5.  If the font still has no generic name, add sans-serif
  6. -->
  7.     <match target="pattern">
  8.         <test qual="all" name="family" compare="not_eq">
  9.             <string>sans-serif</string>
  10.         </test>
  11.         <test qual="all" name="family" compare="not_eq">
  12.             <string>sans-serif</string>
  13.         </test>
  14.         <test qual="all" name="family" compare="not_eq">
  15.             <string>monospace</string>
  16.         </test>
  17.         <edit name="family" mode="append_last">
  18.             <string>sans-serif</string>
  19.         </edit>
  20.     </match>
  21. </fontconfig>

由於他只是一個軟連結,把他幹掉就可以正常顯示字型。但你如果希望讓flash使用系統其他字型,請繼續往下看。

我系統的預設字型是Sans,不過我也可以把他改成我們要的樣子。

sudo rm /etc/fonts/conf.d/49-sansserif.conf
接著,產生一個新的49-sansserif.conf檔案,把字型的部份用喜歡的字型取代,例如Mac的儷黑體:

  1. <?xml version="1.0"?>
  2. <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
  3. <fontconfig>
  4. <!--
  5.  If the font still has no generic name, add sans-serif
  6. -->
  7.     <match target="pattern">
  8.         <test qual="all" name="family" compare="not_eq">
  9.             <string>LiHei Pro</string>
  10.         </test>
  11.         <test qual="all" name="family" compare="not_eq">
  12.             <string>LiHei Pro</string>
  13.         </test>
  14.         <test qual="all" name="family" compare="not_eq">
  15.             <string>LiHei Pro</string>
  16.         </test>
  17.         <edit name="family" mode="append_last">
  18.             <string>LiHei Pro</string>
  19.         </edit>
  20.     </match>
  21. </fontconfig>
  22.  

重新啟動你的chrome/firefox,應該就可以看見正常的字體了!

參考來源:
FourDollars Blog
FireFox中文flash方塊字的問題