Browsed by
Tag: debian

Debian7只识别出一个CPU

Debian7只识别出一个CPU

昨天无意间进入T410笔记本的BIOS设置,惊讶地发现居然支持CPU虚拟化,只是默认关闭了。打开设置后启动系统,进入VirtualBox,果然可以对每个实例设置多CPU、PAE以及APIC等。

修改上述设置,增加了一个CPU,启动Debian,居然还是只识别出一个CPU。貌似vbox没有起作用。纳闷之下,同样修改了另一个ubuntu实例的设置,启动后能正常识别两个CPU。因此判断还是Debian实例有问题。简单google了一下,貌似是内核需要启动SMP(Symmetric Multi-Processors)功能。

进入Debian后做了一点检查,原来默认采用的内核是image-486,非常保守。重新安装pae内核,即可启动SMP功能,识别出多个CPU。命令很简单:

apt-get install linux-image-686-pae

安装完后,重启debian实例即可。如果主机是windows系统,则可能还需要重新安装virtualbox-guest-dkms,执行以下命令即可:

apt-get remove virtualbox-guest-dkms
apt-get install linux-headers-686-pae
apt-get install virtualbox-guest-dkms
webRTC调试方法小结

webRTC调试方法小结

前段时间完成了miniWebPhone V1版本的开发,基于Chrome浏览器,采用了webRTC技术。在开发过程中,发现其实webRTC技术使用起来还是不太方便,有很多让人感觉很困扰的地方。基本上只有VoIP领域专家才能明白诸多操作以及参数的意义,即便是这样,仍然需要根据Chrome的输出信息来了解Chrome中webRTC的各项细节。

有几种方法可以了解webRTC过程中的细节信息。

方法1:chrome://webrtc-internals/

这个方法是最简单的。在Chrome地址栏中输入上述命令,即可了解webRTC的过程。不过这种方法输出的信息非常粗略。如果您对webRTC很熟悉,那么可以从中了解一些有用的信息。如果您对webRTC不熟悉,那TA的信息您肯定看不明白。

方法2:chrome日志

这种方法我经常使用,而且推荐在linux环境(例如Debian)中使用。实际上,我不知道windows系统下如何看Chrome的日志。Chrome的日志很详细,基本上会输出每个步骤详细的信息。

在linux终端窗口用以下命令启动Chrome即可:

google-chrome --enable-logging=stderr --log-level=4 --vmodule=*libjingle/*=3,*=0

方法3:Chrome源代码

日志可以帮助我们了解大部分webRTC的细节,但是webRTC某些实现仍然是有问题或者说让人困扰的(例如对ICE的处理主、被叫流程不一致,错误处理没有输出日志等),此时直接看代码就是比较好的解决方法。完全、彻底地阅读Chrome是个不可能完成的任务,只能结合Chrome日志去追踪相应的代码。

VPS升级Debian的几点小事项

VPS升级Debian的几点小事项

数据中心升级,要求所有节点最好是64位系统。而我们的节点不幸是32bit系统,因此不得不大动干戈地重新构造系统。

原来的系统是采用Ubuntu 10.04,年代比较久了。这次升级打算全部换成Debian7,真是no zuo no die。虽说两个系统相差不大,但是其中的一些细节还是会坑死人的。

1、bash问题

Debian7中root用户采用bash,如果新创建一个用户,默认居然采用sh,无法理解。因此需要修改/etc/passwd文件,将用户对应的shell修改为bash即可。

2、sudoer问题

这个不是大问题,无非就是修改/etc/sudoers文件,手工将用户加入sudo用户列表中即可。(升级完成后,最好将用户剔出sudoer列表,只保留root用户)。

3、postfix与dovecot

这些配置折腾了几乎一天。在Ubuntu环境中,很容易搞定,ubuntu非常体贴的提供了一个安装包dovecot-postfix,几乎不需要配置就可以转起来。而Debian7则需要手工进行配置。首先dovecot必须安装以下几个包:

apt-get install dovecot-common dovecot-core dovecot-pop3d

在配置之前,首先要弄明白一些关键概念:

  • Postfix是发送邮件服务器,提供SMTP服务;
  • Dovecot是接收邮件服务器,提供IMAP/POP服务。
  • Postfix自身不鉴权,通过SASL与其他应用(例如SASL服务、POP3服务等)交互来实现鉴权。

通常网上的文章都会采用SASL服务器或者连接MySQL数据库等来实现一个非常复杂的邮件服务系统。而我们的需求没有这么夸张,debian系统的用户就是email用户,不需要进行区分。因此我们采用dovecot来鉴权。

跑个题先,网上居然有文档配置postfix时不进行鉴权,简直是纯找死的节奏,这种情况下,任何人都可以利用他的服务器发送邮件,过不了多久,相信全世界的邮件服务器都会视其为垃圾邮件服务器,直接屏蔽掉。

因此配置的关键点在于以下几点:

  • 告诉postfix,通过dovecot鉴权。
  • dovecot创建与postfix之间的管道,接受postfix的鉴权请求。
  • dovecot采用系统用户的信息直接鉴权。

3.1 配置dovecot

这里臭骂一下Debian。把dovecot的配置拆成N多文件,乱七八糟,有必要么?网上的参考文档多半是基于RHEL或者CentOS,基本都是在一个文件中进行配置(Ubuntu 10.04也基本是一个文件),Debian这种方式貌似很合理,实际操作起来更让人纠结。

首先修改/etc/dovecot/conf.d/10-auth.conf文件,设定以下参数:

disable_plaintext_auth = yes
auth_mechanisms = plain login

接着修改/etc/dovecot/conf.d/auth-system.conf.ext文件,在文件尾添加以下配置:

service auth {
    unix_listener /var/spool/postfix/private/auth-dovecot {
        mode = 0660
        user = postfix
        group = postfix
    }
}

简要说明:在这个文件中,可以看到以下信息,默认就是采用系统用户鉴权。其中的passwd就是指/etc/passwd文件。

userdb {
  driver = passwd
}

而我们添加的信息,其实就是为postfix创建一个管道,准备接受postfix的鉴权请求。管道名称就是auth-dovecot,创建在/var/spool/postfix/private目录下。这个信息在postfix配置中需要用到。

3.2 配置postfix

debian系统中的postfix基本配置与其他linux版本没有太大差别,无非就是修改一些hostname信息等。鉴权配置需要修改,修改/etc/postfix/main.cf文件,在文件尾添加以下信息:

home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-dovecot
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sender_restrictions = reject_unknown_sender_domain

其中关键部分就是蓝色字体标识的部分。”smtpd_sasl_path”项就是在dovecot中配置的管道路径(在这些配置项上,我几乎摔得满头是包)。

完成上述配置后,重启dovecot和postfix服务即可:

service dovecot restart
service postfix restart

4、SSH

处于安全因素的考虑,修改默认的SSH登录端口以及禁止root用户远程登录。修改/etc/ssh/sshd_config文件:

Port 1234
PermitRootLogin no
linux环境中getnameinfo的问题

linux环境中getnameinfo的问题

在linux环境下获取本地IP地址的方法,通常都是先getifaddrs获取当前计算机中所有的接口信息,然后循环调用getnameinfo获取各接口的IP地址。

这是网络上常见的描述方式。在IPv4组网时,没有任何问题。但是在IPv6组网(获取IPv6地址)时,出现了问题。由该函数返回的IP地址字符串中包含了当前接口的名称,例如以下返回值:

fe80::5a94:6bff:fe48:4cec%wlan1

如果想获得纯粹的IPv6地址,应当通过接口地址信息,调用inet_ntop来转换IP地址为字符串,如下处理:

char ipstr[512]={0};
sockaddr_in6* sockaddr_ipv6=reinterpret_cast<sockaddr_in6*>(ifa->ifa_addr);
inet_ntop(AF_INET6,&sockaddr_ipv6->sin6_addr,ipstr,sizeof(ipstr));

此时获取的IP地址字符串信息就不再包含当前接口的名称:

fe80::5a94:6bff:fe48:4cec

IPv6地址带接口名称实际是“zone identifier (区域标识)”,在RFC6874规范中有相应的定义。

2014-06-08 updated:

在Linux系统中,要使用ping6命令来ping IPv6的地址,并且要求带上接口索引。例如如果只是ping IPv6地址,会返回以下错误:

ping6 fe80::a00:27ff:fe37:a9d0
connect: Invalid argument

正确的使用方法如下所示:

ping6 fe80::a00:27ff:fe37:a9d0%eth0
简单判断当前linux的发行版本

简单判断当前linux的发行版本

初步用了一下最新发布的Ubuntu 14.04版本,大体上来说还是很不错。不过Unity7还是一如既往的奇葩,在与Qt程序的配合中更是如此。很不幸,我们的软件就是采用Qt,因此在Unity中有些莫名奇妙的小冲突,例如systemTray等问题,虽然不影响使用,但是给人的感觉很不爽、很不专业。

简单的处理方式就是程序自动判断当前是不是Ubuntu版本,然后再针对性地做一些处理就好了。目前还没有统一的API可以说明当前linux的发行版本信息,网上有各种各样的方式进行判断。对deb系的发行版本而言,以下方式经验证还比较靠谱:

直接读取/etc/issue文件,这个文件的内容目前包含发行版本信息。

这种方式有一些不确定之处:

(1)首先这个文件名就很奇葩。’issue’为什么是用来存储版本信息的? 为什么不直接用version或者别的更好、更直接的文件名?linux开发人员的思维总是让人搞不懂啊。

(2)既然没有人解释为什么会使用这个文件,同样也就没有人保证以后还会这么做。

Debian 7与PyCharm3.1

Debian 7与PyCharm3.1

PyCharm无疑是相当杰出的Python IDE(而且提供免费的社区版本),可以运行在Debian7系统中。安装、运行都非常简单,下面简要说明步骤。需要说明的是,全部采用root用户进行操作。

step1:下载PyCharm

目前最新的版本是V3.1,直接从官网下载即可:

cd /opt
wget http://download-ln.jetbrains.com/python/pycharm-community-3.1.tar.gz

step2: 解压缩PyCharm

tar -xzf pycharm-community-3.1.tar.gz

step3: 创建软链接

ln -s /opt/pycharm-community-3.1/bin/pycharm.sh /usr/bin/pycharm

完成上述命令后,在console中直接输入pycharm即可启动。当然,也可以创建图形快捷方式: 右键点击“kickoff应用程序启动器”,选择“编辑应用程序”,选择一个菜单栏(例如“开发”)创建新的菜单项,指向pycharm即可。

2014-03-12 更新:

Kubuntu系统默认没有安装jdk,因此无法运行pycharm,需要先使用以下命令安装jdk:

sudo apt-get install default-jdk
Debian XFCE的面板不见了

Debian XFCE的面板不见了

在虚拟机中安装了Debian 7.1的XFCE版本,一切都比较顺利,只是重启后,上下两个面板居然都不见了。

简单搜索了一下,发现可以用一个让人哭笑不得的方式还原回来:

在桌面上点击鼠标右键,弹出菜单后,选择“在此打开终端”。在终端中运行以下命令:

xfce4-panel

面板回来了。注意,不要关闭终端,选择“注销”后,重新登录。以后面板都会出现。

这实在是个很无厘头的bug。

Debian6中文乱码问题

Debian6中文乱码问题

最近安装最新的Debian6.06 Gnome版本,遇到一个奇怪的问题:选择中文安装,完成安装后重新进入系统,界面全是小方块,中文显示乱码。

经研究后发现,居然是没有安装中文字体,这是个多么奇怪的bug,选择了中文界面安装居然不安装中文字体!

解决方法也简单,安装中文字体即可:

apt-get install ttf-wqy-zenhei ttf-wqy-microhei

 

dpkg-deb常用命令

dpkg-deb常用命令

这个命令主要用于进行deb包的安装和查询等。

build deb包,示例:将/tmp/debian_packages目录下的文件打包成demo.deb文件

dpkg-deb -b /tmp/debian_packages ./demo.deb

查询deb包中的文件内容:

dpkg-deb -c demo.deb

安装deb包

dpkg -i demo.deb
Ubuntu/Debian系统包管理常用命令

Ubuntu/Debian系统包管理常用命令

sudo apt-get update 同步软件源中的软件索引文件,并更新本地的cache

sudo apt-get upgrade 根据软件源的要求,安装(升级)最新的软件包。注意,所谓“最新”是指当前系统版本所能支持的最新软件包,而不是最新系统版本所能支持的软件包。

sudo apt-get autoremove 自动删除某些不再需要的软件包。

sudo apt-get install 安装具体某个软件,例如sudo apt-get install qtcreator就是安装qtcreator软件。

sudo apt-get remove 卸载某个软件包

下面是两个常用的软件包查询命令:

sudo apt-cache search 搜索某个软件。最好和grep配合起来用,很方便。例如sudo apt-cache search python | grep mysql 就是所有python软件包中,与mysql相关的包。

sudo apt-cache show 显示某个软件包的具体信息,包括依赖关系等。