Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13409
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 12
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-04 16:48
个人简介

一杯清茶~

文章分类

全部博文(2)

文章存档

2015年(1)

2014年(1)

我的朋友

分类: LINUX

2014-03-04 16:58:39

这几天在跟踪一个bug,跟踪了几天仍没有定位出原因。

描述一下bug的几个现象:

1.smbd/nmbd进程无法启动,启动后就退出;

2.简单查看发现运行”/sbin/smbpasswd -a admin admin“时,就会报出如下错误:

/mnt/rwfs/etc # /sbin/smbpasswd -a admin admin
tdb(unnamed): tdb_open_ex: failed to get global lock on /etc/secrets.tdb: Permission denied
Failed to open /etc/secrets.tdb
tdb(unnamed): tdb_open_ex: failed to get global lock on /etc/secrets.tdb: Permission denied
Failed to open /etc/secrets.tdb
tdb(unnamed): tdb_open_ex: failed to get global lock on /etc/secrets.tdb: Permission denied
Failed to open /etc/secrets.tdb
pdb_generate_sam_sid: Failed to store generated machine SID.
PANIC: Could not generate a machine SID

Aborted

也就是说这个错误影响了samba的功能;


根据问题现象和以往对samba的经验,我计划从以下几个部分入手:

1.移植到其他平台,查看samba本身是否有错误。(因为我新开发的平台是mips,手边恰好也有另一个mips平台的产品,我就直接搬上去了。samba没报错,可以用)

2.检查配置文件,包括smb.conf,smbpassword,group等,内容、权限等问题。(发现secrets.tdb内容为空,smbpassword也为空)

3.strace(我比较爱用)跟踪,发现问题出在open()前后,好吧,既然如此,只能进入代码去看了!

跟踪命令如下:
./strace -f  /sbin/smbpasswd -a admin admin
截取重点信息如下:
open("/lib/valid.dat", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
7564  geteuid()                         = 0
7564  getuid()                          = 0
7564  open("/etc/secrets.tdb", O_RDWR|O_CREAT|O_LARGEFILE, 0600) = 4
7564  fcntl64(4, F_SETLKW64, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}, 0x7ff7aa78) = -1 EACCES (Permission denied) 7564  write(1, "tdb(unnamed): tdb_open_ex: faile"..., 92) = 92
7564  close(4) 

嘿嘿,发现了,问题原因可能出在“fcntl64失败”。这个函数的具体用法找谷哥/度娘,这里不解释;

总之跟踪到最后找到“正解“,编译kernel时未配置file lock”有可能导致这个问题,查看/linux/fs下的lock和fcntl是否有编译,一看果然没有编译。勾选配置;

Linux Kernel v2.6.36 Configuration

File systems---->

[*] Enable POSIX file locking API


这里简单说明一下这个选项:

The Linux kernel configuration item CONFIG_FILE_LOCKING:

  • prompt: Enable POSIX file locking API
  • type: bool
  • depends on: 
  • defined in 
  • found in Linux kernels: 2.6.28–2.6.39, 3.0–3.12, 3.12+HEAD  (重点哦!)

This option enables standard file locking support, required for filesystems like NFS and for the flock() system call. Disabling this option saves about 11k.

OK,刚好我kernel是2.6.36,在以前的版本如kernel2.6.21这个配置是不可选择 的,也就是系统默认打开的。我想从2.6.28开始这个配置打开了。我并没想清楚kernel小组为什么要这么做呢?这是个疑问。这个配置知道就好,我觉 得也没必要深究,有时间可以研究一下为什么要这么修改!


总之,如果你的需求中需要对device或文件写操作,一定要勾选此配置,换句话说只要配置文件系统这个选项就勾上!


阅读(2330) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:弹性云项目面试Q&A

给主人留下些什么吧!~~

啦哆A梦2014-03-05 10:20:13

不错~