Jump to Navigation

Linux

Linux/Unix操作系统

linux coredump 文件生成

以前用linux系统,生成的 core文件都是带进程号的,最近使用的arch与debian6,生成的core文件都不带这个值了。

查找了一个,有一个内核参数可以控制生成的core文件名。

详细使用方法,可以看man core

我现在使用的规则为,progname.time.core.pid
echo "%e.%t.core.%p" > /proc/sys/kernel/core_pattern

Category:

asterisk中自定义fd_set扩展select能处理的文件描述符个数的研究

asterisk中自定义fd_set与FD_ZERO,FD_SET几个量扩展select能处理的文件描述符个数的研究

在asterisk中,仍旧使用select处理socket文件描述符的读写事件驱动,虽然有点老套,但这种方式的移植性更好,现在几乎所有的平台都支持这个函数。如果使用一些特定平台的功能,像linux的epoll或者BSD的kqueue,还有solaris的什么 方式,都需要做一个核心兼容这几种不同操作系统上的方式。

由于进程可使用的文件描述符可使用ulimit -n 32768来设置,而系统自带的FD_SETSIZE却是固定的值,在/usr/include/bits/typesizes.h,目前我在使用的linux服务器系统上,这个值都定义为1024。对于像asterisk这样的服务,当然这个值太小了,不足以完全发挥asterisk和服务器硬件的功能。

现在我们研究下它如何,在include/asterisk/select.h文件开头,有这么一个定义,

typedef struct {
TYPEOF_FD_SET_FDS_BITS fds_bits[4096 / SIZEOF_FD_SET_FDS_BITS]; /* 32768 bits */
} ast_fdset;

我个人电脑上的文件系统

现在我的电脑上有4种不同的文件系统,包括,

EXT4: Gentoo Linux主分区, 主要数据存储分区共3个
BTRFS: 临时数据存储分区,测试用,1个
NTFS: windows 7系统分区,1个
HFS+: Mac OS X 系统分区,1个。

很强大的用法。

Taxonomy upgrade extras:

kvm 虚拟机直接从virtualbox虚拟磁盘VDI启动的方法

如果同时使用两种虚拟机,像我现在用的kvm和virtualbox,是不是要分别为两种虚拟机创建两个虚拟磁盘,一般用起来都这么做。但这样多用了一个虚拟磁盘的空间,并且还不能保证两个虚拟机的系统同步,或者即使同步了,也非常麻烦。

今天偶然在网上看到一种解决方法,能让kvkm直接从virtualbox的VDI格式虚拟磁盘启动,两种虚拟机操作的同虚拟磁盘上的同一系统,非常方便。

这里需要用到一个工具,vdfuse,它能直接使用fuse方式挂载vbox虚拟磁盘,如ubuntu11-test.VDI。不过这个工具要自己动手编译。

编译环境,gentoo amd64 系统,virtualbox-4.0.2虚拟机,fuse-2.8.5,

vbox安装在/opt/VirtualBox/目录。

https://build.opensuse.org/package/files?package=vdfuse&project=Virtuali...下载几个文件,放在一个目录下,如vdfuse/,然后下面安装,

Category:

linux下远程管理利器tmux试用

* 简介
o tmux 是screen 一个替代品,优点是比screen 配置简单,并且功能不比screen 弱; tmux 默认就有下面的statusbar ,下面显示正在运行的程序名字,当然screen 也可以配置成这样。

启动,tmux

恢复,tmux attach

其他命令见man tmux

试用了10分钟,感觉比上次试用screen的时候好,简单易用,不用怎么配置也有非常好的效果。
如果在服务器端机器写程序,不再受不稳定网络的影响,掉线后连接服务器,直接恢复之前所有的状态,从中断的地方继承之前的工作,非常方便。

tmux相比screen有优势的地方,可以横向/纵向分隔窗口。配置简单,甚至不需要配置也能用。都说代码比screen清晰,易于改进扩展。tmux的确是非常好的工具。

在本机上使用tmux,连接到服务器,那么,发送的tmux快捷键会发送给本地的tmux还是远程的tmux,这个地方有冲突,是否能解决。

Category:

解决openssh与ssh2之间文件传输

ssh2一个商业的ssh服务协议实现,其实现的scp模块与GPL的openssh的scp不兼容,在客户端的用openssh的scp向服务端为ssh2的服务器传输文件时失败,原因也在于此。
但如果scp使用sftp传输,则无论服务端是openssh还是ssh2的,都不会有问题,这引出了openssh中的scp使用sftp协议传输的补丁要求。

根据5.4版本的scp over sftp,移植到了最新的openssh 5.7版本,初步测试没有问题,

5.4的补丁,http://www.phys98.homeip.net/~ide/aboutopenssh-e.html

5.7的补丁,

Taxonomy upgrade extras:

kde 4中隐藏窗口标题栏

linux系统一个很强的特点就是可定制功能,所以看到的linux系统的桌面千变万化,各有特色。

最近正值linux桌面飞速发展的阶段,使用linux的人越多,对linux的要求也越高了。

我使用最多的是主流桌面之一,KDE 4,相比其他桌面系统确实庞大了许多,但功能齐全,不用费很多时间在桌面上。我的工作是做linux系统上跑的一些服务软件,根本用不到漂亮的桌面,其实对桌面了解的也比较少。

由于笔记本屏幕大小的原因,需要对屏幕空间尽量全部发挥,争取一点不浪费。现在有的方案,一个全局菜单方案,把所有应用程序的菜单放在一行,随着应用程序的切换动态变化,这是mac os x历来的做法,现在也在向linux上发展。另外一个还要把窗口听标题栏去掉,这样又节省了一行空间,感觉屏幕利用率又提高了不少。且把后者的设置方法记录在此,前者的设置方法可在本站搜索一下。

方法比较简单,假设使用的是kde4桌面系统,只需要用两个命令,

第一步,修改配置文件
kwriteconfig --file oxygenrc --group Windeco --key HideTitleBar --type bool true

第二步,重启kwin窗口管理器
kwin --replace &

原来qt的qmake已经能使用pkgconfig功能了

还没确定从哪版本开始支持的,我现在用的qt 4.7.1是已经支持了的,好像是在4.7.0版本加入的这个功能。

使用方法,

CONFIG += link_pkgconfig # enable the PKGCONFIG feature
PKGCONFIG += glib-2.0 # link against glib-2.0

另外,还可检没某个包是否存在,

packagesExist(glib-2.0) {
DEFINES += HAS_GLIB
PKGCONFIG += glib-2.0
}

// and in the code:
#ifdef HAS_GLIB
// use glib here
#endif

这样使用pkgconfig的功能,已经非常简便了
还有一点疑问,这个在非linux系统上,如mac, win上是什么表现呢。

使用select+blocked socketpair模拟新版本内核才支持的nonblock socketpair

话说服务器系统太老真是不爽,现在使用大多数服务器系统都是debian5,而这个系统的内核版本2.6.26,glibc 2.7,一些很方便的函数像pipe2, nonblock socketpair恰好从内核2.6.27开始支持,需要用到这个功能,又不能不兼容这要部署的服务器版本,真郁闷。
现在要实现一个线程间的非阻塞通信,本来在使用的桌面系统上找到pipe2,从man手册上看完全符合使用要求,没想到在服务器上先测试了一下,直接没有这个函数,查了一下手册,这个原来从glibc 2.9加入的。
后面又找到了socketpair函数,这个也非常方便,这回还先看了一下服务器,有这个函数,可谁知系统又没有定义一个叫SOCK_NONBLOCK的宏,无法使用它的nonblock模式。

苦苦思索一番,找到一种解决办法,完整的方法是,
使用#ifdef编译指令,加select block模式的socketpair,这样即能在新系统上使用,也可在比较旧的系统上运行。

大概步骤如下,

首先使用socketpair创建一对已经连接的socket,

Linux Kernel 2.6.37发布

Linux 内核 2.6.37 发布,带来 Ext4 性能提升I/O 节流控制支持。

Category:

页面

订阅 RSS - Linux


Main menu 2

by Dr. Radut