pkgsrc与IPS

pkgsrc是一个用来安装第三方软件的的框架,它集成了编译,安装,删除应用等功能。pkgsrc发源于NetBSD,但现在已经移植到多个操作系统,比如OpenBSD。通常来讲,使用pkgsrc安装软件有两种方式:直接安装已经编译好的二进制包,即pkg;或者是下载源码自己编译安装,即src。在使用pkgsrc框架的系统上,pkg_add(1)命令用来安装软件;pkg_delete(1)用来移除软件。

pkgin项目是用来管理pkgsrc的二进制包的工具,其类似于Linux系统上的apt/yum。”pkgin install“用来安装软件;”pkgin remove“用来移除软件。如果你使用pkgsrc框架,你既可以选择使用pkgsrc自带的pkg_*命令来管理安装软件,也可以安装pkgin,然后通过pkgin来管理。

除了pkgsrcSun/Oracle也有一个类似的框架:IPS(Image Packaging System),其主要应用于Solaris及其衍生的操作系统。IPS使用pkg(5)命令来管理软件包:”pkg install“用来安装软件;”pkg uninstall“用来卸载软件。注意同pkgsrcpkg_*命令相区分。有趣的是,基于OpenSolaris/illumos的发行版中,OmniOSOpenIndiana使用IPS,而SmartOS则使用pkgsrc

References:
pkgsrc;
The pkgsrc guide;
pkgin;
Image Packaging System.

使用OpenBSD一年的总结

我从去年8月份起开始尝试使用OpenBSD,到现在已经有一年多的时间了,是时候做一个简单的分享了。

首先介绍一下我使用的OpenBSD版本。刚开始的时候,我使用的都是-release的版本。后来为了编译最新的源代码,就切换到了-current版本,也就是当前开发的版本。曾经有人评价说OpenBSD-current版本比有些软件的-release还要稳定,这也从另一个角度说明OpenBSD代码的质量很高。但是如果你真的打算在商用环境下使用-current版本,还是谨慎为妙,因为我就碰到过用了-current版本,系统无法启动的情况;此外也有过代码回滚的先例。所以如果你的系统很重要,在使用-current版本之前还是先找另外一台机器测试一下,这样比较保险。

谈完了我使用的版本,再聊一下我使用OpenBSD的主要用途:

(1)一本好的Unix教材。OpenBSDman手册和代码质量都很高。所以当我想深入了解一个Unix工具时,我会选择阅读OpenBSD上的代码实现和相应的手册。我曾经花费大块的业余时间阅读netcat的代码,当然收获也颇丰:不仅全面复习了网络编程的相关知识,发现bug并提交patch,还写了一本介绍netcat的英文小册子。可以说”一举多得“!

(2)一个好的测试环境。OpenBSD在编译和运行程序时经常会给出一些其它系统无法提供的有用信息,这对及时发现和解决程序问题有着很大的帮助。比如下面程序:

#include <mutex>

int main(void)
{
    std::mutex m;
    m.lock();

    return 0;
}

Arch Linux上编译运行没有任何提示信息:

$ clang++ -g -pthread -std=c++11 test_mutex.cpp
$ ./a.out
$

但在OpenBSD上却给了如下提示:

# clang++ -g -pthread -std=c++11 test_mutex.cpp
# ./a.out
pthread_mutex_destroy on mutex with waiters!

此外,OpenBSD还曾经帮我找到了一个很难查的内存bug,相关内容可以参考这篇文章

(3)OpenBSD系统还提供了一些有用的工具,比如tcpbench。我自己把它移植到Linux平台(代码在这里),方便自己使用。

来而不往非礼也,我不光只对OpenBSD进行“索取”,也给予“了回馈”:

(1)提交patch。这一年来提交了十几个patch,不过都是一些简单的bug修改。

(2)撰写教程。分享了一些使用OpenBSD经验,希望可以帮助到有需要的使用者。

(3)开发工具:

a)Linux系统上有个很好用的lscpu命令,可惜BSD系统没有。我自己实现了一个针对BSD系统的lscpu命令。因为我个人对X86的体系最熟悉,所以这个lscpuX86平台上可以显示详尽的信息,但是对于其他的处理器,比如ARM,只能显示基本的信息。

b)为OpenBSD”量身定制“了一个free命令。

c)libtlscppOpenBSD自带libtlsC++封装:用户不用再操心相关资源释放,甚至不用太了解TLS协议,就可以写出TLS应用程序。

(4)移植程序。如果发现有好的开源工具不支持OpenBSD平台,我也会尝试着去移植过来,比如google/benchmark,我就把它移植到了OpenBSD上。

补充说明:OpenBSD另一个被人称道之处的是安全性,这个网上可以搜索到很多文章。此外,我并没有把OpenBSD当做一个日常办公环境,所以对OpenBSD是否是一个适合大众的操作系统这一话题也没什么发言权。

以上就是我使用OpenBSD一年的总结。

OpenBSD Hackathon,一种理想的hackathon

199964日,第一次OpenBSD Hackathon活动举行,这也是hackathon一词正式面世。与其它hackathon不同,只有被OpenBSD Hackathon邀请的开发者才能参与。由于OpenBSD项目的经费一直是捉襟见肘(比如2014年因为交不起电费而导致OpenBSD项目差点关闭这个事件,具体请参考这里),很多开发者都是自掏腰包买单差旅费。此外,聚会地点通常也选择在大学校园或是其他非常便宜的地点,而OpenBSD社区也号召有个人或组织可以提供免费的场所供OpenBSD Hackathon使用。

尽管有种种困难,但是OpenBSD Hackathon活动的质量还是相当高的。我最近读到两篇描述OpenBSD Hackathon的博文:Historical: My first OpenBSD HackathonMichael W. Lucas: Visiting the OpenBSD t2k13 Hackathon,感觉这是一种最理想的hackathon:没有喧哗,没有吵闹,开发者围坐在一个小房间内全情投入;在一周的时间内互相合作,最后实现出有实用意义的软件功能。这真是一件很cool的事,不是吗?

OpenBSD Hackathon另一个很“文艺”的地方就是几乎每次活动都会设计一款精美T恤发给参加者作为纪念。我个人比较喜欢下面这个图案:

DGnPMbSXoAAJS5U

如果你想了解更多关于OpenBSD Hackathon的情况,请访问https://www.openbsd.org/hackathons.html