Browsed by
Tag: debian

制作deb安装包遇到的两个问题

制作deb安装包遇到的两个问题

Ubuntu软件中心在安装deb软件时,对一些细节的检查比Debian要严格一些。例如,我们的软件安装包在Debian系统安装时不会提示错误,而在Ubuntu系统中则会提示错误。当然,用户可以选择忽略这些告警提示并继续安装过程,但这样始终观感不佳,因此在网上搜了一下(感谢google,鄙视百度和bing)解决方法,希望能帮到有类似问题的朋友。

E: … maintainer-name-missing

这个错误最初让人感觉困惑,因为在control文件中是设置了maintainer字段的:

Maintainer: iloveu@myvoipapp.com

查到了Debian的资料,要求Maintainer字段的内容遵循RFC822规范,只写一个email地址是不对的。标准格式应当是“用户名”+email地址,例如以下格式:

Maintainer: MYVOIPAPP <iloveu@myvoipapp.com>

E: … wrong-file-owner-uid-or-gid

这个错误很容易理解,就是用户的系统中没有安装包文件的用户ID和组ID。例如,制作deb安装包的用户是John,而用户系统中没有“John”用户,则会提示这个错误。解决方法有多种,例如在制作deb安装包时切换到root用户,或者post-script中重置相关文件的用户ID和组ID等。

这些方式都有些繁琐,最简单的方式是制作deb包时使用fakeroot命令。在dpkg-deb命令前添加fakeroot即可:

fakeroot dpkg-deb -b ......
pure-ftp over TLS

pure-ftp over TLS

最近查看log,感觉有些无聊人士尝试干扰或者攻击FTP服务器,因此有必要将FTP服务修改为加密方式。最简单的方法就是采用TLS进行传输(即FTPS),确保传输过程是加密的。

目前系统为Debian7,已部署pureFTPd作为FTP服务器。打开TLS支持方法比较简单,请参考pureFTP over TLS文档。主要步骤如下(假定pureFTPd已经部署):

步骤1:打开pureFTP的TLS支持

执行命令:

echo 1 > /etc/pure-ftpd/conf/TLS

设置TLS为1,运行采用overTLS以及普通不加密方式。如果要求必须使用TLS加密方式,则应设置TLS为2。实际部署中,建议设置为2。

步骤2:创建TLS加密密钥

使用openssl创建即可:

openssl req -x509 -nodes -days 7200 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

会提示各项信息输入,照着填写即可。同时,修改pem文件的属性:

chmod 600 /etc/ssl/private/pure-ftpd.pem

完成上述配置后,重启pureFTPd即可:

service pure-ftpd restart

步骤3:FileZilla采用显式加密

在FileZilla的站点管理配置中,“通用 – 加密”项必须配置为“要求显式的FTP over TLS”,如附图所示即可。

FTP over TLS
配置FileZilla采用FTP over TLS
Debian7升级到Debian8

Debian7升级到Debian8

最近Debian发布了Debian8.1版本,可以比较正式地商用了,因此打算将一套生产环境的debian7升级到debian8。

Debian不像Ubuntu,后者使用上确实方便,基本上一键就可以搞定。不过Debian也不麻烦,事实证明也很简单。

step1:关闭已经运行的一些服务器程序,例如apache, mysql, fail2ban等。

step2:更新当前版本,也就是sudo apt-get update以及sudo apt-get upgrade即可。

step3:修改/etc/apt/sources.list文件,将wheezy替换成jessie,例如下面就是目前生产环境上的配置:

deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib

deb http://mirrors.aliyun.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian-security/ jessie/updates main non-free contrib

deb http://http.us.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free

需要注意的是以下几点:

(1)尽量配置国内的镜像源。debian官方源在国内大部分区域都比较慢,采用国内源能节省大量时间。

(2)推荐使用阿里镜像源。阿里巴巴虽然是个逗比公司,不过阿里镜像还是做得相当不错,速度快、网络稳定,我们一直都用它。

step4:更新系统。依次执行下述命令即可:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

执行过程中,涉及到一些软件更新后配置文件有改变,默认采用原有配置。

对apache的影响

apache2升级后,配置文件有改动,导致出现“403 forbidden”的情况。问题原因是apache2的部分配置参数取消了,需要用新的参数替代。修改/etc/apache2/sites-enabled/000-default(-ssl)文件:

 Order allow,deny
 allow from all

修改为:

require all granted
Apache自动输入密钥文件密码

Apache自动输入密钥文件密码

从startSSL申请了证书并成功加载到apache,这些都是通用步骤,具体可以直接参考startSSL的说明文档:http://www.startssl.com/?app=21

然而由于密钥文件是采用访问密码保护,因此重启apache时,读取密钥文件会要求手工输入密码,例如以下提示信息:

Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Enter pass phrase:

这样非常不方便,因此需要将密钥的访问密码告诉apache,并自动输入该密码。

以下步骤都是以root身份进行,系统为Debian 7。

创建shell文件:vi /etc/ssl/apache_pass.sh,并输入以下内容,用于输出访问密码:

#!/bin/sh
echo "1234" <-- 这个是密钥文件的访问密码

出于安全的考虑,将这个文件设置为可执行,并且只能由root访问:

chmod 400 apache_pass.sh
chmod +x apache_pass.sh

接下来就是修改/etc/apache2/mods-available/ssl.conf文件,将SSLPassPhraseDialog由默认的builtin修改为以下值(其实就是执行上述shell文件):

SSLPassPhraseDialog exec:/etc/ssl/apache_pass.sh

完成上述步骤后,重启apache2,将自动输入密钥文件的访问密码,不再需要手工操作。

安装Debian8

安装Debian8

作为一名linux爱好者,这个月份让人觉得很愉悦,因为紧接着Ubuntu后,Debian8又发布了。按照以往的经验,Debian的软件包要旧一些,不过不要紧,比CentOS还是要新多了,我个人非常喜欢Debian的版本。

安装Debian8有些要注意的地方:

(1)尽量不选择“Graphical install”,默认的安装方式就好。图形安装方式似乎要联网下载一些包,导致速度很慢(这点现在不太确认,当时没选择镜像站)。

(2)虽然是DVD安装方式,但建议在“选择镜像”步骤时还是要选择一个国内的镜像(包括教育网用户也可以选择教育网内的镜像)。因为在安装过程中,还是会联网去下载一些包,指定国内镜像的话,速度要快很多。

(3)最后一步设置grub时,要么选择一个引导区,要么手工设置一个。默认是空的,我以为安装程序会选择默认值,手快直接敲回车,结果就悲剧了。

(4)Debian8安装源中似乎已经不包含virtualbox-guest-dkms包,因此如果是用virtualbox安装,需要手工安装编译vbox自带的增强工具。

安装完成后,简单体验了一下,总体感觉还不错。默认安装gnome3,比以前顺滑多了。有几个地方有些可惜:

(1)新版提供了”package install”,欣喜地以为可以像Ubuntu那样点击deb文件直接安装程序。似乎这个工具没有做好,点击后弹出对话框,提示安装、下载,然后就假死了,没有任何反馈。最后还是不得不手工用dpkg来安装程序。

(2)不知道是不是gnome3特意的设计。程序弹出的dialog窗体中,居然没有关闭按钮,都只能按ESC键关闭对话框。另外就是Qt程序的菜单项中无法显示icon,不过toolbar不受影响。这方面的处理,感觉不如Unity合理和方便。下图是我们应用程序的截图,大家随意感受一下:

Debian8
miniSIPServer 工作在Debian8系统中
Kubuntu15.04!一切都扁了!

Kubuntu15.04!一切都扁了!

刚才升级移动盘中安装的kubuntu到最新的15.04版本,过程耗时且不太顺利。运行起来后,最直观的感受是两个:

(1)一切都拍扁了。

(2)速度比以前慢一点。

在这个版本中,默认已经是KDE5以及Plasma5,完全扁平化。默认的窗体风格是“微风”。konsole默认字体是“oxygen mono”,显示中文时有些问题,修改回Ubuntu mono等原有字体会好一些。下图是升级完成后的截图:

升级Kubuntu到15.04后截图
升级Kubuntu到15.04后截图

升级过程基本顺利,但是在96%的时候卡在”配置fail2ban”。冒险掉电重启,居然能重新进入系统。删除fail2ban,再重新使用以下命令修复:

sudo dpkg --configure -a

升级方式很耗时间,前后花费了将近4个小时。与之对比,下载ubuntu15.04的iso然后重新在virtualBox中安装,耗时也仅仅1个小时。

简单使用了一段时间,编译测试了几个程序。总体上KDE5还比较稳定,比KDE4刚推出那会儿好太多了。个人感觉比以前的版本好看,我比较喜欢新的“微风”风格。大家有兴趣的话,值得试试。由此我对Debian的KDE5版本充满期待啊。

安装flash插件

安装flash插件

Debian默认没有安装flash插件,遇到要求flash的网站基本上就是很头疼的一件事。每次都会提示安装flash插件,然后每次都是没有找到,需要手工安装。去到adobe公司的网站,有多种格式的安装包,需要下载tar.gz格式的安装包进行安装。

下载后解压缩,假设解压到/tmp/flash目录下。按照其中readme文件的说明,将.so文件以及/usr目录下的文件拷贝到相应的目录下即可。例如对于firefox,按照以下命令操作即可:

cp libflashplayer.so /usr/lib/mozilla/plugins/
cp -r usr/* /usr

完成后重启firefox即可。

统计代码行

统计代码行

在Debian系统中可以很轻松就统计出代码行,无需另外安装软件,默认的就可以。例如,可以使用下述命令统计当前目录及子目录下cpp文件代码行数:

find . -name *.cpp | xargs wc -l

今天稍微统计了一下MSS的cpp代码行,居然已经突破10万行,突然之间有些时光的恍惚感。

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日志去追踪相应的代码。