發信人: Dinosaur.bbs@bbs.ee.nthu.edu.tw (無責任恐龍), 看板: linux
小弟已經把這份文份改成 html , 放在下面的 url ,
http://linux.cis.nctu.edu.tw/pre-tlug/KernelChanges.html
大家可以翻閱一下. (強烈建議新手看一看)
簡介
******
這份文件包括一些 Linux 下重要 package 的最新版的資訊,希望能幫助初次
接觸、升級為 kernel 1.3.xx 的使用者能成功無誤的使用新的 kernel。希望 (雖
然我知道一定會希望落空的...) 以後不會再看到有人問:『為什麼我的 make 不
能用了?』『怎麼 ps aux 每次都出錯?』..... 這份文件理論上應該是 Linux
kernel Documentation/Changes 的翻譯,不過能力有限,如果你發現有看不懂的
地方,建議還是翻翻原文吧.... :)
目前版本
**********
- Kernel modules 穩定版: 1.3.57, 測試版: 1.3.69k
- PPP daemon 穩定版: 2.2.0f
- Dynamic linker (ld.so) 1.7.14
- GNU CC 2.7.2
- Binutils 2.6.0.14
- Linux C Library 穩定版: 5.2.18, Beta 測試版: 5.3.12
- Linux C++ Library 2.7.1.4
- Termcap 2.0.8
- Procps 0.99a
- Gpm 1.09
- SysVinit 2.62
- Util-linux 2.5
升級須知
**********
Network errors
================
許多網路的 script 的初始設定會在啟動的時候加個 route 到 localhost
(127.0.0.1),但是他們的方法錯誤。要解決這個問題,從你的網路設定檔裡面
找出 "route add -net 127.0.0.1" 並改成 "route add -net 127.0.0.0" 即
可。
這個問題出現在 Red Hat 以及從其延伸出去的系統 (Ex: Caldera)。如果
你正是使用這些系統,修改你的 /etc/sysconfig/network-scripts/ifup-lo,
將 "route add-net $(IPADDR)" 這一行改成 "route add -net 127.0.0.0" 即
可。
Booting Changes
=================
kernel 1.3.xx 的 boot 程序做了些改善,現在你可以載入較大的 kernel
(bzImage),另外也可以直接由 loader 來啟動 ramdisk (initrd)。有關 initrd
的部份請參閱 Documentation/initrd.txt。如果想編譯較大的 kernel,請使用
下列的 make 參數:bzImage, bzlilo, bzdisk (各相當於 zImage, zlilo 和
zdisk)。如果你想使用這項新功能,你必須升級你的 bootloader。LILO 請升級
為 0.19 (lilo.19.tar.gz),loadlin 請升級到 1.6 (lodlin16.tgz)。如果你使
用的是罕見的 SysLinux 或是 etherboot,最新版本分別為 1.3 和 2.0。
C Library
===========
Linux 最新的穩定版 C library 是 5.2.18,如果你從 5.0.9 之前版本升級
為這個版本,請一定務必必須閱讀 release.libc-5.2.18,因為 make 及一些重
要工具可能因升級而無法正常工作。
目前正在 beta 的版本則是 5.3.12。這版本有些重大改變,一些有蟲的程式
可能會遭遇麻煩 (以前的版本用 free() 來處理不是由 malloc() 傳回的指標沒有
問題,但是新版的 library 就有麻煩了),因此請先仔細閱讀 release.libc-5.3.9!
新版的 library 更正了 dirent 的 bug -- 如果有 define USE_GNU 的話,將會錯將
d->reclen 定義為 d->namlen,但是有些 GNU package 卻是以錯為正,例如 GNU
make 3.xx。要更正這項錯誤你必須 path 後重新 compile。(release.libc-5.3.9
中有 make 的 patch 以及何處可取得編譯好的 binary)
另外,libc-5.3.x 有保全的漏洞,而 libc-5.3.12 已經補好這個洞。因此如果
你要使用測試版的 library,請記得使用 5.3.12 版。
如果你遇到以下的錯誤訊息:
`fcntl_setlk() called by process 123 with broken flock() emulation'
你也必須升級到 5.2.18 版。1.3.x 版 kernel 增加了 BSD 形式的 flock 系
統呼叫,如果你使用舊版的 library 就會有這個錯誤訊息。不過這訊息一點影響
也沒有,因此你可以忽略不管。如果你覺得這個訊息很煩,那就升級你的 library
吧。如果你又煩又懶,那直接把 kernel fs/locks.c 裡面的
printk(KERN_WARNING
"fcntl_setlk() called by process %d with broken flock()
emulation\n", current->pid);
去掉然後重新 compile。如果你是使用 aout 格式,你可以升級成 libc-4.7.6
來解決這個問題。
Termcap Library
=================
目前 Termcap 的版本是 2.0.8。如果你升級成這個版本,請閱讀 README,
取得有關 tegtent 函式更改的重要訊息。
Procps Utility
================
kernel 1.3.x 的 /proc 結構已經改了,因此你必須將 proc 升級為 0.99a 版
而在最新的 kernel 中,檔案結構又再次更改,但是 procps 還沒有個正式升級版
反應這個改變,所以還是使用 0.99a 吧。你也可以找找流傳在外解決讓 0.99a 可以
和 kernel 1.3.94 相容的 patch。
Kernel Modules
================
kernel 1.3.x 版幾乎已經全部模組化了,也加入了 kerneld。想使用個功能,
你必須更新到最新版的 modules。目前最新的穩定版 modules 是 1.3.57 (註),
beta 版則到了 1.3.69k。這些都可以在你抓 kernel 的同一地點取得,或是到
它的 Homepage:http://www.pi.se/blox/modules/index.html。注意:如果你載入
modules 會出現以下的訊息:
gcc2_compiled, undefined Failed to load module!
The symbols fromkernel 1.3.foo don't match 1.3.foo
那就是該換到 1.3.69 的時候了。會出現這個錯誤是因為你使用最新版的
binutil,因此大部份的人還是停留在 1.3.57 即可。
另外一點要注意的,你不能同時把 a.out 和 ELF 支援編譯成 modules,否則
當你為了能夠使用 insmod 而用 insmod 來載入 a.out/ELF modules 時會有
Catch/22 狀況發生 (這是啥啊?)如果你的系統主要是 ELF 而你偶爾會需要用到
a.out,你可以把 a.out 支援編譯為 modules,否則你最好把它直接放入 kernel
之中。如果你還沒進入 ELF 的世紀 (不會吧..),在 compiler kernel 時可以
直接把 ELF 支援去掉。另外的另外,在開機就會 mount 上來的 partition 的 FS
、device driver 記得要 compiler 進 kernel,不能把它弄成 modules。請不要
誇張到為了完全模組化而忘了把 ext2fs 和 IDE dirver compiler 進 kernel 裡...
*註:在 kernel 目錄下已經可以看到 2.0.0 版的 modules 了
PPP driver
============
你的 pppd 必須是 2.2.0 版或更新。最新的穩定版本是 2.2.0f 可以在
ftp://sunsite.unc.edu/pub/Linux/system/Network/serial/ppp/ppp-2.2.0f.tar.gz
取得。
Named pipes (SysVinit)
========================
Linux 處理 named pipes 的方式改變了 (從 SunOS 方式變成 "正確" 的方式)
,這使得某些程式因此而失效了,最值得注意的就是 SysVinit。如果你的 SysVinit
是 2.59 或更早的版本,在 shutdown 時雖然可以正常工作,但是你會看到這樣
的錯誤訊息:INIT: error reading initrequest 或是這些字不停的在捲動...
如果你使用 NCSA 的 httpd,你必須把 daemon 的 pre-spawn 設為 0,不過我
建議你直接換成 Apache 的 httpd。
新的 named pipes 方式也讓 Hylafax 發生問題,如果你有 Hylafax daemon,
它會不斷用掉 CPU time 直到系統沒有 idle time 為止。要修正這個錯誤,修改
Hylafax 的 port.h,把
CONFIG_OPENFIFO="O_RDONLY"
改成
CONFIG_OPENFIFO="O_RDWR"
類似的處理方式 (把 named pipe 開啟方式從 read only 改成 read/write)
可以解決因這個改變引起的問題。
File Locking (Sendmail)
=========================
從 pre2.0.6 (1.99.6) 以後,file locking 方式不能夠混用,例如:你不能
同時使用 flock 和 fcntl 來鎖住檔案。請參閱 Documentation/lock.txt 取得更
詳細資料。這個對較舊版的 sendmail 造成影響 (註)。如果你發現 sendmail 抱怨
無法 lock aliases.dir (或其他檔案),你必須更新 sendmail 到 8.7.x 版。最
新版的 sendmail 可以在
ftp://ftp.cs.berkeley.edu/ucb/src/sendmail/sendmail.8.7.5.tar.gz
取得。
*註:這個問題在 elm 2.4 pl 25 之中也會發生。
Uugetty
=========
舊版的 uugettys 在新 kernel 裡會有問題,請更新之。
ftp://sunsite.unc.edu/pub/Linux/system/Serial/getty_ps-2.0.7h.tar.gz
Kbd
=====
使用非 ASCII 的字元/字型的人,應該升級成:
ftp.funet.fi:/pub/OS/Linux/PEOPLE/Linus/kbd-0.91.tar.gz
*註:這個我也不太瞭解,不過我沒升級好像也沒事....
Console
=========
Linux 的 console type (雖然知道是什麼東西可是不會翻) 改變了。如果
你的版本太舊了,使用上發生問題 (像說 joe 不能用啦...),該是升級 termcap
的時候了。要修正這個問題,把 linux 加入 /etc/termcap 之中,或是到
http://www.ccil.org/~esr/ncurses.html
逛逛。另外你也需要更新 terminfo。以 root 來做下面的動作:
ln -s /usr/lib/terminfo/l/linux /usr/lib/terminfo/c/console
當然,最好的解決辦法,就是去抓最新的 termcap 回來安裝:
ftp://sunsite.unc.edu/pub/Linux/GCC/termcap-2.0.8.tar.gz
Also, the console driver is now responsible for keeping track of
correspondence between character codes and glyph bitmaps. If you
encounter problems, try `loadunimap def' to get back the default
correspondence. (不太會翻,大概是說如果你的螢幕本來應該顯示文字的確
變成一堆亂碼的話,可以用 loadunimap def 來解決)
Hdparm
========
Hdparm 為了利用到新版 kernel 的新功能而作了更新,最新版可以在:
ftp://sunsite.unc.edu/pub/Linux/kernel/patches/diskdrives/hdparm-2.7.tar.gz
抓到。(目前已經有看到 2.9 版了)
IP Accounting
=============
All IP packets coming in or going out via one of the network
interfaces are now passing the accounting chain. So, packets being
forwarded are passing this chain twice. Since pre2.0.7 (aka 1.99.7),
accounting rules can be defined so that they will only match in one
direction (either incoming or outgoing).
There also exists a possibility to match on device names and/or
device addresses, so that only packets coming in/going out via that
device (network interface) match with a rule. You'll need to get
ipfwadm from ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz to
use this.
IP Firewalls
============
The IP firewall code has been changed drastically during 1.3.x.
There are now 3 categories of firewall rules: one for incoming packets,
one for outgoing packets, and one for packets being forwarded. There
also exists a possibility to match on device names and/or device
addresses, so that only packets coming in/going out via that device
(network interface) match with a rule. This is especially useful to
prevent spoofing. You'll need to get
ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz to use this.
IP Masquerading
===============
IP masquerading is now part of the standard kernel. However, you
always need to load separate modules (ip_masq_ftp.o and/or
ip_masq_irc.o) if you are going to use FTP or IRC in combination with
masquerading. You'll need to get
ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz to use this.
(不清楚、不瞭解、不會用,還是不要亂翻... 不過看起來都跟 ipfwadm-2.1.tar.gz
有關...)
ISDN support
==============
新版的 kernel 支援 ISDN,要使用 ISDN 你必須有:
ftp://ftp.franken.de/pub/isdn4linux/isdn4k-utils-1.3.97.tar.gz
Term is broken
================
Term (一個功能類似 slirp 的東西) 在 kernel 1.3.60 以後就無法使用
了,偏偏作者現在正在渡假中,因此沒有解決的方法。我建議你學著改用 slirp。
Networking
============
/proc/net 裡有些欄位在新 kernel 裡改變了,你必須升級你的 net-tools。
目前最新的穩定版是 net-tools-1.2.0.tar.gz,而最新的 beta 則是
net-tools-1.32-alpha.tar.gz。如果你要升級,或許升級為最新的 beta 版會比
較好。
Xntpd
=======
舊版的 Xntpd 和新版的 kernel 合不來,請升級為 xntp3.5f.tar.Z
Sound driver
==============
1.3.x 版 kernel 裡的 sound driver 會讓 vplay 無法使用。要解決這個
問題請抓新版的 sndkit:
ftp://ftp.best.com/pub/front/tasd/snd-util-3.5.tar.gz
有些使用者回報說許多音效工具程式 (Ex: cdd2wav-sbpcd) 必須重新 compile
才能在新版的 kernel 下使用。
Tcsh
======
如果你的 tcsh 在新的 kernel 下舉止怪異,請從
ftp://anise.ee.cornell.edu/pub/tcsh
抓新版的 tsch source,並修改 config_f.h 加入一行:#define SYSMALLOC
你可以在
ftp://sunsite.unc.edu/pub/Linux/system/Shells/
抓到新版的 binary,這應該會更正這個問題。
Make
======
如果更新之後 make 卻罷工了,請仔細閱讀你更新的 libc 的 release note。
這並不是 kernel 的錯,不過很多卻誤以為是。當你更新 libc 到 5.3.9 時你
也要更新 make 它才會正常工作。升級 libc 也可能讓 xterm 罷工,如果這不幸
是個事實,請重新 compile xterm。
Loop device
=============
1.3.x 的 kernel 有個 loop device,讓你可以把一個檔案 mount 成一個
file system,然後你可以作些有趣的事情,像是加密的檔案系統(encrypted file
systems)... 如果你想使用這個功能,你必須更新你的 mount:
ftp://ftp.win.tue.nl/pub/linux/util/mount-2.5X.tar.gz
加密的檔案系統可以抓:
ftp.funet.fi:/pub/OS/Linux/BETA/loop/des.1.tar.gz
Multiple device
=================
新的 kernel 有支援 Multiple device (讓你可以把好幾個 partition 結合成
一個 logic device)。要使用這個功能請抓:
ftp://sweet-smoke.ufr-info-p7.ibp.fr/pub/Linux/md034.tar.gz
Arp
=====
Arp daemon 也加入新的 kernel 之中,請到:
http://www.loran.com/~layes/arpd/index.html
取得更多資訊以及 arpd。
Quota
=======
新的 kernel 之中也支援 quota。請抓:
ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz
然後把裡面的 mntent.h 蓋過 /usr/include/mntent.h,如此就可以快樂的
compile 出 quota 來啦。
Process Accounting
====================
Process accounting 的功能也包含在新版的 kernel 之中。要使用這個
功能請抓:
ftp://iguana.hut.fi/pub/linux/Kernel/process_accounting/acct_1.3.73.tar.gz
Bdflush
=========
bdflush 功能已經加入新 kernel 之中,你不需要再去 patch 就可以
直接擁有這個功能。
AMP
=====
新的 kernel 之中直接支援 AMP (Advanced Power Management)。AMP 主要
使用在膝上型電腦,讓你監視目前電池的使用狀況,也可以幫你節省電池的電力
。要發揮這項功能請抓:
ftp://tsx-11.mit.edu/pub/linux/packages/laptops/apm/apmd-2.4.tar.gz
iBCS and DOSEMU
=================
要支援 1.3.x 的 iBCS,請抓:
ftp://tsx-11.mit.edu/pub/linux/BETA/ibcs2/ibcs-1.3-960404-ALPHA.tar.gz
至於可在新 kernel 中使用的 DOSEMU,請抓:
ftp://tsx-11.mit.edu/pub/linux/ALPHA/dosemu/Development/dosemu-0.63.1.19.tgz
記得照 README.newkernel 裡面所說的更新你的 /usr/include/sys/vm86.h,
否則將無法 compile。
Mtools and Fdutils
====================
在 1.3.x kernel 之中,軟碟的控制程序已經改變,但是為了向前相容,在
2.0 之前的 kernel 舊的程序還是可用,不過會顯示警告訊息,但是到 2.1.x 時
舊程序將完全消失。
為了避免問題 (或說是免除那惱人的訊息),你必須重新編譯所有會用到軟碟
控制的程式,像是 mtool 及 fdutil。請抓:
ftp://sunsite.unc.edu/pub/Linux/utils/disk-management/mtools-3.0.src.tar.gz
ftp://sunsite.unc.edu/pub/Linux/system/Misc/fdutils-4.3.src.tar.gz
在將來,fdformat 將會完全消失,所以請僅早學會 superformat 的使用方法。
如何得之目前程式的版本
************************
GNU CC: gcc -v and gcc --version
PPP: pppd -h (wrong but it show the version)
Libc: ls -l /lib/libc.so.5
Libc++: ls -l /usr/lib/libg++.so
Binutils: ld -v
ldd: ldd -v and ldd -V
termcap: ls -l /lib/libtermcap.so.*
modules: insmod -V
procps: ps --version
該到哪裡去抓這些更新檔案
**************************
請愛用 CCCA ftp 及 ARCHIE.....
其他
******
以上提到的這些檔案在台灣的 ftp server 上面都找得到,請自行用 archie
搜尋。珍惜有限的頻寬,盡量避免出國.....
如果你的系統是 Red Hat,大部份的更新都有 RPM 可用。安裝之前先到
Red Hat 的 mirror site 看看。注意,你可能要用 -force 參數才能完成這些
升級。
如果你發現有軟體在 kernel 1.3.x 上面無法正常工作的,或是那些 kernel
的功能需要另外抓別的套件來使用的,請 mail 給 Chris Ricker
(gt1355b@prism.gatech.edu)。
如果你發現翻譯上有任何誤謬,請 mail 給 Dinosaur.bbs@bbs.ee.nthu.edu.tw
後記
******
寫完之後回頭想想,會看 Documentation 的人根本不需要我這篇文章,真正
希望他會看的人,卻一定是先 post "為什麼 xxx 不能用了",那我這篇文章不就
一點意義也沒有了.... 對於現在 bbs 上面這種問問題不先看版的風氣越來越受不
了了,希望這不會是我最後一篇 post....