编译zpool命令

环境:192.168.50.239(在 illumos源码中编译zpool命令)

PS:由于对zpool命令的工作原理不熟悉,所以编译,可在其中加入调试语句来明白其原理

首先介绍 illumos-soulos开发环境搭建,过程如下:

一、系统环境

PC机采用Windows系统,使用“putty.exe”工具中SSH功能

二、putty配置

1.打开putty.exe,Host Name(IP address)填入192.168.2.238

2.左侧点击SSH->Auth,在Private key file authentication中导入ddd.ppk文件

3.点击Open,连接到192.168.2.238主机上配置属于个人的开发环境

三、开发环境搭建

1.配置个人开发环境

登录到主机用户名root,在超级用户权限下执行步骤1-5

1.新建文件夹:zfs create rpool/export/home/huakai

2.添加用户名:useradd -d /export/home/huakai/ -s /bin/bash huakai

3.设置密码:passwd huakai 密码设置为1

4.修改文件夹的拥有者:chown -R huakai /export/home/huakai/

5.修改相应的配置文件,使用户名hanhua具有权限使用sudo

编辑/etc/sudoers文件,在hhk ALL=(ALL) NOPASSWD: ALL  后面添加

huakai ALL=(ALL) NOPASSWD: ALL

登录到个人用户名“huakai”, 在普通用户权限下执行步骤6-9

6.新建文件夹.ssh,用于存放密匙id_dsa

7.从代码服务器获取密匙:wget http://192.168.2.5/id_dsa

8.修改id_dsa的权限:sudo chmod 0400 id_dsa

9.从代码服务器下载源文件:

git clone [email protected]:~/panoview

git clone [email protected]:~/panoservice

git clone [email protected]:~/illumos-soulos

git clone [email protected]:~/soulos-build

2.配置illumos-soulos开发环境

1.将目录 /export/home/huakai/illumos-soulos/usr/src/tools/env下的illumos.sh文件拷贝到源文件illumos-soulos的顶层目录下,修改illumos.sh配置文件如下:

> export NIGHTLY_OPTIONS=‘-FnCDlmprt‘修改为:

< export NIGHTLY_OPTIONS=‘-nDFCmpr‘

> export CODEMGR_WS="$HOME/ws/$GATE"修改为:

< export CODEMGR_WS=/export/home/huakai/illumos-soulos

> export CLONE_WS=‘ssh://[email protected]/illumos-gate‘修改为:

< export CLONE_WS=‘[email protected]:~/illumos-soulos‘

> export VERSION="$GATE"修改为:

< export VERSION=‘soulos-d9579da‘

> # export PKGPUBLISHER_REDIST=‘on-redist‘修改为:

< export PKGPUBLISHER_REDIST=‘soulos‘

同时添加以下内容:
< export __GNUC=‘‘

< export __GNUC4=‘‘

< export GCC_ROOT="/opt/gcc-4.4.4"

< export CW_GCC_DIR="$GCC_ROOT/bin"

< export CW_NO_SHADOW=1

< ONNV_BUILDNUM=151007; export ONNV_BUILDNUM;

< export MULTI_PROTO=yes

< RELEASE_DATE=2013.11.19

2.将文件on-closed-bins-nd.i386.tar.bz2和on-closed-bins.i386.tar.bz2拷贝到源文件illumos-soulos的顶层目录下,并执行命令:tar xvpf on-closed-bins-nd.i386.tar.bz2和tar xvpf on-closed-bins.i386.tar.bz2

注:on-closed-*这两个文件是solaris 不开源的一部分文件,是二进制的,很多地方依赖

3.编译工具,执行命令:/opt/onbld/bin/bldenv -d illunos.sh -c “cd usr/src && dmake setup”

注:在这个命令中,dmake setup只需执行一次,/opt/onbld/bin/bldenv -d illunos.sh每次重新登录时都要执行,目的是导入环境变量

四、编译模块示例

1.编译lib中libdevinfo库模块流程

1.进入目录/export/home/huakai/illumos-soulos/usr/src/lib/libdevinfo中,执行命令dmake

2.编译该模块完成之后,如果在该目录下的amd64和i386文件夹下都会生成lint.out、libdevinfo.so.1、llib-ldevinfo.ln以及pics等文件,则说明编译模块成功。

2.编译cmd中fmadm命令模块流程

1.进入目录/export/home/huakai/illumos-soulos/usr/src/cmd/fm/fmadm中,由于编译该模块时缺少依赖的库文件,所以直接执行dmake命令不能编译成功。

2.由于在/export/home/huakai/illumos-soulos/proto/root_i386/usr/lib/fm不存在这些依赖的库文件,因此需要在/export/home/huakai/illumos-soulos/usr/src/lib/fm编译需要的模块,分别是:libfmd_adm、libfmd_msg和topo三个库模块,编译过程按照编译libdevinfo库模块流程,编译成功之后,执行命令dmake install,将生成的库文件安装到proto目录下。此时/export/home/huakai/illumos-soulos/proto/root_i386/usr/lib/fm中的文件如下所示:

3.执行命令dmake,在/export/home/huakai/illumos-soulos/usr/src/cmd/fm/fmadm/i386目录下生成fmadm可执行文件,则说明编译模块成功。

注:不要将当前开发环境上的动态库复制到proto下,有可能开发环境下的版本和源码里版本不匹配,没有特殊需要不要这样做以免引入不必要麻烦。默认情况下,proto下的文件全部使用源码生成,用dmake install命令。

3.编译i86pc中xsvc内核模块流程

1.进入目录/export/home/huakai/illumos-soulos/usr/src/uts/i86pc/xsvc下,执行命令dmake编译内核模块。

2.在当前文件夹下生成debug32和debug64两个目录,这两个目录中都包含了xsvc和xsvc.o

文件,则说明编译内核模块成功。

下面介绍 zpool 命令编译,过程如下:

1.

-bash-4.2$ /opt/onbld/bin/bldenv -d illumos.sh
Build type   is  DEBUG
RELEASE      is
VERSION      is soulos-d9579da
RELEASE_DATE is 2013.11.19
The top-level ‘setup‘ target is available to build headers and tools.
Using /bin/bash as shell.

2.
bash-4.2$ cd usr/src/cmd/zpool/
bash-4.2$ dmake
/export/home/huakai/code/illumos-soulos/usr/src/tools/proto/root_i386-nd/opt/onbld/bin/i386/cw -_gcc -O  -xspace -Xa  -xildoff -errtags=yes -errwarn=%all -erroff=E_EMPTY_TRANSLATION_UNIT -erroff=E_STATEMENT_NOT_REACHED -_gcc=-Wno-missing-braces -_gcc=-Wno-sign-compare -_gcc=-Wno-unknown-pragmas -_gcc=-Wno-unused-parameter -_gcc=-Wno-missing-field-initializers -_gcc=-Wno-array-bounds -_gcc=-Wno-unused-function -_gcc=-Wno-uninitialized -_gcc=-Wno-parentheses -xc99=%none    -W0,-xglobalstatic -_gcc=-fno-inline-small-functions  -_gcc=-fno-inline-functions-called-once  -_gcc=-fno-ipa-cp    -g -xc99=%none -W0,-noglobal  -xdebugformat=stabs -DTEXT_DOMAIN=\"SUNW_OST_OSCMD\" -D_TS_ERRNO  -I/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/include      -D_LARGEFILE64_SOURCE=1 -D_REENTRANT -I../../common/zfs -I/export/home/huakai/code/illumos-soulos/usr/src/cmd/stat/common -DDEBUG -Bdirect     -M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexstk -M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.pagealign -M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexdata -o zpool zpool_main.o zpool_vdev.o zpool_iter.o zpool_util.o timestamp.o -L/export/home/huakai/code/illumos-soulos/proto/root_i386/lib -L/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/lib    -lzfs -lnvpair -ldevid -lefi -ldiskmgt -luutil -lumem
+ /opt/gcc-4.4.4/bin/gcc -fident -finline -fno-inline-functions -fno-builtin -fno-asm -fdiagnostics-show-option -nodefaultlibs -D__sun -O -Wall -Wextra -Werror -Wno-missing-braces -Wno-sign-compare -Wno-unknown-pragmas -Wno-unused-parameter -Wno-missing-field-initializers -Wno-array-bounds -Wno-unused-function -Wno-uninitialized -Wno-parentheses -std=gnu89 -fno-inline-small-functions -fno-inline-functions-called-once -fno-ipa-cp -gdwarf-2 -std=gnu89 -DTEXT_DOMAIN="SUNW_OST_OSCMD" -D_TS_ERRNO -I/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/include -D_LARGEFILE64_SOURCE=1 -D_REENTRANT -I../../common/zfs -I/export/home/huakai/code/illumos-soulos/usr/src/cmd/stat/common -DDEBUG -Wl,-Bdirect -Wl,-M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexstk -Wl,-M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.pagealign -Wl,-M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexdata -o zpool zpool_main.o zpool_vdev.o zpool_iter.o zpool_util.o timestamp.o -L/export/home/huakai/code/illumos-soulos/proto/root_i386/lib -L/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/lib -lzfs -lnvpair -ldevid -lefi -ldiskmgt -luutil -lumem -lc
ld: fatal: library -luutil: not found
ld: fatal: file processing errors. No output written to zpool
collect2: ld returned 1 exit status
*** Error code 1
dmake: Fatal error: Command failed for target `zpool‘
Current working directory /export/home/huakai/code/illumos-soulos/usr/src/cmd/zpool

3.

从上面的出错信息中可以看到,缺少库文件“libuutil”
bash-4.2$ pwd
/export/home/huakai/code/illumos-soulos/usr/src/lib/libuutil
bash-4.2$ dmake
bash-4.2$ dmake install
/export/home/huakai/code/illumos-soulos/usr/src/lib/libuutil/native
/export/home/huakai/code/illumos-soulos/usr/src/lib/libuutil/i386
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/libuutil.so.1; install -s -m 755 -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib libuutil.so.1
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/llib-luutil.ln; install -s -m 644 -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib llib-luutil.ln
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/libuutil.so; /usr/bin/ln -s libuutil.so.1 /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/libuutil.so
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/llib-luutil; install -s -m 644 -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib ../common/llib-luutil
/export/home/huakai/code/illumos-soulos/usr/src/lib/libuutil/amd64
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/amd64/libuutil.so.1; install -s -m 755 -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/amd64 libuutil.so.1    
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/amd64/llib-luutil.ln; install -s -m 644 -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/amd64 llib-luutil.ln  
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/amd64/libuutil.so; /usr/bin/ln -s libuutil.so.1 /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/amd64/libuutil.so
/usr/bin/rm -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib/llib-luutil; install -s -m 644 -f /export/home/huakai/code/illumos-soulos/proto/root_i386/lib ../common/llib-luutil

4.

bash-4.2$ pwd
/export/home/huakai/code/illumos-soulos/usr/src/cmd/zpool

bash-4.2$ dmake
/export/home/huakai/code/illumos-soulos/usr/src/tools/proto/root_i386-nd/opt/onbld/bin/i386/cw -_gcc -O  -xspace -Xa  -xildoff -errtags=yes -errwarn=%all -erroff=E_EMPTY_TRANSLATION_UNIT -erroff=E_STATEMENT_NOT_REACHED -_gcc=-Wno-missing-braces -_gcc=-Wno-sign-compare -_gcc=-Wno-unknown-pragmas -_gcc=-Wno-unused-parameter -_gcc=-Wno-missing-field-initializers -_gcc=-Wno-array-bounds -_gcc=-Wno-unused-function -_gcc=-Wno-uninitialized -_gcc=-Wno-parentheses -xc99=%none    -W0,-xglobalstatic -_gcc=-fno-inline-small-functions  -_gcc=-fno-inline-functions-called-once  -_gcc=-fno-ipa-cp    -g -xc99=%none -W0,-noglobal  -xdebugformat=stabs -DTEXT_DOMAIN=\"SUNW_OST_OSCMD\" -D_TS_ERRNO  -I/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/include      -D_LARGEFILE64_SOURCE=1 -D_REENTRANT -I../../common/zfs -I/export/home/huakai/code/illumos-soulos/usr/src/cmd/stat/common -DDEBUG -Bdirect     -M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexstk -M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.pagealign -M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexdata -o zpool zpool_main.o zpool_vdev.o zpool_iter.o zpool_util.o timestamp.o -L/export/home/huakai/code/illumos-soulos/proto/root_i386/lib -L/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/lib    -lzfs -lnvpair -ldevid -lefi -ldiskmgt -luutil -lumem
+ /opt/gcc-4.4.4/bin/gcc -fident -finline -fno-inline-functions -fno-builtin -fno-asm -fdiagnostics-show-option -nodefaultlibs -D__sun -O -Wall -Wextra -Werror -Wno-missing-braces -Wno-sign-compare -Wno-unknown-pragmas -Wno-unused-parameter -Wno-missing-field-initializers -Wno-array-bounds -Wno-unused-function -Wno-uninitialized -Wno-parentheses -std=gnu89 -fno-inline-small-functions -fno-inline-functions-called-once -fno-ipa-cp -gdwarf-2 -std=gnu89 -DTEXT_DOMAIN="SUNW_OST_OSCMD" -D_TS_ERRNO -I/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/include -D_LARGEFILE64_SOURCE=1 -D_REENTRANT -I../../common/zfs -I/export/home/huakai/code/illumos-soulos/usr/src/cmd/stat/common -DDEBUG -Wl,-Bdirect -Wl,-M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexstk -Wl,-M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.pagealign -Wl,-M/export/home/huakai/code/illumos-soulos/usr/src/common/mapfiles/common/map.noexdata -o zpool zpool_main.o zpool_vdev.o zpool_iter.o zpool_util.o timestamp.o -L/export/home/huakai/code/illumos-soulos/proto/root_i386/lib -L/export/home/huakai/code/illumos-soulos/proto/root_i386/usr/lib -lzfs -lnvpair -ldevid -lefi -ldiskmgt -luutil -lumem -lc

至此,编译zpool命令成功!
命令测试如下:

bash-4.2$ pwd
/export/home/huakai/code/illumos-soulos/usr/src/cmd/zpool
bash-4.2$ ls -l zpool
-rwxr-xr-x   1 huakai   other     116496 Jul  4 16:40 zpool
bash-4.2$ ./zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ    CAP  DEDUP  HEALTH  ALTROOT
rpool   928G  47.5G   881G         -     5%  2.01x  ONLINE  -
bash-4.2$ ./zpool get all
NAME   PROPERTY                       VALUE                          SOURCE
rpool  size                           928G                           -
rpool  capacity                       5%                             -
rpool  altroot                        -                              default
rpool  health                         ONLINE                         -
rpool  guid                           2706717091747937110            default
rpool  version                        -                              default
rpool  bootfs                         rpool/ROOT/soulos              local
rpool  delegation                     on                             default
rpool  autoreplace                    off                            default
rpool  cachefile                      -                              default
rpool  failmode                       wait                           default
rpool  listsnapshots                  off                            default
rpool  autoexpand                     off                            default
rpool  dedupditto                     0                              default
rpool  dedupratio                     2.01x                          -
rpool  free                           881G                           -
rpool  allocated                      47.5G                          -
rpool  readonly                       off                            -
rpool  comment                        -                              default
rpool  expandsize                     0                              -
rpool  freeing                        0                              default
rpool  [email protected]_destroy          enabled                        local
rpool  [email protected]_bpobj            active                         local
rpool  [email protected]_compress           enabled                        local
rpool  [email protected]_vdev_crash_dump  enabled                        local
rpool  [email protected]_histogram     active                         local
rpool  [email protected]_dataset     enabled                        local

编译zpool命令

时间: 2024-08-05 13:51:33

编译zpool命令的相关文章

Java 编译打包命令

背景 编译 打包 解压 运行 参考 背景 我们有的时候总是要使用将自己写的工程编译成 class 文件,同时打包成 jar,虽然有各种工具可以帮助我们,但是毕竟掌握使用 java 本来的命令去做这些更灵活 编译 比如我要编译包名为 com.demo,全称为 com.demo.Main 的这个类,同时将生成的文件指定到当前目录下的 bin 文件夹下,那么在么做呢? Main.java 内容: 1 package com.demo; 2 public class Main{ 3 4 public s

gcc新版本号引起的编译错误(命令运行时的外部库输入位置)

昨天,遇到一个比較bug的错误,用gcc来编译几个简单的文件出错,编译环境为x86_64的Ubuntu12.04.gcc版本号号例如以下: gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 编译例如以下命令,主要是须要加入一个经常使用数学库libm.so.编译的语法例如以下出现了例如以下的错误: gcc -lm main.c bp_alg_api.c -o test 还是会出现没有链接时指定的库文件lm. 假设这样就能够成功: gcc main.c bp_alg_

编译预处理命令--define和ifdef的使用

这里将对常用的预处理命令进行学习. 一.宏定义  ·defined 格式:`defined     宏名      数值 或者 `define      宏名 注意:后面没有‘;‘,和单片机不一样: 二.文件包含处理 ·include include 的格式在不同的编译器里是不一样的: 在quartus 中为:·include "defien.v" 在Primace中为:  `include "../src/define.v" 另外,一个include只可以指定一个

PHP编译安装命令

./configure \--prefix=/usr/local/php \--with-config-file-path=/usr/local/php/etc \--with-mysql=mysqlnd \--with-mysqli=mysqlnd \--with-pdo-mysql=mysqlnd \--with-libxml-dir \--with-pcre-dir \--with-mcrypt \--with-openssl \--with-gd \--with-jpeg-dir \--

linux下一些常用软件的编译安装命令

PHP编译参数 Apache:  ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-curl --with-mcrypt --enable-mbstring --with-iconv --with-gd --with-jpeg-dir=/usr/local/lib --enable-pdo --with-pdo-mysql=/usr/local/mysql5.5.25/ --wi

如何编写Dll(用命令行编译加深理解)

DLL的优点 简单的说,dll有以下几个优点: 1)      节省内存.同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中.如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的). 2)      不需编译的软件系统升级,若一个软件系统使用了dll,则该dll被改变(函数名不变)时,系统升级只需要更换此dll即可,不需要重新编译整个系

android的m、mm、mmm编译命令的使用

android源码目录下的build/envsetup.sh文件,描述编译的命令 - m:       Makes from the top of the tree. - mm:      Builds all of the modules in the current directory. - mmm:     Builds all of the modules in the supplied directories. 要想使用这些命令,首先需要在android源码根目录执行. build/e

javac java 命令行编译运行程序

参考自:http://blog.csdn.net/xxyyww/article/details/5784803 前言: 在命令行运行JAVA的时候,要做的事情就不是点一下鼠标就可以了.如果再用到第三方JAR包,命令就更长了.一个比较好的方法就是使用ant,不过我发现一个问题,在命令行中使用ant的时候,它的输入和eclipse的console一样蛋疼.比如: Scanner in = new Scanner(System.in); System.out.println("请输入一个整数:&quo

Windows下VC编译OpenDDS

OpenDDS是一个OMG组织DDS标准的C++开源实现,OpenDDS同时也提供Java支持.OpenDDS依赖ACE抽象层来提供不同平台的兼容性,同时也依赖于TAO(例如TAO的IDL编译器).当前OpenDDS有ociweb ObjectComputing维护,官方网站http://www.opendds.org/.目前OpenDDS支持的平台有Windows,Linux family,Android,VxWorks等,可用的编译器包括VC,gcc,QNX gcc等. 1. OpenDDS