当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 用dnsmasq做PXE引导dhcp、tftp调测记录
帖子发表于 : 2009-05-11 1:14 

注册: 2008-11-21 17:18
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
dnsmasq PXE调测记录
2009-05-10

一、安装
代码:
apt-get install dnsmasq


二、配置
代码:
sudo vi /etc/dnsmasq.conf

原有内容均已加#号注释,在最后添加以下设置即可:
代码:
#-----------------------------------------------------------------------
dhcp-range=192.168.1.50,192.168.1.150,255.255.255.0,12h
dhcp-option=3,192.168.1.1
expand-hosts
domain=myhome.cn
#dhcp-option=44,192.168.1.3
#dhcp-boot=pxelinux.0
dhcp-boot=pxelinux.0,boothost,192.168.1.3   #syslinux启动文件名、tftp服务器IP,与上面注释的两行含义相同
enable-tftp
tftp-root=/home/tftp-root      #注意:tftp-root目录、上级目录以及其中所有文件,需要为dnsmasq用户开放read权限,否则tftp会报权限错误。
#-----------------------------------------------------------------------



三、服务启停
取消自启支服务:
代码:
sudo update-rc.d -f dnsmasq remove

手工启停服务(服务方式启动,运行用户为dnsmasq权限):
代码:
sudo service dnsmasq stop|start|restart

或非服务方式启动,运行用户为root,可直接在console看到dhcplog,便于调测:
代码:
sudo dnsmasq -d --log-dhcp

(调测通过后,若换成以服务方式启动,PXE启动时报tftp权限权限出错,估计为上面提到的逐级目录均需要为dnsmasq用户开可访问权限[r-x]问题。)


四、为Windows PXE安装修正路径符号、文件名大小写问题
问题:
1、windows 路径是\,故tftp 要能识别并在服务端转化为/
2、windows 安装光盘的文件是小写,但是向 tftp 发的文件请求有的大写,有的小写,没有统一起来,tftp要能识别
3、由于dnsmasq不支持rules进行替换,只能其tftp.c源代码进行修改,并重新出dnsmasq执行文件进行替换。

修改:
1、下载源文件dnsmasq-2.47.tar.gz,解开后找到src/tftp.c,找到check_tftp_fileperm函数,把处理逻辑由找不到文件即return NULL;改为替换\->/、文件名转换小写后再试一遍(据说Windows安装文件均为小写文件名,若不是,需要事先将安装文件全转换小写)。
2、修改完成后执行make编译生成dnsmasq
3、覆盖:
代码:
   sudo service dnsmasq stop
   cp /usr/sbin/dnsmasq /usr/sbin/dnsmasq.default
   cp src/dnsmasq /usr/sbin/
   sudo service dnsmasq start

4、附:修改代码diff tftp.c tftp_default.c
代码:
279c279
<   char *packet = daemon->packet, *namebuff = daemon->namebuff,*pt;
---
>   char *packet = daemon->packet, *namebuff = daemon->namebuff;
289c289
<   /*---old default code---
---
>   
302,338c302
<         */
<
< //for windows:path \ to /,file name to lowercase...Change by XStar 2009.05.10
< //-----------------------------------------------------------------
<   if ((fd = open(namebuff, O_RDONLY)) == -1)
<     {
<       if (errno == ENOENT)
<    {
<    //--------tolower and try again
<      pt = namebuff;
<      while(*pt !=0)  {
<         *pt = *pt=='\\'?'/':*pt;
<       *pt = tolower(*pt);
<       pt++;   }
<    
<      if ((fd = open(namebuff, O_RDONLY)) == -1)
<        {
<          if (errno == ENOENT)
<       {
<         *len = tftp_err(ERR_FNF, packet, _("file %s not found"), namebuff);
<         return NULL;
<       }
<          else if (errno == EACCES)
<       goto perm;
<          else
<       goto oops;
<        }
<    //--------
<    }
<       else if (errno == EACCES)
<    goto perm;
<       else
<    goto oops;
<     }
< //-----------------------------------------------------------------
< //change end.
<
---
>   


5、修改后测试
代码:
sudo vi /etc/dnsmasq.conf

将pxelinux.0改为大写:
代码:
dhcp-boot=PXELINUX.0,boothost,192.168.1.3   #syslinux

测试仍可正常获取pxelinux.0进行引导。

注意:因为文件名修改小写时是按全路径修改的,必须保证文件存放的路径(从根目录开始至tftp-root目录,以及下面的子目录)、文件名全为小写。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 用dnsmasq做PXE引导dhcp、tftp调测记录
帖子发表于 : 2009-05-18 17:07 

注册: 2008-11-21 17:18
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
synce与samba可能存在冲突,同步时主机无法自动获得IP,直接sudo dhclient eth1就可以了。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 用dnsmasq做PXE引导dhcp、tftp调测记录
帖子发表于 : 2009-08-12 23:43 
头像

注册: 2009-07-17 20:57
帖子: 129
送出感谢: 0 次
接收感谢: 0 次
image文件的具体制作呢?


_________________
本科农民工:
钱少,事多,离家远....
位微,权轻,责任重....
新建的个人网站


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 用dnsmasq做PXE引导dhcp、tftp调测记录
帖子发表于 : 2009-08-13 15:05 
头像

注册: 2007-05-06 8:19
帖子: 7433
送出感谢: 0 次
接收感谢: 4
mtftp好像总失败....


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译