2012-09-12 37 views
0

我有一个问题,其中一个rpm擦除如如何解释rpm install/erase extra verbose命令的目录输出?

rpm -e <package>

导致软链接的目录被删除。而如果该目录不是一个链接,而只是一个目录,它工作正常。

为了研究这一点,我开始玩弄额外的详细输出-vv,它显示了很多信息,其中一些信息是关于被操纵的目录和文件。但是,我不知道如何阅读输出,并且我还没有能够谷歌任何解释细节的资源。

所讨论的输出的一个例子是如下:

D:  erase: waitpid(4409) rc 4409 status 0 secs 1.107 
D: fini  100755 1 (65534,65533)  105 /usr/foobar/tomcat/logs/om_be/dummy.log 
D: fini  040755 2 (65534,65533)  4096 /usr/foobar/tomcat/logs/om_be 
D: fini  100755 1 (65534,65533)  105 /usr/foobar/tomcat/logs/mc_be/dummy.log 
D: fini  040755 2 (65534,65533)  4096 /usr/foobar/tomcat/logs/mc_be 
D: fini  100755 1 (65534,65533)  105 /usr/foobar/tomcat/logs/dummy.log 
D: fini  120755 1 (65534,65533)  24 /usr/foobar/tomcat/logs 
D: fini  040755 2 (65534,65533)  4096 /usr/foobar/tomcat 
D: fini  100755 1 ( 0, 1)  4293 /usr/foobar/share/mrtg2/icons/mrtg-ti.png 
[1]   [2] [3]  [4]   [5]  [6] 

[1]我怀疑D:是指示调试输出。但是fini呢?它有什么意义?

[2]这组数字怎么样(其中6个)。他们似乎可能是权限模式设置,但数字太多。至少最后三位数字看起来像八进制模式值,我不知道前三个数字是什么。

[3]我不知道这个列表示

[4]我猜测,该(##,##)部分是所有者和组权限,因为它们匹配该预期值。

[5]我不知道这个数字代表什么。也许尺寸?

[6]我认识到目录和文件名。 :)

+0

所以,你要为调试输出的解释或解决为什么转-e 与符号链接并以目录的行为不同?如果是后者,至少使用部分* .spec文件来构建RPM将非常有帮助。只是不要完全发布它... tomcat规范肯定是巨大的:-) – Stan

+1

嗨Stan,对调试输出更感兴趣。我们已经接受了它的行为方式,因为它被认为是一个文件而不是目录,并且早就解决了这个问题。但我仍然对调试输出感兴趣。 –

回答

1

调试输出来自lib/fsm.c(功能fsmStage)。相关代码段:正在执行

rpmlog(RPMLOG_DEBUG, " %8s %06o%3d (%4d,%4d)%10d %s %s\n", 
      cur, 
      (unsigned)st->st_mode, (int)st->st_nlink, 
      (int)st->st_uid, (int)st->st_gid, (int)st->st_size, 
      (fsm->path ? fsm->path : ""), 
      _fafilter(fsm->action)); 

哪里cur是动作的当前状态的字符串表示(在你的情况采取行动是擦除和后续任务的当前状态是* FINI *棚成功地)。 st是标准struct stat因此您有mode,编号为hardlinksuidgid,file/dir size,path

您正确地猜出了大部分调试项目。至于模式不只是一个简单的4位八进制数,它有点复杂。从stat 2手册页: 下列标志为st_mode字段定义:

 S_IFMT  0170000 bit mask for the file type bit fields 
     S_IFSOCK 0140000 socket 
     S_IFLNK 0120000 symbolic link 
     S_IFREG 0100000 regular file 
     S_IFBLK 0060000 block device 
     S_IFDIR 0040000 directory 
     S_IFCHR 0020000 character device 
     S_IFIFO 0010000 FIFO 
     S_ISUID 0004000 set UID bit 
     S_ISGID 0002000 set-group-ID bit (see below) 
     S_ISVTX 0001000 sticky bit (see below) 
     S_IRWXU 00700  mask for file owner permissions 
     S_IRUSR 00400  owner has read permission 
     S_IWUSR 00200  owner has write permission 
     S_IXUSR 00100  owner has execute permission 
     S_IRWXG 00070  mask for group permissions 
     S_IRGRP 00040  group has read permission 
     S_IWGRP 00020  group has write permission 
     S_IXGRP 00010  group has execute permission 
     S_IRWXO 00007  mask for permissions for others (not in group) 
     S_IROTH 00004  others have read permission 
     S_IWOTH 00002  others have write permission 
     S_IXOTH 00001  others have execute permission 
+0

哇!谢谢斯坦。 –