网卡:

网卡上面有处理器和存储器。
网卡将计算机信息的并行传输,转为串行传输,发到网络上
网卡包含数据链路层+物理层的功能

数据链路层功能

链路管理

链路的建立、维持和释放

帧定界

用标志字段F来标记起始结束位置

流量控制

滑动窗口等技术实现

差错控制

靠CRC检错,一般就是FCS

将数据和控制信息分开

使收方能区分控制信息和数据

透明传输

通过“零比特填充法”等技术使信息里不论包含何种bit组合都能够传输

寻址

MAC寻址

关于数据链路层和传输层都有流量控制协议

数据链路层保证每个帧都收到,而不丢失
但是其上层网络层不提供可靠服务,(如收到帧之后丢弃)
所以传输层又用流量控制保证数据包能够完整无误的接收

数据链路层流量控制协议

停止等待协议:

为防止发送端发出的帧传输过程中有错误或者丢失,接收端每收到一个帧就回发确认帧
发送端会设置超时计时器,超时后自动重发帧
确认帧携带的是对n+1帧的请求。说明收到n帧,请求发n+1帧。

连续ARQ协议:automatic repeater quest 自动重传请求

发送端多个帧一起发,然后等待确认,接收端一个帧一个帧的接收,并回复确认帧,
如有遗失,则从遗失的帧开始再重新发。
这里涉及到对帧的编码,发送窗口大小,接收窗口大小

对帧的编码用n=3个bit来编码,则能编8个帧
发送窗口最大 2^n-1   也就是7
接收窗口最大2^(n-1)  也就是4

这里还有一个协议:滑动窗口协议

选择重传ARQ协议:

发送端多个帧一起发,然后等待确认,接收端多个帧一起收,然后检查有无遗失,
有遗失则让发送端发遗失的帧,而不用再发遗失后面的已收到的帧

数据链路层帧结构

HDLC帧

帧结构:地址——–控制———信息———FCS

1B          1B                                  2B

控制字段3大类:信息帧、监督帧、无编码帧

信息帧:就是发送序号和确认序号等。
监督帧:用于ARQ协议,如发哪个帧,暂停发送帧,拒绝某个帧之后的帧

监督帧不含数据信息,长度48bit

无编码帧:控制作用

PPP帧
PPP 提供了不同网络层协议同时在同一链路传输的多路复用技术
如拨号连接就是用这个协议。
帧结构:地址——–控制———-协议———-信息———FCS

1B           1B               2B          <=1500B          2B

地址:全1字段,由于是点到点,所以地址没什么用
控制:表示不使用序号,也就是没有流量控制功能。
协议:标记不同的协议。还有控制功能。

以太网帧

帧中继帧

ATM帧

1、传输媒体
传输媒体不属于物理层,就是一些导线,电磁波等。如双绞线、光纤、微波等
每种传输媒体,它的电磁波频谱是固定的,所以它的带宽也就固定。但在其上的传输速度还和信噪比有关

光纤:

多模光纤:光纤直径较粗,光在里面用全反射实现传输
单模光纤:光纤直径较细,只有一个光波长的大小,光在里面一直相前传播

2、物理层
物理层的任务:如何在各种传输媒体上传输比特流。它规范了接口、电压、电压的意义、比特流帧的结构等

信道

向某个方向发送信息的传输媒体,如全双工就是2个信道,但是只有1条传输媒体

信道信息传输速率

理想状态:2W*码元的信息量     b/s    #W为带宽,单位hz

本公式的意义是可以提高每个码元的信息量来提高传输速率

受限状态:Wlog2**(1**+S/N)       b/s    #S/N为信噪比

本公式的意义是可以提高带宽和信噪比来提高传输速率

基带和宽带

基带:不时传一下数据
宽带:每时每刻多在传数据。利用信道复用技术提高传输效率

同步和异步通信

不论何种通信,都要先进行比特同步,然后进行帧界定。但是比特同步方式不同就产生2种通信。

比特同步:接收端时钟已经调整到和发送端时钟完全一样
同步通信:收发双方不停地发送和接收连续的同步比特流用于时钟同步,然后可以随时发随时接收数据
异步通信:接收端时刻保持接收状态,发送端随时发送帧格式数据,帧前有前导用于比特同步

调制解调

调制解调的作用

1、数字信号和模拟信号的转换
2、为信道复用技术做准备

调制方法:调幅、调频、调相、还有3种的混合调制方法如正交调制(调幅+调相)
收发同步的问题:

同步传输:两端的时钟频率相等
异步传输:两边时钟频率不相等,但是为每个字节标记了一个起始和停止比特

注:以上两种时钟频率的采样点的移动都不能超过半个bit的宽度

同步问题是为了解决:

如何准确的接收数据的问题
例:发送频率1μm发一个数据,而接收频率是2μm收一个数据,则漏掉很多数据

信道复用技术

信道复用技术就是为了提高信道的利用率。对模拟信号和数字信号都可以进行复用
包含:频分、时分、统计时分、密集波分、码分多址CDMA等
关于E1:
就是利用正交调制,使一个码元携带8bit的信息,然后再利用时分复用技术进行传输的
E1=8bitX8000帧/sX32时隙=2.048x10^6 b/s

8:是一个码元携带的信息量
8000:是频率
32:是信道数

注:E1就是对数字信号的时分复用。

传输标准和接口标准

SDH为同步数字传输标准
RS232(如电脑上的串口)、RS449:是模拟通信上面的的接口标准

传输系统

光波是波,所以传的就是模拟信号

物理层 - leaf - ------坚持雅操------

图转自:xiexiren@tsinghua.org.cn的回复。

参考:
http://hi.baidu.com/flashgive/item/6904fb09798fc1e5fe240d33

下载:
http://ppa.launchpad.net/cnav/ppa/ubuntu/pool/main/p/ppstream/ppstream\_1.0.0-3lucid2\_amd64.deb
http://packages.ubuntu.com/zh-tw/lucid-updates/libphonon4    下载32位版本的libphonon

安装

安装ppstream没有出现什么错误

运行

运行时提示缺少libphonon.so.4文件
1.1我找了下系统的库文件,发现/usr/lib/下面有libphonon.so.4
1.2做了链接 sudo ln -s /usr/lib/libphonon.so.4 /opt/pps/lib/libphonon.so.4
1.3需要32位版本的。
2.1下载了32位版本的libphonon
2.2解压后把libphonon.so.4.4.0复制为/opt/pps/lib/libphonon.so.4
2.3正常了

ubuntu10.04安装64位ppstream - leaf - ------坚持雅操------

本书:计算机网络(第4版) 谢希仁编
原理清楚了,实现起来就容易了!

交换网:

电路交换网:如电话系统。
报文交换网
分组交换网:采用存储转发技术。所有的分组转发的包都是有标记的。(标记的不一定就是序号)

    后面的通信都是基于分组交换网构建。

广域网和局域网就是物理层和数据链路层的具体规范和应用。

计算机网络的主要性能指标:带宽、时延

带宽:

信号的频率,原指模拟信号的频带宽度。单位:Hz

数字信号沿用带宽叫法,单位:b/s

注:通信领域和计算机领域,对k,m,g算法不一样

通信单位    1k=10^3 b/s

计算机单位1K=2^10 B  

时延:

处理时延:车辆排队等待进站的时间

发送时延:车流从第一辆车进收费站高速到最后一辆进收费站的时间

传播时延:车在高速上的时间

网络协议:网络中数据交换的规则、标准

网络协议包含:语法、语义、时序: 时序是指协议实现的顺序

2002年高中毕业,大学时没有确定学习方向,像个无头苍蝇乱学一气。到现在还在地面上爬行。。。。。

参考:http://broderick-tech.com/vncxstartup-files-ubuntu-14-04/
ubuntu14.04操作:前面的步骤跟ubuntu10.04一样的,只需要改一改xstartup即可

#!/bin/sh
def
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

效果

ubuntu14.04开启vnc服务 - leaf - ------勤解万难------

 

备注:一般我们都用ssh连接

实验配置:
服务器:ubuntu10.04 X86,win7
客户端:ubuntu10.04 X64

客户端:

安装命令:sudo apt-get install vncviewer
连接命令:vncviewer  172.16.43.135:1    #连入ubuntu

vncviewer  172.16.43.135       #连入win7

win7服务端:

加密选项:设置为:更喜欢打开
这是为了防止:No configured security type is supported by 3.3 viewer

ubuntu服务器端:

安装:sudo apt-get install vnc4server

当前用户输入:

vnc4server  :1
输入密码

会建立.vnc目录:passwd  xstartup  ywz-desktop:1.log  ywz-desktop:1.pid

xstartup默认配置如下:

#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title “$VNCDESKTOP Desktop” &
x-window-manager &

1、修改配置:

修改配置的目的:能进图形界面,而不是字符界面
也为了解决:could not acquire name on session bus

#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#x-terminal-emulator -geometry 80x24+10+10 -ls -title “$VNCDESKTOP Desktop” &
#x-window-manager &

2、修改/etc/X11/xinit/xinitrc权限:sudo chmod a+x /etc/X11/xinit/xinitrc
3、设置防火墙:

netstat -tunlp

tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN      5080/Xvnc4           
tcp6      0     0 :::5901                      :::*                        LISTEN      5080/Xvnc4  

sudo ufw allow from 172.16.43.100 to any port 5901

4、然后重启vnc4server

vnc4server -kill :1
vnc4server :1      #:1表示开启第一个界面

5、开机自启动vnc服务
sudo gedit  /etc/init.d/vncserver

`#!/bin/sh -e

BEGIN INIT INFO

Provides:          vncserver

Required-Start:    networking

Default-Start:     3 4 5

Default-Stop:      0 6

END INIT INFO`

PATH="$PATH:/usr/X11R6/bin/"

# The Username:Group that will run VNC export USER="使用哪个账户来远程连接" #${RUNAS}

# The display that VNC will use DISPLAY="1"

# Color depth (between 8 and 32) DEPTH="24"

# The Desktop geometry to use. #GEOMETRY="<WIDTH>x<HEIGHT>" GEOMETRY="800x600" #GEOMETRY="1024x768" #GEOMETRY="1280x1024"

# The name that the VNC Desktop will have. NAME="vnc-server"

OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

. /lib/lsb/init-functions

case "$1" in start) log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}" su ${USER} -c "/usr/bin/vnc4server ${OPTIONS}" ;;

stop) log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}" su ${USER} -c "/usr/bin/vnc4server -kill :${DISPLAY}" ;;

restart) $0 stop $0 start ;; esac

exit 0

sudo chmod +x /etc/init.d/vncserver ``sudo update-rc.d vncserver defaults

参考:
http://www.linuxidc.com/Linux/2011-10/46228.htm
http://www.abdevelopment.ca/blog/start-vnc-server-ubuntu-boot

ubuntu开启vnc服务 - leaf - ------坚持雅操------

没有wget,下载很不方便,没有openssh,所有代码都要自己输很不方便,所以安装
1、wget

cd /root/sources
ftp ftp.gnu.org

用户名:anonymous

cd gnu
cd wget
get wget-1.11.1.tar.bz2

bye
cd ../build
tar -xvf ../sources/wget-1.11.1.tar.bz2
cd wget-1.11.1

./configure –prefix=/usr –sysconfdir=/etc
make && make install

cd ..

2、gdbm

按孙海勇的书装了这个。

wget ftp://ftp.gnu.org/gnu/gdbm/gdbm-1.8.3.tar.gz
vi /etc/passwd

bin:x:2:2:bin:/bin:/bin/sh

./configure –prefix=/usr
make && make install
make install-compat

3、openssl

wget http://www.openssl.org/source/openssl-0.9.8l.tar.gz
wget http://www.linuxfromscratch.org/patches/downloads/openssl/openssl-0.9.8l-fix\_manpages-1.patch

./config –prefix=/usr \

--openssldir=/etc/ssl shared zlib-dynamic

make
make test
make MANDIR=/usr/share/man install
install -v -d -m755 /usr/share/doc/openssl-0.9.8l
cp -v -r doc/{HOWTO,README,*.{txt,html,gif}} /usr/share/doc/openssl-0.9.8l

4、openssh

安装
openssh需要openssl和

wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-5.3p1.tar.gz    #要大写
install -v -m700 -d /var/lib/sshd
chown -v root:sys /var/lib/sshd
groupadd -g 50 sshd
useradd -c ‘sshd PrivSep’ -d /var/lib/sshd -g sshd \

-s /bin/false -u 50 sshd

sed -i.orig ‘s@-lcrypto@/usr/lib/libcrypto.a -ldl@’ configure
./configure –prefix=/usr –sysconfdir=/etc/ssh \

--datadir=/usr/share/sshd \
--libexecdir=/usr/lib/openssh –with-md5-passwords \
--with-privsep-path=/var/lib/sshd

make
make install
install -v -m755 -d /usr/share/doc/openssh-5.3p1
install -v -m644 INSTALL LICENCE OVERVIEW README* WARNING.RNG /usr/share/doc/openssh-5.3p1
配置
从livedcd里面拷过来就好了
从livedcd启动,位置:/etc/rc.d/init.d/sshd
添加系统启动自启动
cd /etc/rc.d/init.d &&
ln -sf ../init.d/sshd ../rc0.d/K30sshd &&
ln -sf ../init.d/sshd ../rc1.d/K30sshd &&
ln -sf ../init.d/sshd ../rc2.d/K30sshd &&
ln -sf ../init.d/sshd ../rc3.d/S30sshd &&
ln -sf ../init.d/sshd ../rc4.d/S30sshd &&
ln -sf ../init.d/sshd ../rc5.d/S30sshd &&
ln -sf ../init.d/sshd ../rc6.d/K30sshd

BLFS-1:安装wget、ssh等软件 - leaf - ------坚持雅操------

1、chroot

chroot “$LFS” /usr/bin/env -i \

    HOME=/root TERM=”$TERM” PS1=’\u:\w\$ ‘ \

    PATH=/bin:/usr/bin:/sbin:/usr/sbin \

    /bin/bash –login

2、配置系统脚本

LFS-Bootscripts-6.3 

包含一套在 LFS 系统启动和关闭时的启动和停止脚本

脚本:halt、reboot、ifup、ifdown、udev、

cat > /etc/sysconfig/clock << “EOF”

UTC=0

EOF

cat > /etc/inputrc << “EOF”

cat > /etc/profile << “EOF”

export LANG=en_US.UTF-8

export INPUTRC=/etc/inputrc
alias ls=”ls –color”

export PS1=’\u:\w\$’

EOF

echo “HOSTNAME=leaf” > /etc/sysconfig/network

cat > /etc/hosts << “EOF”

127.0.0.1 leaf localhost

EOF

cd /etc/sysconfig/network-devices

mkdir -v ifconfig.eth0

cat > ifconfig.eth0/ipv4 << “EOF”

ONBOOT=yes

SERVICE=ipv4-static

IP=172.16.43.100

GATEWAY=172.16.43.2

PREFIX=24

BROADCAST=172.16.43.255

EOF

cat > /etc/resolv.conf << “EOF”

nameserver 172.16.43.2 

EOF

cat > /etc/fstab << “EOF”

3、安装核心

Linux-2.6.22.5 

make mrproper

make menuconfig  #参考孙海勇的设置

make

make modules_install

cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.22.5

cp -v System.map /boot/System.map-2.6.22.5

cp -v .config /boot/config-2.6.22.5

install -d /usr/share/doc/linux-2.6.22.5

cp -r Documentation/* /usr/share/doc/linux-2.6.22.5

4、stage写入MBR

配置了软驱

dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1

dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1

grub

root (hd0,0)

setup (hd0)

quit

cat > /boot/grub/menu.lst << “EOF”

mkdir -v /etc/grub

ln -sv /boot/grub/menu.lst /etc/grub

5、完成制作

echo 6.3 > /etc/lfs-release

sync

reboot

制作完毕!:-)

LFS制作-5、完成制作 - leaf - ------坚持雅操------

Berkeley DB-4.5.20

包含一些程序和工具,供其他的一些程序来在做数据库相关函数时调用
-—————-
patch -Np1 -i ../db-4.5.20-fixes-1.patch
cd build_unix
../dist/configure –prefix=/usr –enable-compat185 –enable-cxx
make
make docdir=/usr/share/doc/db-4.5.20 install
chown -Rv root:root /usr/share/doc/db-4.5.20

Sed-4.1.5

sed编辑器
-—————
./configure –prefix=/usr –bindir=/bin –enable-html
make
make install

E2fsprogs-1.40.2

提供用于 ext2 文件系统的工具。它还支持 ext3 日志文件系统

包含命令:chattr、lsattr、mkfs、fsck等
-————–
sed -i -e ‘s@/bin/rm@/tools&@’ lib/blkid/test_probe.in
mkdir -v build
cd build
../configure –prefix=/usr –with-root-prefix=”” \
    –enable-elf-shlibs
make
make install
make
make install-libs

Coreutils-6.9

包括一套显示、设置基本系统属性的工具

包含命令:chroot、chown、cp、dd、dir、env、ln、ls、mkdir、mv、rm、seq、tee、touch、tty等

安装位置/usr,移动命令到/bin 、/sbin下
-———————–
patch -Np1 -i ../coreutils-6.9-uname-1.patch
patch -Np1 -i ../coreutils-6.9-suppress_uptime_kill_su-1.patch
patch -Np1 -i ../coreutils-6.9-i18n-1.patch
chmod +x tests/sort/sort-mb-tests
./configure –prefix=/usr
make
make install
mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,hostname,ln,ls,mkdir,mknod,mv,pwd,readlink,rm} /bin
mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/bin/{head,sleep,nice} /bin

Iana-Etc-2.20

提供了网络服务和协议的数据

安装文件:/etc/protocols, /etc/services
-———————-
make
make install

M4-1.4.10

宏处理器
-——————–
./configure –prefix=/usr
make
make install

Bison-2.3

语法分析程序生成器

命令:bison、yacc
-———————
./configure –prefix=/usr
echo ‘#define YYENABLE_NLS 1’ >> config.h
make
make install

Ncurses-5.6

提供字符终端处理库,包括面板和菜单

命令:clear、reset等
-———————-
patch -Np1 -i ../ncurses-5.6-coverity_fixes-1.patch
./configure –prefix=/usr –with-shared –without-debug –enable-widec
make
make install
chmod -v 644 /usr/lib/libncurses++w.a
mv -v /usr/lib/libncursesw.so.5* /lib
ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
for lib in curses ncurses form panel menu ; do \
    rm -vf /usr/lib/lib${lib}.so ; \
    echo “INPUT(-l${lib}w)” >/usr/lib/lib${lib}.so ; \
    ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \
done
ln -sfv libncurses++w.a /usr/lib/libncurses++.a
rm -vf /usr/lib/libcursesw.so
echo “INPUT(-lncursesw)” >/usr/lib/libcursesw.so
ln -sfv libncurses.so /usr/lib/libcurses.so
ln -sfv libncursesw.a /usr/lib/libcursesw.a
ln -sfv libncurses.a /usr/lib/libcurses.a

Procps-3.2.7

用于监视系统进程的程序

命令:free、top、ps、uptime、kill等
-———————
make
make install

Libtool-1.5.24

通用库支持脚本,将使用动态库的复杂性隐藏在统一的、可移植的接口中
-——————–
./configure –prefix=/usr
make
make install

Perl-5.8.8

编程语言,各编程语言转换等用处
-—————-
echo “127.0.0.1 localhost leaf” > /etc/hosts
./configure.gnu –prefix=/usr \
    -Dman1dir=/usr/share/man/man1 \
    -Dman3dir=/usr/share/man/man3 \
    -Dpager=”/usr/bin/less -isR”
make
make install

Readline-5.2

提供命令行编辑和历史纪录功能的库集合
-——————–
sed -i ‘/MV.*old/d’ Makefile.in
sed -i ‘/{OLDSUFF}/c:’ support/shlib-install
patch -Np1 -i ../readline-5.2-fixes-3.patch
./configure –prefix=/usr –libdir=/lib
make SHLIB_LIBS=-lncurses
make install
mv -v /lib/lib{readline,history}.a /usr/lib
rm -v /lib/lib{readline,history}.so
ln -sfv ../../lib/libreadline.so.5 /usr/lib/libreadline.so
ln -sfv ../../lib/libhistory.so.5 /usr/lib/libhistory.so

Zlib-1.2.3

很多程序中的压缩或者解压缩程序都会用到这个库
-——————–
./configure –prefix=/usr –shared –libdir=/lib
make
make install
rm -v /lib/libz.so
ln -sfv ../../lib/libz.so.1.2.3 /usr/lib/libz.so
make clean
./configure –prefix=/usr
make
make install
chmod -v 644 /usr/lib/libz.a

Autoconf-2.61

生成用于自动配置源代码的 shell 脚本

命令:autoconf、autoheader等
-——————-
./configure –prefix=/usr
make
make install

Automake-1.10

与 Autoconf 配合使用,产生 Makefile 文件
-——————
./configure –prefix=/usr
make
make install

Bash-3.2

bash shell
-———————
tar -xvf ../bash-doc-3.2.tar.gz
sed -i “s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.2|” \
    Makefile.in
patch -Np1 -i ../bash-3.2-fixes-5.patch
./configure –prefix=/usr –bindir=/bin \
    –without-bash-malloc –with-installed-readline
make
sed -i ‘s/LANG/LC_ALL/‘ tests/intl.tests
sed -i ‘s@tests@& </dev/tty@’ tests/run-test
chown -Rv nobody ./
su-tools nobody -s /bin/bash -c “make tests”
make install
exec /bin/bash –login +h

Bzip2-1.0.4

包含了对文件进行压缩和解压缩的工具
-———————
patch -Np1 -i ../bzip2-1.0.4-install_docs-1.patch
make -f Makefile-libbz2_so
make clean
make
make PREFIX=/usr install
cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat

Diffutils-2.8.1

显示两个文件或目录的差异

命令:cmp、diff
-———————–
patch -Np1 -i ../diffutils-2.8.1-i18n-1.patch
touch man/diff.1
./configure –prefix=/usr
make
make install

File-4.21

用来判断文件类型的工具

命令:file
-————————
./configure –prefix=/usr
make
make install

Findutils-4.2.31

查找文件的工具

命令:find、updatedb、locate、xargs
-———————-
./configure –prefix=/usr –libexecdir=/usr/lib/findutils \
    –localstatedir=/var/lib/locate
make
make install
mv -v /usr/bin/find /bin
sed -i -e ‘s/find:=${BINDIR}/find:=\/bin/‘ /usr/bin/updatedb

Flex-2.5.33

能生成识别文本模式的程序的工具
-——————-
./configure –prefix=/usr
make
make install
ln -sv libfl.a /usr/lib/libl.a

cat > /usr/bin/lex << “EOF”
#!/bin/sh
# Begin /usr/bin/lex

exec /usr/bin/flex -l “$@”

# End /usr/bin/lex
EOF

chmod -v 755 /usr/bin/lex

GRUB-0.97

包含 GRand 统一引导装载程序
-—————-
patch -Np1 -i ../grub-0.97-disk_geometry-1.patch
./configure –prefix=/usr
make
make install
mkdir -v /boot/grub
cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub

Gawk-3.1.5

包含用于管理文本文件的程序

命令:awk等
-——————–
patch -Np1 -i ../gawk-3.1.5-segfault_fix-1.patch
./configure –prefix=/usr –libexecdir=/usr/lib

cat >> config.h << “EOF”
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF

make
make install

Gettext-0.16.1

系统的国际化和本地化
-—————
./configure –prefix=/usr
make
make install

Grep-2.5.1a

搜索文件中符合指定匹配模式的行

命令:grep
-————–
patch -Np1 -i ../grep-2.5.1a-redhat_fixes-2.patch
chmod +x tests/fmbtest.sh
./configure –prefix=/usr –bindir=/bin
make
make install

Groff-1.18.1.4

包含几个处理和格式化文本的程序
-—————-
patch -Np1 -i ../groff-1.18.1.4-debian_fixes-1.patch
sed -i -e ‘s/2010/002D/‘ -e ‘s/2212/002D/‘ \
    -e ‘s/2018/0060/‘ -e ‘s/2019/0027/‘ font/devutf8/R.proto
PAGE=A4 ./configure –prefix=/usr –enable-multibyte
make
make install
ln -sv eqn /usr/bin/geqn
ln -sv tbl /usr/bin/gtbl

Gzip-1.3.12

压缩和解压文件的程序
-——————-
./configure –prefix=/usr –bindir=/bin
make
make install
mv -v /bin/{gzexe,uncompress,zcmp,zdiff,zegrep} /usr/bin
mv -v /bin/{zfgrep,zforce,zgrep,zless,zmore,znew} /usr/bin

Inetutils-1.5

包含基本的网络程序

配置文件:/etc

命令:ping、ftp、telnet等
-——————-
patch -Np1 -i ../inetutils-1.5-no_server_man_pages-2.patch
./configure –prefix=/usr –libexecdir=/usr/sbin \
    –sysconfdir=/etc –localstatedir=/var \
    –disable-ifconfig –disable-logger –disable-syslogd \
    –disable-whois –disable-servers
make
make install
mv -v /usr/bin/ping /bin

IPRoute2-2.6.20-070313

基本的和高级的基于 IPv4 网络的程序

命令:ip、arpd守护程序、
-—————-
sed -i -e ‘/tc-bfifo.8/d’ -e ‘/tc-pfifo.8/s/pbfifo/bfifo/‘ Makefile
make SBINDIR=/sbin
make SBINDIR=/sbin install
mv -v /sbin/arpd /usr/sbin

Kbd-1.12

键盘映射表和键盘工具
-——————-
patch -Np1 -i ../kbd-1.12-backspace-1.patch
patch -Np1 -i ../kbd-1.12-gcc4_fixes-1.patch
./configure –datadir=/lib/kbd
make
make install
mv -v /usr/bin/{kbd_mode,openvt,setfont} /bin

Less-406

一个文本文件查看器

命令:less
-———————
./configure –prefix=/usr –sysconfdir=/etc
make
make install

Make-3.81

自动地确定一个大型程序的哪些片段需要重新编译,并且发出命令去重新编译它们

应该和autoconf和automake有关系
-——————–
./configure –prefix=/usr
make
make install

Man-DB-2.4.4

查找和显示 man 手册页的程序

命令:man等

-———————
sed -i -e ‘\%\t/usr/man%d’ -e ‘\%\t/usr/local/man%d’ src/man_db.conf.in

cat >> include/manconfig.h.in << “EOF”

#define WEB_BROWSER “exec /usr/bin/lynx”

#define COL “/usr/bin/col”

#define VGRIND “/usr/bin/vgrind”

#define GRAP “/usr/bin/grap”

EOF

patch -Np1 -i ../man-db-2.4.4-fixes-1.patch

./configure –prefix=/usr –enable-mb-groff –disable-setuid

make && make install

Mktemp-1.5

包含用于在 shell 脚本中创建安全临时文件的程序
-——————–
patch -Np1 -i ../mktemp-1.5-add_tempfile-3.patch
./configure –prefix=/usr –with-libc
make
make install
make install-tempfile

Module-Init-Tools-3.2.2

处理 2.5.47 及以上版本的内核模块时使用的工具

命令:modprobe、insmod、depmod、lsmod

安装位置:/sbin
-——————
patch -Np1 -i ../module-init-tools-3.2.2-modprobe-1.patch
./configure
make check
make distclean
./configure –prefix=/ –enable-zlib
make
make INSTALL=install install

Patch-2.5.4

补丁命令,一般和diff一起用

命令:patch
-—————-
./configure –prefix=/usr
make
make install

Psmisc-22.5

用于显示进程信息的程序

命令:pstree、killall
-—————–
./configure –prefix=/usr –exec-prefix=””
make
make install
mv -v /bin/pstree* /usr/bin
ln -sv killall /bin/pidof

Shadow-4.0.18.1

用于在安全方式下处理密码的程序

配置文件/etc

库文件:/usr/lib、/lib

命令位置:/bin、/usr/bin

命令:su、passwd、login、useradd、userdel、chsh

-—————–
patch -Np1 -i ../shadow-4.0.18.1-useradd_fix-2.patch

./configure –libdir=/lib –sysconfdir=/etc –enable-shared \

    –without-selinux

sed -i ‘s/groups$(EXEEXT) //‘ src/Makefile

find man -name Makefile -exec sed -i ‘s/groups\.1 / /‘ {} \;

sed -i -e ‘s@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@’ \

    -e ‘s@/var/spool/mail@/var/mail@’ etc/login.defs

make

make install

mv -v /usr/bin/passwd /bin

mv -v /lib/libshadow.*a /usr/lib

rm -v /lib/libshadow.so

ln -sfv ../../lib/libshadow.so.0 /usr/lib/libshadow.so

pwconv

grpconv

useradd -D -b /home

sed -i ‘s/yes/no/‘ /etc/default/useradd

passwd root   #一定要设置root密码

Sysklogd-1.4.1

记录系统日志信息的程序

命令:klogd守护程序、syslogd
-—————-
patch -Np1 -i ../sysklogd-1.4.1-fixes-2.patch
patch -Np1 -i ../sysklogd-1.4.1-8bit-1.patch
make
make install

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

Sysvinit-2.86

一些控制系统启动、运行、关闭的程序

配置文件:/etc/inittab

命令:shutdown、init、reboot等
-——————
sed -i ‘s@Sending processes@& configured via /etc/inittab@g’ \
    src/init.c
make -C src
make -C src install

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

Tar-1.18

一个归档程序
-————-
./configure –prefix=/usr –bindir=/bin –libexecdir=/usr/sbin
make
make install

Texinfo-4.9

读取、写入、转换 Info 文档的程序

命令:info等
-—————
patch -Np1 -i ../texinfo-4.9-multibyte-1.patch
patch -Np1 -i ../texinfo-4.9-tempfile_fix-1.patch
./configure –prefix=/usr
make
make install
make TEXMF=/usr/share/texmf install-tex
cd /usr/share/info
rm dir
for f in *
do install-info $f dir 2>/dev/null
done

Udev-113

包含动态地创建设备节点的程序

命令:udevinfo等
-—————–
tar -xvf ../udev-config-6.3.tar.bz2
install -dv /lib/{firmware,udev/devices/{pts,shm}}
mknod -m0666 /lib/udev/devices/null c 1 3
ln -sv /proc/self/fd /lib/udev/devices/fd
ln -sv /proc/self/fd/0 /lib/udev/devices/stdin
ln -sv /proc/self/fd/1 /lib/udev/devices/stdout
ln -sv /proc/self/fd/2 /lib/udev/devices/stderr
ln -sv /proc/kcore /lib/udev/devices/core
make EXTRAS=”`echo extras/*/`“
make DESTDIR=/ EXTRAS=”`echo extras/*/`“ install
cp -v etc/udev/rules.d/[0-9]* /etc/udev/rules.d/
cd udev-config-6.3
make install
make install-doc
make install-extra-doc
cd ..
install -m644 -v docs/writing_udev_rules/index.html \
    /usr/share/doc/udev-113/index.html

Util-linux-2.12r

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

命令位置:/usr/bin

命令:mount、whereis、cfdisk、
-—————
sed -e ‘s@etc/adjtime@var/lib/hwclock/adjtime@g’ \
    -i $(grep -rl ‘/etc/adjtime’ .)
mkdir -pv /var/lib/hwclock
patch -Np1 -i ../util-linux-2.12r-cramfs-1.patch
patch -Np1 -i ../util-linux-2.12r-lseek-1.patch
./configure
make HAVE_KILL=yes HAVE_SLN=yes
make HAVE_KILL=yes HAVE_SLN=yes install

Vim-7.1 

强大的文本编辑器
-————-
patch -Np1 -i ../vim-7.1-fixes-1.patch
patch -Np1 -i ../vim-7.1-mandir-1.patch
echo ‘#define SYS_VIMRC_FILE “/etc/vimrc”‘ >> src/feature.h
./configure –prefix=/usr –enable-multibyte
make
make install
ln -sv vim /usr/bin/vi
for L in “” fr it pl ru; do
    ln -sv vim.1 /usr/share/man/$L/man1/vi.1
done
ln -sv ../vim/vim71/doc /usr/share/doc/vim-7.1

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

2、清理

logout

mv $LFS/tools $LFS/root

mv $LFS/sources $LFS/root

mv $LFS/build $LFS/root

1、Linux-2.6.22.5 API Headers 

#头文件,安装位置/usr/include,里面的*.h都是头文件

#内核就相当于CPU,而头文件就相当于CPU的针脚,对CPU的操作都是通过针脚传命令进去的。

sed -i ‘/scsi/d’ include/Kbuild

#当前行的上一行插入/scsi/d

make mrproper

make headers_check

make INSTALL_HDR_PATH=dest headers_install

cp -rv dest/include/* /usr/include

2、Man-pages-2.63 

make install

3、Glibc-2.5.1

#包含了主要的C库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。Glibc 的编译系统是高度自给自足的,即使当前编译器 specs 文件和连接器还指向 /tools 目录,也能正确安装

#安装位置:/usr/bin、/usr/lib

#包含的命令如:ldd、ldconfig

#包含的库文件:ld.so、libc

-—————————————————————–

tar -xvf ../glibc-libidn-2.5.1.tar.gz

mv glibc-libidn-2.5.1 libidn

sed -i ‘/vi_VN.TCVN/d’ localedata/SUPPORTED

#当前行的上一行插入/vi_VN.TCVN/d

sed -i \

‘s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|’ \

        scripts/test-installation.pl

sed -i ‘s|@BASH@|/bin/bash|’ elf/ldd.bash.in

mkdir -v ../glibc-build

cd ../glibc-build

../glibc-2.5.1/configure –prefix=/usr \

    –disable-profile –enable-add-ons \

    –enable-kernel=2.6.0 –libexecdir=/usr/lib/glibc

make

touch /etc/ld.so.conf

make install

make localedata/install-locales

cat > /etc/nsswitch.conf << “EOF”

# Begin /etc/nsswitch.conf

passwd: files

group: files

shadow: files

hosts: files dns

networks: files

protocols: files

services: files

ethers: files

rpc: files

# End /etc/nsswitch.conf

EOF

#nsswitch.conf:系统数据库及名字服务开关配置文件

cp -v –remove-destination /usr/share/zoneinfo/Asia/Shanghai \

    /etc/localtime

cat > /etc/ld.so.conf << “EOF”

# Begin /etc/ld.so.conf

/usr/local/lib

/opt/lib

# End /etc/ld.so.conf

EOF

4、调整工具链

mv -v /tools/bin/{ld,ld-old}

mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}

mv -v /tools/bin/{ld-new,ld}

ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld

gcc -dumpspecs | sed \ -e ‘s@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g’ \ -e ‘/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}’ \ -e ‘/\*cpp:/{n;s@$@ -isystem /usr/include@}’ > \ `dirname $(gcc –print-libgcc-file-name)`/specs

测试:很重要

echo ‘main(){}’ > dummy.c

cc dummy.c -v -Wl,–verbose &> dummy.log

readelf -l a.out | grep ‘: /lib’

结果:[Requesting program interpreter: /lib/ld-linux.so.2]

grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log

结果:

/usr/lib/crt1.o succeeded

/usr/lib/crti.o succeeded

/usr/lib/crtn.o succeeded

grep -B1 ‘^ /usr/include’ dummy.log

结果:

#include <…> search starts here:

 /usr/include

grep ‘SEARCH.*/usr/lib’ dummy.log |sed ‘s|; |\n|g’

结果:

SEARCH_DIR(“/tools/i686-pc-linux-gnu/lib”)

SEARCH_DIR(“/usr/lib”)

SEARCH_DIR(“/lib”);

grep “/lib/libc.so.6 “ dummy.log

结果:attempt to open /lib/libc.so.6 succeeded

grep found dummy.log

结果:found ld-linux.so.2 at /lib/ld-linux.so.2

5、 Binutils-2.17 

#Binutils 是一组开发工具,包括连接器、汇编器和其他用于目标文件和档案的工具。

#安装位置/usr/bin下

#包含的命令:as、ld

expect -c “spawn ls”

结果:spawn ls

mkdir -v ../binutils-build

cd ../binutils-build

../binutils-2.17/configure –prefix=/usr \

    –enable-shared

make tooldir=/usr

make tooldir=/usr install

cp -v ../binutils-2.17/include/libiberty.h /usr/include

6、GCC-4.1.2 

#GCC 软件包包含 GNU 编译器,其中有 C 和 C++ 编译器。

#安装位置/usr/bin

#包含的命令如gcc、c++、g++等

sed -i ‘s/install_to_$(INSTALL_DEST) //‘ libiberty/Makefile.in

sed -i ‘s/^XCFLAGS =$/& -fomit-frame-pointer/‘ gcc/Makefile.in

sed -i ‘s@\./fixinc\.sh@-c true@’ gcc/Makefile.in

sed -i ‘s/@have_mktemp_command@/yes/‘ gcc/gccbug.in

mkdir -v ../gcc-build

cd ../gcc-build

../gcc-4.1.2/configure –prefix=/usr \

    –libexecdir=/usr/lib –enable-shared \

    –enable-threads=posix –enable-__cxa_atexit \

    –enable-clocale=gnu –enable-languages=c,c++

make

make install

ln -sv ../usr/bin/cpp /lib

ln -sv gcc /usr/bin/cc

测试

echo ‘main(){}’ > dummy.c

cc dummy.c -v -Wl,–verbose &> dummy.log

readelf -l a.out | grep ‘: /lib’

结果:

[Requesting program interpreter: /lib/ld-linux.so.2]

grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log

结果:

/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o succeeded

/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o succeeded

/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crtn.o succeeded

grep -B1 ‘^ /usr/include’ dummy.log

结果:

#include <…> search starts here:

 /usr/local/include

 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include

 /usr/include

grep ‘SEARCH.*/usr/lib’ dummy.log |sed ‘s|; |\n|g’

结果:

SEARCH_DIR(“/usr/i686-pc-linux-gnu/lib”)

SEARCH_DIR(“/usr/local/lib”)

SEARCH_DIR(“/lib”)

SEARCH_DIR(“/usr/lib”);

grep “/lib/libc.so.6 “ dummy.log

结果:attempt to open /lib/libc.so.6 succeeded

grep found dummy.log

结果:found ld-linux.so.2 at /lib/ld-linux.so.2