`
cryolite
  • 浏览: 580286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FreeBSD,dtrace和erlang

阅读更多
因为linux的systemtap和utrace需要自己重新编译linux内核,实在不想折腾。听闻新FreeBSD将全面使用clang替代gcc,在加上FreeBSD最早就有了对dtrace的支持,所以这两天开始了解FreeBSD是怎么回事。

0. 更新机制

许多软件开发都很活跃,发布频繁,所以除非在系统安装刚发布的那段时间,一般从官网下载的光盘都不是最新的软件集。我们可以从FreeBSD官方网站更新这些软件。

可以使用cvsup更新。首先要安装cvsup,一般按照不带GUI的cvsup即可
cd /usr/ports/net/cvsup-without-gui/
sudo make install clean

0.1 ports collection的更新

在/usr/ports目录下有所以FreeBSD官方支持软件的集合,基本是是这些软件的源码(包括文档)的下载地址、FreeBSD平台下针对该软件的补丁等。一般安装后都会有这个目录。

可以通过用cvsup更新这个ports集下的所有软件。

1). 进入配置文件目录
cd /usr/share/examples/cvsup/
修改配置文件:
vim ports-supfile
主要是更新网站地址: 改掉cvsup的镜像地址
*default host=cvsup.cn.FreeBSD.org
要更新的port集合(因为有些集合比如国家相关的软件japanese/german/korea估计永远都用不上)

2). 更新ports集:
sudo cvsup -g -L 2 ports-supfile
耐心等待更新完成。

(然后可以到对应的port目录下看看distinfo)

参考:http://www.freebsd.org/doc/zh_CN/books/handbook/ports-using.html

0.2 源码的更新
在安装时如果原则了带源码的安装,这些源码会安装在/usr/src目录。cvsup也提供了针对这些源码的更新。

1). 进入配置文件目录
cd /usr/share/examples/cvsup/
修改配置文件:
vim stable-supfile
主要是更新网站地址: 改掉cvsup的镜像地址
*default host=cvsup.cn.FreeBSD.org
2). 更新ports集:
cvsup -g -L 2 stable-supfile
耐心等待更新完成。

0.3 用clang编译
修改/etc/make.conf
添加
CC=clang
CXX=clang++
CPP=clang-cpp

# This setting to build world without -Werror:
NO_WERROR=

重建世界
# make buildworld
# make installworld DESTDIR=/usr/obj/clang
# chroot /usr/obj/clang /bin/echo Hello clang world!
Hello clang world!
# chroot /usr/obj/clang /bin/tcsh

用clang重新编译内核
cd /usr/src
make kernel KERNCONF=MYGENERIC INSTKERNNAME=clang
make installkernel KERNCONF=MYKERNEL

1. 常用软件安装


老版本(10.0之前)的FreeBSD用ports用来安装常见软件,在/usr/ports目录下分成几个大类,如sudo程序是在security目录下;tmux在sysutils目录下,vim在editor目录下,bash在shells目录下,git在devrel目录下等等。可以用以下命令搜索软件在那个目录下,例如想安装 ssh-copy-id
sudo make search name=ssh-copy-id
找到对应的port目录,进入后用 make install clean安装

1) 安装bash
在/usr/ports/shells/bash目录下,完了以后运行命令切换shell:
chsh

在~/.profile配置文件中设置shell彩色提示符:
PS1="[\[\033[01;35m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]]$ "



2)安装vim
此外sudo,vim也要自己手动安装。最好装vim-lite,vim的话会把Xorg装上。
vimrc配置文件也要手动安装:
cp /usr/local/share/vim/vim73/vimrc_example.vim ~/.vimrc


3) 安装tmux
tmux的port有点老,默认是安装tmux1.5,要装1.6得用以下命令:
cd /usr/ports/sysutils/tmux
make patch install clean


4) 更新locate数据库:
/usr/libexec/locate.updatedb


5) smb挂载

安装smbclient后,察看smb服务器状态
smbclient -L //10.0.0.4/Share -U bob

如果没有问题就可以挂载smb文件系统了。
sudo mkdir /mnt/smbshare
sudo mount_smbfs -I 10.0.0.4 //bob@10.0.0.4/Share /mnt/smbshare
出现的输入密码提示是smb访问的,不是sudo的。(两个输入密码提示格式字母大小写都完全一样)

如果出现错误:
mount_smbfs: can't get server address: syserr = Operation timed out
这是忘了加上 -I ip地址参数了。

smb的服务器名字是无所谓的,但是必须有的。比如一个不存在的smb服务器名foo也可以成功挂载(真是吐槽无力):
sudo mount_smbfs -I 10.0.0.4 //bob@foo/Share /mnt/smbshare

6) 其它安装常见问题
另外,删除一个安装软件的命令是:
make deinstall


如果想重新配置make参数:
make config


参考:port官方文档:
http://www.freebsd.org/doc/zh_CN/books/handbook/ports-using.html

java也比较旧了,而且Java的安装也很与众不同,我选的是jdk16。因为版权的原因,安装过程中会有提示需要自己另外下一些jar包,很麻烦,整个过程极其漫长,中间还要你照看着,因为时不时会有对话框要你确认。



FreeBSD 10.0开始提供pkg安装软件,pkg类似linux apt-get。例如安装curl:
pkg install curl



2. 安装带dtrace的erlang

FreeBSD下安装带dtrace的erlang会遇到的问题:
  1. dtrace默认是disable的,老版本的FreeBSD(10.0之前)需要定制dtrace的内核支持;不过10.0之后不需要自己编译内核了。
  2. 虽然有了带dtrace的内核,但是dtrace默认是不加载的,所以make带dtrace的erlang会出错,手工加载命令:sudo kldload dtraceall
  3. FreeBSD自带的make是无法正常工作的,需要用gmake进行编译
  4. 一般处于效率考虑使用gcc进行编译,可以安装gcc4.7,然后指定CC,CXX环境变量分别为gcc4.7,g++4.7



2.1 从源码编译

但是默认安装的FreeBSD也不直接支持erlang的dtrace,在第一步就会出错:
./configure --with-dynamic-trace=dtrace
出错信息如下:
dtrace: failed to compile script emulator/beam/erlang_dtrace.d:
"/usr/lib/dtrace/psinfo.d", line 37: syntax error near "uid_t"
configure: error: Could not precompile erlang_dtrace.d: dtrace -h failed

关键错误信息syntax error "near uid_t" 在FreeBSD的DTrace下有提示:
http://wiki.freebsd.org/DTrace

If D-scripts fail with a message such as syntax error "near uid_t", then you forgot to compile your kernel with gdb(1) debug symbols enabled. Add makeoptions DEBUG="-g" to your kernel config and try again.

所以又回到了原点:还是得重新编译内核。好在FreeBSD重新编译内核比较简单,需要修改的内核编译配置介绍:
http://wiki.freebsd.org/DTrace
支持DTrace需要修改内核的编译参数,这些内核参数的配置文件是[arch]/GENERIC, arch是机器的架构代号,例如amd64
要修改的make.conf文件在/etc目录下

具体见内核编译帮助文档,在这里:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-building.html

过程还是很顺利的。但是每次重启机器后都要求加载dtrace很麻烦,像这样:
sudo kldload dtraceall

在/boot/defaults/loader.conf配置文件中加入:
dtraceall_load="YES"
会省掉这个麻烦。


现在可以了,更激进一点,用clang编译erlang/OTP
CC=clang CXX=clang++ ./configure --with-dynamic-trace=dtrace

但是在make的时候又出错了,
Error expanding embedded variable


这是因为FreeBSD的make和其他系统不一样,得指定用gmake才行,参考http://forums.freebsd.org/showthread.php?t=26303

gmake
sudo gmake install


一切顺利,终于看到了
[wulei@freebsd53:~/otp_src_R15B01]$ erl
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false] [dtrace]

Eshell V5.9.1  (abort with ^G)
1>


不过用dtrace -l|grep erlang还是看不到erlang的probe。得使用特权启动erlang才行:
sudo erl

现在就可以看到erlang的probe。(真是吐槽无力,为什么Mac OS X上就没有这么麻烦,而且人家4年前就这么使用方便了,现在的ubuntu的systemtap还没有utrace的直接支持)

2.2 port安装

官方维护的port有点老,这里有人维护了一个最新15B01的port,还带支持dtrace:
https://github.com/jj1bdx/erlang-freebsd-port




其它陷阱

用freebsd-update更新系统后,编译的支持dtrace内核可能会被替换。可以用uname -a察看:
FreeBSD freebsd53 9.0-RELEASE-p3 FreeBSD 9.0-RELEASE-p3 #1: Mon Jun 25 20:04:33 CST 2012     root@freebsd53:/usr/obj/usr/src/sys/MYKERNEL  amd64

所以又得重新编译内核。

3. 编译链接环境设置

自己手工make/install的第三方(动态共享)库缺省都装在/usr/local/lib目录下,头文件在/usr/local/include目录下,和linux没什么不同,诡异的是编译依赖第三方库(如gdal库)的程序时会出现
编译错误:找不到第三方库的头文件
链接错误:找不到第三方库的共享文件
/usr/bin/ld: cannot find -lgdal

当然可以指定头文件和共享库文件搜索路径解决这个问题
gcc test.c -I/usr/local/include -L/usr/local/lib -lgdal

但是通过命令
ldconfig -r
可以看到这个第三方库;
在系统缺省配置文件/etc/default/rc.conf中也可以看到
ldconfig_paths="/usr/lib/compat /usr/local/lib /usr/local/lib/compat/pkg"
但就是链接不上,不知道为什么?

要想避免每次编译时输入冗长的搜索路径,我没有找到别的办法,只能为头文件和库文件搜索路径设置环境参数了:
C头文件环境变量是 C_INCLUDE_PATH
export C_INCLUDE_PATH=/usr/local/include
C++头文件环境变量是CPLUS_INCLUDE_PATH
参考这里:http://gcc.gnu.org/onlinedocs/cpp/Header-Files.html#Header-Files

但是与linux不同的时,要设置的共享库文件搜索路径的环境参数是LIBRARY_PATH,而不是LD_LIBRARY_PATH,如下:
export LIBRARY_PATH=/usr/local/lib

参考:http://www.network-theory.co.uk/docs/gccintro/gccintro_23.html

顺便复习一下:http://xahlee.org/UnixResource_dir/_/ldpath.html

结论

要想dtrace,目前linux上很麻烦,systemtap,utrace。。。
FreeBSD可能要方便点,但是整个过程下来,发现FreeBSD也不省心,许多软件的port也比较旧。



最省事的反而是Mac OS X开发平台,但是我的MacBook实在太老了,还是6年前32位时代的机器,不过即使这样用起来除了速度慢夏天热外好像也没啥大的毛病。
分享到:
评论

相关推荐

    DTrace Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD

    DTrace作为一种强大的动态追踪工具,在Oracle Solaris、Mac OS X和FreeBSD等操作系统中扮演着重要的角色。无论是对于开发者还是系统管理员而言,掌握DTrace的基本原理和使用方法都是非常有价值的。通过利用DTrace...

    dtrace 用户指南.zip

    DTrace是Sun Microsystems开发的一种强大的动态跟踪框架,后来被广泛应用于多种Unix-like操作系统,包括Solaris、FreeBSD和Apple的Darwin(macOS的基础)。这份指南深入浅出地讲解了DTrace的各个方面,对于系统管理...

    freebsd-dtrace-tools:与FreeBSD兼容的DTrace脚本的集合

    该集合包含与FreeBSD兼容的通用DTrace脚本版本。bsdrwsnoop 输出有关进程的读/写调用的信息。 还提供了按特定过程名称或PID过滤输出的可能性。例子: ./bsdrwsnoop./bsdrwsnoop -p 1773./bsdrwsnoop -n ...

    Dtrace

    随着技术的发展,Dtrace 后续也被移植到了其他操作系统上,例如 macOS 和 FreeBSD。 Dtrace 的核心优势在于: 1. **广泛的探测点**:在 Solaris 10 中预置了超过 30,000 个探针(probes),涵盖了系统和应用程序的...

    DTrace Dynamic Tracing In Oracle Solaris, Mac OS X & FreeBSD PDF

    Now, for the first time, there's a comprehensive, authoritative guide to making the most of DTrace in any supported UNIX environment--from Oracle Solaris to OpenSolaris, Mac OS X, and FreeBSD. ...

    FreeBSD和Linux到底有什么不同

    FreeBSD遵循的是更为传统、严谨的Unix设计理念,强调系统的稳定性和安全性,这一点在其代码管理和开发流程中体现得淋漓尽致。而Linux则更加开放和灵活,其开发过程鼓励广泛参与,这种哲学吸引了很多开发者加入,从而...

    FreeBSD操作系统的设计和实现

    FreeBSD是一个高性能的UNIX操作系统,具有高度的可靠性和强大的网络功能。它在学术和商业领域都有广泛的应用,是学习操作系统设计和实现的一个重要平台。《FreeBSD操作系统的设计和实现》这本书详细介绍了FreeBSD的...

    Dtrace_Oracle.pdf

    DTrace(Dynamic Tracing)是一种系统级的跟踪工具,它可以帮助开发者和系统管理员深入理解系统的运行情况,包括进程行为、系统调用等。DTrace最初由Sun Microsystems开发,并被集成到Solaris操作系统中。随后,该...

    easy_dtrace:包装脚本,用于FreeBSD的DTrace脚本集合

    DTrace脚本集合的包装器脚本 读: 警告 依存关系 FreeBSD的 特征 FreeBSD / FreeNAS pmcstat -TS指令---(为FreeNAS加载hwpmc.ko!) DTrace:列表探针 DTrace:文件打开 DTrace:系统调用按进程计数 DTrace:...

    freeBSD架构中文手册

    FreeBSD是一种开源、类UNIX的操作系统,以其稳定性和性能而闻名。这份“freeBSD架构中文手册”是针对FreeBSD系统架构的详细指南,适合初学者和有经验的系统管理员使用。手册共200多页,深入浅出地介绍了FreeBSD的...

    Sun Dtrace手册

    其他操作系统如Mac OS X和FreeBSD也提供了相应的支持。 2. **配置**:DTrace通常不需要复杂的配置即可使用,但在某些情况下可能需要调整内核参数以提高其性能或增加跟踪容量。 #### 五、DTrace的基本使用方法 1. *...

    FreeBSD安装和配置手册

    本文采用VMware Workstation 7.1.1 (虚拟机)作为安装平台,安装FreeBSD 8.1 64位操作系统; FreeBSD 8.1请到www.freebsd.org下载;VMware Workstation 7.1.1请到网上下载,有破解; 以下的完装配置说明同样适应32...

    inside Erlang VM3

    - **跨平台支持**:ERTS可以在多种操作系统上运行,包括Solaris、Linux、FreeBSD、Mac OS和Windows等。 通过深入了解Erlang VM的工作原理及其特性,我们可以更好地利用其优势来设计和实现高效可靠的系统。

    FreeBSD中文手册.pdf

    这份"FreeBSD中文手册"是针对FreeBSD系统用户和管理员的一份详细参考资料,旨在帮助读者理解和掌握FreeBSD的操作、安装和日常管理。 手册覆盖了多个关键主题,包括: 1. **安装过程**:介绍了如何在各种硬件平台上...

    FreeBSD 8.4安装指南

    FreeBSD 8.4是FreeBSD操作系统的一个稳定版本,它基于FreeBSD的开源Unix-like系统,以其稳定性、安全性和灵活性而著称。本指南将详细阐述FreeBSD 8.4的安装过程,以及如何在安装完成后部署Panabit网络管理软件。 一...

    freebsd.tar.gz_BSD_FreeBSD内核源码_freebsd source_freebsd.tar_linux

    在给定的`freebsd.tar.gz`压缩包中,包含的是FreeBSD v4.4版本的内核源码,这对于那些对操作系统底层原理、内核编程或者想要深入理解FreeBSD操作系统的开发者和爱好者来说,是一份宝贵的资源。 **1. BSD内核架构** ...

    FreeBSD系统编程 中文版

    了解如何使用GDB进行源代码级别的调试,以及如何使用性能分析工具如`top`, `vmstat`, `iostat`, 和 `dtrace`来优化程序性能。 ### 10. **FreeBSD开发环境** 设置一个有效的开发环境,包括编译器(GCC或Clang)、...

    Dtrace_Ch09

    Dtrace,全称为Dynamic Tracing,是Solaris操作系统中的一个强大工具,后来也被其他Unix-like系统如FreeBSD、Mac OS X和OpenIndiana所采用。它允许系统管理员和开发者实时地、动态地探测系统内部运行情况,从而定位...

    FreeBSD 13.2.zip

    **FreeBSD 13.2 系统详解** ...其强大的网络性能、优秀的文件系统和丰富的软件库使得FreeBSD成为许多服务器和开发者的首选平台。通过了解并掌握这些知识点,用户可以更好地利用FreeBSD 13.2实现各种复杂的任务。

Global site tag (gtag.js) - Google Analytics