路由器设置代理上网的几种类型说明

路由器设置代理上网的几种类型说明

网络技术的飞速发展,使企事业单位局域网接入INTERNET共享资源的方式越来越多,就大多数而言,DDN专线以其性能稳定、扩充性好的优势成为普遍采用的方式,DDN方式的连接在硬件的需求上是简单的,仅需要一台路由器(router)、代理服务器(proxy server)即可,但在系统的配置上对许多的网络管理人员来讲是一个比较棘手的问题。下面以CISCO路由器为例,就几种比较成功的配置方法作以介绍,以供同行借鉴



  一、直接通过路由器访问INTERNET资源的配置


  1. 总体思路和设备连接方法


  一般情况下,单位内部的局域网都使用INTERNET上的保留地址:


  10.0.0.0/8:10.0.0.0~10.255.255.255


  172.16.0.0/12:172.16.0.0~172.31.255.255


  192.168.0.0/16:192.168.0.0~192.168.255.255


  在常规情况下,单位内部的工作站在直接利用路由对外访问时,会因工作站使用的是互联网上的保留地址,而被路由器过滤掉,从而导致无法访问互联网资源。解决这一问题的办法是利用路由操作系统提供的NAT(Network Address Translation)地址转换功能,将内部网的私有地址转换成互联网上的合法地址,使得不具有合法IP地址的用户可以通过NAT访问到外部 Internet.这样做的好处是无需配备代理服务器,减少投资,还可以节约合法IP地址,并提高了内部网络的安全性。


  NAT有两种类型:Single模式和global模式。


  使用NAT的single模式,就像它的名字一样,可以将众多的本地局域网主机映射为一个Internet地址。局域网内的所有主机对外部Internet网络而言,都被看做一个Internet用户。本地局域网内的主机继续使用本地地址。


  使用NAT的global模式,路由器的接口将众多的本地局域网主机映射为一定的Internet地址范围(IP地址池)。当本地主机端口与 Internet上的主机连接时,IP地址池中的某个IP地址被自动分配给该本地主机,连接中断后动态分配的IP地址将被释放,释放的IP地址可被其他本地主机使用。


  下面以我单位的网络环境为例,将配置方法及过程列示出来,供大家参考。


  我单位利用联通光缆(V.35)接入INTERNET的,路由器是CISCO2610,局域网采用的是INTEL550百兆交换机,联通向我们提供了下列四个IP地址:


  211.90.137.25(255.255.255.252)用于本地路由器的广域网端口


  211.90.137.26(255.255.255.252)用于对方(联通)的端口


  211.90.139.41(255.255.255.252)供自己支配


  211.90.139.42(255.255.255.252)供自己支配



  2. 路由器的配置


  (1) 网络连接:


  说明:校内所有的工作站都与交换机连接,路由器也通过以太口连接在内部交换机上,路由器上以太口使用内部私有地址,光纤的两端分别使用了联通分配的两个有效IP地址。在这种连接方式下,只要在路由器内部设置NAT,便可以使得单位内部的所有工作站访问INTERNTE了,在每台工作站上只需设置网关指向路由器的以太口(192.168.0.3)即可上网,无需设代理,并节省了两个有效IP地址可供自己自由支配(如建立单位自已的WEB和E-MAIL服务器)。但也存在缺点:不能享受代理服务器提供的CACHE服务来提高访问速度。所以本配置方案适合工作站数量较少的单位,对于单位内部工作站数量较多的情况可以使用后面介绍的两种方法。路由器上具体配置如下:


  (2)路由器的配置


en

config t

ip nat pool c2610 211.90.139.41 211.90.139.42 netmask 255.255.255.252

(定义一个地址池c2601,其内包含了两个空闲的合法IP地址,供NAT转换时使用)

int e0/0

ip address 192.168.0.3 255.255.255.0

ip nat inside

exit

(设置以太口的IP地址,并设置其为连接内部网的端口)

interface s0/0

ip address 211.90.137.25 255.255.255.252

ip nat outside

exit

(设置广域网端口的IP地址,并设置其为连接外部网的端口)

ip route 0.0.0.0 0.0.0.0 211.90.137.26

(设置动态路由)

access-list 2 permit 192.168.0.1 0.0.0.255

(建立访问控制列表)

! Dynamic NAT

!

ip nat inside source list 2 pool c2610 overload

(建立动态地址翻译)

line console 0

exec-timeout 0 0

!

line vty 0 4

end

wr

(保存所作的设置)




  3. 工作站的配置


  要求使用静态IP地址,在TCP/IP属性中进行设置,并设置关网为192.168.0.3(路由器以太口IP地址),设置DNS为接入商提供的地址,浏览器等上网工具中无需作任何特殊设置。

二、通过代理服务器访问INTERNET资源的配置


  1. 总体的思路和设备连接方法


  利用代理服务器方式访问INTERNET资源,优点是可以利用代理服务器提供的CACHE服务来提高INTERNET的访问速度和效率。比较适合工作站较多的单位使用。缺点是需要专门配备一台计算机作为代理服务器,增加了投资成本;且较第一种法方还需多占用两个合法IP地址,网络安全性不高。


  采用这种方案来访问互联网,设备连接方法如下:


  代理服务器上安装两块网卡,一块连接内部网,设置内部私有地址;另一块连接路由器以太口,设置联通分配的合法地址(211.90.139.42),并设置其网关为211.90.139.41(路由器以太口)


  路由器以太口也设置联通分配的合法IP地址(211.90.139.41)


  这样,将设备连接好后,在代理服务器上安装代理软件,并在工作站上设置代理即可访问INTERNET.


  2. 路由器的配置


  (1) 网络连接:


  说明:在上图中,单位内的所有计算机通过交换机直接与代理服务器上的内部网网卡(192.168.0.4)通讯,然后在代理服务软件的控制之下经过路由器访问INTERNET.


  (2)路由器的配置


en

config t

int e0/0

ip address 211.90.139.41 255.255.255.252

exit

(设置以太口的IP地址)

interface s0/0

ip address 211.90.137.25 255.255.255.252

exit

(设置广域网端口的IP地址)

ip route 0.0.0.0 0.0.0.0 211.90.137.26

ip routing

(设置动态路由,并激活路由)

end

wr

(保存所作的设置)




  3. 代理服务器的设置


  代理服务器必须按装两块网卡,一块用于连接内部局域网,设IP地址为内部私有地址(如:192.168.0.4 netmask 255.255.255.0)无需设网关。另一块用于连接路由器,设置联通分配的合法地址(211.90.139.42 netmask 255.255.255.252),并设置其网关为:211.90.139.41(路由器以太口)。


  按照上面的方法设置好网卡后,再安装一套代理软件即可。(如:MS PROXY SERVER 2.0、WINGATE等,代理软件的安装调试方法请参阅其它资料)


  4. 工作站的设置


  (1) INTERNET EXPLORER设置


  工具菜单->internet选项->连接->局域网设置->使用代理服务器->地址:192.168.0.4端口:80->确定


  (2)其他软件的设置请参阅软件说明。



  三、直接访问与代理访问并存的配置


  1. 总体思路和设备连接方法


  通过上面介绍的两种方法进行配置,都能顺利地实现INTERNET的访问,但每种方法即有优点,又存在一定的缺点,且两种方法的优点是互补的。哪能不能将两种方法的优点合二为一,方法三就是一种鱼和熊掌能够兼得的方案。集成了一、二两种方法的优点,即节省了IP地址,又能通过代理服务器提供的CACHE来提高INTERNET的访问效率。


  采用这种方案来访问互联网,设备连接方法如下:


  代理服务器上安装两块网卡,两块网卡均连接在交换机上,在设置IP地址时,两块网卡均设置内部私有地址,但这两个地址应不属于一个网络(即IP地址的网络地址不同),一块用于与内部网通信(网卡1),一块用于与路由器通信(网卡2),否则代理无法实现。


  在代理服务器上不要安装NETBEUI协议,仅安装TCP/IP协议。(注意:这一步必须要做,否则会因为代理服务器与交换机之间连接线路冗余而导致代理服务器NETBIOS计算机名冲突而影响正常通信)


  路由器以太口也设置一个内部私有地址,该地址因与网卡2的地址在同一个网络(即IP地址的网络地址与网卡2相同)


  2. 路由器的设置


  (1) 网络连接


  同上,地址参看下面


  (2)路由器的配置


en

config t

ip nat pool c2610 211.90.139.41 211.90.139.42 netmask 255.255.255.252

(定义一个地址池c2601,其内包含了两个空闲的合法IP地址,供NAT转换时使用)

int e0/0

ip address 192.168.1.1 255.255.255.0

ip nat inside

exit

(设置以太口的IP地址,并设置其为连接内部网的端口)

interface s0/0

ip address 211.90.137.25 255.255.255.252

ip nat outside

exit

(设置广域网端口的IP地址,并设置其为连接外部网的端口)

ip route 0.0.0.0 0.0.0.0 211.90.137.26

(设置动态路由)

access-list 2 permit 192.168.0.1 0.0.0.255

(建立访问控制列表)

! Dynamic NAT

!

ip nat inside source list 2 pool c2610 overload

(建立动态地址翻译)

line console 0

exec-timeout 0 0

!

line vty 0 4

end

wr

(保存所作的设置)




  2. 代理服务器的设置


  代理服务器上安装两块网卡,两块网卡均连接在交换机上,网卡1设IP地址为:192.168.0.4,不设网关;网卡2设IP地址为:192.168.1.2,设其网关为192.168.1.1(路由器以太口)。


  按照上面的方法设置好网卡后,再安装一套代理软件即可。(如:MS PROXY SERVER 2.0、WINGATE等,代理软件的安装调试方法请参阅其它资料)


  注意:在安装代理软件时(以MS-PROXY 2.0为例),在指定LAT表时,应将地址范围192.168.0.0-192.168.255.255排除在外,否则代理无法正常工作。


  3. 工作站的设置


  在这种配置之下,工作站既可以通过设置代理上网,也可以通过设置网关直接上网。


  若只通过代理上网,设置方法与方法二完全一致。


  若只通过网关上网,要求工作站必须设置静态IP地址,IP地址应设为192.168.1.X,


  与路由器以太口在同一个网段,并设置网关为:192.168.1.1,设置DNS为接入商提供的地址。


  若想两种方法并存,则需要在TCP/IP中设置两个静态IP地址:192.168.0.X和192.168.1.X,并设置网关为:192.168.1.1 ,DNS为接入商提供的地址。使用时只需在浏览器等软件中打开或关闭代理设置即可在代理与网关上网之间进行切换。

一天超过4小时在电脑前工作的话一定要看

1、伸伸懒腰,松松骨,每小时都要做


2、推下推下推下,每小时推松手筋!



3、不想变硬颈,得转转转,两边转!





4、千万千万千万,每小时转转胳膊!




5、办公坐姿有讲究!




6、拿鼠标有正确姿势哦!!!


7、记住每小时转转脚松松筋




8、记住每小时松松手拉拉筋




9、记住每小时踢踢腿,拉拉筋


IP+mac+端口绑定。。。

1,端口+MAC

a)AM命令

使用特殊的AM User-bind命令,来完成MAC地址与端口之间的绑定。例如:

[SwitchA]am user-bind mac-address 00e0-fc22-f8d3 interface Ethernet 0/1


配置说明:由于使用了端口参数,则会以端口为参照物,即此时端口E0/1只允许PC1上网,而使用其他未绑定的MAC地址的PC机则无法上网。但是PC1使用该MAC地址可以在其他端口上网。



b)mac-address命令

使用mac-address static命令,来完成MAC地址与端口之间的绑定。例如:

[SwitchA]mac-address static 00e0-fc22-f8d3 interface Ethernet 0/1 vlan 1

[SwitchA]mac-address max-mac-count 0


配置说明:由于使用了端口学习功能,故静态绑定mac后,需再设置该端口mac学习数为0,使其他PC接入此端口后其mac地址无法被学习。



2,IP+MAC


a)AM命令

使用特殊的AM User-bind命令,来完成IP地址与MAC地址之间的绑定。例如:

[SwitchA]am user-bind ip-address 10.1.1.2 mac-address 00e0-fc22-f8d3


配置说明:以上配置完成对PC机的IP地址和MAC地址的全局绑定,即与绑定的IP地址或者MAC地址不同的PC机,在任何端口都无法上网。


支持型号:S3026E/EF/C/G/T、S3026C-PWR、E026/E026T、S3050C、E050、S3526E/C/EF、S5012T/G、S5024G


b)arp命令

使用特殊的arp static命令,来完成IP地址与MAC地址之间的绑定。例如:

[SwitchA]arp static 10.1.1.2 00e0-fc22-f8d3


配置说明:以上配置完成对PC机的IP地址和MAC地址的全局绑定。



3,端口+IP+MAC


使用特殊的AM User-bind命令,来完成IP、MAC地址与端口之间的绑定。例如:

[SwitchA]am user-bind ip-address 10.1.1.2 mac-address 00e0-fc22-f8d3 interface Ethernet 0/1


配置说明:可以完成将PC1的IP地址、MAC地址与端口E0/1之间的绑定功能。由于使用了端口参数,则会以端口为参照物,即此时端口E0/1只允许 PC1上网,而使用其他未绑定的IP地址、MAC地址的PC机则无法上网。但是PC1使用该IP地址和MAC地址可以在其他端口上网。

[八卦故事]内核头文件传奇

做 LFS 是不是很累了?OK,让我先来讲一段八卦故事,放松放松神经,然后再继续冒险吧。。。


在 Linux 2.2/2.4 的纯真年代,内核头文件一直保持着 Unix 世界的”KISS”传统,只需将内核源码树中的头文件直接复制到 /usr/include 中即可使用,一切都是那么 Simple and Stupid …


但是随着 2.6 系列内核的发布,事情开始变得混乱和复杂起来。首先是内核开发者宣布强烈反对直接使用”未净化”的”原始”内核头文件,他们建议使用发行版提供的”经过净化的”内核头文件。于是各种发行版开始”八仙过海,各显神通”,由于”净化”方法各不相同,结果就是每个发行版都有着自己与众不同的内核头文件。更为严重的是,内核开发者甚至推荐编译 Glibc 的头文件也要使用发行版提供的”经过净化的”内核头文件。由于 Glibc 和 Kernel 是整个系统的根基,这样一来 Linux 便像传统的 Unix 那样开始走向分裂。


另一件哭笑不得的事情是,虽然内核开发者强烈推荐使用发行版提供的”经过净化的”内核头文件,但是 Glibc 的开发者却不买账,他们推荐使用”未净化”的”原始”内核头文件来编译 Glibc ,两个开发组一直坚持各自的见解,互不妥协!另外,两个开发组在应当由谁提供内核头文件的问题上意见也不一致:内核开发组认为应当由发行版的制作者提供,而 Glibc 开发组认为应当由内核开发组提供。结果就是”神仙打架,凡人遭殃”,虽然对 Debian 这种大型发行版来说,提供自己独有的”经过净化的”内核头文件不会成为多大的负担,但是对于那些没有能力或精力的小心发行版制作者和我们这些 DIY fans 来说却是一场灾难!要么直接使用其他发行版的成果,要么自力更生;前者让人心有不甘(没有了 DIY 的原汁原味),后者让人望而生畏(有几个人知道啥叫”净化”?怎么净化?)。


危机时刻总会有英雄的出现,就在一片恐慌之际,一个叫”linux-libc-headers”项目组诞生了!他们向我们这些”凡人”们提供了安全的、普遍适用的、”经过净化的”内核头文件,真是及时雨啊!天空重新晴空万里……然而好景不长,由于精力和人力有限,该项目在发布了 2.6.12.0 版本之后,遗憾的离开了这个世界。这样一来,2.6.12 以上版本的内核新特性(比如新的系统调用)和 ABI/API 的变化就无法反映出来,对于我们这些 DIY fans 来说,世界重回混沌……


俗话说,”合久必分,分久必合”,大概是内核开发组意识到了如果继续固执己见将不可避免的导致混乱以及重蹈 Unix 逐渐走向分裂的覆辙,于是从 2.6.18 版本开始,内核开发组担负起了维护一份统一的、”经过净化的”内核头文件的职责(窃以为这原本就是他们的责任)。现在获取”经过净化的”内核头文件又变得简单起来,只要在内核源码树中使用 make headers_install 即可,而且不用再担心更新问题。对于我们这些 DIY fans 来说,又可以重新 Day Day Happy 了。


不过,由于磨合需要时间。目前 Glibc-2.4 以下的版本都无法配合这种新式头文件编译成功。不过偶相信前途一片光明……

把LFS LiveCD安装到硬盘

LFS LiveCD 5.2-5绝对值得一用的linux livecd。虽然没有其它livecd强大,但只有490M的它速度是其它发行版无法比拟的。kernel 2.6.16.38和xorg 6.9 + xfce 4.1,编译环境是gcc 4.0.1 + libc 2.3.6。先不说用它做LFS,光是研究一下它的结构就可以对linux了解很多了。可惜的是这只是一个livecd,不能install。网上传出可以把它安装到硬盘上。查询了相关资料,发现这里所说的安装……并不是把livecd装到硬盘上,而是把livecd从光盘的载体换到硬盘。不是很明白??好说,说详细一点你就明白了。这个livecd里仅有几个文件,一些是说明,一些是用来引导系统和解压的,还有一个文件root.ext2就是整个系统,网上的“安装”只是更改了引导系统,让引导系统不再从光盘去搜寻root.ext2,而从硬盘去查找。这样做有一个好处,一个坏处,好处就是root.ext2移到了硬盘(任何文件系统,但需要内核支持),减少了光驱运行时间,延长了光驱寿命,而坏处…….它还是一个livecd我们所做的一切改动(有意或无意)都会在重启后还原。

  经过几天的研究还有网上查的相关资料,我发现了可以把livecd真正安装到硬盘的方法。像一个发行版一样的使用。下面说说我做的过程,不过在这之前先说说livecd的引导过程。

  首先,光盘引导后,引导程序会在光盘上找到内核linux(或是linux64,64位系统使用的内核),然后调入光盘上的INITRAMFS_DATA_CPIO.GZ,这个文件里包含的程序可以把root.ext2解压(这个文件在光盘上只有490M,是被压缩的,解压后有1.5G),然后开始内核的引导过程,在这个过程里内核会把root.ext2装载到根文件系统(我不清楚原理,但1.5G的文件不可能解出来放在内存,这里用的应该是和虚拟光驱感觉一样的方法,通过接口调用的),然后内核转到根文件系统开始正常的系统启动过程。这里的内核是把ISO9660编译进去的,否则找不到光驱。

  现在我们来开始动手安装吧。当然要先用livecd引导起来。

  用fdisk分区,再用mke2fs建立文件系统(如mke2fs -j /dev/hda10)。然后把分区挂载起来

  mkdir /mnt/livehd

  mount /dev/hda10 /mnt/livehd

  把root.ext2挂载到/mnt/livecd

  mkdir /mnt/livecd

  mount -o loop /dev/shm/.cdrom/root.ext2 /mnt/livecd //不用加-t ext2也可以的

  网上有的说root.ext需要解压才能mount,要装XXXX解压,其实没这个必要,用livecd启动后在/dev/shm/.cdrom/里的root.ext2已经是可以直接mount的了。何必又去mount个cdrom然后解压cdrom里的root.ext2呢:)

****************深度思考添加

我使用的是lfslivecd-x86-6.2-4,光盘启动好后,已经被挂载了/上。

  现在当然是把系统复制到硬盘再做设置

  cp -Rv /mnt/livecd/* /mnt/livehd

  把dev设备挂上

  mount –bind /dev /mnt/livehd/dev

  然后就chroot过去

  chroot /mnt/livehd

  删除原来的/boot,这里面的东西我们用不上了,它们是用来做光盘起动的。

  rm -fr /boot

  mkdir /boot /boot/grub

  cp /usr/lib/grub/i386-pc/stage{1,2} /boot/grub

  现在需要编译内核,内核在/lfs-sources下有一个2.6.16.38的。当然你也可以提前下个其它版本的放在电脑上,再多mount一个区cp过来。

  你可以用两个tty,一个编译内核,一个做必要的设置。内核编译的过程不详说了。不过要注意/boot下的内核名,之后要用到,我不是用make install的。我是用cp arch/i386/boot/bzImage /boot/lfskernel-2.6.20.16(和LFS书上用同样的方法,我用的内核版本是2.6.20.16,不是lfs-sources里的2.6.16.38)

  需要设置的地方最重要的有/etc/fstab /boot/grub/menu.lst

  /etc/fstab,需要把里面加载到/的那一行改成你的设置,比如我的是

  /dev/hda10 / ext3 default 1 1

  我还加上了swap

  /dev/hda11 swap swap pri=1 0 0

  而/boot/grub/menu.lst这个文件是没有的。需要建一个,当然你需要按你的情况来设置。

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

  default 0

  timeout 30

  hiddenmenu

  

  title LFS LiveHD 6.2-5

    root (hd0,9)

    kernel /boot/lfskernel-2.6.20.16 root=/dev/hda10 vga=791 quiet

  title Windows

    root (hd0,0)

    chainloader +1

  EOF

  这里注意root (hd0,?)要用你实际用来装livecd的硬盘分区,kernel /boot/{文件名}要和你的一样,root=/dev/hda{?}也要和你的设置一样


  现在需要做一些小设置。LFS帮我们想的很全了。用现成的。

  cd /lfs-sources

  tar xf lfs-bootscripts-6.2.tar.bz2

  cd lfs-bootscripts-6.2

  make install

  cd ..

  rm -fr lfs-bootscripts-6.2

  LFS脚本装好后去掉启动的选择窗口

  rm -f /etc/rc.d/rcsysint.d/{S59clkconf,S69langconf}

  这时内核差不多也完了吧 :)

  还有个地方/etc/inittab

  删除这个文件里的

  sd:06:once:/usr/bin/shutdown-helper

  这一行,要不会引起重启出错。

  下面的1:xxx 2:xxx…..里改一下,改成

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

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

  以此类推,这样就有登录了,要不原来的会自动登录…….

  其实livecd已经在你的硬盘上安家了。不过在重启之前,记得最重要的

  passwd root

  livecd默认是空密码,但空密码是不能登录的。


  至此,重启吧,可以去liveHD里玩了。其实过程里设置部分全和LFS手册上的一样或是没多大区别。当然里了系统之后还有很多东西需要设置,如网卡之类。

  再装上个office,这下可以在liveHD下看着手册做LFS了。又快又爽。

摘记texinfo-4.8.tar.bz2

昨天开始弄LFS。。。装软件包的时候遇到点麻烦。。不是“点”。。是特别麻烦。。。。不过也锻炼了能力。。。ncurses-5.4.tar.gz..这个包正下着呢。就先往下装了。。没想到装texinfo-4.8.tar.bz2这个包的时候。。出错了。。。GOOGLE。。百度。。有结果了。。。原来装这个东西需要ncurses-5.4.tar.gz这个的支持。。。我晕。。。

以下是从CLFS上搜着的一篇不装ncurses-5.4.tar.gz也装texinfo-4.8.tar.bz2的文章。。

Re: [Clfs-commits] [CLFS Trac] #126: Ncurses Host System Requirement


CLFS Trac

Mon, 10 Sep 2007 01:48:56 -0700


#126: Ncurses Host System Requirement

———————–+—————————————————-

Reporter:: jcicconee ||       Owner:: [EMAIL PROTECTED]

      Type:: taskk      ||      Status:: neww                             

Priority:: majorr     ||   Milestone:: CLFS Standard 1.1.00             

Component:: BOOKK      ||     Version:: CLFS Standard 1.1.00             

Resolution::            ||    Keywords:: texinfo tputs ncursess           

———————–+—————————————————-

Comment (by [EMAIL PROTECTED]):


Texinfo can be installed into the temp-system without ncurses – I believe

the only thing in Texinfo that needs ncurses is the “info” program, and

that isn’t needed in /tools. We should be able to do “make -C lib && make

-C makeinfo && make -C util” followed by either “make -C makeinfo install

&& make -C util install” or “cp makeinfo/makeinfo util/install-info

/tools/bin”. Of course, this is assuming that these are all that are

needed in the temp-system, and I could very well be wrong…

LFS──Linux from Scratch

LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化的linux,不单单是个性的桌面。


LFS 存在的一个重要原因是可以帮助人们学习 linux 系统的内部是如何工作的。构建一个 LFS 系统会帮助演示是什么使 linux 运转,各种组件如何在一起互相依赖的工作。最好的事情之一,是这种学习的经历给予的是一种能力,能够定制满足您自己需要的 linux。


LFS 的一个关键的好处是它让用户对于系统有更多的控制,而不是依赖于某些人的 linux 实现。在 LFS 的世界里,你是坐在司机的位置,掌控系统的每一个细节,比如目录层次和启动脚本配置。你也能掌控程序在哪里,为何,以及怎样被安装。


LFS 的另一个好处是可以创建一个非常紧凑的 linux 系统。当安装一个常规的发行版时,人们经常要被迫安装一些可能永远不会用到的程序。这些程序浪费宝贵的磁盘空间,或更糟的是占用 CPU资源。要构建一个少于100兆(MB)的 LFS 系统不是一件难事,这相比较目前大多数的发行版要小很多。这听起来是不是仍然占许多空间?我们中一些人的工作是创建一个非常小的嵌入式的 LFS 系统。我们成功的构建了一个系统,在只运行 Apache 服务器的情况下,大约占8MB磁盘空间。进一步的缩减能够减至5MB或更少。你用一个常规的分发版本试试?这也只是设计你自己的 linux 所带来的好处之一。


我们可以拿 linux 发行版与快餐店出售的汉堡打比喻,您不能决定您应该吃什么。相反,LFS 没有给您一个汉堡。而是给您一张制作汉堡的配方。用户可以查阅配方,减掉不想要的配料,增加你自己的配料以增强汉堡的口味。当你对配方满意的时候,开始去做准备。您可以采用确定的方式:或烤,或烘,或炸,或焙。


另外一个比方是把 LFS 与建筑房子比较。LFS 提供房子的框架蓝图,但是需要您去建筑它。LFS 包含了在这过程中调整计划的自由,定制满足用户的需要和参考。


用户定制的 linux 系统的另一个好处是安全性。通过从源码编译整个系统,您能够审查任何东西,打上所有的安全补丁,而不需要等待别人去编译好修补了安全漏洞的二进制包。除非是您发现并制作的补丁,否则您得不到任何的保证,新的二进制包是否正确编译或修正了问题。



LFS 文档
http://lfs.linuxsir.org/doc/lfs6.1zh/

vi命令集

以下是一篇比较全的vi命令集:(感谢jaxy,感谢chinaitlab)

————————————————————————


  鉴于大家在使用VI 的时候有一定的陌生,在这里借花献佛,从兄弟版[SHELL]中整理出以下关于VI编程的高级技巧,希望对大家学习UNIX有所帮助,并希望大家能结合使用HPUX的心得体会对这些经验进行进一步的扩展。

  1.交换两个字符位置

  

  xp

  2.上下两行调换

  ddp

  3.把文件内容反转

  :g/^/m0/ (未通过)

  

  4.上下两行合并

  J

  5.删除所有行

  dG

  6.从当前位置删除到行尾

  d$

  7.从当前位置复制到行尾

  y$ 如果要粘贴到其他地方 p 就可以了

  

  

  由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态

  8.

  :ab string strings

  例如 “:ab usa United States of America” ,

  当你在文见里插入 usa 时

  United States of America 就蹦出来了

  9.

  :map keys new_seq

  定义你当前 键盘命令

  10.

  :set [all]

  vi or ex 的编辑状态

  如 显示每行 :set nu

  11.

  在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的

  下面。

  

  12.

  单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S

  

  13.

  

  :%s/old_word/new_word/g

  这个指令是于在整个文件中替换特定字符串

  

  14.光标控制

  

  k:上移 nk 上移n行

  j:下移 nj 下移n行

  

  

  将光标移到第n行,按下 mk

  将光标移到第m行,按下 “ay’k

  即将第n到m的行存到a寄存器,以此类推,b,c……..寄存器等

  

  这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用

  

  

  想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可,以此类推,b,c……..寄存器等

  

  在当前屏幕中

  H 跳到第一行

  M 跳到中间一行

  L 跳到最后一行

  

  15.

  表8-2 删除命令

  删除命令操作

  d l 删除当前字符(与x命令功能相同)

  d 0 删除到某一行的开始位置

  d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)

  d w 删除到某个单词的结尾位置

  d 3 w 删除到第三个单词的结尾位置

  d b 删除到某个单词的开始位置

  d W 删除到某个以空格作为分隔符的单词的结尾位置

  d B 删除到某个以空格作为分隔符的单词的开始位置

  d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置

  d) 删除到某个语句的结尾位置

  d 4) 删除到第四个语句的结尾位置

  d( 删除到某个语句的开始位置

  d } 删除到某个段落的结尾位置

  d { 删除到某个段落的开始位置

  d 7 { 删除到当前段落起始位置之前的第7个段落位置

  d d 删除当前行

  d /t e x t 删除从文本中出现“ t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的

  位置(但不包括该字样)之间的内容

  d fc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括

  该字符)之间的内容

  d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容

  D 删除到某一行的结尾

  d $ 删除到某一行的结尾

  5 d d 删除从当前行所开始的5行内容

  d L 删除直到屏幕上最后一行的内容

  d H 删除直到屏幕上第一行的内容

  d G 删除直到工作缓存区结尾的内容

  d 1 G 删除直到工作缓存区开始的内容

  

  修改命令操作

  c l 更改当前字符

  c w 修改到某个单词的结尾位置

  c 3 w 修改到第三个单词的结尾位置

  c b 修改到某个单词的开始位置

  c W 修改到某个以空格作为分隔符的单词的结尾位置

  c B 修改到某个以空格作为分隔符的单词的开始位置

  c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置

  c 0 修改到某行的结尾位置

  c) 修改到某个语句的结尾位置

  c 4) 修改到第四个语句的结尾位置

  c( 修改到某个语句的开始位置

  c } 修改到某个段落的结尾位置

  c { 修改到某个段落的开始位置

  c 7 { 修改到当前段落起始位置之前的第7个段落位置

  c tc 修改当前行直到下一个字符c所出现位置之间的内容

  C 修改到某一行的结尾

  c c 修改当前行

  5 c c 修改从当前行所开始的5行内容

  

  

  .重复上一次修改!

  

  

  表8-4 替换命令

  替换命令操作

  s 将当前字符替换为一个或多个字符

  S 将当前行替换为一个或多个字符

  5 s 将从当前字符开始的5个字符替换为一个或多个字符

  

  

  vi替换使用规则:

  :g/s1/s/s2/s3/g

  第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换

  s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

  

  

  16.

  

  fx

  往右移动到 x 字符上

  Fx

  往左移动到 x 字符上

  tx

  往右移动到 x 字符前

  Tx

  往左移动到 x 字符后

  (注意:以上四个命令中,其中x是键入的字符)

  ;

  分号,配合 f 和 t 使用,重复一次

  ,

  逗号,配合 f 和 t 使用,反方向重复一次

  

  

  17. vi 环境选项 Solaris ksh

  

  noautoindent nomodelines noshowmode

  autoprint nonumber noslowopen

  noautowrite nonovice tabstop=8

  nobeautify nooptimize taglength=0

  directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags

  noedcompatible prompt tagstack

  noerrorbells noreadonly term=vt100

  noexrc redraw noterse

  flash remap timeout

  hardtabs=8 report=5 ttytype=vt100

  noignorecase scroll=11 warn

  nolisp sections=NHSHH HUuhsh+c window=23

  nolist shell=/bin/ksh wrapscan

  magic shiftwidth=8 wrapmargin=0

  mesg noshowmatch nowriteany

  

  

  For C-Shell:

  setenv EXINIT “set nu”

  For Bourne or Korn Shell:

  EXINIT=”set nu”; export EXINIT

  For Korn Shell Only (alternate method):

  typeset -x EXINIT=”set nu”

  在 .profile 里设置 vi 的环境选项 , 以上均测试过

  

  

  18.标记文本

  

    mchar   用字母char标记当前光标的位置

    `char   移至char所标记处

    ’char   移至char标记所在行的开头处

    ”     移至当前行上一次所在位置(在光标移动之后)

交叉编译环境介绍

交叉编译环境介绍


  交叉编译是嵌入式开发过程中的一项重要技术,它的主要特征是某机器中执行的程序代码不是在本机编译生成,而是由另一台机器编译生成,一般把前者称为目标机,后者称为主机。采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。


  linux下的交叉编译环境重要包括以下几个部分:


  针对目标系统的编译器gcc


  针对目标系统的二进制工具binutils


  目标系统的标准c库glibc


  目标系统的linux内核头文件


  交叉编译环境的建立步骤


  下载源代码


  下载包括binutils、gcc、glibc及linux内核的源代码(需要注意的是,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径。


  编译binutils


  首先运行configure文件,并使用–prefix=$PREFIX参数指定安装路径,使用–target=arm-linux参数指定目标机类型,然后执行make install。


  配置linux内核头文件


  首先执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架构,因为缺省架构为主机的cpu架构),这一步需要根据目标机的实际情况进行详细的配置,笔者进行的实验中目标机为HP的ipaq-hp3630 PDA,因而设置system type为SA11X0,SA11X0 Implementations中选择Compaq iPAQ H3600/H3700。


  配置完成之后,需要将内核头文件拷贝到安装目录: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux


  第一次编译gcc


  首先运行configure文件,使用–prefix=$PREFIX参数指定安装路径,使用–target=arm-linux参数指定目标机类型,并使用–disable-threads、–disable-shared、 –enable-languages=c参数,然后执行make install。这一步将生成一个最简的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可。


  交叉编译glibc


  这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm- linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的 include目录;或者,也可以在接下来要执行的configure命令中使用–with- headers参数指定linux内核头文件的实际路径。


  configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc):


  CC=arm-linux-gcc ./configure –prefix=$PREFIX/arm-linux –host=arm-linux –enable-add-ons


  最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm- linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。


  第二次编译gcc


  运行configure,参数设置为–prefix=$PREFIX –target=arm-linux –enable-languages=c,c++。


  运行make install。


  到此为止整个交叉编译环境就完全生成了。


  几点注意事项


  第一点、在第一次编译gcc的时候可能会出现找不到stdio.h的错误,解决办法是修改gcc/config/arm/t-linux文件,在 TARGET_LIBGCC2_CFLAGS变量的设定中增加-Dinhibit_libc 和-D__gthr_posix_h。


  第二点、对与2.3.2版本的glibc库,编译 linuxthread/sysdeps/pthread/sigaction.c时可能出错,需要通过补丁glibc-2.3.2-arm.patch 解决:执行patch -p1 < glibc-2.3.2-arm.patch


  第三点、第二次编译gcc时可能会出现libc.so的错误,这是需要利用文本编辑器手动修改libc.so。

cannot restore segment prot after reloc: Permission denied

Article Title: Error: cannot restore segment prot after reloc: Permission denied
Article ID: 3092
Article Name: INSTALL88
Last Updated: 5/10/2006 12:06:24 PM
Products: IDL; ENVI
OS Platforms: Linux-Intel

Topic:

Some Linux distributions with SELinux enabled may prevent IDL from running under the default security context. This TechTip is a workaround for CR#41937

Discussion:

Newer Linux distributions have enabled new kernel security extensions from the SELinux project at the NSA. These extensions allow finer-grained control over system security. However, SELinux also changes some default system behaviors, such as shared library loading, that can be problematic to third party programs.

If you receive the error message “cannot restore segment prot after reloc: Permission denied” when launching IDL, then your SELinux configuration is preventing IDL from launching.

To rectify this issue, you can either:

  • Change the default security context for IDL by issuing the command:

    chcon -t texrel_shlib_t /usr/local/rsi/idl_6.1/bin/bin.linux.x86/*.so

  • Disabling SELinux altogether by setting the line

    SELINUX=disabled

    in your /etc/sysconfig/selinux file.

For more information about SELinux, please consult your Linux distribution vendor.