前言

本文旨在记录——如何在docker的Ubuntu镜像下配置defects4j 1.2.0 (最新版本,此时时间:2018-09-16)。

一、配置过程

1)先要在docker下安装Ubuntu(我的系统是win10家庭版)

docker pull ubuntu:14.04

docker run --name testByDale -it ubuntu:14.04

docker exec -u deheng -w /home/deheng/ -it testByDale bash
docker exec -u deheng -it testByDale bash

docker exec -it --user root /bin/bash

在ubuntu中添加一个新的用户账户:
adduser deheng
密码:deheng

删除账户:deluser 或者 sudo deluser
重建sudo账户:sudo adduser deheng

然而还是没有sudo权限,那么我就参考:https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-ubuntu-16-04 和 https://www.linuxidc.com/Linux/2010-12/30386.htm 中的两篇文章

先进入root,用su -
然而我不知道root的密码。只能用docker exec 命令重新进入root了。

chmod u+w /etc/sudoers
添加deheng ALL=(ALL) ALL
chmod u-w /etc/sudoersexitdocker exec -u deheng -it testByDale bash

2)根据defects4j官网(https://github.com/rjust/defects4j )要求,安装需要的程序和模块

Requirements

Java 1.7
Perl >= 5.0.10
Perl modules: run cpan Bundle::CSV DBD::CSV DBI or sudo cpan Bundle::CSV DBD::CSV DBI
Git >= 1.9
SVN >= 1.8

安装git:

sudo apt-get update
sudo apt-get install git
git --version

安装svn:

sudo apt-get subversion
svn --version

安装perl 模块:

cpan Bundle::CSV DBD::CSV DBI

安装jdk 1.7:
必须先拷贝jdk.tar.jar到docker container中,然后
zip -r archive_name.zip directory_to_compress 这个是用来压缩目录的
unzip archive_name.zip 解压zip文件

tar -cvf archive_name.tar directory_to_compress 压缩文件夹成一个tar包
tar -xvf archive_name.tar.gz 解压tar包。
tar -xvf archive_name.tar -C /tmp/extract_here/ 解压到指定目录
tar -zxvf archive_name.tar.gz 解压缩tar包。
tar -zcvf archive_name.tar.gz directory_to_compress 压缩tar包。

修改/etc/profile,添加java的环境变量,需要掌握vim指令:
vim /erc/profile
按insert进入插入模式,按esc退出插入模式。
: q! (输入q!, 不存盘强制退出vi)
: wq (输入「wq」,存盘并退出vi)

关于每次都要source /etc/profile:
https://segmentfault.com/q/1010000005981201

~/.bashrc里面加一句 source /etc/profile

linux关于bashrc与profile的区别:
https://www.cnblogs.com/hongzg1982/articles/2101792.html
/etc/profile,/etc/bashrc 是系统全局环境变量设定
/.profile,/.bashrc用户家目录下的私有环境变量设定

我知道为什么我的deheng账户下的ubuntu没有~./bashrc了,因为我之前就建了一个deheng的文件夹,所以现在需要自己新建一个bashrc,
我建立了之后,就搞定了,在~./bashrc里面加上一行:source /etc/profile 就可以正确设置java 环境变量了。nice。

不信可以验证一下,我重新建一个账户,绝对会自动生成一个文件夹出来:

exit
docker exec -it testByDale bash
sudo adduser justfortest
exit
docker exec -u justfortest -it testByDale bash
ls
ls -a

果然有结果:

deheng justfortest
. … .bash_logout .bashrc .profile

3)把defects4j拷贝到ubuntu中

perl模块查看:
perldoc -l DBD::mysql
perldoc perllocal
perldoc -l Bundle::CSV

https://blog.csdn.net/u010533843/article/details/54971428

我先运行 cpan Bundle::CSV DBD::CSV DBI,结果不行
所以我分开: sudo cpan DBI
看来必须先安装YAML,否则会提示:‘YAML’ not installed, will not store persistent state

查看安装的所有软件
dpkg -l

二、步骤一已经失败,现在进入另外的尝试——configure defects4j in my ubuntu image from the scratch

1)
先下载defects4j:
git clone https://github.com/rjust/defects4j

更换阿里源:
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份
sudo vim /etc/apt/sources.list #修改
sudo apt-get update #更新列表

2)运行init.sh

Linux下获取当前的目录,需执行以下命令:$(cd dirname $0;pwd)

其中,dirname $0,取得当前执行的脚本文件的父目录
cd dirname $0,进入这个目录(切换当前工作目录)
pwd,显示当前工作目录(cd执行后的)

关于wget:
-N, –timestamping 不要重新下载文件除非比本地文件新
-nv, –non-verbose 关掉冗长模式,但不是安静模式

关于unzip命令:
-o 以 压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
-o 不 必先询问用户,unzip执行后覆盖原有文件。
-q 执 行时不显示任何信息。
-q 不显 示指令执行过程。
-u 更 换较新的文件到压缩文件内。

关于stat命令:
stat指令:文件/文件系统的详细信息显示。
stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:
-f  不显示文件本身的信息,显示文件所在文件系统的信息
-c 自定义输出格式,结尾有换行

运行:
$ docker cp ./ubuntu/defects4j/project_repos/defects4j-repos.zip testByDale:/home/deheng/defects4j/project_repos

$ docker cp ./ubuntu/defects4j/framework/lib/test_generation/generation/evosuite-0.2.0.jar testByDale:/home/deheng/defe
cts4j/framework/lib/test_generation/generation/

$ docker cp ./ubuntu/defects4j/framework/lib/test_generation/runtime/evosuite-standalone-runtime-0.2.0.jar testByDale:/
home/deheng/defects4j/framework/lib/test_generation/runtime

拷贝文件到ubuntu中。

雕虫小技。。。
我觉得只要习惯了看init.sh,还是不难把defects4j配置出来的。

下载randoop
https://github.com/randoop/randoop/releases/

docker cp ./ubuntu/defects4j/framework/lib/test_generation/generation/replacecall-4.0.4.jar testByDale:/home/deheng/d
efects4j/framework/lib/test_generation/generation/

发现一个神奇海螺般的问题:
在wget的时候,如果进度条不动了,我只要按一下ctrl + c,进度条就又动起来了,神奇。

问题:
2018-09-16 14:58:33 (14.9 KB/s) - ‘major-1.3.2_jre7.zip’ saved [4490962/4490962]

cp: cannot stat ‘major/bin/.ant’: No such file or directory

Setting up EvoSuite …

Setting up Randoop …
./init.sh: line 83: jar: command not found

3)然而,还需要:
cpan Bundle::CSV DBD::CSV DBI

这个命令不可行。

$ docker cp ./ubuntu/sources.list testByDale:/home/deheng/

幸好之前还记录了一些DBI perl模块的安装,,,

不过我先装make。我这个ubuntu好像没有make,也没有gcc??有点奇怪。

不过163网易源已经不行了啊,全部是miss,bad,所以只能用清华源了

https://blog.csdn.net/qq_35038153/article/details/72790762

sudo apt-get install gcc (装gcc)

sudo apt-get install cmake (装cmake,不知道有用没)

原来确实是我没有装gcc和cmake,装了之后,现在运行的可好了
cpan Bundle::CSV DBD::CSV DBI

##三、保存对docker 容器的修改

保存对容器的修改

当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。

运行docker commit,可以查看该命令的参数列表。
你需要指定要提交保存容器的ID。(译者按:通过docker ps -l 命令获得)
无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。(译者按:非常类似git里面的版本号)

$docker commit 698 learn/ping
docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1

https://www.jianshu.com/p/1c8b96cf1f13
这里讲的很详细,怎么上传docker 镜像

$ docker save busybox > busybox.tar
$ ls -sh busybox.tar
2.7M busybox.tar
$ docker save --output busybox.tar busybox
$ ls -sh busybox.tar
2.7M busybox.tar
$ docker save -o fedora-all.tar fedora
$ docker save -o fedora-latest.tar fedora:latest

如果想要把镜像存出到本地文件,可以使用docker save命令,例如,存出本地的刚才创建的testimage:lastest为镜像文件testimage.tar文件:

[root@wdg2 ~]# docker save -o /data/centos7.tar centos7
[root@wdg2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos7 latest 562987ba2b7e 3 minutes ago 589.4 MB
centos latest 9baab0af79c4 2 weeks ago 196.8 MB

载入镜像的话,要先删除:
docker rmi centos7
docker load --input /data/centos7.tar
docker images

运行defects4j的一些问题

1)编码
docker里面不支持ascii编码,好像。
我在下载math_35_buggy的时候,编译出错(defects4j compile):
[javac] /home/deheng/SimFix/buggyprograms/math_35_buggy/src/test/java/org/apache/commons/math3/exception/util/LocalizedFormatsTest.java:21: error: unmappable character for encoding ASCII
[javac] * Copyright 2010 CS Communication & Syst??mes
[javac] ^
[javac] /home/deheng/SimFix/buggyprograms/math_35_buggy/src/test/java/org/apache/commons/math3/exception/util/LocalizedFormatsTest.java:21: error: unmappable character for encoding ASCII
[javac] * Copyright 2010 CS Communication & Syst??mes
[javac] ^
[javac] 2 errors

把这个systems改正常之后,就可以了。

在docker中配置defects4j基准测试集相关推荐

  1. 在docker中配置apt工具与python的源均为国内源

    在docker中配置apt工具与python的源均为国内源 1.准备并进入一个docker容器 本文主要包含一些常用的配置方法.包括在docker中配置系统源.python源. 打开 linux 终端 ...

  2. docker 中配置网易镜像

    要在 Docker 中配置网易镜像,需要完成以下步骤: 打开 Docker 客户端. 在命令行中输入以下命令,以下载网易镜像加速器地址: sudo curl -sSL https://get.daoc ...

  3. Docker 中的网络管理与集群构建

    Docker中的网络与数据管理 一.Docker网络管理 1.Docker默认网络管理 docker的网络模式 注:docker有三种网络模式,默认的为bridge,配置后可以和宿主机通信,host和 ...

  4. Docker中搭建redis分片集群,搭建redis哨兵结构,实现springboot中对redis分片集群、哨兵结构的访问,Redis缓存雪崩、缓存击穿处理(非关系型数据库技术课程 第十二周)

    文章目录 一.要求: 二.知识总结 缓存雪崩 解决方案 docker中redis分片集群搭建 配置好配置文件 redis-6380.conf redis-6381.conf redis-6382.co ...

  5. 在Docker中配置ASP.NETCore的HTTPS模式

    (The Continued Rising Power of Developers) 使用HTTPS,让网站更安全 PS:经过两周的学习和部署迁移,目前已经把所有后端都迁到了基于Docker的Jenk ...

  6. Docker中配置Oracle12c

    前言 最近实习导师要求部署公司项目,其中需要使用Oracle.在经历了window的部署之后他竟然神奇的卡了3小时进度条!无奈之下只能取消,结果可想而知,我还需要卸载我的window版本的Oracle ...

  7. docker中配置redis

    1.常规操作 docker pull redis(默认你的docker中没有redis) 2.查看redis是否拉取成功 docker images redis 3.创建目录,在你的宿主机,(我是在虚 ...

  8. 在Docker中配置AdGuard Home

    1.参考网站 Docker Hubhttps://hub.docker.com/r/adguard/adguardhome2.在终端输入以下命令拉取镜像 docker pull adguard/adg ...

  9. Docker的使用(五:Docker中的网络与数据管理)

    实验环境 三台运行有Ubuntu 16.04 操作系统的虚拟机,并每台主机中已安装docker环境: 学习目标 docker的网络管理 docker Swarm集群的使用 Volume数据卷的使用 实 ...

最新文章

  1. 也许,这样理解 HTTPS 更容易
  2. android:ellipsize = marquee 跑马灯,Android-单行跑马灯(一直循环)效果
  3. 关于Java中的随机数产生
  4. e-mobile帐号状态存在异常_一文掌握异常检测的实用方法 | 技术实践
  5. html中给文章怎么设置行高,css如何设置行距?
  6. 资源放送丨《 Oracle RAC高并发系统的故障案例解析 - 2020云和恩墨大讲堂》PPT视频...
  7. 【bzoj5099】[POI2018]Pionek 双指针法
  8. POJ 1470 Closest Common Ancestors(最近公共祖先 LCA)
  9. 用python把unix格式转换成windows格式
  10. matlab covar,Matlab功率谱估计
  11. Exposure X8 ps人像图片调色滤镜插件
  12. 函数在c99中隐式声明无效_C函数的隐式声明
  13. 算法笔记习题 7-1小节
  14. 64位Win7 安装配置 64位Oracle11g + 32位InstantClient + PLSQL10
  15. 什么是APS系统?APS系统和ERP系统的区别是什么?
  16. Java实现 蓝桥杯 算法训练 Beaver's Calculator
  17. SQL Server获取当年第一天当年最后一天当月第一天当月最后一天
  18. 怎么使用百度更精准搜索?我来教你6个搜索引擎小技巧
  19. 怎样查找某个外文期刊的文献?
  20. DOCs常用命令集合cmd常用api集合

热门文章

  1. Activity的四种启动模式应用场景
  2. 为什么一打开电脑单机游戏就绿屏
  3. 用计算机研究唐诗,妙哉!那个用文言文编程的小哥,竟从28万行唐诗中找出了对称矩阵...
  4. 算法重要,但并非全部,并非所有人的选择
  5. 探究Java中byte数据类型范围为何是(-128到127)
  6. 自己的叫声被千万人听到了,是一种什么体验
  7. 数据库设计范式(二)之巴斯范式第四范式第五范式以及域键范式
  8. Y460笔记本双硬盘双系统折腾记录(主硬盘位SSD,光驱架HDD)
  9. 哈佛女校长毕业典礼讲话:职…
  10. Excel如何使用取整函数