openSUSE关机时喇叭报警声的关闭方法
Posted on 十二月 18th, 2009 in 学习总结, 未分类, 经验分享 | No Comments ? opensuse11.2在关机时主板喇叭都会发出令人生厌的beep声音,具体该如何关闭呢?我曾经尝试过以下方法 1 /etc/inputrc中添加一行set bell-style none 2 在bashrc中添加一行setterm -blength 0 3 在/etc/modprobe.d/50-blacklist.conf中添加一行blacklist pcspkr 但是关机时发现以上方法均无效,经多方查找终于发现原因所在: /etc/rc.d/halt文件中有一HALT_SOUND变量,该变量的定义来自于/etc/sysconfig/shutdown中,取值可以为yes,no,octave三者之一,opensuse11.2中默认为no。分析/etc/rc.d/halt脚本对该变量的处理过程,可以发现五行包含echo -en “\a”的语句,将这五行注释掉即可。 opensuse11.1关机时也会发出类似的beep声音,猜测也可照此方法处理。据bash的man手册,echo的转义序列包括如下: \a alert (bell) 响铃
\b backspace 回退
\c suppress trailing newline 删除尾部新行符
\e an escape character 字符 Esc
\f form feed 进纸
\n new line 新行符
\r carriage return 回车
\t horizontal tab 水平跳格
\v vertical tab 竖直跳格
\\ backslash 反斜杠
将winpe环境整合到kickstart
Posted on 十二月 16th, 2009 in 学习总结, 未分类, 经验分享 | 1 Comment ? kickstart可以提供RedHat的自动安装服务,但是redhat官方并未提供任何利用ks安装Windows的说明,经过在网上查找资料,发现利用kickstart配置一个winpe环境,并通过该环境安装Windows是可行的。具体方法如下: 1 配置dhcp服务,配置ris服务(略) 2 配置winpe环境,下载一个winpe环境或者利用pebuilder都可以方便的制作一个winpe环境(详细步骤略) 3 配置smb服务,服务器ip地址为10.20.129.9,smb.conf文件如下: [reminst]
path = /opt/kickstart/tftpboot
public = yes
browsable = true
read only = no
guest ok = yes 4 配置tftp服务: a)由于linux对文件名大小写敏感,首先需要将所有以大写字母命名的文件转换成小写字母命名,转换脚本如下: find ./ -depth |perl -ne ‘chomp;m</[^/]*$>;$d=$`;$_=$f=$&;’’s/([\x80-\xFF].)|(\w)/$1\l$2/g;system “mv”,$d.$f,$d.$_ if $f ne $_’ b)配置/opt/kickstart/tftpboot/rules文件,对tftp传输文件名进行映射,内容如下: ri ^[a-z]:
rg \\ /
rg \# @
rg /../ /..no../
rg A a
rg B b
rg C c
rg D d
rg E e
rg F f
rg G g
rg H h
rg I i
rg J j
rg K k
rg L l
rg M m
rg N n
rg O o
rg P p
rg Q q
rg R r
rg S s
rg T t
rg U u
rg V v
rg W w
rg X x
rg Y y
rg Z z
r ^/(.*) \1 c)启动tftp服务时,需要指定-m参数: /opt/kickstart/hpa-tftp/sbin/in.tftpd -l -v -s /opt/kickstart/tftpboot/ -m /opt/kickstart/tftpboot/rules 5 创建winpe的启动环境: a) 找到 STARTROM.N1_ 文件,并重命名为/opt/kickstart/tftpboot/winpe.0 b) 运行 sed -i -e ’s/NTLDR/peldr/gi’ /opt/kickstart/tftpboot/winpe.0 c) 找到setupldr.exe 文件(i386目录下),并重命名为/opt/kickstart/tftpboot/peldr d) 运行 sed -i -e ’s/winnt\.sif/winpe\.sif/gi’ /opt/kickstart/tftpboot/peldr e) 运行 sed -i -e ’s/ntdetect\.com/ntdetect\.wpe/gi’ /opt/kickstart/tftpboot/peldr f) 找到NTDETECT.COM文件(i386目录下),并重命名为/opt/kickstart/tftpboot/ntdetect.wpe g) 运行 ris-linux-0.4/fixloader.py /opt/kickstart/tftpboot/peldr (此处仅为pxe启动winpe使用,如配置WinXP的安装源则无需这一操作) h) 配置/opt/kickstart/tftpbootwinpe.sif文件如下: [SetupData]
OsLoadOptions = “/fastdetect /minint”
SetupSourceDevice = “\Device\LanmanRedirector\10.20.129.9\reminst\windows\winpe”
[UserData]
ComputerName = WindowsPE 6 配置pxelinux.cfg文件: label winpe
kernel winpe.0 7 至此,winpe的pxe启动环境配置完毕,通过网卡启动后,输入winpe,可以顺利通过网络进入winpe环境。本文参考以下文档:
基于TCP协议的socket基础编程
Posted on 十二月 16th, 2009 in 学习总结, 未分类, 经验分享 | No Comments ? 服务器启动过程: 1 调用socket函数打开一个文件描述符listenfd;
2 声明一个struct sockaddr_in 类型变量servaddr,并作初始化。设定监听ip,端口,采用协议;
3 调用bind函数,将servaddr和listenfd绑定在一起;
4 调用listen函数,将端口置为监听状态,并设置连接数的最大值;服务器服务过程:
while (1) 1 调用accept函数,返回一个文件描述符connfd;
2 调用read从connfd读入,并处理read读入的内容,调用write写入connfd(循环处理客户端请求);
3 关闭connfd; 1 调用socket函数打开一个文件描述符fd;
2 初始化服务器信息,设定服务器ip地址,端口,采用协议;
3 (一般省略)客户端访问服务器一般无须指定自己的端口,因此一般无须调用bind;
4 调用connnet函数连接服务器;
5 调用write写入fd,调用read从fd读出(向服务器循环发送请求);
6 关闭连接;在客户端连接后,服务器将一直循环处理客户端请求,无法再次调用accept函数,继续接受第二个连接,因此一般采取select方法或者fork子进程的方法解决这个问题