文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>17.构建LFS系统──安装系统基础软件(九)

17.构建LFS系统──安装系统基础软件(九)

时间:2006-11-17  来源:anima

十七、构建LFS系统──安装系统基础软件(九)


51.Sysklogd-1.4.1

Sysklogd 包含记录系统日志信息的程序,比如内核处理意外事务的日志。

预计编译时间: 少于 0.1 SBU

所需磁盘空间: 0.6 MB


安装Sysklogd

root:/sources/shadow-4.0.15# tar -zxvf $LFS/sources/sysklogd-1.4.1.tar.gz -C $LFS/sources

root:/sources/shadow-4.0.15# cd $LFS/sources/sysklogd-1.4.1


下面的补丁修正了许多问题,包括在2.6系列的内核上编译 Sysklogd 会遇到的问题:


root:/sources/sysklogd-1.4.1# patch -Np1 -i ../sysklogd-1.4.1-fixes-1.patch


下面的patch使 sysklogd 逐字的对待日志信息中0x80—0x9f段的字符,而不是采用八进制进行替换。未打patch的sysklogd在UTF-8编码下会损害日志信息:



root:/sources/sysklogd-1.4.1# patch -Np1 -i ../sysklogd-1.4.1-8bit-1.patch

patching file syslogd.c

Hunk #1 succeeded at 1496 (offset 47 lines).

root:/sources/sysklogd-1.4.1#



编译软件包:


root:/sources/sysklogd-1.4.1# make

gcc -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -DSYSLOG_INET -DSYSLOG_UNIXAF -DNO_SCCS -DFSSTND -DSYSLOGD_PIDNAME=\"syslogd.pid\" -c syslogd.cgcc -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -c pidfile.c

gcc -s -o syslogd syslogd.o pidfile.o

gcc -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -DFSSTND -c klogd.c

gcc -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -DALLOW_KERNEL_LOGGING -c syslog.c

gcc -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -DFSSTND -c ksym.c

gcc -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -DFSSTND -c ksym_mod.c

gcc -s -o klogd klogd.o syslog.o pidfile.o ksym.o \

ksym_mod.o

root:/sources/sysklogd-1.4.1#


这个软件包没有附带测试程序。


安装软件包:


root:/sources/sysklogd-1.4.1# make install

/usr/bin/install -o root -g root -m 644 sysklogd.8 /usr/share/man/man8/sysklogd.8

/usr/bin/install -o root -g root -m 644 syslogd.8 /usr/share/man/man8/syslogd.8

/usr/bin/install -o root -g root -m 644 syslog.conf.5 /usr/share/man/man5/syslog.conf.5

/usr/bin/install -o root -g root -m 644 klogd.8 /usr/share/man/man8/klogd.8

/usr/bin/install -m 500 -s syslogd /usr/sbin/syslogd

/usr/bin/install -m 500 -s klogd /usr/sbin/klogd

root:/sources/sysklogd-1.4.1#




配置Sysklogd

创建一个新的 /etc/syslog.conf 文件:

cat > /etc/syslog.conf << "EOF"
# Begin /etc/syslog.conf

auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *

# End /etc/syslog.conf
EOF


root:/sources/sysklogd-1.4.1# cat > /etc/syslog.conf << "EOF"

> # Begin /etc/syslog.conf

>

> auth,authpriv.* -/var/log/auth.log

> *.*;auth,authpriv.none -/var/log/sys.log

> daemon.* -/var/log/daemon.log

> kern.* -/var/log/kern.log

> mail.* -/var/log/mail.log

> user.* -/var/log/user.log

> *.emerg *

>

> # End /etc/syslog.conf

> EOF

root:/sources/sysklogd-1.4.1#



Sysklogd 的内容

安装的程序: klogd, syslogd

简要描述

klogd

一个系统守护进程,截获并且记录下 LINUX 内核日志信息。

syslogd

记录下系统里所有提供日志记录的程序给出的日志和信息内容。每一个被记录的消息至少包含时间戳和主机名(通常还包括程序名)。






52.Sysvinit-2.86

Sysvinit 软件包包含一些控制系统启动、运行、关闭的程序。

预计编译时间: 少于 0.1 SBU

所需磁盘空间: 1 MB


安装Sysvinit

root:/sources/sysklogd-1.4.1# tar -zxvf $LFS/sources/sysvinit-2.86.tar.gz -C $LFS/sources

root:/sources/sysklogd-1.4.1# cd $LFS/sources/sysvinit-2.86


当运行级别被改变(比如,正在关闭系统),init 向那些由 init 自身开启的,并且将不会在新的运行级别里运行的线程发送终端信号。当 init 做上面这些事情时,会输出像"Sending processes the TERM signal"这样的信息,这看起来就像它正在向那些系统正在运行的程序发送上面这些信息一样。要避免错误地理解这个信息,可以修改源码以便可以代替为读起来像"Sending processes started by init the TERM signal"的信息,可以用下面命令:


root:/sources/sysvinit-2.86# sed -i 's@Sending processes@& started by init@g' \

> src/init.c




编译软件包:


root:/sources/sysvinit-2.86# make -C src

make: Entering directory `/sources/sysvinit-2.86/src'

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o mountpoint.o mountpoint.c

gcc -s -o mountpoint mountpoint.o

gcc -c -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE init.c

init.c: In function 're_exec':

init.c:1887: warning: missing sentinel in function call

gcc -c -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -DINIT_MAIN utmp.c -o init_utmp.o

gcc -s -o init init.o init_utmp.o

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o halt.o halt.c

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o ifdown.o ifdown.c

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o hddown.o hddown.c

gcc -c -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE utmp.c

gcc -s -o halt halt.o ifdown.o hddown.o utmp.o

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o dowall.o dowall.c

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o shutdown.o shutdown.c

gcc -s -o shutdown dowall.o shutdown.o utmp.o

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o runlevel.o runlevel.c

gcc -s -o runlevel runlevel.o

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -s killall5.c -o killall5

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o sulogin.o sulogin.c

gcc -s -o sulogin sulogin.o -lcrypt

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o bootlogd.o bootlogd.c

bootlogd.c: In function 'main':

bootlogd.c:612: warning: pointer targets in passing argument 2 of 'writelog' differ in signedness

gcc -s -o bootlogd bootlogd.o -lutil

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o last.o last.c

gcc -s -o last last.o

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o mesg.o mesg.c

gcc -s -o mesg mesg.o

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o utmpdump.o utmpdump.c

gcc -s -o utmpdump utmpdump.o

gcc -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE -c -o wall.o wall.c

gcc -s -o wall dowall.o wall.o

make: Leaving directory `/sources/sysvinit-2.86/src'

root:/sources/sysvinit-2.86#



这个软件包没有附带测试程序。


安装软件包:


root:/sources/sysvinit-2.86# make -C src install

make: Entering directory `/sources/sysvinit-2.86/src'

for i in mountpoint; do \

install -o root -g root -m 755 $i /bin/; \

done

for i in init halt shutdown runlevel killall5 sulogin bootlogd; do \

install -o root -g root -m 755 $i /sbin/; \

done

for i in last mesg utmpdump wall; do \

install -o root -g root -m 755 $i /usr/bin/; \

done

# install -o root -g root -m 755 etc/initscript.sample /etc/

ln -sf halt /sbin/reboot

ln -sf halt /sbin/poweroff

ln -sf init /sbin/telinit

ln -sf ../sbin/killall5 /bin/pidof

if [ ! -f /usr/bin/lastb ]; then \

ln -sf last /usr/bin/lastb; \

fi

install -o root -g root -m 644 initreq.h /usr/include/

for i in last.1 lastb.1 mesg.1 mountpoint.1 wall.1; do \

install -o root -g root -m 644 ../man/$i /usr/share/man/man1/; \ done

for i in initscript.5 inittab.5; do \

install -o root -g root -m 644 ../man/$i /usr/share/man/man5/; \ done

for i in halt.8 init.8 killall5.8 pidof.8 poweroff.8 reboot.8 runlevel.8 shutdown.8 telinit.8 sulogin.8 bootlogd.8; do \

install -o root -g root -m 644 ../man/$i /usr/share/man/man8/; \ done

#

# This part is skipped on Debian systems, the

# debian.preinst script takes care of it.

make: Leaving directory `/sources/sysvinit-2.86/src'

root:/sources/sysvinit-2.86#




配置Sysvinit

运行下面命令,创建一个新的 /etc/inittab 文件:

cat > /etc/inittab << "EOF"
# Begin /etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin

1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600

# End /etc/inittab
EOF



root:/sources/sysvinit-2.86# cat > /etc/inittab << "EOF"

> # Begin /etc/inittab

>

> id:3:initdefault:

>

> si::sysinit:/etc/rc.d/init.d/rc sysinit

>

> l0:0:wait:/etc/rc.d/init.d/rc 0

> l1:S1:wait:/etc/rc.d/init.d/rc 1

> l2:2:wait:/etc/rc.d/init.d/rc 2

> l3:3:wait:/etc/rc.d/init.d/rc 3

> l4:4:wait:/etc/rc.d/init.d/rc 4

> l5:5:wait:/etc/rc.d/init.d/rc 5

> l6:6:wait:/etc/rc.d/init.d/rc 6

>

> ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

>

> su:S016:once:/sbin/sulogin

>

> 1:2345:respawn:/sbin/agetty tty1 9600

> 2:2345:respawn:/sbin/agetty tty2 9600

> 3:2345:respawn:/sbin/agetty tty3 9600

> 4:2345:respawn:/sbin/agetty tty4 9600

> 5:2345:respawn:/sbin/agetty tty5 9600

> 6:2345:respawn:/sbin/agetty tty6 9600

>

> # End /etc/inittab

> EOF

root:/sources/sysvinit-2.86#




Sysvinit 的内容

安装的程序: bootlogd, halt, init, killall5, last, lastb(→last), mesg, mountpoint, pidof(→killall5), poweroff(→halt), reboot(→halt), runlevel, shutdown, sulogin, telinit(→init), utmpdump, wall

简要描述

bootlogd

把启动信息记录到一个日志文件

halt

正常情况下等效于 shutdown 加上 -h 参数(当前系统运行级别是 0 时除外)。它将告诉内核去中止系统,并在系统正在关闭的过程中将日志记录到 /var/log/wtmp 文件里。

init

当内核已经初始化硬件,接管引导程序,开启指令线程时,init 会被第一个启动。

killall5

发送一个信号到所有进程,但那些在它自己设定级别的进程将不会被这个运行的脚本所中断。

last

给出哪一个用户最后一次登录(或退出登录),它搜索 /var/log/wtmp 文件,出给出系统引导、关闭、运行级别改变等信息。

lastb

给出登失败的尝试,并写入日志 /var/log/btmp

mesg

控制是否允许其他用户也有向系统所有用户发送信息的权限

mountpoint

检查给定的目录是否是一个挂载点

pidof

报告给定程序的PID号

poweroff

告诉内核中止系统并且关闭系统(参见 halt)

reboot

告诉内核重启系统(参见 halt)

runlevel

告前一个和当前的系统运行级别,并且将最后一些运行级别写入 /var/run/utmp

shutdown

使系统安全关闭,向所有线程发送关闭信号并且通知所有已经登录的系统用户系统即将关闭。

sulogin

允许 root 登录,它通常情况下是在系统在单用户模式下运行时,由 init 所派生。

telinit

告诉 init 将切换到那一个运行级

utmpdump

以一个多用户友好的方式列出已经给出的登录文件的目录

wall

向所有已经登录的用户写入一个信息











53.Tar-1.15.1

Tar 包含一个归档程序。

预计编译时间: 0.2 SBU

所需磁盘空间: 13.7 MB


安装Tar

root:/sources/sysvinit-2.86# mv $LFS/sources/tar-1.15.1 $LFS/sources/old2

root:/sources/sysvinit-2.86# tar -jxvf $LFS/sources/tar-1.15.1.tar.bz2 -C $LFS/sources

root:/sources/sysvinit-2.86# cd $LFS/sources/tar-1.15.1


应用一个patch来解决一些使用GCC-4.0.3时测试单元的问题:


root:/sources/tar-1.15.1# patch -Np1 -i ../tar-1.15.1-gcc4_fix_tests-1.patch

patching file tests/genfile.c

root:/sources/tar-1.15.1#


当文件大于 4 GB 并且使用-S选项时,tar 有一个 bug 。下面的补丁修正了这个问题:


root:/sources/tar-1.15.1# patch -Np1 -i ../tar-1.15.1-sparse_fix-1.patch

patching file src/sparse.c

root:/sources/tar-1.15.1#



为编译Tar做准备:


root:/sources/tar-1.15.1# ./configure --prefix=/usr --bindir=/bin –libexecdir=/usr/sbin



编译软件包:


root:/sources/tar-1.15.1# make


要测试结果,请运行:make check 。


安装软件包:


root:/sources/tar-1.15.1# make install





Tar 的内容

安装的程序: rmt, tar

简要描述

rmt

通过一个 Internet 连接线程实施远程操作一个磁带驱动器

tar

从压缩档案里创建和解压文件,也可理解为压缩包(tarball)。








54.Texinfo-4.8

Texinfo 软件包包含读取、写入、转换 Info 文档的程序。

预计编译时间: 0.2 SBU

所需磁盘空间: 16.6 MB


安装Texinfo

root:/sources/tar-1.15.1# mv $LFS/sources/texinfo-4.8 $LFS/sources/old2

root:/sources/tar-1.15.1# tar -jxvf $LFS/sources/texinfo-4.8.tar.bz2 -C $LFS/sources

root:/sources/tar-1.15.1# cd $LFS/sources/texinfo-4.8



info 程序假定一个字符串在屏幕上占据的字符单元树和在内存中的字节数是一样的。 在 UTF-8 的 locale 环境下,字符串就被拆散了。下面的patch可以在多字节的locale环境下将它们转回到英文信息:


root:/sources/texinfo-4.8# patch -Np1 -i ../texinfo-4.8-multibyte-1.patch

patching file info/info.c

patching file info/man.c

root:/sources/texinfo-4.8#



Texinfo 允许本地用户通过位于临时文件中的符号连接改写任意文件,下面的补丁可以修正这个问题:


root:/sources/texinfo-4.8# patch -Np1 -i ../texinfo-4.8-tempfile_fix-2.patch

patching file util/texindex.c

root:/sources/texinfo-4.8#




为编译Texinfo做准备:


root:/sources/texinfo-4.8# ./configure –prefix=/usr


编译软件包:


root:/sources/texinfo-4.8# make


要测试结果,请运行:make check 。


安装软件包:


root:/sources/texinfo-4.8# make install




安装 texinfo 组件中本应由 TeX 来安装的部份(可选操作):


root:/sources/texinfo-4.8# make TEXMF=/usr/share/texmf install-tex

cd doc && make TEXMF=/usr/share/texmf install-tex

make[1]: Entering directory `/sources/texinfo-4.8/doc'

test -n "/usr/share/texmf" || (echo "TEXMF must be set." >&2; exit 1)

/bin/sh ../mkinstalldirs /usr/share/texmf/tex/texinfo /usr/share/texmf/tex/generic/dvips /usr/share/texmf/pdftex/plain/misc

mkdir -p -- /usr/share/texmf/tex/texinfo /usr/share/texmf/tex/generic/dvips /usr/share/texmf/pdftex/plain/misc

/usr/bin/install -c -m 644 ./texinfo.tex /usr/share/texmf/tex/texinfo/texinfo.tex

/usr/bin/install -c -m 644 ./epsf.tex /usr/share/texmf/tex/generic/dvips/epsf.tex

/usr/bin/install -c -m 644 ./pdfcolor.tex /usr/share/texmf/pdftex/plain/misc/pdfcolor.tex

for f in txi-cs.tex txi-de.tex txi-en.tex txi-es.tex txi-fr.tex txi-it.tex txi-nl.tex txi-no.tex txi-pl.tex txi-pt.tex txi-tr.tex; do \

/usr/bin/install -c -m 644 ./$f /usr/share/texmf/tex/texinfo/$f; done

make[1]: Leaving directory `/sources/texinfo-4.8/doc'

root:/sources/texinfo-4.8#



make 参数的含义:

TEXMF=/usr/share/texmf 如果你以后打算安装 TeX 的话,makefile 中的 TEXMF 变量保存着你的 TeX 树的位置。

Info 文档系统使用一个纯文本文件来存放菜单条目的列表。这个文件位于 /usr/share/info/dir 。不幸的是,由于不同软件包中 Makefile 的偶然问题,有时候这个文件会与实际安装在系统里的 Info 文档不一致。如果你要再次创建 /usr/share/info/dir 文件,可以使用下面的命令:

cd /usr/share/info
rm dir
for f in *
do install-info $f dir 2>/dev/null
done




Texinfo 的内容

安装的程序: info, infokey, install-info, makeinfo, texi2dvi, texi2pdf, texindex

简要描述

info

用于读取 Info 文档,它类似于 man 手册页,但是他们会给出更深入的解释而不是停留在解释程序参数上。例如你可以看看 man bison 和 info bison 的区别。

infokey

把包括 Info 设置的源文件编译成二进制格式

install-info

安装 info 文档,它会更新 info 的索引文件

makeinfo

将 Texinfo 源文档翻译成不同的格式,包括html、info文档、文本文档。

texi2dvi

把给定的 Texinfo 文档格式化成可打印的设备无关的文件

texi2pdf

将 Texinfo 文档转化成 PDF 文件

texindex

对 Texinfo 索引文件进行排序









55.Udev-096

Udev 软件包包含动态地创建设备节点的程序。

预计编译时间: 0.1 SBU

所需磁盘空间: 6.8 MB


安装Udev

root:/sources/texinfo-4.8# tar -jxvf $LFS/sources/udev-096.tar.bz2 -C $LFS/sources

root:/sources/texinfo-4.8# cd $LFS/sources/udev-096


udev-config 压缩包里面包含用配置 Udev 的 LFS-specific 文件。把它解压到 Udev 的源码目录:


root:/sources/udev-096# tar xf ../udev-config-6.2.tar.bz2



创建一些Udev无法创建的设备和目录,因为这些会在系统启动的早些时候被用到:


root:/sources/udev-096# install -dv /lib/{firmware,udev/devices/{pts,shm}}

install: creating directory `/lib/firmware'

install: creating directory `/lib/udev'

install: creating directory `/lib/udev/devices'

install: creating directory `/lib/udev/devices/pts'

install: creating directory `/lib/udev/devices/shm'

root:/sources/udev-096# mknod -m0666 /lib/udev/devices/null c 1 3

root:/sources/udev-096# ln -sv /proc/self/fd /lib/udev/devices/fd

create symbolic link `/lib/udev/devices/fd' to `/proc/self/fd'

root:/sources/udev-096# ln -sv /proc/self/fd/0 /lib/udev/devices/stdin

create symbolic link `/lib/udev/devices/stdin' to `/proc/self/fd/0'

root:/sources/udev-096# ln -sv /proc/self/fd/1 /lib/udev/devices/stdout

create symbolic link `/lib/udev/devices/stdout' to `/proc/self/fd/1'

root:/sources/udev-096# ln -sv /proc/self/fd/2 /lib/udev/devices/stderr

create symbolic link `/lib/udev/devices/stderr' to `/proc/self/fd/2'

root:/sources/udev-096# ln -sv /proc/kcore /lib/udev/devices/core

create symbolic link `/lib/udev/devices/core' to `/proc/kcore'

root:/sources/udev-096#




编译软件包:


root:/sources/udev-096# make EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \

> extras/firmware extras/floppy extras/path_id \

> extras/scsi_id extras/usb_id extras/volume_id"



make 选项的含义:

EXTRAS=... 这将会编译一些帮助程序,对定制Udev的规则很有帮助。

要测试结果,请运行:make test 。

注意,Udev的测试单元会在宿主系统的日志中产生很多信息。这些都是无害的,可以被忽略掉。




安装软件包:


root:/sources/udev-096# make DESTDIR=/ \

> EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \

> extras/firmware extras/floppy extras/path_id \

> extras/scsi_id extras/usb_id extras/volume_id" install



make 参数的含义:

DESTDIR=/ 防止编译 Udev 的进程杀死可能存在于宿主系统中的 udevd 进程。

Udev 要工作,需要配置才可以。因为默认是不安装任何配置文件的。安装 LFS-specific 配置文件:


root:/sources/udev-096# cp -v udev-config-6.2/[0-9]* /etc/udev/rules.d/

`udev-config-6.2/05-udev-early.rules' -> `/etc/udev/rules.d/05-udev-early.rules'`udev-config-6.2/25-lfs.rules' -> `/etc/udev/rules.d/25-lfs.rules'

`udev-config-6.2/26-modprobe.rules' -> `/etc/udev/rules.d/26-modprobe.rules'

`udev-config-6.2/27-firmware.rules' -> `/etc/udev/rules.d/27-firmware.rules'

`udev-config-6.2/60-persistent-storage.rules' -> `/etc/udev/rules.d/60-persistent-storage.rules'

`udev-config-6.2/81-cdrom.rules' -> `/etc/udev/rules.d/81-cdrom.rules'

root:/sources/udev-096#



安装解释如何创建 Udev 规则的文档:


root:/sources/udev-096# install -m644 -D -v docs/writing_udev_rules/index.html \> /usr/share/doc/udev-096/index.html

install: creating directory `/usr/share/doc/udev-096'

`docs/writing_udev_rules/index.html' -> `/usr/share/doc/udev-096/index.html'

root:/sources/udev-096#




Udev 的内容

安装的程序: ata_id, cdrom_id, create_floppy_devices, edd_id, firmware_helper, path_id, scsi_id, udevcontrol, udevd, udevinfo, udevmonitor, udevsettle, udevtest, udevtrigger, usb_id, vol_id, write_cd_aliases

安装的目录: /etc/udev

简要描述

ata_id

为 Udev 提供关于 ATA 驱动器的一个唯一的字符串和一些附加信息(uuid,label等)

cdrom_id

为 Udev 提供 CD-ROM 或 DVD-ROM 驱动器的性能

create_floppy_devices

创建所有可能的 CMOS 类型的 floppy 设备

edd_id

为 Udev 提供关于 BIOS 磁盘驱动器的 EDD ID

firmware_helper

为设备加载 firmware

path_id

提供设备的最短的唯一的硬件路径

scsi_id

根据向特定设备发送SCSI INQUIRY命令的返回信息,为 Udev 提供一个唯一的 SCSI 标识符

udevcontrol

为运行 udevd 守护进程,配置一些选项。比如,log level。

udevd

一个守护进程,侦听热插拔事件,并针对事件,创建设备,运行配置好的外部程序。

udevinfo

允许用户查询 udev 数据库以得到当前这个系统上所有设备的信息,它也提供一种方式去查询任何设备在 sysfs 树里去帮助创建 Udev 规则。

udevmonitor

打印出从Udev的规则运行之后,收到的内核事件和 Udev 发出的环境变量。

udevsettle

监视 Udev 的事件队列,如果当前热插拔事件被处理完就立即退出。

udevtest

模拟一个 udev 为那些给定的设备,并且打印出真实节点的名称 udev 可能已经被创建或者(不在LFS中)被重命名的网络接口。

udevtrigger

重新切换到内核空间的热插拔事件处理

usb_id

为 Udev 提供关于 USB 设备的信息

vol_id

为 Udev 提供一个文件系统的 label 和 uuid

/etc/udev

包含 udev 配置文件、设备许可、设备命名规则。









56.Util-linux-2.12r

Util-linux 软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理硬盘驱动器,打开 tty 端口和得到内核消息。

预计编译时间: 0.2 SBU

所需磁盘空间: 17.2 MB


root:/sources/udev-096# mv $LFS/sources/util-linux-2.12r $LFS/sources/old2

root:/sources/udev-096# tar -jxvf $LFS/sources/util-linux-2.12r.tar.bz2 -C $LFS/sources

root:/sources/udev-096# cd $LFS/sources/util-linux-2.12r


FHS兼容性说明

FHS 推荐使用 /var/lib/hwclock 目录代替常用的 /etc 目录以定位 adjtime 文件。要将 hwclock 编译成与 FHS 兼容的程序,运行下面的命令:


root:/sources/util-linux-2.12r# sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \

> hwclock/hwclock.c

root:/sources/util-linux-2.12r# mkdir -p /var/lib/hwclock



安装Util-linux

Util-linux 在基于新版本的 Linux-Libc-Headers 编译时会出错,下面的补丁修正了这个问题:


root:/sources/util-linux-2.12r# patch -Np1 -i ../util-linux-2.12r-cramfs-1.patch

patching file disk-utils/fsck.cramfs.c

patching file disk-utils/mkfs.cramfs.c

root:/sources/util-linux-2.12r#


为编译Util-linux做准备:


root:/sources/util-linux-2.12r# ./configure




编译软件包:


root:/sources/util-linux-2.12r# make HAVE_KILL=yes HAVE_SLN=yes


make 参数的含义:

HAVE_KILL=yes 防止编译和安装 kill 程序(已经由 Procps 安装了)。 HAVE_SLN=yes 防止编译 sln 程序(这是静态连接的 ln ,已经由 Glibc 安装了)。

这个软件包没有附带测试程序。


安装软件包:


root:/sources/util-linux-2.12r# make HAVE_KILL=yes HAVE_SLN=yes install




Util-linux 的内容

安装的程序: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, flock, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, pg, pivot_root, ramsize(→rdev), raw, rdev, readprofile, rename, renice, rev, rootflags(→rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff(→swapon), swapon, tailf, tunelp, ul, umount, vidmode(→rdev), whereis, write

简要描述

agetty

打开 tty 端口,为登录名称建立命令控制符,并引出 login 程序

arch

报告机器的体系结构

blockdev

在命令行中调用块设备的 ioctl

cal

显示一个简单的日历

cfdisk

处理指定设备的分区表

chkdupexe

找出重复的可执行文件

col

过滤回显反馈线

colcrt

过滤那些 nroff 终端不具备输出的能力,比如高分点距、半线距

colrm

过滤掉给出的列

column

把输出格式化为几列

ctrlaltdel

设置 CTRL+ALT+DEL 组合键的功能为硬重启或软重启

cytune

查询和修改 Cyclade 驱动器的中断入口

ddate

把阳历日期转换为 Discordian 日期

dmesg

显示内核的启动信息

elvtune

调整块设备的相互作用和性能

fdformat

低级格式化一张软盘

fdisk

磁盘分区管理程序

flock

得到一个文件锁,并根据状态执行一个命令

fsck.cramfs

对 Cramfs 文件系统的一致性进行检查

fsck.minix

对 Minix 文件系统的一致性进行检查

getopt

在给出的命令行进行选项和参数解析

hexdump

用用户指定的方式(包括ASCII, 十进制, 十六进制, 八进制)显示一个文件或者标准输入的数据

hwclock

查询和设置硬件时钟(也被称为 RTC 或 BIOS 时钟)

ipcrm

删除给定的进程间通信(IPC)资源

ipcs

提供 IPC 状态信息

isosize

报告 iso9660 文件系统的大小

line

单行拷贝

logger

设置系统日志的入口

look

显示以某个给定字符串开头的行

losetup

启动和控制回环(loop)设备

mcookie

为 xauth 生成 magic cookies (128位的随机16进制数)

mkfs

在一个设备(通常是一个硬盘分区)设备上建立文件系统

mkfs.bfs

创建一个 Santa Cruz Operations (SCO) bfs 文件系统

mkfs.cramfs

创建 cramfs 文件系统

mkfs.minix

创建 Minix 文件系统

mkswap

初始化指定设备或文件,以用做交换分区

more

分屏显示文件,但没有 less 好用

mount

把一个文件系统从一个设备挂载到一个目录

namei

显示指定路径的符号链接

pg

显示文本文件内容,一次显示一屏

pivot_root

使某个文件系统成为当前进程的根文件系统

ramsize

显示或者改变 RAM disk 的大小

raw

将一个原始的 Linux 字符设备绑定到一个块设备

rdev

查询和设置内核的根设备和其他信息

readprofile

显示内核侧写文件 /proc/profile 的信息

rename

对文件进行重命名

renice

修改正在运行进程的优先级

rev

颠倒一个文件每行字符的顺序

rootflags

在挂载根设备时查询和设置额外的信息

script

为终端会话过程建立一个 typescipt 文件,记录会话过程中终端的输出。

setfdprm

设置用户定义的软盘参数

setsid

在一个新的会话中运行程序

setterm

设置终端属性

sfdisk

磁盘分区表管理工具

swapoff

取消对指定交换设备和交换文件的使用

swapon

使指定的交换设备和交换文件生效

tailf

跟踪一个日志文件,显示日志的最后10行,并将日志中新的记录也显示出来。

tunelp

设置打印设备的参数

ul

用来将指定文件中出现的下划线使用指定终端画下横线的序列

umount

卸载一个被挂载的文件系统

vidmode

查询和设置视频模式

whereis

确定某命令二进制文件、源文件、手册文档的位置

write

发一个消息给另一个用户,如果他开启了 writting 的话。








57.Vim-7.0

Vim 软件包包含一个强大的文本编辑器。

预计编译时间: 0.4 SBU

所需磁盘空间: 47.4 MB


Alternatives to Vim

如果你更喜欢使用其他的编辑器,比如Emacs, Joe, Nano,请参考这里:http://www.linuxfromscratch.org/blfs/view/svn/postlfs/editors.html 获取安装方法。



安装Vim

首先,将 vim-7.0.tar.bz2 和 vim-7.0-lang.tar.gz(可选) 解包到同一个目录下。


root:/sources/util-linux-2.12r# tar -jxvf $LFS/sources/vim-7.0.tar.bz2 -C $LFS/sources

root:/sources/util-linux-2.12r# tar -zxvf $LFS/sources/vim-7.0-lang.tar.gz -C $LFS/sources

root:/sources/util-linux-2.12r# cd $LFS/sources/vim70


然后应用几个patch来修正一些 Vim-7.0 的bug:


root:/sources/vim70# patch -Np1 -i ../vim-7.0-fixes-7.patch



这个版本的 Vim 会安装翻译过的 man 手册,并把它们放到 Man-DB 搜索不到的目录下。给 vim 打补丁来使其安装到可搜索目录里面,并允许Man-DB在运行的时候转换成希望的格式:


root:/sources/vim70# patch -Np1 -i ../vim-7.0-mandir-1.patch

patching file src/Makefile

root:/sources/vim70#



因为上面的patch中的一个,导致通过Http来下载拼写文件时候会出现问题。开发者解决了这个问题,应用下面的patch就可以解决:


root:/sources/vim70# patch -Np1 -i ../vim-7.0-spellfile-1.patch

patching file runtime/autoload/spellfile.vim

root:/sources/vim70#



最后把配置文件 vimrc 的默认位置修改到 /etc 目录中:


root:/sources/vim70# echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h




为编译Vim做准备:


root:/sources/vim70# ./configure --prefix=/usr –enable-multibyte



配置选项的含义:

--enable-multibyte 我 们强烈推荐你启用该选项(虽然它是可选的),因为它使得 Vim 可以支持使用多字节字符编码的文件,在一个使用多字节字符集的 locale 上,这是必需的。另外该选项还有助于编辑在默认使用 UTF-8 字符集的其它 Linux 发行版(如 Fedora Core)上创建的文本文件。



编译软件包:


root:/sources/vim70# make



要测试结果,请运行:make test 。 注意,Vim 的测试套件会输出一大堆混乱的二进制字符到屏幕上,有时会把当前的终端设置搞乱,所以可以考虑将其输出重定向到一个日志文件。


安装软件包:


root:/sources/vim70# make install



在 UTF-8 的 locale 下,vimtutor 程序会将教程从 ISO-8859-1 转化为 UTF-8。如果一些教程不是 ISO-8859-1 编码的,将会导致不可读。如果你解压了 vim-7.0-lang.tar.gz 包,并打算使用 UTF-8 的 locale,删除非ISO-8859-1编码的教程。英文版本的教程将会被安装:


root:/sources/vim70# rm -f /usr/share/vim/vim70/tutor/tutor.{gr,pl,ru,sk}

root:/sources/vim70# rm -f /usr/share/vim/vim70/tutor/tutor.??.*



许多用户习惯于使用 vi 而不是 vim ,下面的命令为适应这种习惯创建一个二进制文件以及man文档的符号链接:


root:/sources/vim70# ln -sv vim /usr/bin/vi

create symbolic link `/usr/bin/vi' to `vim'

root:/sources/vim70# for L in "" fr it pl ru; do

> ln -sv vim.1 /usr/share/man/$L/man1/vi.1

> done

create symbolic link `/usr/share/man//man1/vi.1' to `vim.1'

create symbolic link `/usr/share/man/fr/man1/vi.1' to `vim.1'

create symbolic link `/usr/share/man/it/man1/vi.1' to `vim.1'

create symbolic link `/usr/share/man/pl/man1/vi.1' to `vim.1'

create symbolic link `/usr/share/man/ru/man1/vi.1' to `vim.1'

root:/sources/vim70#



默认情况下,Vim的文档被安装在 /usr/share/vim 目录下。下面的符号链接允许通过 /usr/share/doc/vim-7.0 来访问,使其与其他软件包的文档保持一致:


root:/sources/vim70# ln -sv ../vim/vim70/doc /usr/share/doc/vim-7.0

create symbolic link `/usr/share/doc/vim-7.0' to `../vim/vim70/doc'

root:/sources/vim70#



如果您计划在您的 LFS 系统上安装 X Window 系统,那么您可能必须在安装 X 之后重新编译 Vim 。Vim 有带有图形用户接口的版本,但需要安装 X 和其它一些库。要了解更多关于这方面的信息请参考 Vim 的安装手册和 BLFS 中有关 Vim 安装指导的页面: http://www.linuxfromscratch.org/blfs/view/svn/postlfs/editors.html#postlfs-editors-vim.




配置Vim

在默认情况下,vim 是以与 vi 兼容的模式运行,这可能对使用过其它文本编辑器的人来说感到陌生。有些人可能喜欢这种模式,但是我们强烈建议使用 vim 模式运行 vim 。下面的配置文件明确的设置了"nocompatible"模式(也可以改用"compatible"模式),这是必要的,因为如果要改变或覆盖其它设置,必须要在这个设置之后。使用下面的命令创建一个默认的 vim 配置文件:

cat > /etc/vimrc << "EOF"
" Begin /etc/vimrc

set nocompatible
set backspace=2
syntax on
if (&term =="iterm") || (&term =="putty")
set background=dark
endif

" End /etc/vimrc
EOF




root:/sources/vim70# cat > /etc/vimrc << "EOF"

> " Begin /etc/vimrc

>

> set nocompatible

> set backspace=2

> syntax on

> if (&term =="iterm") || (&term =="putty")

> set background=dark

> endif

>

> " End /etc/vimrc

> EOF

root:/sources/vim70#




set nocompatible 将使 vim 以比默认的 vi 兼容模式功能更强的方式运行。你可以去掉"no"来保持默认的 vi 模式。set backspace=2 让退格键能跨行、自动缩进、插入。syntax on 打开了 vim 的语法高亮功能。最后,带有 set background=dark 的 if 语句纠正了 vim 对于终端背景颜色的猜测。对于那些使用黑色背景的用户这是一个较好的配色方案。

使用下面的命令可以得到其它可以使用的选项的说明文档:

vim -c ':options'


注意

默认情况下,Vim仅会安装英文的拼写检查文件。要安装你熟悉的语言的拼写检查文件,从 ftp://ftp.vim.org/pub/vim/runtime/spell/ 下载与你的语言相关的 *.spl 文件和 *.sug 文件(可选),以及字符解码器。把它们保存到 /usr/share/vim/vim70/spell/ 目录下。

要使用这些拼写检查文件,在 /etc/vimrc 里面需要配置一些选项,例如:

set spelllang=en,ru
set spell

要获取更多的信息,可以查看上面 URL 上的 README 文件。




Vim 的内容

安装的程序: efm_filter.pl, efm_perl.pl, ex(→vim), less.sh, mve.awk, pltags.pl, ref, rview(→vim), rvim(→vim), shtags.pl, tcltags, vi(→vim), view(→vim), vim, vim132, vim2html.pl, vimdiff(→vim), vimm, vimspell.sh, vimtutor, xxd

简要描述

efm_filter.pl

能读取 vim 产生的错误的一个过滤器

efm_perl.pl

将 perl 解释器的错误信息重新格式化以用于 vim 的"quickfix"模式。

ex

以 ex 模式启动 vim

less.sh

用 less.vim 起动 vim 的脚本

mve.awk

处理 vim 错误信息

pltags.pl

为 Perl 代码建立一个标记文件,以用于 vim

ref

检查参数的拼写错误

rview

一个 view 的限制版,它不能启动任何 shell 命令并且 view 不能被挂起。

rvim

一个 vim 的限制版。它不能启动任何 shell 命令并且 vim 不能被挂起。

shtags.pl

为 perl 代码产生一个标志文件

tcltags

为 TCL 代码产生一个标志文件

view

以只读模式启动 vim

vi

vim 的一个链接

vim

编辑器

vim132

在132列模式下的终端中起动 vim

vim2html.pl

将 vim 文档转化为 HTML 格式

vimdiff

使用 vim 同时编辑一个文档的 2 或 3 个版本并显示他们的区别使用 vim 同时编辑一个文档的 2 或 3 个版本并显示他们的区别

vimm

在一个远端终端上开启 DEC 定位输入模式

vimspell.sh

检查文件拼写并产生一个需要在 vim 中强调的语法报告。这个脚本需要 LFS 和 BLFS 都不提供的旧的 Unix spell 命令

vimtutor

教你使用 vim 的基本操作和命令

xxd

生成十六进制转储或者做相反的工作,因此它能给二进制文件打补丁。










相关阅读 更多 +
排行榜 更多 +
躺平不要慌

躺平不要慌

音乐节奏 下载
嗨自拍修图

嗨自拍修图

图像拍照 下载
装修计算器

装修计算器

游戏工具 下载