全部博文(85)
分类: LINUX
2010-07-21 20:20:34
操作环境: 1 super-server介绍 2 inetd (1) inetd获得,可以从上下载。 3 xinetd (3) 编译 默认配置选项含义如下: 以下为具体服务配置样例: ftp配置选项含义如下: (6) xinetd.conf样例 defaults
service login
service comsat service talk 构建嵌入式linux系统 linux网络管理员指南 第二版 Linux Network Administrator's Guide 3rd Edition.pdf.chm inetd被称作 “Internet 超级服务器”, 因为它可以为多种服务管理连接。 当 inetd 接到连接时, 它能够确定连接所需的程序, 启动相应的进程,并把 socket 交给它 (服务 socket 会作为程序的标准输入、 输出和错误输出描述符)。 使用 inetd 来运行那些负载不重的服务有助于降低系统负载,因为它不需要为每个服务都启动独立的服务程序。
一般busybox里包含有inetd不需要特别安装,手工安装如下: 1、到 下载netkit-base-0.17.tar.gz 2、解压后进入netkit-base-0.17配置configure 文件有configure、MCONFIG.in、Makefile、MRULES,配置configure能生成MCONFIG后通过make安装。 由于configure会test的是你主机环境,所以需要修改configure,把文件 ./_ _conftest || exit 1;句前全加#,然后运行: $CC=arm-linux-gcc ./configure –prefix=XXXX(你安装的目录) 3、安装 $make 由于Makefile不适应与ARM-LINUX平台,所以不能用make install安装,需要手工安装 $cp inetd/inetd XXX/usr/sbin $cp etc.sample/inetd.conf XXX/etc 按说明配置XXX/etc下的inetd.conf 例如远程控制 telnet stream tcp nowait root /usr/sbin/telnetd 需要开机即启动则在XXX/etc/initab下加上 ::respawn:/usr/sbin/inetd –i 另:etc.sample里有很多配置例程可用,inetd包里包含了ping可用。 xinetd比inetd更优越好用,提供了访问控制,改进的日志功能和资源管理,用同样功能的,扩展了的语法取代了 inetd中的通用的行。 安装方法和inetd类似(不需要改configure),软件在可下载 下面对xinetd的配置做些说明: 1、我通常使用下面的命令启动xinetd,把它放在我的Internet服务启动脚本中: /usr/sbin/xinetd -filelog /var/adm/xinetd.log -f /etc/xinetd.conf 这告诉 xinetd 对所有的服务都进行纪录,日志保存到文件 /var/adm/xinetd.log中,并且使用配置文件/etc/xinetd.conf。这篇文章中的大量篇幅都将用在这个配置文件上。 2、xinetd 设置参数的语法: <指示directive> <操作符operator> <值value>. xinetd 指示符列在表一中,在这里我们将忽略 flags,type,env 和 passenv指示符。 我对将对only_from 和 no_access以及额外的日志选项加以更多的讨论 表 1. xinetd的指示符 ----------------------------------------------------------------------- 指示符 描述 socket_type 网络套接字类型, 流或者数据包 protocol IP 协议, 通常是TCP或者 UDP wait yes/no, 等同于inetd的wait/nowait user 运行进程的用户 ID server 执行的完整路径 server_args 传递给server的变量,或者是值 instances 可以启动的实例的最大的值 start max_load 负载均衡 log_on_success 成功启动的登记选项 log_on_failure 联机失败的时候的日志信息 only_from 接受的网络或是主机 no_access 拒绝访问的网络或是主机 disabled 用在默认的 {} 中 禁止服务 log_type 日志的类型和路径 FILE /SYSLOG nice 运行服务的优先级 id 日志中使用的服务名 ------------------------------------------------------------------------ 操作符非常简单, = 或者+=。用 =,右边给定的值传给左边的指示符。 +=也是非常直接的,用于给一个已经指定的指示符添加一个值。没有它,原先的指示符就会被覆盖,这样可以用来展开访问列表,或者跨越多行。 用如下的格式描述服务: ---------------------------------- 服务名 { 指示符 = 值 指示符 += 值 } ---------------------------------- 服务名一定要在 /etc/services列出 ,并且要用使用合适的socket和协议。 3、日志中有几个值可以用于得到你的服务器的信息 表2 不同的日志指示值 __________________________________________________________________________ 值 成功/失败 描述 PID success 当一个连接成功时登记产生的进程的 pid HOST both 登记远程主机地址 USERID both 登记远程用户的RFC 1413 ID EXIT success 登记产生的进程的完成 DURATION success 登记任务持续的时间 ATTEMPT failure 登记连接失败的原因 RECORD failure 关于连接失败的额外的信息 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangbomy/archive/2007/04/27/1587485.aspx 1 构造目标板的根目录及文件系统
1.1 建立一个目标板的空根目录 我们将在这里构建构建根文件系统,创建基础目录结构. 存放交叉编译后生成的目标应用程序(BUSYBOX,TINYLOGIN),存放库文件等。 # mkdir rootfs # cd rootfs # pwd /home/arm/dev_home/rootfs 1.2 在rootfs中建立Linux目录树 #mkdir bin dev etc home lib mnt proc sbin sys tmp root usr #mkdir mnt/etc #mkdir usr/bin usr/lib usr/sbin #touch linuxrc #tree . | --bin | --dev | --etc | --home | --lib | --linuxrc /* 此文件为启动脚本,是一shell脚本文件。本文后面有专门介绍*/ | --mnt | ` --etc | --proc | --sbin | --sys | --tmp | --root ` --usr | --bin | --lib ` --sbin 权限参照你的linux工作站即可,基础目录介绍参见本文参考资料(未尾)。 需要说明的一点就是etc目录存放配置文件,这个目录通常是需要修改的,所以在linuxrc脚本当中将etc目录 挂载为ramfs文件系统,然后将mnt/etc目录中的所有配置文件拷贝到etc目录当中,这在下一节的linuxrc脚本 文件当中会有体现。 1.3 创建linuxrc文件 1. 创建linuxrc,加入如下内容: #vi linuxrc !/bin/sh echo "mount /etc as ramfs" /bin/mount -n -t ramfs ramfs /etc /bin/cp -a /mnt/etc/* /etc echo "recreate the /etc/mtab entries" /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 / echo "mount /dev/shm as tmpfs" /bin/mount -n -t tmpfs tmpfs /dev/shm echo "mount /proc as proc" /bin/mount -n -t proc none /proc echo "mount /sys as sysfs" /bin/mount -n -t sysfs none /sys /bin/mount -n -t usbdevfs none /proc/bus/usb /bin/mount -n -t yaffs /dev/mtdblock/3 /var /bin/mount -n -t yaffs /dev/mtdblock/4 /home exec /sbin/init 2. 修改权限 #chmod 775 linuxrc #ls linuxrc -la -rwxrwxr-x 1 root root 533 Jun 4 11:19 linuxrc 当编译内核时,指定命令行参数如下 Boot options -->Default kernel command string: 我的命令行参数如下 noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 其中的init指明kernel执行后要加载的第一个应用程序,缺省为/sbin/init,此处指定为/linuxrc 2 移植Busybox 2.1 下载busybox 从下载busybox1.1.3到/tmp目录当中,并解压. 2.2 进入解压后的目录,配置Busybox #make menuconfig Busybox Settings --> General Configuration --> [*] Support for devfs Build Options --> [*] Build BusyBox as a static binary (no shared libs) /* 如果只安装busybox 将busybox编译设为静态连接 */ [*] Do you want to build BusyBox with a Cross Compiler? (/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compiler prefix /* 指定交叉编译工具路径*/ Installation options --> [*] Don't usr /usr /*之前没有选择这个选项,kernel始终都没有cramfs加载成功,不知道原因是什么?如果你知道的话请告诉我*/ (/home/arm/dev_home/rootfs/) BusyBox Installation prefix Init Utilities --> [*] init [*] Support reading an inittab file /* 支持init读取/etc/inittab配置文件,一定要选上*/ Shells --> Choose your default shell (ash) > /* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件 * 看看我们前头的linuxrc脚本的头一句: * #!/bin/sh 是由bin/sh来解释执行的 */ [*] ash Coreutils --> [*] cp [*] cat [*] ls [*] mkdir [*] echo (basic SuSv3 version taking no options) [*] env [*] mv [*] pwd [*] rm [*] touch Editors --> [*] vi Linux System Utilities > [*] mount [*] umount [*] Support loopback mounts [*] Support for the old /etc/mtab file Networking Utilities > [*] inetd /** 支持inetd超级服务器 * inetd的配置文件为/etc/inetd.conf文件, * "在该部分的4: 相关配置文件的创建"一节会有说明 */ 2.3 编译并安装Busybox #make TARGET_ARCH=arm all install *这里需要注意一点的是,只要install busybox,我们根文件系统下先前建好的linuxrc就会被覆盖为一同名二进 制文件。所以要事先备份我们自己的linuxrc,在安装完busybox后,将linuxrc复制回去就好。 3 移植TinyLogin 3.1 下载 从下载tinylogin1.4到/tmp目录当中,并解压. 3.2 修改tinyLogin的Makefile #vi Makefile 修改记录如下: 指明静态编译,不连接动态库 DOSTATIC = true 指明tinyLogin使用自己的算法来处理用户密码 USE_SYSTEM_PWD_GRP = false USE_SYSTEM_SHADOW = false 3.3 编译并安装 #make CROSS=/usr/local/arm/3.3.2/bin/arm-linux- \ PREFIX=/home/arm/dev_home/rootfs all install PREFIX指明根文件路径 4 相关配置文件的创建 进入mnt/etc中, 这里是我们存放配置文件的路径 4.1 创建帐号及密码文件 #cp /etc/passwd . #cp /etc/shadow . #cp /etc/group . 这3个文件是从你工作站当中拷贝过来的,删除其中绝大部分不需要的用户,经过删减后的上述3个文件如下。 那么现在root的登陆密码和你工作站上的登陆口令一致了,这可能透露你工作站的信息 #cat passwd 4.2 创建profile文件 #vi profile # Set search library path # 这条语句设置动态库的搜索路径,极其重要!!! echo "Set search library path int /etc/profile" export LD_LIBRARY_PATH=/lib:/usr/lib # Set user path echo "Set user path in /etc/profile" PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH 4.3创建fstab文件 # vi fstab none /proc proc defaults 0 0 none /dev/pts devpts mode=0622 0 0 tmpfs /dev/shm tmpfs defaults 0 0 5 移植inetd 5.1 inetd的选择及获取 Busybox1.1.3提供了inetd支持。如果读者使用的是较低版本的不提供inetd的Busybox,那么可以考虑使用netkit套件来提供网络服务。强烈建议使用高版本的Busybox。此节后半部分介绍如果编译布署netkit当中的inetd。 5.1.1 获取inetd Netkit套件可以从ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/ 下载。 其中netkitbase0.17中包括inetd程序。下载netkitbase0.17到/tmp目录并解压。 5.2 编译inetd 5.2.1 修改configure 文件 开始配置netkitbase 之前需要先修改configure脚本以免它在主机上执行测试程序。 #vi configure 将每一行出现的. /__conftest || exit 1; 修改成: # ./__conftest || exit 1; 5.2.2 编译 #CC=/usr/local/arm/3.3.2/bin/arm-linux-gcc ./configure #make 5.3 配置inetd 5.3.1 拷贝inetd 到根文件系统的usr/sbin 目录中 #cp inetd/inetd /home/arm/dev_home/rootfs/usr/sbin/ 拷贝inetd的配置文件inetd.conf到根文件系统的/mnt/etc目录中 #cp etc.sample/inetd.conf /home/arm/dev_home/rootfs/mnt/etc 5.3.2 根据需要,修改inetd.conf 配置文件 例如:支持telnetd的inetd.conf配置文件如下 # telnet stream tcp nowait root /usr/sbin/telnetd 5.3.3 拷贝配置文件 etc.sample目录下有许多网络相关配置文件,其中有一些需要拷贝到根文件系统的etc目录当中,记录如下: #cd etc.sample/ #cp host.conf /home/arm/dev_home/rootfs/mnt/etc/ #cp hosts /home/arm/dev_home/rootfs/mnt/etc/ #cp networks /home/arm/dev_home/rootfs/mnt/etc/ #cp protocols /home/arm/dev_home/rootfs/mnt/etc/ #cp resolv.conf /home/arm/dev_home/rootfs/mnt/etc/ #cp services /home/arm/dev_home/rootfs/mnt/etc/ 以上重要配置文件说明如下: host.conf:在系统中同时存在着DNS域名解析和/etc/hosts的主机表机制时,由文件/etc/host.conf来说明了解析器 的查询顺序 hosts:记录主机名到IP地址的映射 protocols:记录常用网络协议及端口别名关系,网络应用程序依赖于此文件 resolv.conf:指定DNS服务器 services:记录知名网络服务及端口,网络编程依赖于此文件 6 移植thttpd Web 服务器 6.1 下载 从下载thttpd到/tmp目录当中,并解压. 6.2 编译thttpd #CC=/usr/local/arm/3.3.2/bin/arm-linux-gcc ./configure --host=arm-linux #vi Makefile 指定静态链接二进制文件 LDFLAGS = -static #make 6.3 配置 6.3.1 拷贝thttpd 二进制可执行文件到根文件系统/usr/sbin/目录中 #cp thttpd /home/arm/dev_home/rootfs/usr/sbin/ 6.3.2 修改thttpd 配置文件 #vi contrib/redhat-rpm/thttpd.conf # This section overrides defaults dir=/etc/thttpd/html #指明WebServer存放网页的根目录路径 chroot user=root #以root身份运行thttpd logfile=/etc/thttpd/log/thttpd.log #日志文件路径 pidfile=/etc/thttpd/run/thttpd.pid #pid文件路径 拷贝thttpd.conf配置文件到根文件系统的mnt/etc/目录, 系统加载后,linuxrc脚本会自动将mnt/etc/下的所有文件拷贝到/etc目录中。 #cp contrib/redhat-rpm/thttpd.conf /home/arm/dev_home/rootfs/mnt/etc/ 6.3.3 转移到根文件系统目录,创建相应的文件 #cd /home/arm/dev_home/rootfs #cd mnt/etc/ 创建thttpd目录 #mkdir thttpd #cd thttpd thttpd目录下的目录结构 | --html | ` --index.html Web Server网页根目录下的默认HTML文件 | --log | ` --thttpd.log 创建一个空文件就可 ` --run `--thttpd.pid 创建一个空文件就可 html目录下的index.html文件内容如下: 7 建立根目录文件系统包 7.1 建立CRAMFS包 7.1.1 下载cramfs 工具 从下载源代码包.把下载包拷贝到dev_home/tools下. #tar -xzvf cramfs1.1.tar.gz 注意:如果你的系统中已经安装了mkcramfs工具, 则在/usr/bin目录下是一个软link, 请先删除该文件之后, 再拷 贝该mkcramfs到/usr/bin下. 7.1.2 制作cramfs 包 #mkcramfs rootfs rootfs.cramfs 7.1.3 写cramfs 包到Nand Flash #su root #cp rootfs.cramfs /tftpboot/ 打开minicom, 进行ARM板的终端模式: 8 参考资料 1. < 中文名:<<构建嵌入式Linux系统>> 轉自:http://blog.csdn.net/wawuta/archive/2007/01/23/1491163.aspx |