Checkitgui is a file integrity tool for Linux and Unix systems.

Checkitgui Copyright C 2014 Dennis Katsonis

LICENCE INFO
------------

Checkitgui is free software distributed under the GNU GPL.  See below
for copyright for CRC64.

WHAT THIS PROGRAM DOES:
-----------------------

Checksum adds additions data assurance capabilities to filesystems
which support extended attributes.  Checkitgui allows you to detect
any otherwise undetected data integrity issues or file changes to any
file.  By storing a checksum as an extended attribute, checkitgui
provides an easy way to detect any silent data corruption, bit rot or
otherwise modified error.

This was inspired by the checksumming that is performed by filesystems
like BTRFS and ZFS.  These filesystems ensure data integrity by
storing a checksum CRC of data and checking read data against the
checksum.  With mirroring of data, they can silently heal the data
should an error be found.

This program does not duplicate this ability, but offers rudimentary
checksum abilities for other filesystems.  It simply calculates a
checksum and stores the checksum with the file.  It can then be later
used to verify the checksum against the data.  Any data corruption of
file changes would result in a failed check.

Checkitgui is a graphical version of checkit.  You do not need checkit
installed to run checkitgui.

WHY IT WAS CREATED:
-------------------

Moving data from disk to disk, or leaving data on the disk, leaves a
very small possibility of silent data corruption.  While rare, the
large amounts of data being handled by drives make silent corruption a
real possibility.  While BTRFS and ZFS can handle this, other
filesystems can't.  This program was created to add an ability to
detect but not fix issues.  With the ability to detect, you can
easily find out whether a copy or extract operation occured perfectly,
or whether there has been bit rot in the file.

Backups provide point of reference, but comparison isn't very
efficient, as it involves reading two files.  Using a CRC, you only
need to read the file once, even after a copy operation to determine
whether the file is OK.  Also, should the file be different from the
backup, which copy is OK, the backup or the original?  Checkitgui will
let you know whether it is the backup or original which has changed.

There are other ways to do this.  You can use a cryptographic hash and
store a SHA-1 or MD5 or SHA-256 value in a seperate file, or even use
GPG and digitally sign the file.  The problem is, that the value is
stored in a seperate file, and doing directory recursion, or all files
of a particular type i.e., all JPG's isn't as straighforward.  With
checkitgui, the CRC is stored as an extended attribute.  It remains as
part of the file, and can be copied or archived automatically with the
file.  No need for seperate files to store the hash/checksum.

Checkitgui also has the ability to export this to a hidden file, and import
it back into an extended attribute.

DOWNLOAD:
---------

Here is the source code
http://boraxman.strangled.net/checkitgui/0.1.1/checkitgui-0.1.1.tar.gz
which you can compile.

GPG signature
http://boraxman.strangled.net/checkitgui/0.1.1/checkitgui-0.1.1.tar.gz.asc
for the above source package.
Signing key: D78BA4DD4AADF348

There are also ready to use packages for Fedora and RPM based distros

RPM for Fedora and RedHat Distros 64 bit
http://boraxman.strangled.net/checkitgui/0.1.1/RPM/checkitgui-0.1.1-1.x86_64.rpm

RPM for Fedora and RedHat Distros 32 bit
http://boraxman.strangled.net/checkitgui/0.1.1/RPM/checkitgui-0.1.1-1.i686.rpm

SRPM
http://boraxman.strangled.net/checkitgui/0.1.1/RPM/checkitgui-0.1.1-1.src.rpm

Debian package for 64 bit systems
http://boraxman.strangled.net/checkitgui/0.1.1/DEB/amd64/checkitgui_0.1.1-1_amd64.deb

Debian package for 32 bit systems
http://boraxman.strangled.net/checkitgui/0.1.1/DEB/i386/checkitgui_0.1.1-1_i386.deb

Debian source files here
http://boraxman.strangled.net/checkitgui/0.1.1/DEB/source/


HOW TO USE:
-----------

Checkitgui calculates and stores the CRC as an extended attribute
user.crc64 or as a hidden file.  The file must reside on a filesystem
which supports extended attributes XFS, JFS, EXT2, EXT3, EXT4, BTRFS,
ReiserFS among others to use the extended attribute recommended.

First, run checkitgui to store the CRC as an attribute, then at any
time, you can run checkitgui to check that the file data still matches
the CRC.  If any of the files don't match, or the CRC is missing,
checkitgui will report it.  If you pass the "verbose" option,
checkitgui will summarise the files that didn't pass the checksum test
at the end of the run.


OPERATION:
----------

Use "Add File" or "Add Directory" to add a single file, or an entire
directory tree.  The files will be displayed in the main windows.

"Check" will check the files against the CRC.  At the completion, the
files will be green with "PASSED" if they pass, and red with "FAILED"
if not.  Passed means that the file data read matches exactly the file
data when the checksum was created.  Failed means that the data read
does not match either due to the file being modified, or possibly disk
error or faulty media.

Click "Store" to calculate the CRC and store it alongside the file.
By default, if the file already has a CRC, it will not be overwritten
unless the "Overwrite" checkbox is checked.

"Clear" clears the list of files.

Right clicking on a file in the list brings up a context menu.  Here
you can

"Export" the CRC to a file.  This will be a hidden file called
filename.crc64

The file will have the hidden attribute set for FAT32 and NTFS
filesystem, be prefixed with a '.' and suffixed with .crc64

Use this to save the attribute to a separate file if moving the file
to a filsystem which doesn't support extended attributes such as FAT32
or ISO for CD/DVD archives.

"Import" the CRC from a file.  The hidden file exported using the
"Export" function above will be imported into the file as an extended
attribute.

Use this to bring the exported CRC back as an extended attribute when
moving the files from a filesystem which does not support extended
attributes to one which does.

"Allow CRC Overwrite"
Toggling this will determine whether the existing CRC can be
overwritten with a new recaculated value.  By default, this is
disabled, but in cases where you expect to modify the file, you may
want to enable this to allow you to recalculate the new CRC.

"Result Log" allows you to view categorised results.  This will
provide a clearer picture of which files passed and failed, and why.
You can save the log to a HTML formatted file.

LIMITATIONS:
------------

As checkitgui doesn't repair files, you need to ensure that you have
backups of important data.  Checkitgui by default stores the CRC in an
extended attribute.

If the checksum is stored as an extended attribute, which is the
default, it will be lost if you transfer the file to a filesystem
which does not support extended attributes, or the method of copying
does not preserve them.  If you export the CRC, then the CRC can
travel with the file as long as you copy the CRC hidden file as well.

Checkitgui cannot detect changes and recompute the checksum without
being run manually, because it doesn't run in the background.  While
having a 'checkit' daemon, which can automatically update the checksum
should the file be changed is potentially useful, this is better done
by migrating to BTRFS or ZFS, which handles this more efficiently than
checkitgui ever could.

TODO:
-----

* Intergration with file managers.

CRC64 routine.

The checksum routine is the crc-64-jones created by Salvatore
Sanfilippo.