dou0228
2004-04-01, 06:08 PM
先下載: http://ccrma-www.stanford.edu/planetccrma/mirror/all/linux/SRPMS/kernel-2.4.22-1.2140.nptl.caps.src.rpm
再來就是把 rpm 轉成 tgz..
rpm2targz kernel-2.4.22-1.2140.nptl.caps.src.rpm
會產生一個 kernel-2.4.22-1.2140.nptl.caps.src.tar.gz
tar -zxf kernel-2.4.22-1.2140.nptl.caps.src.tar.gz -C nptl
進到 nptl 目錄.. 準備 把 Linux Kernel 2.4.22 & NPTL ... 解開 & patch..
存成 runme.sh, 並 chmod +x runme.sh
#!/bin/sh
S_PWD=`pwd`
K_DIR="/usr/src/linux-2.4.22"
rm -rf $K_DIR /usr/src/linux
echo "Uncompress linux-2.4.22"
tar -jxf linux-2.4.22.tar.bz2 -C /usr/src/
cat kernel-2.4.22-1.2140.nptl.caps.spec | egrep "^Patch" | cut -d " " -f 2 > patch_cmd
#
## remove patch `FAILED` patch
#
echo "1,$ s/linux-2.4.2-changeloop.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.18-loopfixes.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.18-dmi-hall-of-shame.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.9-fstat.patch//g | wq" | ex patch_cmd
echo "1,$ s/acpi-20030321-2.4.21-pre5.diff.gz//g | wq" | ex patch_cmd
echo "1,$ s/memstick.patch//g | wq" | ex patch_cmd
echo "1,$ s/008_vh_021217_ck_2.4.20.patch.bz2//g | wq" | ex patch_cmd
echo "1,$ s/rtc-2.4.20-13.1.caps.patch//g | wq" | ex patch_cmd
for i in `cat patch_cmd`; do
echo $i | egrep -q ".gz$"
if [ "$?" == "0" ]; then
cd $K_DIR && gzip -cd $S_PWD/$i | patch -p1
else
echo $i | egrep -q ".bz2$"
if [ "$?" == "0" ]; then
cd $K_DIR && bzip2 -cd $S_PWD/$i | patch -p1
else
cd $K_DIR && patch -p1 < $S_PWD/$i
fi
fi
echo "Processed of $i"
done
echo "Finished :)"
echo "replace for Alan Cox NPTL Patch"
#
# Patch for s/recalc_sigpending(current)/recalc_sigpending()/g
# s/p_opptr/real_parent/g
# s/sigmask_lock/sighand->siglock/g
#
cd $K_DIR
list=$(find . -name '*.c' -type f -exec egrep -q "recalc_sigpending\(current\)" {} \; -print); for i in $list; do echo "1,$ s/recalc_sigpending(current)/recalc_sigpending()/g | wq" | ex $i && echo "patched $i" ; done
list=$(find . -name '*.c' -type f -exec egrep -q "p_opptr" {} \; -print); for i in $list; do echo "1,$ s/p_opptr/real_parent/g | wq" | ex $i && echo "patched $i" ; done
list=$(find . -name '*.c' -type f -exec egrep -q "sigmask_lock" {} \; -print); for i in $list; do echo "1,$ s/sigmask_lock/sighand->siglock/g | wq" | ex $i && echo "patched $i" ; done
ln -sf /usr/src/linux-2.4.22 /usr/src/linux
cd /usr/src/linux
echo "1,$ s/gcc32/gcc/g | wq" | ex Makefile
這樣就可以準備 make 一份 NPTL 的 Kernel 了..
... make 好之後, 重開機..
cd /usr/portage/sys-libs/glibc
編輯 glibc-2.3.3_pre20040207.ebuild
把 export MIN_NPTL_KV = "xxx" 改成 export MIN_NPTL_KV="2.4.22"
再 USE="nptl" emerge glibc-2.3.3_pre20040207.ebuild
成功之後, /lib/libc.so.6 就會看到類似這樣的畫面..
Compiled by GNU CC version 3.3.3 20040217 (Gentoo Linux 3.3.3, propolice-3.3-7).
Compiled on a Linux 2.4.22-ac1-nptl system on 2004-04-01.
Available extensions:
GNU libio by Per Bothner
crypt add-on version 2.1 by Michael Glad and others
NPTL 0.60 by Ulrich Drepper <-- NPTL support 了 ;)
BIND-8.2.3-T5B
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Thread-local storage support included.
Report bugs using the `glibcbug' script to <[email protected]>.
沒想到我竟然在 4/1 弄 NPTL 到 AM 4:00 :(
贊助商連結
再來就是把 rpm 轉成 tgz..
rpm2targz kernel-2.4.22-1.2140.nptl.caps.src.rpm
會產生一個 kernel-2.4.22-1.2140.nptl.caps.src.tar.gz
tar -zxf kernel-2.4.22-1.2140.nptl.caps.src.tar.gz -C nptl
進到 nptl 目錄.. 準備 把 Linux Kernel 2.4.22 & NPTL ... 解開 & patch..
存成 runme.sh, 並 chmod +x runme.sh
#!/bin/sh
S_PWD=`pwd`
K_DIR="/usr/src/linux-2.4.22"
rm -rf $K_DIR /usr/src/linux
echo "Uncompress linux-2.4.22"
tar -jxf linux-2.4.22.tar.bz2 -C /usr/src/
cat kernel-2.4.22-1.2140.nptl.caps.spec | egrep "^Patch" | cut -d " " -f 2 > patch_cmd
#
## remove patch `FAILED` patch
#
echo "1,$ s/linux-2.4.2-changeloop.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.18-loopfixes.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.18-dmi-hall-of-shame.patch//g | wq" | ex patch_cmd
echo "1,$ s/linux-2.4.9-fstat.patch//g | wq" | ex patch_cmd
echo "1,$ s/acpi-20030321-2.4.21-pre5.diff.gz//g | wq" | ex patch_cmd
echo "1,$ s/memstick.patch//g | wq" | ex patch_cmd
echo "1,$ s/008_vh_021217_ck_2.4.20.patch.bz2//g | wq" | ex patch_cmd
echo "1,$ s/rtc-2.4.20-13.1.caps.patch//g | wq" | ex patch_cmd
for i in `cat patch_cmd`; do
echo $i | egrep -q ".gz$"
if [ "$?" == "0" ]; then
cd $K_DIR && gzip -cd $S_PWD/$i | patch -p1
else
echo $i | egrep -q ".bz2$"
if [ "$?" == "0" ]; then
cd $K_DIR && bzip2 -cd $S_PWD/$i | patch -p1
else
cd $K_DIR && patch -p1 < $S_PWD/$i
fi
fi
echo "Processed of $i"
done
echo "Finished :)"
echo "replace for Alan Cox NPTL Patch"
#
# Patch for s/recalc_sigpending(current)/recalc_sigpending()/g
# s/p_opptr/real_parent/g
# s/sigmask_lock/sighand->siglock/g
#
cd $K_DIR
list=$(find . -name '*.c' -type f -exec egrep -q "recalc_sigpending\(current\)" {} \; -print); for i in $list; do echo "1,$ s/recalc_sigpending(current)/recalc_sigpending()/g | wq" | ex $i && echo "patched $i" ; done
list=$(find . -name '*.c' -type f -exec egrep -q "p_opptr" {} \; -print); for i in $list; do echo "1,$ s/p_opptr/real_parent/g | wq" | ex $i && echo "patched $i" ; done
list=$(find . -name '*.c' -type f -exec egrep -q "sigmask_lock" {} \; -print); for i in $list; do echo "1,$ s/sigmask_lock/sighand->siglock/g | wq" | ex $i && echo "patched $i" ; done
ln -sf /usr/src/linux-2.4.22 /usr/src/linux
cd /usr/src/linux
echo "1,$ s/gcc32/gcc/g | wq" | ex Makefile
這樣就可以準備 make 一份 NPTL 的 Kernel 了..
... make 好之後, 重開機..
cd /usr/portage/sys-libs/glibc
編輯 glibc-2.3.3_pre20040207.ebuild
把 export MIN_NPTL_KV = "xxx" 改成 export MIN_NPTL_KV="2.4.22"
再 USE="nptl" emerge glibc-2.3.3_pre20040207.ebuild
成功之後, /lib/libc.so.6 就會看到類似這樣的畫面..
Compiled by GNU CC version 3.3.3 20040217 (Gentoo Linux 3.3.3, propolice-3.3-7).
Compiled on a Linux 2.4.22-ac1-nptl system on 2004-04-01.
Available extensions:
GNU libio by Per Bothner
crypt add-on version 2.1 by Michael Glad and others
NPTL 0.60 by Ulrich Drepper <-- NPTL support 了 ;)
BIND-8.2.3-T5B
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Thread-local storage support included.
Report bugs using the `glibcbug' script to <[email protected]>.
沒想到我竟然在 4/1 弄 NPTL 到 AM 4:00 :(
贊助商連結