LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1221|回复: 4

checkinstall不正常?

[复制链接]
发表于 2003-10-29 18:35:23 | 显示全部楼层 |阅读模式
在slackware91上装了个checkinstall,用了几天才发现不正常:

doinst.sh中的联接成了这样
( cd . ; rm -rf 28 )
( cd . ; ln -sf -> 28 )
( cd . ; rm -rf 28 )
( cd . ; ln -sf -> 28 )
( cd . ; rm -rf 28 )
( cd . ; ln -sf -> 28 )
( cd . ; rm -rf 28 )
( cd . ; ln -sf -> 28 )

而正常的应该如此
( cd ./usr/lib ; rm -rf libmkf.so.13 )
( cd ./usr/lib ; ln -sf libmkf.so.13.0.0 libmkf.so.13 )
( cd ./usr/lib ; rm -rf libkik.so )
( cd ./usr/lib ; ln -sf libkik.so.9.0.0 libkik.so )
( cd ./usr/lib ; rm -rf libmkf.so )
( cd ./usr/lib ; ln -sf libmkf.so.13.0.0 libmkf.so )
( cd ./usr/lib ; rm -rf libkik.so.9 )
( cd ./usr/lib ; ln -sf libkik.so.9.0.0 libkik.so.9 )

什么原因呢??
 楼主| 发表于 2003-10-30 17:32:53 | 显示全部楼层

总算弄明白了.

原来slackware的ls输出格式稍有不同,使得在cut的时候出现了错误.

解决方法:
修改/usr/local/sbin/makepak里find的那一句
find . -type l -exec ls -l {} \; | cut -b${BYTE_COUNT}- | tee $TMP/iNsT-a.$$
->
find . -type l -exec ls -l --time-style=long-iso {} \; | while read foo ; do echo $foo ; done | cut -f 8- -d ' ' | cut -b3- | tee $TMP/iNsT-a.$$

这是slackware里makepkg所用的代码.
发表于 2003-10-31 09:48:16 | 显示全部楼层
不太明白。我的makepkg是在/sbin目录下,其中也有兄弟上面贴出来的那句,但是我用checkinstall还没有发现兄弟说的问题。
发表于 2003-10-31 10:24:04 | 显示全部楼层
看了下makepkg的代码,然后试了一下,没有发现问题阿。
find . -type l -exec ls -l --time-style=long-iso {} \; | while read foo ; do echo $foo ; done | cut -f 8- -d ' ' | cut -b3- | tee $INST
这段脚本将当前目录下所有符号连接列表出来并写入$INST文件中去。
如果ls有问题,应该是ls版本的问题。因为里面有注释# This requires the ls from coreutils-5.0 (or newer):
我觉得很有可能是其后的make_install_script出了问题。
建议到shell版去问问scipt的高手。
 楼主| 发表于 2003-10-31 12:32:42 | 显示全部楼层
makepkg没有问题,出问题的是checkinstall修改过的makepak.(checkinstall-1.6.0beta2)

makepak里可以看到作者专门为slackware8的ls作了一个字节的修正。
if ( grep 8 /etc/slackware-version &> /dev/null ); then
   BYTE_COUNT=59
else
   BYTE_COUNT=58
fi

当然如果定义变量MAKEPKG,使用slackware91自带的makepkg,就不需要修正了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表