WIN7下安装linux出现[Minma]BASH-like line editing is supported?
iso直接引导安装,问题出在grub引导菜单,kernel行,后面应该要有内核启动参数,比如像Ubuntu的boot=casperiso-scan/filename=ubuntu.isoquietnoejectnopromptsplash这些,不然grub装载的引导内核vmlinuz无法找到iso,也就无法加载实际的根文件系统,就会出错进入shell。CentOS没装过,不知道具体需要什么内核参数,你可以自行搜索。
linux开机启动顺序?
Linux 开机启动顺序:
1. 加载内核
2. 启动 init(/etc/inittab)
内核启动的第一个用户级别的进程,其 pid 始终为 1,其它的开机启动脚本都是通过是通过这个进程来启动的。
3. 执行 /etc/rc.d/rc.sysinit
这是 init 执行的第一个脚本,这个脚本主要工作是进行系统的初始化,如:设置系统字体、启动 swapping、设置主机名、装载声卡模块等。
4. 执行 /etc/rc.d/rc*.d(rc0.d、rc1.d、rc2.d…rc6.d)
这一步会运行各个运行级别的脚本。这些运行脚本是指通过 chkconfig 命令配置的开机启动各个级别所要要执行的程序。
5. 执行 /etc/rc.d/rc.local(就是 /etc/rc.local)
在各级别服务启动后,会执行该文件,如果不需要把所要执行的脚本配置为系统服务,也可以把所需执行的命令写到这个文件中,相比来说更为简单方便。
6. /sbin/mingetty,等待用户登录。
如何在windows上编译linux可用的动态链接库?
1、背景
最近的性能测试中,压测的某些接口返回的数据是一个复杂的json格式的字符串,而后续的接口中又需要把这个字符串修改后作为入参,自己处理起来比较麻烦。于是想到了把cjson编译成动态链接库在loadrunner的脚本中调用。另外,由于实际压测用的是部署在linux上的负载机,还需要再编译一个linux上的动态链接库。这样在调试时使用windows平台的dll,而在压测时使用linux平台的so。 先附上我编译好的动态链接库,可以直接在loadrunner中使用
2、cjson
cjson是一个开源的json库,它的优势在于完全用c实现,因此适用性相当广,用在loadrunner中也是毫无压力。它的git主页是。
3、windows平台
- 打开vsual studio(我用的是vs2015,其他版本也可以,codeblock也没问题,随你喜欢),新建一个win32程序,程序类型选择dll,附加选项选择空项目。
- 把cJSON.c和cJSON.h拖到工程里。
- 设置编译选项为release、x86(重要!),编译。
- 将编译出来的cjson.dll放到loadrunner脚本的根目录下,然后在菜单File-Add file to script,添加cjson.dll。
在代码中加载cjson.dll,然后就可以使用cjson的函数了。先尝试一下,
- 1
- 2
- 3
注意这里cjson_Version返回的是指针,但loadrunner认为是int,所以要显式转成指针,不然编译不通过。
再看cjson解析字符串的函数。它的用法如下:
- 1
- 2
这里需要用到cJSON.h中声明的结构体cJSON,但直接引用cJSON.h在loadrunner中编译不过。这个也有解决办法,把cJSON.h中cJSON这个结构体的定义代码复制到action的顶部就可以了,如图 cJSON.h中其他的变量或者宏也可以,如果编译时报错,复制过来就可以了。
4、Linux平台
下面再编译一个linux平台上的动态链接库,用在linux负载机上。 cjson的代码中带了MakeFile,也有cmake,可以直接编译。但如果linux系统是64位的,则默认编译的是64位的so,无法被loadrunner加载,会提示“wrong ELF class: ELFCLASS64”。我们需要手动修改MakeFile,让它编译一个32位的so。 1. 修改cJSON源码根目录下的MakeFile 打开MakeFile,分别在29、31、93、96行,增加-m32,如图 2. 在源码根目录下执行
- 1
- 2
如果出现提示“fatal error: sys/cdefs.h: No such file or directory”,需要再装一个依赖库
- 1
- 2
3. 编译成功后,会得到名为libcjson.so.1.6.0的动态链接库。把它复制到loadrunner脚本的根目录下,同样菜单File-Add file to script,增加到脚本中。 4. 在脚本中加载so,这步和windows上是一样的。这样脚本就可以在linux下运行了。linux上安装负载机可以参考我的另一篇文章。
- 1
- 2
5、遗留问题
最后有个遗留问题,loadrunner似乎不支持平台宏,我想用宏控制,在windows下加载dll,linux下加载so,但没有找到解决方法。