1.Linuxä¸ç./configure
2.freebsd下jail命令说明
3.ADBLib 在 android 中的使用
4.Linux下源码安装的经验详解
5.Qemuå®è£
ä¹åå¦ä½å¸è½½
Linuxä¸ç./configure
Linuxç¯å¢ä¸ç软件å®è£ ï¼å¹¶ä¸æ¯ä¸ä»¶å®¹æçäºæ ï¼å¦æéè¿æºä»£ç ç¼è¯åå¨å®è£ ï¼å½ç¶äºæ å°±æ´ä¸ºå¤æä¸äºï¼ç°å¨å®è£ åç§è½¯ä»¶çæç¨é½é常æ®éï¼ä½ä¸åä¸ç¦»å ¶ä¸ï¼å¯¹åºç¡ç¥è¯çæå®ææ¡ï¼å®è£ åç§è½¯ä»¶çé®é¢å°±è¿åè解äºãConfigureèæ¬é ç½®å·¥å ·å°±æ¯åºç¡ä¹ä¸ï¼å®æ¯autoconfçå·¥å ·çåºæ¬åºç¨ã
ä¸ä¸äºæå·§ç¸æ¯ï¼Configureæ¾å¾åºç¡ä¸äºï¼å½ç¶ä½¿ç¨åå¦ä¹ èµ·æ¥å°±æ¾å¾æ¯ç¥ä¹å³ä¸äºï¼å½ç¶è¦æ为é«æï¼å¯¹åºç¡ççæä¸è½è¶ è¶å¦ã
为æ¤æ转载äºä¸ç¯å ³äºConfigureé项é ç½®ç详ç»ä»ç»ãä¾å¤§å®¶åè
'configure'èæ¬æ大éçå½ä»¤è¡é项ã对ä¸åç软件å æ¥è¯´ï¼è¿äºé项å¯è½ä¼æååï¼ä½æ¯è®¸å¤åºæ¬çé项æ¯ä¸ä¼æ¹åçã带ä¸'--help'é项æ§è¡'configure'èæ¬å¯ä»¥çå°å¯ç¨çææé项ã尽管许å¤é项æ¯å¾å°ç¨å°çï¼ä½æ¯å½ä½ 为äºç¹æ®çéæ±èconfigureä¸ä¸ªå æ¶ï¼ç¥éä»ä»¬çåå¨æ¯å¾æçå¤çãä¸é¢å¯¹æ¯ä¸ä¸ªé项è¿è¡ç®ç¥çä»ç»ï¼
--cache-file=FILE
'configure'ä¼å¨ä½ çç³»ç»ä¸æµè¯åå¨çç¹æ§(æè bug!)ã为äºå ééåè¿è¡çé ç½®ï¼æµè¯çç»æä¼åå¨å¨ä¸ä¸ªcache fileéãå½configureä¸ä¸ªæ¯ä¸ªåæ éé½æ'configure'èæ¬çå¤æçæºç æ æ¶ï¼ä¸ä¸ªå¾å¥½çcache fileçåå¨ä¼æå¾å¤§å¸®å©ã
--help
è¾åºå¸®å©ä¿¡æ¯ãå³ä½¿æ¯æç»éªçç¨æ·ä¹å¶å°éè¦ä½¿ç¨ä½¿ç¨'--help'é项ï¼å 为ä¸ä¸ªå¤æç项ç®ä¼å å«éå çé项ãä¾å¦ï¼GCCå éç'configure'èæ¬å°±å å«äºå è®¸ä½ æ§å¶æ¯å¦çæåå¨GCCä¸ä½¿ç¨GNUæ±ç¼å¨çé项ã
--no-create
'configure'ä¸çä¸ä¸ªä¸»è¦å½æ°ä¼å¶ä½è¾åºæ件ãæ¤é项é»æ¢'configure'çæè¿ä¸ªæ件ãä½ å¯ä»¥è®¤ä¸ºè¿æ¯ä¸ç§æ¼ä¹ (dry run)ï¼å°½ç®¡ç¼å(cache)ä»ç¶è¢«æ¹åäºã
--quiet
--silent
å½'configure'è¿è¡ä»çæµè¯æ¶ï¼ä¼è¾åºç®è¦çä¿¡æ¯æ¥åè¯ç¨æ·æ£å¨ä½ä»ä¹ãè¿æ ·ä½æ¯å 为'configure'å¯è½ä¼æ¯è¾æ ¢ï¼æ²¡æè¿ç§è¾åºçè¯ç¨æ·å°ä¼è¢«æå¨ä¸æçææ£å¨åçä»ä¹ï¼ä½¿ç¨è¿ä¸¤ä¸ªé项ä¸çä»»ä½ä¸ä¸ªé½ä¼æä½ æå°ä¸æã(è¯æ³¨ï¼è¿ä¸¤å¥è¯æ¯è¾æææï¼åææ¯è¿æ ·çï¼If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)
--version
æå°ç¨æ¥äº§ç'configure'èæ¬çAutoconfççæ¬å·ã
--prefix=PEWFIX
'--prefix'æ¯æ常ç¨çé项ãå¶ä½åºç'Makefile'ä¼æ¥çéæ¤éé¡¹ä¼ éçåæ°ï¼å½ä¸ä¸ªå å¨å®è£ æ¶å¯ä»¥å½»åºçéæ°å®ç½®ä»çç»æç¬ç«é¨åã举ä¸ä¸ªä¾åï¼å½å®è£ ä¸ä¸ªå ï¼ä¾å¦è¯´Emacsï¼ä¸é¢çå½ä»¤å°ä¼ä½¿Emacs Lisp file被å®è£ å°"/opt/gnu/share"ï¼
$ ./configure --prefix=/opt/gnu
--exec-prefix=EPREFIX
ä¸'--prefix'é项类似ï¼ä½æ¯ä»æ¯ç¨æ¥è®¾ç½®ç»æåèµçæ件çå®è£ ä½ç½®ï¼ç¼è¯å¥½ç'emacs'äºè¿å¶æ件就æ¯è¿æ ·ä¸ä¸ªé®ä»¶ãå¦æ没æ设置è¿ä¸ªé项çè¯ï¼é»è®¤ä½¿ç¨çé项å¼å°è¢«è®¾ä¸ºå'--prefix'é项å¼ä¸æ ·ã
--bindir=DIR
æå®äºè¿å¶æ件çå®è£ ä½ç½®ï¼è¿éçäºè¿å¶æ件å®ä¹ä¸ºå¯ä»¥è¢«ç¨æ·ç´æ¥æ§è¡çç¨åºã
--sbindir=DIR
æå®è¶ 级äºè¿å¶æ件çå®è£ ä½ç½®ãè¿æ¯ä¸äºé常åªè½ç±è¶ 级ç¨æ·æ§è¡çç¨åºã
--libexecdir=DIR
æå®å¯æ§è¡æ¯ææ件çå®è£ ä½ç½®ãä¸äºè¿å¶æ件ç¸åï¼è¿äºæ件ä»æ¥ä¸ç´æ¥ç±ç¨æ·æ§è¡ï¼ä½æ¯å¯ä»¥è¢«ä¸é¢æå°çäºè¿å¶æ件ææ§è¡ã
--datadir=DIR
æå®éç¨æ°æ®æ件çå®è£ ä½ç½®ã
--sysconfdir=DIR
æå®å¨å个æºå¨ä¸ä½¿ç¨çåªè¯»æ°æ®çå®è£ ä½ç½®ã
--sharedstatedir=DIR
æå®å¯ä»¥å¨å¤ä¸ªæºå¨ä¸å ±äº«çå¯åæ°æ®çå®è£ ä½ç½®ã
--localstatedir=DIR
æå®åªè½åæºä½¿ç¨çå¯åæ°æ®çå®è£ ä½ç½®ã
--libdir=DIR
æå®åºæ件çå®è£ ä½ç½®ã
--includedir=DIR
æå®C头æ件çå®è£ ä½ç½®ãå ¶ä»è¯è¨å¦C++ç头æ件ä¹å¯ä»¥ä½¿ç¨æ¤é项ã
--oldincludedir=DIR
æå®ä¸ºé¤GCCå¤ç¼è¯å¨å®è£ çC头æ件çå®è£ ä½ç½®ã
--infodir=DIR
æå®Infoæ ¼å¼ææ¡£çå®è£ ä½ç½®.Infoæ¯è¢«GNUå·¥ç¨æ使ç¨çææ¡£æ ¼å¼ã
--mandir=DIR
æå®æå页çå®è£ ä½ç½®ã
--srcdir=DIR
è¿ä¸ªé项对å®è£ 没æä½ç¨ï¼ä»ä¼åè¯'configure'æºç çä½ç½®ãä¸è¬æ¥è¯´ä¸ç¨æå®æ¤é项ï¼å 为'configure'èæ¬ä¸è¬åæºç æ件å¨åä¸ä¸ªç®å½ä¸ã
--program-prefix=PREFIX
æå®å°è¢«å å°æå®è£ ç¨åºçååä¸çåç¼ãä¾å¦ï¼ä½¿ç¨'--program-prefix=g'æ¥configureä¸ä¸ªå为'tar'çç¨åºå°ä¼ä½¿å®è£ çç¨åºè¢«å½å为'gtar'ãå½åå ¶ä»çå®è£ é项ä¸èµ·ä½¿ç¨æ¶ï¼è¿ä¸ªé项åªæå½ä»è¢«`Makefile.in'æ件使ç¨æ¶æä¼å·¥ä½ã
--program-suffix=SUFFIX
æå®å°è¢«å å°æå®è£ ç¨åºçååä¸çåç¼ã
--program-transform-name=PROGRAM
è¿éçPROGRAMæ¯ä¸ä¸ªsedèæ¬ãå½ä¸ä¸ªç¨åºè¢«å®è£ æ¶ï¼ä»çååå°ç»è¿`sed -e PROGRAM'æ¥äº§çå®è£ çååã
--build=BUILD
æå®è½¯ä»¶å å®è£ çç³»ç»å¹³å°ãå¦æ没ææå®ï¼é»è®¤å¼å°æ¯'--host'é项çå¼ã
--host=HOST
æå®è½¯ä»¶è¿è¡çç³»ç»å¹³å°ãå¦æ没ææå®ãå°ä¼è¿è¡`config.guess'æ¥æ£æµã
--target=GARGET
æå®è½¯ä»¶é¢å(target to)çç³»ç»å¹³å°ãè¿ä¸»è¦å¨ç¨åºè¯è¨å·¥å ·å¦ç¼è¯å¨åæ±ç¼å¨ä¸ä¸æä¸èµ·ä½ç¨ãå¦æ没ææå®ï¼é»è®¤å°ä½¿ç¨'--host'é项çå¼ã
--disable-FEATURE
ä¸äºè½¯ä»¶å å¯ä»¥éæ©è¿ä¸ªé项æ¥æä¾ä¸ºå¤§åé项çç¼è¯æ¶é ç½®ï¼ä¾å¦ä½¿ç¨Kerberos认è¯ç³»ç»æè ä¸ä¸ªå®éªæ§çç¼è¯å¨æä¼é ç½®ãå¦æé»è®¤æ¯æä¾è¿äºç¹æ§ï¼å¯ä»¥ä½¿ç¨'--disable-FEATURE'æ¥ç¦ç¨å®ï¼è¿é'FEATURE'æ¯ç¹æ§çååï¼ä¾å¦ï¼
$ ./configure --disable-gui
-enable-FEATURE[=ARG]
ç¸åçï¼ä¸äºè½¯ä»¶å å¯è½æä¾äºä¸äºé»è®¤è¢«ç¦æ¢çç¹æ§,å¯ä»¥ä½¿ç¨'--enable-FEATURE'æ¥èµ·ç¨å®ãè¿é'FEATURE'æ¯ç¹æ§çååãä¸ä¸ªç¹æ§å¯è½ä¼æ¥åä¸ä¸ªå¯éçåæ°ãä¾å¦ï¼
$ ./configure --enable-buffers=
`--enable-FEATURE=no'ä¸ä¸é¢æå°ç'--disable-FEATURE'æ¯åä¹çã
--with-PACKAGE[=ARG]
å¨èªç±è½¯ä»¶ç¤¾åºéï¼æ使ç¨å·²æ软件å ååºçä¼ç§ä¼ ç»ãå½ç¨'configure'æ¥é ç½®ä¸ä¸ªæºç æ æ¶ï¼å¯ä»¥æä¾å ¶ä»å·²ç»å®è£ ç软件å çä¿¡æ¯ãä¾å¦ï¼åèµäºTclåTkçBLTå¨ä»¶å·¥å ·å ãè¦é ç½®BLTï¼å¯è½éè¦ç»'configure'æä¾ä¸äºå ³äºæ们æTclåTkè£ çä½å¤çä¿¡æ¯ï¼
$ ./configure --with-tcl=/usr/local --with-tk=/usr/local
'--with-PACKAGE=no'ä¸ä¸é¢å°æå°ç'--without-PACKAGE'æ¯åä¹çã
--without-PACKAGE
ææ¶åä½ å¯è½ä¸æ³è®©ä½ ç软件å ä¸ç³»ç»å·²æç软件å 交äºãä¾å¦ï¼ä½ å¯è½ä¸æ³è®©ä½ çæ°ç¼è¯å¨ä½¿ç¨GNU ldãéè¿ä½¿ç¨è¿ä¸ªé项å¯ä»¥åå°è¿ä¸ç¹ï¼
$ ./configure --without-gnu-ld
--x-includes=DIR
è¿ä¸ªé项æ¯'--with-PACKAGE'é项çä¸ä¸ªç¹ä¾ãå¨Autoconfæå被å¼ååºæ¥æ¶ï¼æµè¡ä½¿ç¨'configure'æ¥ä½ä¸ºImakeçä¸ä¸ªåéæ¹æ³æ¥å¶ä½è¿è¡äºXç软件ã'--x-includes'é项æä¾äºå'configure'èæ¬ææå å«X头æ件çç®å½çæ¹æ³ã
--x-libraries=DIR
类似çï¼'--x-libraries'é项æä¾äºå'configure'èæ¬ææå å«Xåºçç®å½çæ¹æ³ã
å¨æºç æ ä¸è¿è¡'configure'æ¯ä¸å¿ è¦çåæ¶ä¹æ¯ä¸å¥½çãä¸ä¸ªç±'configure'产ççè¯å¥½ç'Makefile'å¯ä»¥æçæºç å±äºå¦ä¸æ£µæ ç软件å ãå¨ä¸ä¸ªç¬ç«äºæºç çæ ä¸æçæ´¾ççæ件ç好å¤æ¯å¾ææ¾çï¼æ´¾ççæ件ï¼å¦ç®æ æ件ï¼ä¼åä¹±çæ£å¸äºæºç æ ãè¿ä¹ä½¿å¨å¦ä¸ä¸ªä¸åçç³»ç»æç¨ä¸åçé ç½®é项æçåæ ·çç®æ æ件é常å°é¾ã建议使ç¨ä¸æ£µæ ï¼ä¸æ£µæºç æ (source tree)ï¼ä¸æ£µæçæ (build tree)ï¼ä¸æ£µå®è£ æ (install tree)ãè¿éæä¸ä¸ªå¾æ¥è¿çä¾åï¼æ¯ä½¿ç¨è¿ç§æ¹æ³æ¥æçGNU mallocå ï¼
$ gtar zxf mmalloc-1.0.tar.gz
$ mkdir build && cd build
$ ../mmalloc-1.0/configure
creating cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc ) works... yes
checking whether the C compiler (gcc ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for a BSD compatible install... /usr/bin/install -c
checking host system type... i-pc-linux-gnu
checking build system type... i-pc-linux-gnu
checking for ar... ar
checking for ranlib... ranlib
checking how to run the C preprocessor... gcc -E
checking for unistd.h... yes
checking for getpagesize... yes
checking for working mmap... yes
checking for limits.h... yes
checking for stddef.h... yes
updating cache ../config.cache
creating ./config.status
è¿æ ·è¿æ£µæçæ 就被é ç½®äºï¼ä¸é¢å¯ä»¥ç»§ç»æçåå®è£ è¿ä¸ªå å°é»è®¤çä½ç½®'/usr/local'ï¼
$ make all && make install
freebsd下jail命令说明
Jail 命令在FreeBSD 4.0中首次出现。用于“监禁”进程以及其衍生的子进程。而且jail和FreeBSD本身的secure_level合并使用可以显著限制(jail中的)root的能力。
假设某一个应用程序在系统内中运行,一段时间之后该应用程序被发现包含有致命的安全漏洞,如果在通常的骑士猎头源码系统中,这个应用程序可能已经在这个上面构成了漏洞,甚至cracker们已经成功地攻破这一应用并且成为root,控制了系统;但假如该应用程序放在jail内运行,即使cracker们已经攻破系统,也无法访问到jail之外系统的其他部分。因为尽管应用程序可以在jail之中自由活动,但是无法获得更多权限以及访问在jail之外的任何资源。通过这一特性,在系统管理上面可以做到防范未知漏洞,避免这些潜在的漏洞对整个系统的安全构成威胁。
jail通常有两类应用方向:
一、对应用程序的活动能力进行限制。
比如ftp服务器,DNS服务器,这样一些东西,比如wu-ftpd,bind这样一些隔三岔五就会爆出漏洞的“著名”软件放到jail里面会让人更加放心。
二、受控制的主机。
某些时候,需要对外提供有shell的管理性访问,比如作为某公司A,其合作单位B有某项目需要在A的机器上获得shell乃至root权限,这就需要提供受控制的主机,用户可以在jail里面控制几乎所有他需要的资源(除了jail不允许他访问的部分)。
第一类应用并不是非常复杂,实际上这类应用实现方法相对简单,只要在Linux下面玩过chroot就没有什么大问题;第二类应用则有很多有趣的ngzero源码特性,而jail最吸引人的部分也是这些很有趣的特性。
下面从最简单的部分开始:
第一类:限制应用程序活动能力
首先按照通常习惯的方式安装好你想要jail的应用程序,下面我们将会使用pure-ftpd(我不是很熟悉它,只不过顺手拿过来而已,据说还算好用)作为例子。
这个ftpd的安装位置,默认为:/usr/local/sbin;/usr/local/bin;在/etc下面还有一些相关的文件,整个结构感觉不是特别干净,不过它运行需要的东西并不很多,包括 /usr/local/sbin/pure-ftpd , /etc/xxx /etc/xxxx 这样一些文件。
接下来先用ldd看看/usr/local/sbin/pure-ftpd需要的那些运行库:
tester# cd /usr/local/sbin
tester# ldd pure-ftpd
pure-ftpd:
libcrypt.so.2 = /usr/lib/libcrypt.so.2 (0xb)
libpam.so.1 = /usr/lib/libpam.so.1 (0x)
libc.so.4 = /usr/lib/libc.so.4 (0xd)
这样我们的工作任务清单上面就多出来这样一些东西了: /usr/lib/......
使用ldd我们还可以获得其他一些需要放入jail的程序的运行库位置,信息搜集完成之后,我们开始建立jail目录树(这里我们假定jail环境构造在/jail内,当然你也可以选择你喜欢的位置):
tester# mkdir -p /jail/usr/{ lib,libexec,local/sbin,local/bin,local/etc,etc,var/run,var/log}
然后将上面列出的,libcrypt.so.2 等这些文件都复制到对应位置。当然还有我们FreeBSD下非常重要的一个文件ld-elf.so.1,尽管ldd没有给出提示,也还需要复制过去,否则应用程序也跑不起来。这样我们就获得了一个很干净(最小化)的应用程序运行环境jail命令的格式是:
jail path hostname ip-number command
下面开始在jail里面运行它:
tester# jail /jail jailed.host.name $JAILED_IP_ADDR /usr/local/sbin/pure-ftpd [options]
这里,/jail是你的jail环境的位置,也就是被jail之后,应用程序“以为”自己所在的“/”的位置;jailed.host.name是你打算提供给这个jail环境的主机名,某些情况下,应用程序需要知道这个变量;$JAILED_IP_ADDR是你打算提供ftp服务(如果是其他应用软件,那就是其他服务咯,比如web服务)的那个IP地址,至于/usr/local/sbin/pure-ftpd [options] 则是你打算运行的那个应用程序在jail里面的所在位置以及运行所需的参数。
然后用ps 查看一下进程状态:
tester# ps -axf |grep pureftpd
? IsJ 0:. pure-ftpd (SERVER) (pure-ftpd)
可以看到所有这些pure-ftpd的进程都有一个J,标志这这一程序正在jail下面运行。
这时候可能会有一些管理用的程序无法正常工作,因为这些管理用程序无法找到他们需要访问的batapp源码那些文件,只要找到这些应用程序需要调用的文件(比如日志文件)的位置,然后制造一个soft link就可以了,通常这些管理程序都可以继续正常运行。
到此为止,一个针对应用程序的jail构造完成。
第二类,构造受控制的主机
在这种情况下面,我们首先需要构造一个当前版本操作系统的完整镜像(下面这个脚本是从FreeBSD 4.6r的man page里面来的,实际上4.5以及之前的man page在构造jail目录树脚本上面都有一定的问题,4.6才纠正过来):
tester# cat /root/mkjail.sh
jailhome=/data/jail
cd /usr/src
mkdir -p $jailhome
make world DESTDIR=$jailhome
cd etc
make distribution DESTDIR=$jailhome -DNO_MAKEDEV_RUN
cd $jailhome/dev
sh MAKEDEV jail
cd $jailhome
ln -sf dev/null kernel
^D
tester# sh /root/mkjail.sh
最后在/data/jail下面获得一个完整的根据当前源码树编译得来的jail目录树。
接下来:
/
*tester# mkdir $jailhome/stand
tester# cp /stand/sysinstall $jailhome/stand
tester# jail $jailhome jailed.system.box ..0. /bin/csh
(这时候就获得了一个jail下面的shell)
jailed# /stand/sysinstall
*/
通过sysinstall这个程序可以对jail系统的常用变量进行设置,比如时区,DNS,Mail。还有jail系统在“启动”的时候需要执行的程序。
如果你足够熟悉这个系统,可以考虑自己手工一个个的做过来。
复制/etc/localtime 到 $jailhome/etc,使jail环境下的应用程序可以得到正确的时间;
复制/etc/resolv.conf 到 $jailhome/etc/resolv.conf 使jail下面可以正确解释域名;
在jail里面运行newaliases 避免sendmail的不断抱怨;
如果打算运行inetd,需要修改inetd的启动参数,加上 -a $LISTEN_ADDR 选项(因为jail无法自己获得当前系统的ip地址,所以必须提供一个ip地址给它)在rc.conf里面看起来应该是这样:
inetd_flags="-wW -a ..0."
将系统本身的syslogd 运行加上 -ss 选项,避免这个syslog启动****端口;修改/etc/rc.conf 加上 syslogd_flags="-ss" (对$jailhome/etc/rc.conf也如法炮制)
在jail内创建一个空的/etc/fstab,在rc.conf里面去掉网卡地址的绑定,这样在jail系统在启动的时候不会抱怨。
为了实际运行这个jail系统,还需要为jail提供一个可以连接的IP地址,这个地址可以与实际环境同一个子网,也可以处于另外一个子网中。
tester# ifconfig fxp0 ..0. netmask 0xffffffff alias
(这里为网卡fxp0绑定了一个别名,准备提供服务。)
所有这些东西都执行完了以后,5348源码可以有几个方法把jail系统启动起来,一个是在jail外面运行
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/sh $jailhome/etc/rc
一个是单纯把ssh/telnetd这样一些提供远程访问的服务在jail内启动起来:
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/sh $jailhome/bin/inetd -wW -a $jail_IP_ADDR
然后从外面登录系统,运行、配置jail系统环境,或者手工启动需要的应用服务。
如果打算运行一个用于生产环境的jail系统的话,推荐使用第一种方法,并且把启动jail的命令放到(实际环境的)/etc/rc.local脚本里面去,这样jail系统可以有比较完备,与实际机器相类似的环境。
这样一个jail系统就算构造完成并且可以正常运作,加上在实际环境里面定期的严格的备份,安全检查与审计,就可以得到一个很不错的安全系统。一般的scriptkids已经无法对你的系统构成实际威胁,即使是某些与黑帽子走得很近的人在漏洞公开之前得到实际的攻击脚本,并且进入你的系统,他也只能在jail里面活动,而且你可以知道他什么时候进入和离开系统,做了什么。这样你可以很轻松的恢复系统和防范下一次未知的攻击。
在jail系统的管理上面有几个问题需要注意:
1. jail里面的帐号、密码是跟实际系统不同的,但是在jail之外ps或者查看jail目录树内的文件时,那些jail内部的uid会被看成外部的uid,因此最好把jail里面的/etc/adduser.conf进行修改,把他们的uid起始号码放大,比如:uid_start="",这样当你在jail外部进行文件、进程管理的时候不至于误会文件或者进程的宿主。
2. jail内的任何活动,其能力都受到了限制。mml源码比如top/vmstat这样的东西都不能使用,mknod,dd等等这样需要访问直接硬件的东西也无法工作。所以在jail内监控系统运行状态也比较难。
3. 当想要远程关闭jail系统的时候,可以有两种方法,一是进入jail之后kill -TERM -1 或者 kill -KILL -1 ,这样向所有该jail内的进程发送SIGTERM或者SIGKILL信号,也可以在jail里面运行/etc/rc.shutdown来关闭jail。如果是本地想要关闭jail倒是简单,只要把所有带有J标记的进程干掉就可以了。
4. 一个系统可以运行多个jail,各个jail之间无法互相干涉,如果在jail外面使用
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /path/to/application
这种方式运行某个应用程序,下一次试图通过运行
tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/csh
这种方式获得的jail过的shell来管理该应用程序将会失败。因为这时是两个各自独立的jail,互相不能干涉。为了能对jail系统内进程灵活地进行管理,推荐在jail里面除开应用软件之外,再启动telnetd或者sshd之类的服务,这些服务此时与应用程序运行在同一个jail里面,就可以通过远程登入系统后获得与那些应用程序在同一个jail内的shell。
5. jail系统内的所有应用软件版本号应该与外部实际系统保持一致。当外部系统的源码同步到某个版本并且重新做过make world之后,推荐也重新生成一次jail,以避免某些可能的莫名其妙的错误。
6. 另外有一个做法不知道是否正确,在jail里面每次使用ps的时候,系统都会报告没有/var/run/dev.db文件,让人感觉很不舒服,复制实际系统的/var/run/dev.db 到 $jailhome/var/run/ ,就不会再碰到这个问题。
ADBLib 在 android 中的使用
ADBLib在Android中的使用 在Android中,我们利用代码执行adb命令,如: Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec(cmd); 但部分adb命令因权限不足被拒绝。特别是自Android P版本后,权限控制更为严格,比如获取CPU信息时,因权限问题被拒绝执行。此时,需要使用更高权限执行adb命令,ADBLib则成为解决这一问题的利器。 尽管网上关于ADBLib资料较少,但其源码简单,可访问开源地址: /cgutman/AdbLib。在Google Play上亦有应用提供ADBLib的apk源码。 使用步骤如下:将tcpip端口设置为
生成加密密钥
获取手机IP
使用socket连接手机IP+
编写并执行cmd命令,读取返回值
具体操作包括:手机USB连接电脑,执行命令adb tcpip
生成密钥代码,使用adbcli库中的Adbcrypto类
获取手机IP地址
使用socket连接并执行cmd命令
为确保操作成功,需要添加权限。 首先,设置tcpip端口;然后生成密钥;获取手机IP;通过socket连接手机IP+端口,并执行命令。 通过ADBLib,我们能实现与手机的稳定连接,执行adb命令,获取设备信息,提升开发效率。Linux下源码安装的经验详解
在linux下安装软件,难免会碰到需要源码安装的,而就是这简简单单的./configure、make、sudo make install三步,却让不少人头疼不已,这里以安装X为例具体介绍下我在安装时的一点小经验,以便共同学习,共同进步!
首先,我们要做些准备工作,源码安装少不了这几个工具pkg-config、libtool、autoconf和automake(当然,还有更基础的,像zlib、m4等,这里就略过啦),其中,pkg-config是相对比较重要的,它就是向configure程序提供系统信息的程序,如软件的版本、库的版本以及库的路径等信息,这些只是在编译期间使用。你可以打开/usr/lib/pkgconfig下任意一个.pc文件,就会发现类似下面的信息(X的pc文件):
prefix=/usr
exec_prefix=${ prefix}
libdir=${ exec_prefix}/lib
includedir=${ prefix}/include
xthreadlib=-lpthread
Name: X
Description: X Library
Version: 1.3.3
Requires: xproto kbproto
Requires.private: xcb = 1.1.
Cflags: -I${ includedir}
Libs: -L${ libdir} -lX
Libs.private: -lpthread
configure就是靠着这些信息来判断软件版本是否符合要求的。接着来看看pkg-config是怎样工作的,缺省情况下,pkg-config首先在usr/lib/pkgconfig/中查找相关包(譬如x)对应的相应的文件(x.pc),若没有找到,它也会到PKG_CONFIG_PATH这个环境变量所指定的路径下去找,若是还没有找到,它就会报错。所以这里就可以得到一些解决configure时提示**库未找到的办法了,先用命令ldconfig -p | grep 库名来分析该库是否安装及其路径,若返回空,则说明该库确实未安装,否则,可以根据该命令的返回结果找到库的安装地点,然后设置其环境变量,命令如下:
export PKG_CONFIG_PATH=软件位置/lib/pkgconfig:$PKG_CONFIG_PATH,这里有个常识,软件安装后,.pc文件都是在安装目录下的lib/pkgconf中的。这样只会在当前命令窗口有效,当然,你也可以修改home文件夹下的.bashrc文件(带.的文件为隐藏文件,可以用命令vi .bashrc编辑),在文件末尾加上上面那句命令,重新登录即可。其他的几个在linux下也是不可或缺的,libtool为管理library时使用,没装的话错误提示如下:possibly undefined macro:AC_PROG_LIBTOOL。而autoconf和automake可以用于在某些没有configure的文件的源码包安装时使用(pixman就是个典型的例子,安装了二者后直接./autogen.sh就可以安装了)。
准备工作做好后,就可以安装了,具体全部命令如下:
tar vxf libX-6.2.1.tar.gz
cd libX-6.2.1
mkdir X-build
cd X-build
../configure prefix=/usr/local/XR6
make
echo $
sudo make install
这里有一些好的安装习惯可以积累一下:1、建立一个临时编译目录,本例中为X-build,这样可以再安装完成后删除该目录,进而可以节省空间,而且保持了源码目录的整洁;2、安装到指定目录,本例中为/usr/local/XR6,最好把几个相关的安装在同一文件夹下,如这里的XR6文件夹,这样便于管理,否则全部默认安装在/usr/local下,很杂乱;3、编译完成后做检查,本例为echo $,表示检查上一条命令的退出状态,程序正常退出返回0,错误退出返回非0,也可以使用make check,主要为了防止make失败后直接install,进而出现了一些莫名其妙的错误。这里还介绍一种更方便快捷的安装方法,用将安装命令连接起来,如../configure prefix=**makesudo make install,这样,只有在前面的命令执行正确的情况下,后面的任务才会执行,多方便!
除此之外,安装之前可以阅读下源码包中的readme和install等文档,往往有所需软件及其下载地址,还包括一些安装技巧和配置选项。另外,在configure前,先输入configure help,可以查看有哪些选项可以添加。还有几个关系安装成功的东西就是ldconfig了,在安装时如果提示找不到某个库或者在编译时提示找不到**.so文件,就要用到它了,最简单的解决办法就是sudo gedit /etc/ld.so.conf,在文件中加入**.so文件所在路径,再运行一下ldconfig就可以了,但是我对这个东西有阴影,不知道是因为用了虚拟机还是其他的原因,有7、8次我在运行完ldconfig后,Ubuntu就没办法打开任何窗口了,直接关机重启就更是进不去系统了,崩溃之,不知道有没有高手有解决办法。在这里提供一种代替ldconfig的办法,就是export LD_LIBRARY_PATH=*.so文件地址:$LD_LIBRARY_PATH,用它我就舒心多了,也就是麻烦点,哥忍了,总比系统崩溃强多了吧,呵呵!其实,在configure时碰到问题,你应该庆幸,因为你可以根据它很明显的提示找到缺失的东西装上,在配置下pkgconfig和ldconfig基本上就可以搞定了,但是make的时候就没那么简单了。
编译时提示最多的就是**东西未找到了,要么是库文件,要么是头文件,库文件用上面的ldconfig基本上就可以搞定,头文件的话需要配置包含的路径,和库的类似,命令如下:
export LD_INCLUDE_PATH=/usr/local/include:$LD_INCLUDE_PATH
在这个时候最重要的就是淡定了,循着丫的error往上找,像No such file or directory这样的错误提示肯定就在附近,找到了,include之就可以咯!
Qemuå®è£ ä¹åå¦ä½å¸è½½
qemuå¸è½½æ ¹æ®å®è£ æ¹å¼çä¸åä¹ä¼æååºçå¸è½½æ¹å¼ï¼ï¼1ï¼æºç ç¼è¯å®è£ éè¦æå¨å¸è½½ï¼ï¼2ï¼ubutnu pakageå®è£ éè¦å½ä»¤å¸è½½
(1) æºç ç¼è¯å®è£ çqemuéè¦æå¨å¸è½½ï¼
å¯æ§è¡æ件é»è®¤æ¾å¨/usr/local/bin
åºæ件é»è®¤åæ¾å¨/usr/local/libexec
é ç½®æ件é»è®¤åæ¾å¨/usr/local/etc
å ±äº«æ件é»è®¤åæ¾å¨/usr/local/share
å¸è½½æºç åªéå°ä¸é¢å个ç®å½ä¸ç¸å ³æ件æè ç®å½å é¤
#
# rm -rf /usr/local/bin/qemu-
*# rm -rf /usr/local/libexec/qemu-bridge-helper
# rm -rf /usr/local/etc/qemu
# rm -rf /usr/local/share/qemu
(2) pakageå®è£ æ¹å¼éå½ä»¤å¸è½½
å é¤å åç¸å ³ä¾èµ
# sudo apt-get remove --auto-remove qemu-system-x
å é¤é ç½®æ件åç¸å ³çæ°æ®æ件
# sudo apt-get purge --auto-remove qemu-system-x