一月一日 当前只有等待等待 一月三日 当前只有等待等待
./s3fs -f -o
uid=1000,gid=1000,rw,default_permissions,use_rrs=1,default_acl=public-read-write,use_cache=/tmp
www.staroceans.org
~/www.staroceans.org
可是问题是我的文件的权限都为空,似乎是meta的问题,它的代码使用的是replace。没有找到原因。google说不如尝试另一个riofs,这个
据说更加稳定,编译这个遇到libevent需要2.0以上,我不想更新,就下载源码编译安装到/usr/local然后使用./configure
--with-libevent=/usr/local,然后编译riofs遇到undefined reference to
`ERR_remove_thread_state',我的反应非常迟钝居然以为是libevent的依赖,别人都已经说了是openssl的问题,后来
google具体的riofs的错误,才意识到是我的openssl0.9.8的问题,我一直也不愿意更新,只好手
动改代码,把ERR_remove_thread_state换成了0.9.8的版本ERR_remove_state。一月四日 当前只有等待等待
我 的s3上打开了logging结果有巨大数量的log file这个导致了riofs和s3fs-fuse都无法正常工作,因为运行几个小时都无法初始化,不知道为什么我的libs3的代码可以迅速初始化(大概几分钟吧?)。 删除这些垃圾没有什么好办法,这个是使 用lifecycle.不过好像没有效果???一月六日 当前只有等待等待
riofs 似乎还在童年时代,几乎不可用,现在看来s3fs不一定是问题,权限也许是有意设置的。但是性能呢?的确不是特别的好,所以,出路看来是类似与rsync 的思路,或者单独实现一个push/pull的s3版本,这个似乎是最好的解决办法。比如,jgit的实现形式。一月七日 当前只有等待等待
git 的默认的路径.git可以指定,git --git-dir=mygit init,然后就要这样子git --git-dir=mygit --work-tree=./ status一月八日 当前只有等待等待
一 直以来有一个不是很准确的认识,git本身是一个不需要server的架构,因此,不需要像svn一样架设服务器,因为它是基于文件啊。并不是非常的准 确。这个取决于服务器通讯的协议啊。比如你要把你的git部署在像亚马逊s3这样的static web site仅仅实现dumb http协议要怎么版呢?你需要这个步骤:1.设定hooks/post-update。比如:mv hooks/post-update.sample hooks/post-update
&& chmod a+x hooks/post-update
2.互联网的url能使用.git文件夹名作为url的一部分所以改名字比如repo.git为了方便我增加了~/.bashrc的一个alias:
alias mygit='git --git-dir=repo.git --work-tree=./'
3.第一步似乎不起作用,所以,我就手动这样做:
mygit add mynew.txt
mygit commit -m "adding mynew.txt"
mygit update-server-info
s3cmd sync --acl-public ./ s3://nickhuang99/tinyxml/
4。在其他地方用git clone如下:git
http://nickhuang99.s3.amazonaws.com/tinyxml/repo.git tinyxml
不过s3cmd似乎效率不是非常的高吧?我还是用我自己的工具吧。
怎样debug呢? 一月十日 当前只有等待等待 一月十三日 当前只有等待等待 一月十七日 当前只有等待等待 一月十八日 当前只有等待等待 一月二十八日 当前只有等待等待GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master
在工作中我们需要多平台编译测试,因此使用了HNAS的nfs来在多平台mount,于是遇到最最常见的文件权限的问题,这个是nfs的最最基本的问题,
高级的解决办法是使用nfs server端设定user mapping我觉得这个在nfs
client端也需要的吧?为了简单我们都是用root来开发,于是在nfs server端的access
configuration设定*(sec=sys,no_root_squash)于是linux的mount问题解决了,但是在windows端
nfs的uid,gid始终都是-2,我google实验了很久,看了不少的msdn/technet的文章,感觉要么使用AD+DC,要么使用AD+
LDS,最不济也要安装Identity Management for Unix等等,单单配置user
mapping的数据就够复杂的,而且安装AD,DC本身就是很费时间,装好了还不能正常运作,似乎我没有配置DNS服务,总之,我花了两天也没有搞定。
终于看到这个极端的hacker的办法:修改注册表,在HK_LOCAL_MACHINE下找到
microsoft/clientForNFS/default设定anonymousuid=0,anoymousgid=0。
昨天把我之前使用过的git的代码通通都放到s3上去了。大部分都是开源代码,只不过做一个备份而已。
这里是安
装hp-printer的instruction。
也许就是ubuntu我的设置的问题,我在gui里的设置不是su运行的,所以设置无法保存,所以,需要在命令行运行sudo
hp-setup。很多时候你并不理解什么是什么,比如你究竟需要做什么,在ubuntu里添加网络打印机核心问题不是添加,而是设置,因为打印机不再提
供用户界面去设置这个才是hp最最需要解决的问题,这也就是它各种各样的设置软件工具的目的,一旦设定好了网络你为什么还需要hp的打印机管理软件呢?不
需要了。使用ubuntu
的原生的打印机管理就
可以了。当然第一步是最困难的,当打印机不能上网的话,你什么也干不了,这个才是使用usb连线的根本原因,仅仅是设置wifi然后,你可以通过ews
(embedded web service)来设置,可以设置web-scanner,设置static ip,192.168.1.247。
在rhel里面,dns的产生是靠/etc/sysconfigs/network-scripts/ifcfg-eth0里的设置的dns
ip,它的运行产生/etc/resolve.conf,修改resolve.conf也许暂时有效,比如service
NetworkManager restart。
可以写一个小小的总结:怎样搞垮你的ext2文件系统。我只不过创建了一个循环的软连接,然后文件系统就崩溃了,怎么这个样子?ln -fs
link1 link2; ln -fs link2 link3;ln -fs link3 link4;ln -fs link4
link2;ln -fs fakedir link1;mkdir fakedir;
于是我遇到了一系列的问题,首先报错软连接太多层了,然后就是文件的错乱,我的/etc/fstab居然坏掉了,boot失败:这个是回复的步骤:
1. ls (hd0,1)/确认这个确实是启动分区,
2. set root=(hds0,1);
3. set prefix=(hd0,1)/boot/grub;
4. insmod normal;
5. normal;
6. sudo update-grub
7. sudo grub-install
就在我写下怎样搞垮你的ext2fs的时候,我发现我还搞坏了我的主板,我的华硕kgpe-k16终于坏了,四百美金的主板还只是一部分,搜索能够匹配
AMD optron
cpu的同类主板都更贵,这意味着我不得不再买一块。接下来就是十天的折腾,在确认主板坏之前我要验证是否电源坏了,是否机箱坏了,结果就去Fry's这
个DIY天堂买了机箱和电源,可惜他的机箱是给gamer设计的电源插槽在主机的另一侧够不着主板只能退掉。(学到了怎样验证电源好坏的办法,把4号绿线
短接旁边的线就是相当于主板开机,如果电源风扇转动就是好的,或者用万用表量每个电压。)我的主板是自带BMC的,我之前没有看过说明书不知道,准备实验
一下。同时发现了主板上一个自带的usb就把我的额外的usb硬盘盒子接上去,因为6个sata接口全用掉了,虽然主板上有一个PIKE插口可以接
asus自己的raid,可是这个PIKE设计者真糟糕因为散热板是向内的把我的PCI卡挤掉了位置,虽然很气愤,但是说实在的这个是主板设计者的问题,
PIKE肯定不能向外超过主板的范围。打印机又坏了,就去买了一个超便宜的30块的激光打印机(pantumP2502w)w应该是wifi的意思,现在
的驱动做的都不错,win7自动安装驱动,我没有admin权力运行公司笔记本,本来发愁发现驱动已经装好了,不过作为wifi打印机原本usb链接就不
是问题,主要是设置wifi密码,只能尝试安装linux驱动,安装脚本写的不很好,unzip的目录名带空格,运行getconf
LONG_BIT可以得到内核是否32/64,这个是
强帖:cat
/proc/cpuinfo寻找flags的lm标志说明是否是32/64的cpu,但是你的os可能和这个不一致的,64kernel能运行在
64bit的cpu,uname -m告诉你的都是os的架构,当然这如果是你要的。lshw -class processor也不错。
回到pantum打印机的问题,驱动不是问题,但是怎么设置wifi密码呢?说明书说是有内置的webservice,(ews)可是ip呢?linux
的驱动直接报了一个gtk的错误,我直接dpkg
-i安装了driver的包,可是无法运行设定wifi的程序,后来回到windows发现其中的wifi设置程序不需admin权力运行,这个才解决
了。
现在主流的wifi打印机的所谓驱动都是被我这种人误会了,事实上今天的驱动开发安装都很成熟了,主流操作系统都帮你做的差不多了,就像我花了无数时间安
装hp的打印机程序,最后才明白它所做的最大的工作是帮助你设置wifi密码,使用Usb连线安装驱动都是小菜一叠。当然对于我经常有白痴的问题,我以为
打印机坏了,实际上是因为门没关上,激光的不工作实际是粉盒里的保护带没有去除。
昨天遇到stdint.h的问题,uint64_t这个和unsigned long long
int究竟有区别吗?不知道。但是我昨天知道了typedef是不能用#ifndef来检查的,通常作typedef都要连带作一个#define就是为
了用#ifdef来检查,因为多次typedef同样的不会错,但是不兼容的则会错,而define是傻傻的替换,多次覆盖是合法的。 一月二十九日 当前只有等待等待
工作中需要在古老的lenny5.10上开发,遇到了gcc4.3上没有实现to_string的问题,这个是stl的问题,只能从gcc4.4版本相应
的拷贝过来。系统没有安装service,只能用古老的/etc/init.d/ssh
restart来重启,它的debian.org上的package都被移到archive里去了,所以,/etc/apt/source.list里相
应的要改动,同时security不再支持了都去掉吧。svn是古老的1.5,和rhel的1.6不兼容,别人没问题,可是我是用nfs的多平台都要访问
同样的svn
co,所以只能自己编译svn,这里的关键是不要自己想当然啊的直接configure,需要先运行getdep.sh下载需要的apr,apr-
util,然后分别运行他们的buildconf(你需要安装autoconf),然后autogen.sh再去configure,需要openssl
的开发包,是libssl-dev不是openssl,这个是命令行工具。
显卡的问题其实是amd的驱动的问题,
就是不要使用fglrx的驱动,而是要mesa,sudo apt-get install mesa-utils, 首先需要删
除所有的fglrx:
sudo apt-get remove --purge xorg-driver-fglrx fglrx*
sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri xserver-xorg-core
sudo dpkg-reconfigure xserver-xorg
sudo apt-get install --reinstall libgl1-mesa-glx:amd64 libgl1-mesa-dri:amd64 libgl1-mesa-glx:i386 libgl1-mesa-dri:i386 xserver-xorg-core
检查:
dpkg --get-selections|grep libgl1-mesa
同样要去除nvdia的驱动:
sudo nvidia-settings --uninstall
sudo apt-get remove --purge nvidia*
sudo apt-get remove --purge xserver-xorg-video-nouveau xserver-xorg-video-nv
sudo apt-get install nvidia-common
sudo apt-get install xserver-xorg-video-nouveau
sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri xserver-xorg-core
sudo dpkg-reconfigure xserver-xorg
今天在安装lenny的时候遇到ssh不能使用public key来验证的问题,SSHD Gives error could not open
Authorized Keys, although permissions seem correct 一月三十日 当前只有等待等待 一月三十一日 当前只有等待等待 二月一日 当前只有等待等待 二月二日 当前只有等待等待 二月三日 当前只有等待等待 二月四日 当前只有等待等待 二月五日 当前只有等待等待 二月六日 当前只有等待等待 二月八日 当前只有等待等待 二月十三日 当前只有等待等待 二月二十日 当前只有等待等待
这个是
答案:
restorecon -FRvv ~/.ssh
不知道这个是怎么回事,但是就正常了。
用ssh -X链接然后启动kompozer编辑,可是我无法激活输入法,看来是没有焦点的问题吧?
打印程序dpkg-deb
-x打开一看是一个动态库,原因是我的32位的ubuntu笔记本可以正确安装驱动,64位的台式机不行,结果ldd发现64位需要glibc2.14
版,而32位你猜猜看,它居然和公司的那个日本人开发的动态库一样把stdlib静态编译进了,难怪。看来这个也许不是偶然的,是和开发环境有关的,不是
某些人的疏忽或者突发奇想。我的google-talk-plugin也无法安装,看看能不能这样子安装。
不敢贸然安装编译什么,于是还是要安装虚拟机做实验。重复一遍,先安装virtualbox-4.2版,然后安
装这个官网的包,如果遇到dependency的问题,可以尝试sudo apt-get install -f
今天写了一天的makefile其实是调试了,除了一个洋相问题,我的X_DIST=$(shell uname
-m)总是带空格,使用了无数的办法来去除都失败,最后才发现是我的变量后面有空格,这个真的是要命,在makefile里你不检查的。还有就是
SERVER_OBJ=$(patsubst
%.cpp,obj/%.o,${SERVER_SRC}))在svn里rename和mv是有大区别的,rename我没有做到recursive,结
果里面的文件子文件夹通通被删除了,用mv就不会。
临晨五点醒来,赖在床上看微信邮件,六点起来跑了500米,回来继续编译内核,买了一个很贵的raid卡,需要编译内核,才发现我的硬盘在上一次灾难中变
得面目全非,找不到当初的内核代码了,难怪安装virtualbox编译dkms运行失败,我压根指向的内核代码是2.6的git
branch,按照阴谋论的逻辑应该是ssd的灾变,我始终有一个幻想认为ssd的产品都存在严重缺陷,在某种情况下你的数据会全部或部分的丢失,
relocate
sector的结果就是你得到了早先的一个版本的数据,因为现在ssd的存储原理很想是CoW的模式,为了节省删除合并的操作,都是不
overwrite,导致一旦出错你的delta部分都corrupted。因为我始终有一个dejavu的感觉好像又回到了一两年前开始编译内核的状
态。
记忆完全丧失。编译内核的步骤完全遗忘了,我曾经修改过setlocalversion的脚本试图改变每次新版本都是“+”的行为,但是google
search的site search似乎不再是免费的,我无法找到,还是我完全没有上传?感觉丢失了很多东西。至少现在知道一下的问题:
mkinitrd不再支持,替代是mkinitramfs -o initrd-img-`make kernelrelease`
`make kernelrelease` 但是你要手动修改/boot/initrd.img的软连接。
安装依旧是make install,但别忘记make headers_install modules_install否则你的问题就大大的,你懂得的。
要简单运行sudo
update-grub而不是update-grub2那个是完全不同的东西,我模糊记得我曾经话了好多时间在折腾着个。还是返同样的错。
这个大概是最普通的问题,你在一个dll里面定义的函数如果是带有namespace的话,那么你的实现一定要
“在namespace里”。这个难道你都
不明白吗?可不是吗?我就竟然没有意识到使用using
namespace并不代表你要把你的代码归结到namespace内。这个我觉得也许是链接的问题?这个是一个例子git clone
http://www.staroceans.org/myprojects/dlllink/repo.git
这个是一个教训,就是对于c函数而言的确实现要放在namespace里,但是对于c++的类而言,只要声明放在namespace里,实现不用的,只需要
using namespace就可以了。
另一个问题就是makefile里缅的include,这个我始终要纠正一个误区,就是默认只去找第一个条件,满足了就停了。所以,你的all:放在后面
都是没有用的,all在make眼里和别的条件没有差别。那么你在include里的文件里定义了什么condition,就不要怪主makefile不
会再执行了,因为首先是执行include里的。
关于(test -f fileIfExist || test -d
dirIfExist)这类的||是什么意思呢?是逻辑吗?应该是看shell的返回值echo $?,对于不存在的文件,test
-f返回1,总体上说不是逻辑而是看返回值是否为零,因为0代表成功无错误,凡事1都是错误,||的意思是只要一个成功就可以,&&要两
个都成功,换言之,||失败第一个还要继续,但第一个成功就停下来了。&&则是第一个失败就停下来。这些是不是太粗浅了,说明我无知的厉
害?可是我确实是一知半解啊。
很多人和我有着共
同的想法,简单的做法就是make LOCALVERSION=3.0.69-102
现在没事就把内核编译一下,看看驱动是否能够找得到,这个太弱智了,完全是瞎撞。
每次都要安装声卡驱动,这
里的东西抄下来:
1. 看看os是否有声卡设定了: sudo aplay -l
2. 看看声卡模块是否安装了:find /lib/modules/`uname -r` | grep snd
3. 看看声卡是否确实被内核识别了:lspci -v | grep -A7 -i "audio"
4. 看看alsa
是否支持这款声卡:
如何重启ibus呢,它不是一个service,这
里说的好,ibus-daemon &就好了,因为它会替换之前的instance。
经过长时间的摸索依然没有结果,alsa安装25版可以,28版有错误。但是声卡依旧不能被alsa识别,严格的说是有识别,但是alsaconf有问
题,update-modules这个脚本不存在了。我模糊记得这个问题和另一个mkinitrd很像,都是要Initramfs来做的,但是这个。。。这
里说的好清楚,xsonar dgx要内核3.14以后才支持的,我的ubuntu
10.04最新的内核也只有3.0,难道我要自己编译实验新内核?同样的声卡是pci的就可以,难道pciexpress的卡驱动就差别很大了吗?
在公司配置centos6.5遇到x11的问题,这
个说的很好:
yum install xorg-x11-server-Xdmx.x86_64
yum install xterm.x86_64
yum install xorg-x11-xinit.x86_64
nfs client也没有正常工作,需要安装如下:
yum install nfs-utils.x86_64
/sbin/rpc.statd
service nfslock start
果然是这样子的,我从git://kernel.ubuntu.com/ubuntu/linux.git下载内核代码,checkout到3.14在声卡驱
动里看到了pcie的驱动,编译安装很顺利,
git checkout 3.14
cp /boot/config .config
make oldconfig
make menuconfig
make -j10 《《====夸张吧我有24个cpu为什么不用呢?
sudo make headers_install modules_install install
sudo update-initramfs -c -k `make kernelrelease`
sudo update-grub
sudo reboot now
我一开始的确还是有问题无法听到声音,可是你知道我确确实实有声卡设备在aplay
-l里,而且alsamixer也可以设置,除非是非常非常的不走运是声卡的port插口有问题,一切都应该正常。我没有那么“幸运”,声卡工作了。
一个tip就是可以大胆的尝试新版的内核,它对于设备的支持的确好太多了。当然这个还是ubuntu小组customised的内核,是经过检验的。
Linux的内核是相当的灵活的,其实内核最主要的发展现在都是驱动的支持,真正的内核代码据说改的很少吧?现在我用的是3.18,目的是想看看asus
mio的驱动是否有了,结果是没有。
使用poco里面的一个核心现在才领悟到,其实是很简单的常识,但是没有人点醒你就没有意识到。作为一个server,比如rest api
server,你不应该有对于plugin的依赖,也就是说在编译期没有链接的动作,而应该完全依赖于动态加载。比如靠配置文件动态改变plugin的动
态库。这个当然就使用到了dl库,这个里面的dlopen相当于LoadLibrary的windows调用。
做了一个完全小孩子的实验,比如在一个库里定义抽象接口,在另一个库里定义实现,听上去好像com的模式。git clone
http://www.staroceans.org/myprojects/dlllink/repo.git
想要制作ubuntu10.04 usb live file system的启动盘,这
个也许是。
你完全不需要直接启动笔记本来实验usb启动,直接使用qemu是太方便了。sudo qemu -hda /dev/sdh
但是我遇到一个错误:pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"于是这
里是解决方案:
wget -O pxe-ne2k_pci.bin http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/pxe-ne2k_pci.bin?root=qemu
wget -O pxe-rtl8139.bin http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/pxe-rtl8139.bin?root=qemu
wget -O pxe-e1000.bin http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/pxe-e1000.bin?root=qemu
sudo mv pxe*.bin /usr/share/qemu/
二月二十二日 当前只有等待等待
二月二十八日 当前只有等待等待 三月二日 当前只有等待等待 三月四日 当前只有等待等待 三月七日 当前只有等待等待 三月九日 当前只有等待等待 三月二十日 当前只有等待等待
终
于把系统搞死了,只好重装,这个简直成了业余爱好了。有一些细节我需要注意,比如编译完内核之后要先安装modules然后才能制作Initrd这个当然
是很简单的道理,因为Initrd是一个临时的文件系统需要的那些kernel
modules如果你还没有安装肯定就不行了。发现了一个可能是alsa的bug,比如在测试makefile里面通常判断空字符串的办法是用if
({$var+set} = set)这里就是一个bug,它始终不承认我把内核代码放在了/lib/modules/`uname -r`下面。
安装声卡的途径是最好使用3.14以后的内核,3.18后来出现了一些问题,好像是alsa编译的问题,这个是一开始我的理解,后来才感觉也许是编译器的
问题,4.4.3太老了static
inline这样的定义不支持,所以,花了好多时间升级编译器到4.6.3,从svn里出来的4.6.4好像编译有问题。
显卡的安装主要是使用mesa,尝试一
下这个:lspci -vvnn | grep VGA发现我的显卡是Radeon HD 6450/7450/8450 / R5 230
OEM。
怎样和内核通信?使用PF_NETLINK创建socket,好像普通socket通信一样和内核交谈,这个是双向异步的。
任何社会成员成熟的标志就是深刻认识到,社会主义唯一擅长的是平均痛苦,资本主义唯一不擅长的是平均幸福。
看到怎样在shell
里面夹带binary,这个是一个典型的安装程序的做法,不过原文有错,看看代码就知道参数穿错了,你看出来了吗?
重新学习Linux From Scratch。
每次都有新体会,圣贤之书就要常温常习。昨天的一个任何人都知道也不屑于提及的东西就是Openssl里的md5的计算应该和很多标准样本实现有区别吧?我觉
得那个hardcoded的东西有很多的随机行,我用了libssl的md5。
如果能够回答的了一下的问题,
你就算真正入门了:(我摘抄了这位仁兄的问题,粗读一下就明白他所说的a lot of effort是多少,他所说的understand most
of the things是多少,他所说的a few questions的分量有多重,而这个兄弟在last two(2)
days学的比我一两年的都多,佩服啊,在这里留下我对他的敬意,并准备在将来的学习实践工作中尝试回答这些问题。)
trent.josephsen, over the last 2 days, I have put in a lot of effort trying to understand so's. I have understood most of the things. I have a few questions, however.
1. Is it possible to append to /etc/ld.so.cache from "any random dir/user specified dir" by doing ldconfig? I tried doing ldconfig -n . , but that doesn't seem to work.
2. Which are the directories on which ldconfig operates ? Are they, a)everything mentioned in /etc/ld.so.conf.d/*.conf + b)/lib + c)/usr/lib ?
3. Don't you think all paths in the makefile should also be added to the list of dir's an "so" is searched in ? That would take away the overhead of adding paths where so's exist to LD_LIBRARY_PATH since these are already mentioned at build time. Why mention them again at runtime ? EDIT:probably, /etc/ld.so.conf should have a file like fromMakefile.conf
4. I copied an "so" to /usr/lib/i386-linux-gnu and was able to run the file, WITHOUT doing an ldconfig. Is that because
a) since it is under /usr/lib, it will run even if it doesn't figure in /etc/ld.so.cache OR
b) all directories under /etc/ld.so.conf.d/*.conf are manually searched for so's if it is not found in the cache?
5. I find the output of ldconfig lacking information about which "realname" it is currently running. I understand it will be something like libname.so.MAJOR.LATESTMINOR, but ldconfig doesn't tell me which one is the latest.
6. I don't understand why ldconfig should hold information of this nature.
libname.so.1 ==> /usr/lib/i386-linux-gnu/libname.so.1
According to me libname.so ==> /usr/lib/i386-linux-gnu/libname.so is sufficient.
I mean, the user would only enter something like -lname. so as long as information about libname.so is maintained, all others can be found through soft links.
EDIT : adding 3 more questions
7.Why do we mention the major number part also in the realname ? I mean it's confusing someone could make an so like, $gcc -shared -Wl,-soname,libname.so.33 -o libname.so.1.14 lib.o. I mean in the actual SONAME field, the soname would be libname.so.33, but someone looking at the libname.so.1.14 alone would think it is libname.so.1.
8.Don't you think finding the latest minor number which belongs to a particular major number should be done based on timestamp and not by text parsing the realname and finding out the number after the dot ?
9.Don't you think a file like libname.so.1(soname file) should NOT exist on disk.. Please check the attached picture. It is self explanatory as to how ldconfig creates a file named libname.so.1 (to help in it's processing ?) even if I have only 2 so's libname.so and libname.so.1.0. The fact that libname.so.1->libname.so.1.0 tells me what the purpose of the file is, and this will keep on getting updated as and when a new (minor number) version of the library is added. But surely, ldconfig doesn't need to show this file on disk, does it?
Please advise.
Thanks.
四月二日 当前只有等待等待
昨天改代码,有一个返回值的class被vampire设计成兼容以前的发回整数的形式,就是说有一个conversion
operator,比如operator int(),而我在添加一个新的constructor带额外参数的时候,忘记它没有copy
constructor,于是总是被先转换为整数使用conversion constructor。总之是小菜一碟只是费了我不少时间。
使用valgrind测试内存泄漏无法解决gsoap的问题。现在又遇到服务器端证书的问题,这个需要对于加密有更多的认识。制作LFS成了每天唯一能够作
的事情,nobrainer,而且可长可短。
四月十日 当前只有等待等待
前几天对于服务器证书算是有了一个认识,所谓证书就是一个通过用它自带的public
key签名过的badge,上面写着它的名称等等,具体签名算法我要再去了解,但是对于用户来说就是是否信任它,如果你有一个你信任的证书,发现可以用它
的public
key签名了别人的证书那当然是可信的,具体这里的“签名”是一个复杂的算法我还没有想明白原理。curl和其他的浏览器一样都有一个储藏证书的地方,这
个是curl编译时候的一个选项,rhel是在/etc/pki/tls/下面的一个.crt文件,把证书加到末尾就行,或者在curl命令行参数加上-
cacert
文件名也行。通常如果你不想用certificate的话,你直接使用--insecure可以屏蔽这个。证书里面的cn或者common
name通常是一个域名,这里curl的检查就是看是否和证书一致,所以,没办法我只能给每一个ip都制作一个证书。证书制作命令如下:
先生成一个key:
openssl genrsa -out test-key.pem
1024
制作证书,注意cn必须和你的ip或者域名一致: openssl req -new -key test-key.pem -x509 -out
test-cert.pem
从客户端获取服务器的证书: openssl s_client -connect 127.0.0.1:443
解读证书: openssl x509 -inform PEM -in certfile –text
永久性加入curl的证书库: openssl x509 -inform PEM -in server.cert -text >>
/etc/pki/tls/certs/ca-bundle.crt
昨天在折腾hnas,它的每一个server都有一个和自己kernel通讯的机制,一个叫做ssc的命令行工具。
如何修改svn的comment: http://stackoverflow.com/questions/304383/how-do-i-edit-a-log-message-that-i-already-committed-in-subversion
$svn propedit -r N --revprop svn:log URL
$svn propset -r N --revprop svn:log "new log message" URL
之前发现gsoap对于zlib有依赖是因为它有实现一个http的压缩协议,这个是可选的:如果你没有configure
–DWITH_GZIP就不需要使用zlib了。 四月十四日 当前只有等待等待 四月二十一日 当前只有等待等待 四月三十日 当前只有等待等待 五月一日 当前只有等待等待 五月三日 当前只有等待等待 五月十六日 当前只有等待等待 五月十七日 当前只有等待等待
对于libssh2也同样是有对zlib的依赖:配置的时候有选项--without-libz
学习自动化的linux from scratch发现你要是使用不
同的用户,你必须登录才能执行,同时发现我的编译的内核的版本号结尾有个"+"脚本不能解读,只好重编内核。
重新温习以前的笔记,发现我现在的/etc/environment被gcc
修改过了,因为安装gcc4.6的时候不想覆盖原先的,所以,gcc把/usr/local/全部都放在了/usr前面在"$PATH"变量里。这个不知
道还有多少潜在的问题,因为我经常安装一些非官方的版本,这个。。。同时/sbin没有设在/etc/environment里,所以
setcap/getcap不能正常运行,也许我需要在.bashrc里面增加好些吧。
昨天闹了一个笑话,我说我不知道怎样链接一个动态库用它的全名,真是好笑,用全名难道不行?或者-l:fullnameofso?这个就是汗颜。对于
container的技术我连听说都没有就是另一个令人难看的话题,阅读lxc准备编译一下使用,当然在lfs里面大家通常使用的chroot就是他的一
个主要的核心。
昨天发现我的capability始终是空的,不明白怎么回事,看来要修改/etc/pam.d/下面的文件,但是哪一个?怎样改?把ext2fs
的文档编译了一下放在这里方便阅读。
debian的/etc/network/interface就是修改ip的地方,不像redhat你需要修改sysconfig的东西,同样的/etc
/hostname就是hostname修改的地方。
你要是让你的script能够随着系统自动重启就要把它放在/etc/init.d/下面,同时要支持
start/stop/status/restart命令,最重要的是要用chkconfig来部署的话,要有一个tag,就是从开头都有#
chkconfig 2345 20 80
这样子的一行,说的是runlevel和启动关闭的优先级。同时在reboot的时候stop命令会被呼叫。
sysctl -q -e -w net.ipv4.conf.eth1.promote_secondaries=1
这里说的是sysctl是一个标准的命令,
它为非就是修改内核启动参数,他的参数实际上是一个路径/proc/sys/net/ipv4/conf/eth1/promote_secondaries
如果你cat这个文件发现它是1.
这里对于动
态库的解释实在是经典的,反复阅读都有新的理解。(手痒之下忍
不住行窃下载保存在这里)之前发现/etc/ld.so.d/libc.conf把/usr/local/lib当作首选是一个出乎我意料的,这
个导致我的“三观”都发生了变化,因为我自己安装的库的优先级是超过了系统的库。
终于无法抵御诱惑安装了ubuntu14.04,感觉很慢,于是转而求其次安装了12.04快很多,比较接近10.04我还是挺满意的。制作启动U盘都是
没有错的,之所以我的电脑无法使用removeable device来启动的原因是bios把usb mass
storage的模拟方式作为自动的话,那就是scsi的设备和硬盘无异,我必须手动设定为fdd,就是模拟软盘。我的声卡依旧有这样那样的问题,但是最
根本的是rhymbox无法停下来所以即便我改变了声卡的配置也无法反映出来。
这里是一行制作certificate: openssl req -new -subj /CN=172.17.57.75/ -key
MetroServerAPI_key.pem -x509 -out MetroServerAPI_cert.pem
检查语句:openssl x509 -in MetroServerAPI_certt.pem -text | grep "Issuer: CN="
必须要升级java1.7才能运行eclipse-luna,
sudo apt-get update
sudo apt-get install openjdk-7-jdk
昨天看代码才看到poco里面防止crash的方法是把signal拦截转成c++的exception,这个本来是基本的东西,但是我看不懂
sigsetjump的用途,注释里说是要为了获取线程的stack environment存在一个vector里,用意是什么呢?
这里是官方的关于cmake的find_package的解释,很好的。
在编译的时候发现了一个问题,用到了很多的pthread的调用,比如同步的实现是用pthread_mutex_t,可是ldd发现动态库没有libpthread的依赖,发文去问同事才找到原因,原来是libc.so.6有一些pthread的实现。
objdump -t /lib64/libc.so.6 | grep pthread_mutex_lock
000000361d2f8170 g F .text
0000000000000026
pthread_mutex_lock
关于kompozer的安装,ubuntu14.04可以使用ubuntu12.04的库来安装。制作launch
item的菜单需先制作在~/.local/share/applications/myapp.desktop,icon可以在
/usr/share/pixmap里用.xpm.
对于vcmi非常的钦佩,有人有毅力把windows的游戏逆向制作出来,当然图形界面只是第一步,最难的是游戏的ai部分,这个非常的不容易。加油!
上班开始看poco的文档来帮助理解代码,感觉这个非常的强大,获益匪浅。编译poco注意一定不能在parent directory存在symbolic link这个官网说的很清楚,可是我还是没有意识到。否则总是有Current working directory not under $PROJECT_BASE. Stop.的错误。
使用git复制一个tag/branch,git clone --branch poco-1.47 /BigDisk/poco。
在配置poco的时候总是报一个莫名其妙的错误configure.xxx bad
substitution这里xxx是某一个行号,我的参数是及其普通的以前从没有发现,google了可是因为不明所以然,居然看见了答案也不明白,其
实就是configure的shell使用的是/bin/sh这里不一定就是bash,这就是问题。其次,poco-1.47编译静态库始终有问题。
五月十八日 当前只有等待等待
libPocoDataSQLite.a
libPocoData.a
libPocoCrypto.a
libPocoNetSSL.a
libPocoNet.a
libPocoUtil.a
libPocoXML.a
libPocoFoundation.a
pthread
dl
五月十九日 当前只有等待等待
<rush> 我看了好几遍,真是令人热血沸腾。其中的很多对白是那么的让人回味无穷: Niki Lauda说: Happiness is the enemy because it weakens you. It puts doubts in your mind and suddenly you have something to lose. 他妻子回答说:If you feel happiness is your enemy, then you have already lost. 影片的另一个主人公是出了名的大帅哥,就是雷神,其实他才是主角。Fame
Fame makes a man take things over
Fame lets him lose, hard to swallow
Fame puts you there where things are hollow
Fame
Fame, it's not your brain, it's just the flame
That burns your change to keep you insane
Fame
Fame, what you like is in the limo
Fame, what you get is no tomorrow
Fame, what you need you have to borrow
Fame
Fame, "Nein! It's mine!" is just his line
To bind your time, it drives you to crime
Fame
Could it be the best, could it be?
Really be, really babe?
Could it be my babe, could it, babe?
Could it, babe? Could it, babe?
Is it any wonder, I reject you first?
Fame, fame, fame
Is it any wonder you are too cool to fool?
Fame
Fame, bully for you, chilly for me
Got to get a rain check on pain
Fame
Fame, fame, fame, fame, fame
Fame, fame, fame, fame, fame
Fame, fame, fame, fame, fame
Fame, fame, fame, fame, fame
Fame, fame, fame
Fame, what's your name?
Feeling so gay
Feeling gay
五月二十八日 当前只有等待等待
try
{
poco_throw_on_signal;
...
}
catch (Poco::SignalException&)
{
...
}
release编译下的全局变量通常在gdb里打印不一定有正确的数值。
最终这个signal转exception的权宜之计是不能根本解决问题的,因为我们能够捕捉到segmental violation的signal本身就说明代码错的非常厉害,catch这个转变的exception仅仅保住了本来crash的线程,防止了 mutex不释放造成的死锁,但是源头是什么?最后找到的原因是一个全局变量在被每个线程都创建与释放过程未保护导致了race condition,在某个线程获得了全局变量的指针后被其他线程释放从而内存成为自由区被别人任意写入导致的混乱,这个问题上个月已经遇到过类似的一 次,不过当时是因为interface指针没有引用计数,我必须要等待所有使用线程都结束以后才能释放。两者都是多线程环境下内存corruption只 不过后者并不是真的有race condition,前者才是而已。
现在开始使用ubuntu 14.04主要是主流的软件都在支持,编译开源容易。wesnoth的ai的训练场值得学习。命令是./wesnoth-debug -t ai_arena_small -dtry
五月三十一日 当前只有等待等待
六月三十日 当前只有等待等待
另一个小小的问题是关于destructor的,我们的基类是一个抽象类只定义了方法,忘记设定destructor为virtual,只是在它的 子类设定destructor为virtual,这样结果derived class不能自动调用它的destructor,所以这个virtual一定要在最早的祖先类来声明。现在debug deadlock确实还是有些心得,deadlock比race condition容易debug,只要debug编译,info thread,然后thread #到每个thread,取bt看看是否卡在我定义的mutex处,up/down到相应的frame然后print mutex可以看到它的owner的thread id,就八九不离十了。
七月二日 当前只有等待等待
遇到了一个Multiple inheritance的问题,而且还是所谓的diamond的问题。
class Base{public: void init_storage()=0; void base_init(){init_storage();}};
class FileBase:public Base{public: void init_storage(){cout<<"file init"<<endl;}};
class BlockBase:public Base{public: void init_storage(){cout<<"block init"<<endl;}};
class Hybrid:public FileBase, BlockBase{public: void
exec(){base_init();}}; //////=========>>Here is
ambiguious place, You don't know which init_storage it should call.
不过我们需要的是hybrid,就是说我需要两个继承类的init_storage,于是FileBase::init_storage();BlockBase::init_storage();这样子就可以了。
我重新改写了makefile的结构,依据这样一个架构:
0. target 1.srcs 2.objs 3. paths 4.cc_flags 5. ld_flags 6. obj_rules 7. target_rules 8. make_phony_target_rules
%.o: ${SRC_PATH}/%.cpp
CC_CMD -c ${CC_FLAGS} %< -o %@
七月九日 当前只有等待等待
在链接动态库时候,担心提供者不给symlink,比如libssl.so.1.0.0却不给libssl.so指向,于是我把通常的-L$ {SSL_LIB_PATH} -lssl改写成了-l:${SSL_LIB_PATH}/libssl.so.1.0.0这个做法在后来的ldd发现居然有个库是使用绝对路径,而不是 其他那样的库的名字,仿佛使用了类似r-path一样,迷惑了一下才发现那个绝对路径的是间接的库,比如我们的应用依赖关系如下webserver== >libHiStor.so==>libthird.so那么链接之后libthird.so就是全路经,而libHiStor.so还是正 常的libHiStor.so.SONAME
以上似乎是不对的,结论是永远永远不要使用动态库的绝对路径来链接。因为动态库链接另一个动态库如果使用绝对路径如同r-path一样是非常要命的。
另一个反复忘记的就是不论使用linux gcc还是cross gcc都是一样的,如果你要编译-shared都要-fPIC每一个obj文件,而不是仅仅.so的时候。
七月十日 当前只有等待等待
七月二十一日 当前只有等待等待
class Singlton
{
private:
Singlton(){cout << " a very long procedure" << endl;}
static Singlton* m_pSinglton;
public:
static Singlton* createSinglton();
};
Singlton* Singlton::m_pSinglton = NULL;
Singlton* Singlton::createSinglton()
{
if (m_pSinglton == NULL)
{
LOCK myLock(g_mutex);
if (m_pSinglton == NULL)
{
Singlton* pTmp = NULL;
if (Factory::create(&pTmp))
{
m_pSinglton = pTmp;
}
}
}
}
关于gsoap的内存泄漏问题,在资讯其技术支持后意识到我把proxy和普通c
style的函数混用了,而且其原则是init一定要在soap_new之类之后调用。而set_local_namespace这个东西在proxy里
已经有了不需要你自己去做了。使用valgrind可以很轻易的发现这些错误。
七月二十二日 当前只有等待等待
七月二十九日 当前只有等待等待
七月三十一日 当前只有等待等待
dynamic loading的flag即便是RTLD_LAZY也仅仅是针对函数的,对于变量是要立刻解决的,而假如你要load的dll1又depend another dll2的定义的一个全局变量A的时候要小心的了,假如A是定义未__attributes__((visibility ("hidden"))) int A的话,你就会遇到undefined symbol 的错误了。八月二日 当前只有等待等待
几乎天天都在看风小筝的yy直播。yy的视频直播是最棒的,但是它的神曲播放估计资源不够非常的慢,这个也是可以理解的,我的猜测是云存储方案的问题,那么我就下载到亚马逊来存储播放吧。这里还有一个小虾米的搞笑三轮车,坏姐姐。文er的中气非常足,梦回当年古战场。
简单的看了一下poco的httpRequest类,实际是很简单的,因为uri指的就是/开始的部分,host:port不用说,不过输出的时候
有可能加[]在host上,如果其中包含:的话,不知道这个情况是什么意思。至于我一直想要找的serialization的方法也找到了,他的祖先类
httpmessage/httpheader类都有实现,read/write,所以这个是很直白的de/serialization。当然其中的
fields是用multi-map实现的,要小心重名,是否大小写区别呢?这个要证实。 八月十四日 当前只有等待等待 八月十九日 当前只有等待等待 八月二十四日 当前只有等待等待 八月二十六日 当前只有等待等待 八月二十八日 当前只有等待等待
之前作了一个Unittest的测试环境,模拟server调用一个handler的函数的过程,我们的poco
server首先读配置文件,找到url对应的module和class method然后dynamic load
library搜寻其中的symbol运行接口的几个函数,其中setContentLength是设定poco的HTTPServerRequest的
stream的地方,我在这里使用了一个mock class,继承了它的祖先HTTPRequest类然后实现了一个file
stream的阅读过程就行了。其后就是一系列的使得它易于使用的过程了,无非是定义一些函数指针数组,作成回调函数代不同的参数使用不同的serial
number的设备来测试而已。
经常扫描pdf文件,要合成一个大的,使用pdftk input-list-pdfs cat output output.pdf
关于eclipse的老问题,就是使用gcc builtin 的设置。You could also try use "CDT GCC Built-in Compiler Settings". Go to the
project properties > C/C++ General > Preprocessor Include Path
> Providers tab
then check "CDT GCC Built-in Compiler Settings" if it is not. 八月二十九日 当前只有等待等待
这里是关于dynamic调用的格式,这里就比较好理解了,无非就是一个_DYNAMIC的list里面是一系列的d_tag和地址的对子,对于dynamic object的执行有了一个框架的定义。所以,重复一下,dynamic library必须是有segment的而且要在program_header有一个PT_DYNAMIC的element,在segment里有这个_DYNAMIC的list。(我把人家的话抄了一下改了一下顺序说了一遍,这个是典型的plagerism)
见到了听闻许久的隐者system V ABI,这个以前就想读一下,目前只关心object file的格式,在magic number后要有这个
Position
Value
e_ident[EI_CLASS]
ELFCLASS64
e_ident[EI_DATA]
ELFDATA2LSB
我抄下这个警句:Processor identification resides in the
ELF headers e_machine member and must have the value
EM_X86_64(从注释中发现它的值是62)(找时间看一下file的命令的实现就知道了。) 九月二日 当前只有等待等待 九月三日 当前只有等待等待 九月五日 当前只有等待等待 九月七日 当前只有等待等待 九月十四日 当前只有等待等待 九月十五日 当前只有等待等待 九月十七日 当前只有等待等待
从白虎阶堂的军用地图看到了一大堆的文献,比较粗浅的是fhs(fileystem hierarchy standard)
什么时候弄一个cronjob来定期更新呢?
把binutils下的神器的帮助文档存放于此:bintuils, ld, libiberty, bfd, gprof, gas.
使用readelf --debug-dump=decodedline ./myElf看到了debug的信息,大开眼界,感觉真是孤陋寡闻。 九月十八日 当前只有等待等待
Architecture |
Personality Tool |
AMD64 |
linux32 |
PowerPC64 | powerpc32 |
Sparc64 | sparc32 |
zSeries | s390 |
九月二十七日 当前只有等待等待
十月二日 当前只有等待等待
十月四日 当前只有等待等待
十月六日 当前只有等待等待
十月八日 当前只有等待等待
美国众议院议长选举流产了,候选人麦卡锡临阵退缩让我大感意外,随后CNN的现场采访让我明白其实是理所当然,之前贝纳辞去议长一职如果我还以为是因为教皇来访的演说感动他就说明我就是华盛顿政治的局外人,因为谁愿意当这个倒霉的位置?马上就是又一轮的举债上限的斗争了。十月十三日 当前只有等待等待
在一个迷茫的早上来到这里,观看大侠惊心动魄的战斗片段,其实除了前面的绕过gdb/ptrace的部分,后面的汇编还原c代码部分我肯不太懂。大侠的总结是要学习汇编,让我神往了一会儿,看来我也要。。。十月二十五日 当前只有等待等待
nfc的简介。netlink是我应该尽快熟悉的,BA实际就是用这个和内核通讯的,简单的原理在这里。十月二十八日 当前只有等待等待
nfc的编译指南。ext2 filesystem指南,来自GNU。e2fsprogs. introduction of ext2 filesystenm十一月十日 当前只有等待等待
开车去洛杉矶三天 车技有很大进步。关于libstdc++的基础你知道多少?使用libbfd的demangle是一个太复杂的路径,这里是使用rtti配合c++的abi的函数获得的例子,但是从nm/readelf之类得到的名称和rtti的名字是有一个前缀的区别的,那个_ZTI的前缀怎么去掉呢?好像对于vtable的前缀是_ZTV。这些都是问题。如何减少vector的capacity,这个是经典的答案。十一月十二日 当前只有等待等待
我想了一晚上一直以为这个是近乎不可能的任务,早上看Poco-1.5.4的代码才豁然开朗,原来有这个办法!十一月二十五日 当前只有等待等待
POD代表plain old data。 就是可以memcpy的数据,阅读ABI是一个程序员应该必由之路?其实,我自以为学了十年的c++但是一些基本的问题都回答不上来,比如一个empty class的size是多少呢?你以为是0吗?实际上ABI有规定,在多数情况下是1,那么constructor/destructor有多少种呢?说来惭愧我竟然没听说过 看了解释联想昨天的一个基本问题就会有所领悟,比如在auto或者static/global的内存中分配的object的destructor是会被呼 叫的,那么new出来的在heap的object在程序结束的时候会随着进程解体被呼叫吗?显然不会。这个问题多么的显而易见啊。昨天S居然认为他使用同 样的接口实现的singleton在多个library会分配同样的地址,这个是在是令人无语。地址要么在编译期解决要么在运行期解决,你的函数代码被分 享编译在三个不同的dll里被同一个进程dynamic loading到内存那么你的代码是否是同一个symbol?十一月二十六日 当前只有等待等待
mangled name是一个经常遇到的问题:
<builtin-type> ::= v # void
::= w # wchar_t
::= b # bool
::= c # char
::= a # signed char
::= h # unsigned char
::= s # short
::= t # unsigned short
::= i # int
::= j # unsigned int
::= l # long
::= m # unsigned long
::= x # long long, __int64
::= y # unsigned long long, __int64
::= n # __int128
::= o # unsigned __int128
::= f # float
::= d # double
::= e # long double, __float80
::= g # __float128
::= z # ellipsis
::= Dd # IEEE 754r decimal floating point (64 bits)
::= De # IEEE 754r decimal floating point (128 bits)
::= Df # IEEE 754r decimal floating point (32 bits)
::= Dh # IEEE 754r half-precision floating point (16 bits)
::= Di # char32_t
::= Ds # char16_t
::= Da # auto
::= Dc # decltype(auto)
::= Dn # std::nullptr_t (i.e., decltype(nullptr))
::= u <source-name> # vendor extended type
十二月一日 当前只有等待等待
关于好多年前在 bloomburg的面试有一个问题是关于内存动态分配如何记录分配的内存大小的,当时没有这种意识,其实这个是在一定程度上abi有规定,或者是一个约 定成俗的办法,都是一个小cookie来记录大小在倒退一个size_t的地址,所以分配的时候也会多至少一个size_t的内存,这里的规定是关于更加复杂的对象数组的情况,但是基本的情况当然也可以这么实现。现在才意识到他们当初也许都在实现自己的mem manager之类的,这个是大多数人都会去做的。保存所谓的generic ABI的文档,这个很有用,因为是最最基本的linux的入门的东西,可以称之为宝典。c++本身的ABI下载的是一个Html文件,是在这个基础之上的。这个网站有下载。各个处理器相关部分,这个是386部 分。其中一些关于plt的论述很微妙,我目前对于S的做法依旧表示怀疑,他定义了一些函数把它放在executable和dynamic library的共同的代码中,那么同样的函数在exe和dll中各有一份是不是在个字的plt都有?那么这个解决的过程似乎是不一样的吧?我还没有找到 答案。十二月三日 当前只有等待等待
找到一本老书,感谢作者公开,Jonh Levine.为人类文明进步所做的贡献。四个c library的比较,有机会尝试再说。这些人的信念是小到不能再小。十二月十六日 当前只有等待等待
昨天折腾了一个上午 才搞明白了一件事,关于CC,在我们的Makefile里原本是hardcoded CC=g++我因为需要进行交叉编译需要在不修改makefile的情况下来设定CC,所以,就把CC?=g++期望说我能在调用make之前通过设定环 境变量来改变编译器设定。结果发现原本的project编译出错了,在链接的时候c++的部分通通是undefined,再一看编译命令原本.cpp的代 码居然通通使用cc命令来编译,linux里cc默认设定成了gcc的symlink,我没有主动设定CC=cc那么究竟是谁做的呢?在同事的帮助下 debug好久才发现是gnumake的默认设定,gnumake除非使用非默认变量才能去除这个设置。其实这些都是常识,在微软visual studio里会自动根据后缀名.c/.cpp来选择c还是c++的编译器,linux里你要用规则来选择。通常用g++能够编译正规的代码,就是 vampire那个小子的代码。当然使用c编译器来编译c++代码只能把不认识的c++部分当作undefined,这个只有在linking的时候才能 发现。好朴素阿。十二月二十二日 当前只有等待等待
昨天这篇文章也许误导了我??关于动态库其实还有很多的未知,做了一个小实验结果似乎和我想的不一样。十二月二十三日 当前只有等待等待
从此又多了一项有用的debug的途径,通过设定LD_DEBUG可以看到linker的搜索方式了。不过LD_DEBUG_OUTPUT设定还是不能用,我已经发现不像是secure mode可是还是不行。。。十二月二十七日 当前只有等待等待
为了支持盗版光碟的事业,使用handbrake,结果不能识别starwars的dvd,于是想自己编译源码看看。这个过程中需要编译libgudev,遇到一个奇怪的现象。WARNING: 'aclocal-1.13' is missing on your system.这个是很奇怪的,因为我根本不需要安装aclocal,解决办法是运行一下aclocal然后automake就可以了。
十二月二十九日 当前只有等待等待
终于找到了一个神器,apt-file这个是在不明白依赖包的时候的最好的工具。十二月三十日 当前只有等待等待
实际上我是被迷惑 了,libdvdnav和libdvdread似乎是如出一辙,他们都是一个来源。但是他们似乎都不能够应对加密的dvd,不过这个是一个很好的高层库, 你可以象浏览文件一样的应对高级的如angle之类的功能。所以,我遇到加密的dvd应该还是要回到libdvdcss来。这里是一个关于dvdcss的破解历史。我也拷贝了一份原本的档案。这里是所有关于css的权威。关于破解的证据,这位高人保存了一份拷贝,我也效仿留了一个本地的拷贝,链接的旁边是(local)就是本地的。MoRE(Master of Reverse Engineering)的证言,本地拷贝。十二月三十一日 当前只有等待等待
这个看起来是非常的 弱智的问题,我的vlc有些问题,应该是默认的libdvdread.so没有找到我安装的libdvdcss.so或者版本不匹配?总之,加密的dvd 无法解读,我的粗暴解决办法就是卸载ubuntu标准版本自己下载最新版编译源码,配置libdvdread的时候强制寻找libdvdcss,发现是一 个脚本的问题,大概是configure脚本寻找版本号没有包含1.14版,(寻找方法很简单,就是${EXE}${v} >/dev/null, 而其中的v是一个循环变量从一组版本号取值,比如1.1,1.2,1.10等等,唯独缺了我的版本1.14)所以,我自己的libdvdread.so是 config.h里有打开使用libdvdcss.so的宏开关的,那么动态加载dl是会加载动态库的。至于vlc就是一个接口版,意思是不直接链接所有 的所谓的plugin,而是生成一系列的libXXX_plugin.so存放在/usr/local/lib/vlc/xxx下,分门别类,那么我打开 vlc加载dvd报错的信息说是libdvdread_plugin.so是corrupt的,我使用ldd查看发现它找不到 libdvdread.so,注意不是libdvdcss.so因为隔了一层。只好手动在 /etc/ld.so.conf.d/libdvdread.conf加入/usr/local/lib的路径,我通常不喜欢这么作,可实在颇不得以。然 后还是失败,稍一凝眉想到忘记了ldconfig。ok了。弱智阿。