Merge pull request #37 from Dymaxion00/master
Add test files, update documentation, tweak run scriptspull/39/head
|  | @ -51,7 +51,7 @@ It will be used for the build environment and the final image. | |||
|     apt-get update | ||||
|     apt-get dist-upgrade | ||||
|     apt-get autoremove | ||||
|     apt-get install p7zip-full python-dev libxml2-dev libxslt1-dev pmount | ||||
|     apt-get install p7zip-full python-dev libxml2-dev libxslt1-dev pmount python-setuptools libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk | ||||
| ``` | ||||
| 
 | ||||
| * Install python requirements | ||||
|  | @ -60,6 +60,8 @@ It will be used for the build environment and the final image. | |||
|     pip install lxml | ||||
|     pip install oletools olefile | ||||
|     pip install officedissector | ||||
|     pip install exifread | ||||
|     pip install Pillow | ||||
|     pip install git+https://github.com/Rafiot/python-magic.git@travis | ||||
|     pip install git+https://github.com/CIRCL/PyCIRCLean.git | ||||
| ``` | ||||
|  |  | |||
|  | @ -1,5 +1,9 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: in copy_to_final.sh" 1>&2 | ||||
| 
 | ||||
| 
 | ||||
| set -e | ||||
| set -x | ||||
| 
 | ||||
|  | @ -42,3 +46,7 @@ cp -rf midi ${CHROOT_PATH}/opt/ | |||
| 
 | ||||
| 
 | ||||
| # It is also a good idea to run raspi-config once and enable the console login (allow debugging) | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: done with copy_to_final.sh" 1>&2 | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,6 +3,9 @@ | |||
| set -e | ||||
| set -x | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: in groomer.sh" 1>&2 | ||||
| 
 | ||||
| source ./constraint.sh | ||||
| if ! [ "${ID}" -ge "1000" ]; then | ||||
|     echo "This script cannot run as root." | ||||
|  | @ -101,8 +104,10 @@ do | |||
|         mkdir -p "${target_dir}" | ||||
|         LOGFILE="${LOGS}/processing.txt" | ||||
| 
 | ||||
|         echo "==== Starting processing of /media/${SRC} to ${target_dir}. ====" 1>&2 | ||||
|         echo "==== Starting processing of /media/${SRC} to ${target_dir}. ====" >> ${LOGFILE} | ||||
|         generic.py --source /media/${SRC} --destination ${target_dir} || true | ||||
|         echo "==== Done with /media/${SRC} to ${target_dir}. ====" 1>&2 | ||||
|         echo "==== Done with /media/${SRC} to ${target_dir}. ====" >> ${LOGFILE} | ||||
| 
 | ||||
|         ls -lR "${target_dir}" | ||||
|  | @ -110,5 +115,8 @@ do | |||
|     let PARTCOUNT=`expr $PARTCOUNT + 1` | ||||
| done | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: done with groomer.sh" 1>&2 | ||||
| 
 | ||||
| # The cleanup is automatically done in the function clean called when | ||||
| # the program quits | ||||
|  |  | |||
|  | @ -1,5 +1,8 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: in mount_image.sh" 1>&2 | ||||
| 
 | ||||
| # Notes: | ||||
| # - To chroot in an existing SD card, unset IMAGE. Change the paths to the partitions if needed. | ||||
| # - The offsets are thoses of 2013-02-09-wheezy-raspbian.img. It will change on an other image. | ||||
|  | @ -19,6 +22,7 @@ if [ -z "$1" ]; then | |||
|     exit | ||||
| fi | ||||
| COMMAND=${1} | ||||
| COMMAND_OPT=${2} | ||||
| 
 | ||||
| set -e | ||||
| set -x | ||||
|  | @ -31,7 +35,7 @@ PARTITION_BOOT='/dev/mmcblk0p1' | |||
| 
 | ||||
| # If you use the img | ||||
| ##### Debian | ||||
| IMAGE='2015-11-06-CIRCLean.img' | ||||
| IMAGE='raspbian-wheezy.img' | ||||
| OFFSET_ROOTFS=$((122880 * 512)) | ||||
| OFFSET_BOOT=$((8192 * 512)) | ||||
| ##### Arch | ||||
|  | @ -93,4 +97,7 @@ cp -pf /etc/resolv.conf ${CHROOT_PATH}/etc | |||
| 
 | ||||
| mv ${CHROOT_PATH}/etc/ld.so.preload ${CHROOT_PATH}/etc/ld.so.preload_bkp | ||||
| 
 | ||||
| ${COMMAND} ${CHROOT_PATH} | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: Image mounted, executing command from mount_image.sh" 1>&2 | ||||
| 
 | ||||
| ${COMMAND} ${CHROOT_PATH} ${COMMAND_OPT} | ||||
|  |  | |||
							
								
								
									
										13
									
								
								run_tests.sh
								
								
								
								
							
							
						
						|  | @ -1,11 +1,22 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| TEST_PART_TYPE=${1} | ||||
| TEST_SOURCE_TYPE=${2} | ||||
| 
 | ||||
| if [ -z "$1" ]; then | ||||
|     TEST_PART_TYPE="VFAT_NORM" | ||||
| fi | ||||
| if [ -z "$2" ]; then | ||||
|     TEST_SOURCE_TYPE="t_images1" | ||||
| fi | ||||
| 
 | ||||
| set -e | ||||
| 
 | ||||
| ./mount_image.sh ./copy_to_final.sh | ||||
| 
 | ||||
| pushd tests/ | ||||
| 
 | ||||
| ./run.sh | ||||
| ./run.sh ${TEST_PART_TYPE} ${TEST_SOURCE_TYPE} | ||||
| ./check_results.sh ${TEST_SOURCE_TYPE} | ||||
| 
 | ||||
| popd | ||||
|  |  | |||
|  | @ -0,0 +1,47 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: in tests/check_results.sh" 1>&2 | ||||
| 
 | ||||
| OFFSET_VFAT_NORM=$((8192 * 512)) | ||||
| IMAGE_DEST="testcase_dest.vfat" | ||||
| 
 | ||||
| if [ "$(id -u)" != "0" ]; then | ||||
|    echo "This script must be run as root" 1>&2 | ||||
|    exit 1 | ||||
| fi | ||||
| 
 | ||||
| if [ -z "$1" ]; then | ||||
|     echo "Please tell me which file type to test." | ||||
|     echo "t_images1" | ||||
|     exit | ||||
| fi | ||||
| TEST_SOURCE_TYPE=${1} | ||||
| 
 | ||||
| set -e | ||||
| set -x | ||||
| 
 | ||||
| RESULTS_DIR="results" | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "Removing results from previous run." 1>&2 | ||||
| rm -rf actualResults/* | ||||
| 
 | ||||
| clean(){ | ||||
|     umount ${RESULTS_DIR} | ||||
|     rm -rf ${RESULTS_DIR} | ||||
| } | ||||
| 
 | ||||
| trap clean EXIT TERM INT | ||||
| 
 | ||||
| mkdir -p ${RESULTS_DIR} | ||||
| 
 | ||||
| # Get the run results | ||||
| mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_DEST} ${RESULTS_DIR} | ||||
| cp -rf ${RESULTS_DIR}/* actualResults | ||||
| umount ${RESULTS_DIR} | ||||
| 
 | ||||
| #TODO: Check if the results were what we expected. | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: done with tests/check_results.sh" 1>&2 | ||||
|  | @ -13,6 +13,6 @@ spawn qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb \ | |||
|     -mon chardev=mon1,mode=control,pretty=on \ | ||||
|     -vnc 0.0.0.0:1 | ||||
| 
 | ||||
| expect "reboot: System halted" | ||||
| expect "System halted." | ||||
| 
 | ||||
| send "quit\n" | ||||
|  |  | |||
							
								
								
									
										134
									
								
								tests/run.sh
								
								
								
								
							
							
						
						|  | @ -2,6 +2,22 @@ | |||
| 
 | ||||
| # http://pub.phyks.me/respawn/mypersonaldata/public/2014-05-20-11-08-01/ | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: in tests/run.sh" 1>&2 | ||||
| 
 | ||||
| if [ -z "$1" ]; then | ||||
|     echo "Please tell me which partition type to test." | ||||
|     echo "VFAT_NORM VFAT_PART NTPS_NORM EXT2 EXT3 EXT4" | ||||
|     exit | ||||
| fi | ||||
| if [ -z "$2" ]; then | ||||
|     echo "Please tell me which file type to test." | ||||
|     echo "t_images1" | ||||
|     exit | ||||
| fi | ||||
| TEST_PART_TYPE=${1} | ||||
| TEST_SOURCE_TYPE=${2} | ||||
| 
 | ||||
| IMAGE='../raspbian-wheezy.img' | ||||
| OFFSET_ROOTFS=$((122880 * 512)) | ||||
| 
 | ||||
|  | @ -44,50 +60,102 @@ mount -o loop,offset=${OFFSET_ROOTFS} ${IMAGE} ${SETUP_DIR} | |||
| mv ${SETUP_DIR}/etc/ld.so.preload ${SETUP_DIR}/etc/ld.so.preload_bkp | ||||
| umount ${SETUP_DIR} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Prepare the test source key | ||||
| mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_VFAT_NORM} ${SETUP_DIR} | ||||
| cp -rf content_img_vfat_norm/* ${SETUP_DIR} | ||||
| umount ${SETUP_DIR} | ||||
| if [ ${TEST_PART_TYPE} = "VFAT_NORM" ]; then | ||||
|     mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_VFAT_NORM} ${SETUP_DIR} | ||||
|     rm -rf ${SETUP_DIR}/* | ||||
|     cp -rf testFiles/${TEST_SOURCE_TYPE}/* ${SETUP_DIR} | ||||
|     umount ${SETUP_DIR} | ||||
| fi | ||||
| 
 | ||||
| # Prepare the test source key (with partitions) | ||||
| mount -o loop,offset=${OFFSET_VFAT_PART1} ${IMAGE_VFAT_PART} ${SETUP_DIR} | ||||
| cp -rf content_img_vfat_part1/* ${SETUP_DIR} | ||||
| umount ${SETUP_DIR} | ||||
| mount -o loop,offset=${OFFSET_VFAT_PART2} ${IMAGE_VFAT_PART} ${SETUP_DIR} | ||||
| cp -rf content_img_vfat_part2/* ${SETUP_DIR} | ||||
| umount ${SETUP_DIR} | ||||
| if [ ${TEST_PART_TYPE} = "VFAT_PART" ]; then | ||||
|     mount -o loop,offset=${OFFSET_VFAT_PART1} ${IMAGE_VFAT_PART} ${SETUP_DIR} | ||||
|     rm -rf ${SETUP_DIR}/* | ||||
|     cp -rf testFiles/${TEST_SOURCE_TYPE}/* ${SETUP_DIR} | ||||
|     umount ${SETUP_DIR} | ||||
|     mount -o loop,offset=${OFFSET_VFAT_PART2} ${IMAGE_VFAT_PART} ${SETUP_DIR} | ||||
|     rm -rf ${SETUP_DIR}/* | ||||
|     cp -rf testFiles/${TEST_SOURCE_TYPE}/* ${SETUP_DIR} | ||||
|     umount ${SETUP_DIR} | ||||
| fi | ||||
| 
 | ||||
| # Prepare the test source key (NTFS) | ||||
| mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_NTFS_NORM} ${SETUP_DIR} | ||||
| cp -rf content_img_vfat_norm/* ${SETUP_DIR} | ||||
| umount ${SETUP_DIR} | ||||
| if [ ${TEST_PART_TYPE} = "NTFS_NORM" ]; then | ||||
|     mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_NTFS_NORM} ${SETUP_DIR} | ||||
|     rm -rf ${SETUP_DIR}/* | ||||
|     cp -rf testFiles/${TEST_SOURCE_TYPE}/* ${SETUP_DIR} | ||||
|     umount ${SETUP_DIR} | ||||
| fi | ||||
| 
 | ||||
| # Prepare the test source key (EXT2) | ||||
| mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_EXT2} ${SETUP_DIR} | ||||
| cp -rf content_img_vfat_norm/* ${SETUP_DIR} | ||||
| umount ${SETUP_DIR} | ||||
| if [ ${TEST_PART_TYPE} = "EXT2" ]; then | ||||
|     mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_EXT2} ${SETUP_DIR} | ||||
|     rm -rf ${SETUP_DIR}/* | ||||
|     cp -rf testFiles/${TEST_SOURCE_TYPE}/* ${SETUP_DIR} | ||||
|     umount ${SETUP_DIR} | ||||
| fi | ||||
| 
 | ||||
| # Prepare the test source key (EXT3) | ||||
| mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_EXT3} ${SETUP_DIR} | ||||
| cp -rf content_img_vfat_norm/* ${SETUP_DIR} | ||||
| umount ${SETUP_DIR} | ||||
| if [ ${TEST_PART_TYPE} = "EXT4" ]; then | ||||
|     mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_EXT3} ${SETUP_DIR} | ||||
|     rm -rf ${SETUP_DIR}/* | ||||
|     cp -rf testFiles/${TEST_SOURCE_TYPE}/* ${SETUP_DIR} | ||||
|     umount ${SETUP_DIR} | ||||
| fi | ||||
| 
 | ||||
| # Prepare the test source key (EXT4) | ||||
| mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_EXT4} ${SETUP_DIR} | ||||
| cp -rf content_img_vfat_norm/* ${SETUP_DIR} | ||||
| if [ ${TEST_PART_TYPE} = "EXT4" ]; then | ||||
|     mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_EXT4} ${SETUP_DIR} | ||||
|     rm -rf ${SETUP_DIR}/* | ||||
|     cp -rf testFiles/${TEST_SOURCE_TYPE}/* ${SETUP_DIR} | ||||
|     umount ${SETUP_DIR} | ||||
| fi | ||||
| 
 | ||||
| # Prepare the test destination key | ||||
| mount -o loop,offset=${OFFSET_VFAT_NORM} ${IMAGE_DEST} ${SETUP_DIR} | ||||
| rm -rf ${SETUP_DIR}/* | ||||
| umount ${SETUP_DIR} | ||||
| 
 | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: about to enter tests/run.exp" 1>&2 | ||||
| 
 | ||||
| chmod a-w ${IMAGE} | ||||
| ./run.exp ${IMAGE} ${IMAGE_VFAT_NORM} ${IMAGE_DEST} | ||||
| #sleep 10 | ||||
| #./run.exp ${IMAGE} ${IMAGE_VFAT_PART} ${IMAGE_DEST} | ||||
| #sleep 10 | ||||
| #./run.exp ${IMAGE} ${IMAGE_NTFS_NORM} ${IMAGE_DEST} | ||||
| 
 | ||||
| 
 | ||||
| if [ ${TEST_PART_TYPE} = "VFAT_NORM" ]; then | ||||
|     ./run.exp ${IMAGE} ${IMAGE_VFAT_NORM} ${IMAGE_DEST} | ||||
|     sleep 10 | ||||
| fi | ||||
| 
 | ||||
| if [ ${TEST_PART_TYPE} = "VFAT_PART" ]; then | ||||
|     ./run.exp ${IMAGE} ${IMAGE_VFAT_PART} ${IMAGE_DEST} | ||||
|     sleep 10 | ||||
| fi | ||||
| 
 | ||||
| if [ ${TEST_PART_TYPE} = "NTFS_NORM" ]; then | ||||
|     ./run.exp ${IMAGE} ${IMAGE_NTFS_NORM} ${IMAGE_DEST} | ||||
|     sleep 10 | ||||
| fi | ||||
| 
 | ||||
| # EXT* not supported due to permission issues | ||||
| #sleep 10 | ||||
| #./run.exp ${IMAGE} ${IMAGE_EXT2} ${IMAGE_DEST} | ||||
| #sleep 10 | ||||
| #./run.exp ${IMAGE} ${IMAGE_EXT3} ${IMAGE_DEST} | ||||
| #sleep 10 | ||||
| #./run.exp ${IMAGE} ${IMAGE_EXT4} ${IMAGE_DEST} | ||||
| if [ ${TEST_PART_TYPE} = "EXT2" ]; then | ||||
|     ./run.exp ${IMAGE} ${IMAGE_EXT2} ${IMAGE_DEST} | ||||
|     sleep 10 | ||||
| fi | ||||
| if [ ${TEST_PART_TYPE} = "EXT3" ]; then | ||||
|     ./run.exp ${IMAGE} ${IMAGE_EXT3} ${IMAGE_DEST} | ||||
|     sleep 10 | ||||
| fi | ||||
| if [ ${TEST_PART_TYPE} = "NTFS_EXT4" ]; then | ||||
|     ./run.exp ${IMAGE} ${IMAGE_EXT4} ${IMAGE_DEST} | ||||
|     sleep 10 | ||||
| fi | ||||
| 
 | ||||
| 
 | ||||
| #./run.exp ${IMAGE} ${IMAGE_VFAT_PART} ${IMAGE_DEST} | ||||
| chmod +w ${IMAGE} | ||||
| 
 | ||||
| # To make debugging easier | ||||
| echo "KittenGroomer: done with tests/run.sh" 1>&2 | ||||
|  |  | |||
| After Width: | Height: | Size: 101 KiB | 
| After Width: | Height: | Size: 310 KiB | 
| After Width: | Height: | Size: 594 KiB | 
| After Width: | Height: | Size: 114 KiB | 
| After Width: | Height: | Size: 792 KiB | 
| After Width: | Height: | Size: 140 KiB | 
| After Width: | Height: | Size: 598 KiB | 
| After Width: | Height: | Size: 41 KiB | 
|  | @ -0,0 +1,4 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # Change to your repo if doing python dev | ||||
| ./mount_image.sh chroot "pip install git+https://github.com/Dymaxion00/PyCIRCLean@dev" | ||||
 Raphaël Vinot
						Raphaël Vinot