aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/ak-fs34
-rwxr-xr-xbin/ak-fs-add239
-rwxr-xr-xbin/ak-fs-cat103
-rwxr-xr-xbin/ak-fs-get107
-rwxr-xr-xlib/_ak_fs345
5 files changed, 379 insertions, 449 deletions
diff --git a/bin/ak-fs b/bin/ak-fs
new file mode 100755
index 0000000..10ff912
--- /dev/null
+++ b/bin/ak-fs
@@ -0,0 +1,34 @@
+#!/bin/bash
+##
+## Tools to add, get and cat files to/from the Arching Kaos File System
+##
+## Usage:
+##
+## -h, --help Prints this help message
+##
+## --add, --import <file> Adds/Imports a file to the AKFS system
+##
+## --get, --export <hash> <output file> Exports a file from the AKFS system
+##
+## --cat <hash> Concatenates from given hash
+##
+fullprogrampath="$(realpath $0)"
+PROGRAM=$(basename $0)
+descriptionString="AKFS tools"
+
+# At least these
+source $AK_LIBDIR/_ak_log
+source $AK_LIBDIR/_ak_script
+source $AK_LIBDIR/_ak_fs
+
+# Flags to run
+if [ ! -z $1 ]; then
+ case $1 in
+ -h | --help) _ak_usage; exit;;
+ --add|--import) _ak_fs_import $2; exit;;
+ --get|--export) _ak_fs_export $2 $3; exit;;
+ --cat) _ak_fs_cat $2; exit;;
+ * ) _ak_usage;;
+ esac
+else _ak_usage
+fi
diff --git a/bin/ak-fs-add b/bin/ak-fs-add
deleted file mode 100755
index 50833ea..0000000
--- a/bin/ak-fs-add
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/bin/bash
-#
-# The concept is bit more complicated now
-#
-# 1. For a given file we split in 4KB files inside a temporary directory
-#
-# 2. We then create a map file and a merkle tree containing the resulted files
-# and their sha512sum.
-#
-# 3. We move the splitted files to our $CHKDIR named after their checksums
-#
-# 4. We move the merkle tree pairs to $MERKLEDIR
-#
-# We ultimately want to be seeding the file so
-#
-# 4. We append the checksum of the original file with its name into the map file
-#
-# 5. We rename the map file after its checksum and move it to maps directory
-#
-# 6. We are done!
-#
-
-# Uncomment next line if you want to debug
-# set -xe
-PROGRAM="$(basename $0)"
-source $AK_LIBDIR/_ak_fs
-source $AK_LIBDIR/_ak_log
-
-if [ ! -f "$1" ]
-then
- _ak_log_error "File $1 not found"
- exit 1
-else
- # TODO
- # Side hustle, save the original hash and original filename
- # This won't be expected in general
- # The idea is:
- # sha256sum as quick pointer to root of the tree
- #
- base64 $1 > file
- FILE="file"
-fi
-
-# The directory where the chunked data will be living at
-CHKDIR="$AK_WORKDIR/ftr"
-# The directory for the map files so we can reconstruct the file
-FILEMAPSDIR="$AK_WORKDIR/fmp"
-# Merkle tree file/references
-MERKLEDIR="$AK_WORKDIR/fmrk"
-# A temporary root dir to work on
-TEMPORARYDIR="$(ak-tempassin)"
-# A subdir to split the files there
-TECHDIR="$TEMPORARYDIR/chks"
-# A pin point to return from where we came from
-CURRENTDIR="$(pwd)"
-
-# Our snippet for logging debug info
-source $AK_LIBDIR/_ak_log
-
-# Checking directories and create them if necessary
-rm -rf $TEMPORARYDIR
-
-# TECHDIR
-if [ ! -d "$TECHDIR" ]
-then
- mkdir -p "$TECHDIR"
- if [ $? -eq 0 ]
- then
- _ak_log_info "Folder $TECHDIR created!"
- else
- _ak_log_error "Problem occured while creating $TECHDIR"
- exit 1
- fi
-else
- _ak_log_info "Temp dir found"
-fi
-
-# FILEMAPSDIR
-if [ ! -d "$FILEMAPSDIR" ]
-then
- mkdir -p "$FILEMAPSDIR"
- if [ $? -eq 0 ]
- then
- _ak_log_info "Folder $FILEMAPSDIR created!"
- else
- _ak_log_error "Problem occured while creating $FILEMAPSDIR"
- exit 1
- fi
-else
- _ak_log_info "Mapsdir found"
-fi
-
-# CHKDIR
-if [ ! -d "$CHKDIR" ]
-then
- mkdir -p "$CHKDIR"
- if [ $? -eq 0 ]
- then
- _ak_log_info "Folder $CHKDIR created!"
- else
- _ak_log_error "Problem occured while creating $CHKDIR"
- exit 1
- fi
-else
- _ak_log_info "Workdir found"
-fi
-
-# MERKLEDIR
-if [ ! -d "$MERKLEDIR" ]
-then
- mkdir -p "$MERKLEDIR"
- if [ $? -eq 0 ]
- then
- _ak_log_info "Folder $MERKLEDIR created!"
- else
- _ak_log_error "Problem occured while creating $MERKLEDIR"
- echo "ERROR Can't create $MERKLEDIR"
- exit 1
- fi
-else
- _ak_log_info "Workdir found"
-fi
-# Uncomment next line in case you want to debug the resulting script as well
-# echo 'set -xe' > $TEMPORARYDIR/cmd_queue.sh
-
-# We get the SHA512 hash for the $FILE given
-CHECKSUM=$(sha512sum "$FILE"|awk '{print $1}')
-FILE_SIZE="$(du -b $FILE | awk '{ print $1 }')"
-if [ $FILE_SIZE -lt 4097 ]
-then
- cp $FILE "$TECHDIR/$(basename "$FILE")-00000000000000000000000000000000000000000000000000.chk"
-else
- FACTOR=1024
- while [ $(( $FILE_SIZE / $FACTOR )) -gt 250 ]
- do
- FACTOR=$(( $FACTOR * 2 ))
- done
- _ak_log_info "Gonna split in $FACTOR size"
- sleep 30
- # We split the file into 4*1024 bytes and output the chunks into TECHDIR
- split -a 50 -b $FACTOR --additional-suffix ".chk" -d "$FILE" "$TECHDIR/$(basename "$FILE")-"
-fi
-
-# We go over there...
-cd $TECHDIR
-#set -xe
-# We get every chunks' SHA512 and we craft a script to rename the chunks and
-# move them to CHKDIR
-for file in $TEMPORARYDIR/chks/*
-do
- sha512sum $file >> $TEMPORARYDIR/map
-done
-# Append last chk if not even number
-appendLastIfNotEven(){
- if [ "$(( $(wc -l "$1" | awk '{ print $1 }') % 2))" -ne 0 ]
- then
- tail -n 1 "$1" >> "$1"
- fi
-}
-appendLastIfNotEven "$TEMPORARYDIR/map"
-# Figure out how many times we need to pack
-totalChunks=`grep 'chk' $TEMPORARYDIR/map | wc -l`
-temp="$totalChunks"
-timesRan=0
-while [ $temp -ne 1 ]
-do
- temp=`expr $temp / 2`
- timesRan=`expr $timesRan + 1`
-done
-printf "Ran %s times \n" "$timesRan"
-printf "Total chunks %s \n" "$totalChunks"
-
-workingIndex="$TEMPORARYDIR/map"
-c=$timesRan
-while [ $c -ne 0 ]
-do
- a=1
- printf "Level: %s, will work on %s chunks\n" "$c" "$totalChunks"
- while [[ "$a" -lt "$totalChunks" ]]
- do
- b=`expr "$a" + 1`
- sed -n "$a"p "$workingIndex" | awk '{ print $1 }' >> level.$c.pair.$a-$b
- sed -n "$b"p "$workingIndex" | awk '{ print $1 }' >> level.$c.pair.$a-$b
- shaSum="$(sha512sum level.$c.pair.$a-$b | awk '{ print $1 }')"
- mkdir -p $MERKLEDIR/$(_ak_fs_return_hash_dir $shaSum)
- cp level.$c.pair.$a-$b $MERKLEDIR/$(_ak_fs_return_hash_path $shaSum)
- sha512sum level.$c.pair.$a-$b | awk '{ print $1 }' >> level.$c.map
- a=`expr "$a" + 2`
- done
- workingIndex="level.$c.map"
- appendLastIfNotEven "$workingIndex"
- shaSum=`sha512sum $workingIndex | awk '{ print $1 }'`
- mkdir -p $MERKLEDIR/$(_ak_fs_return_hash_dir $shaSum)
- cp $workingIndex $MERKLEDIR/$(_ak_fs_return_hash_path $shaSum)
-# cp $workingIndex $MERKLEDIR/$shaSum
- totalChunks=`cat $workingIndex | wc -l`
- c=`expr $c - 1`
-done
-
-if [ -f level.1.map ]
-then
- sha512sum level.1.map
-else
- echo error
- exit 1
-fi
-
-# Reset file with uniq
-cat $TEMPORARYDIR/map | uniq > $TEMPORARYDIR/map2
-cat $TEMPORARYDIR/map2 > $TEMPORARYDIR/map
-rm $TEMPORARYDIR/map2
-
-counter=0
-while IFS="" read -r p || [ -n "$p" ]
-do
- printf "mv %s %s/%s\n" "$(echo $p | awk '{ print $2 }')" "$CHKDIR" "$(echo $p | awk '{ print $1 }')" >> $TEMPORARYDIR/cmd_queue.sh
- counter=`expr "$counter" + 1`
-done < $TEMPORARYDIR/map
-
-# We run the crafted script
-sh $TEMPORARYDIR/cmd_queue.sh
-
-# and we delete it
-rm $TEMPORARYDIR/cmd_queue.sh
-
-# We inform the map about the original $FILE name and SHA512
-echo "$CHECKSUM $(basename "$FILE")" >> $TEMPORARYDIR/map
-
-# We get the SHA512 hash of the resulted map file
-MAPFILEHASH="$(sha512sum $TEMPORARYDIR/map | awk '{ print $1 }')"
-
-# and we rename it with it and move it to FILEMAPSDIR
-`sha512sum $TEMPORARYDIR/map | awk '{print "mv " $2 " '$FILEMAPSDIR/'" $1}'`
-
-# We remove the TEMPORARYDIR
-rm -rf $TEMPORARYDIR
-
-# and print the MAPFILEHASH
-echo "$MAPFILEHASH"
diff --git a/bin/ak-fs-cat b/bin/ak-fs-cat
deleted file mode 100755
index 0e819c2..0000000
--- a/bin/ak-fs-cat
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/bash
-# set -xe
-if [ -z $1 ]
-then
- echo "Please provide a SHA512 hash"
- exit 1
-fi
-# if [ -z $2 ]
-# then
-# echo "Please an output filename"
-# exit 2
-# fi
-
-echo $1 | grep "[0123456789abcdef]\{128\}"
-if [ $? -ne 0 ]
-then
- echo "Look, I asked for a SHA512 hash, please try again"
- exit 1
-fi
-treeRootHash="$1"
-#outputFilename="$2"
-
-fmrk="$AK_WORKDIR/fmrk"
-ftr="$AK_WORKDIR/ftr"
-
-# This would be a kind of bootstrap for remote downloads
-#
-#remoteMrk="http://z.kaotisk-hund.com:8610/mrk"
-#remoteTr="http://z.kaotisk-hund.com:8610/tr"
-#
-pwd>.pwd
-
-dirWeWere=$(cat .pwd)
-
-# Enter temp folder
-TEMPASSIN="$(ak-tempassin)"
-cd $TEMPASSIN
-
-findDepth(){
- currentNode="$1"
- if [ -f $fmrk/$currentNode ] && [ "$(du -b $fmrk/$currentNode | awk '{print $1}')" == "258" ]
- then
- fileHead="$(head -n 1 $fmrk/$currentNode)"
- counter="$(expr $counter + 1)"
- findDepth "$fileHead"
- elif [ ! -f $fmrk/$currentNode ]
- then
- printf "%s" "$counter" > depth
- else
- exit 111
-# Try to download stuff
-# wget -s $remoteMrk/$currentNode -O $fmrk/$currentNode
-# if [ "$?" -ne 0 ]
-# then
-# exit 111
-# fi
-# findDepth "$currentNode"
- fi
-}
-
-currentNode="$treeRootHash"
-counter=0
-
-printf "%s" "$currentNode" > workspace.0
-findDepth "$currentNode"
-depth="$(expr `cat depth` + 1)"
-counter="0"
-printf "%s" "$depth"
-if [ -f output ]
-then
- rm output
-fi
-touch output
-
-while [ "$counter" != "$depth" ]
-do
- printf "Entering loop... %s %s\n" "$counter" "$depth" >&2
- while IFS="" read -r p || [ -n "$p" ]
- do
- nextLevel="$(expr $counter + 1)"
- if [ "$p" == "" ]
- then
- echo hi
- else
- if [ -f $fmrk/$p ]
- then
- if [ "$(head -n 1 $fmrk/$p)" == "$(tail -n 1 $fmrk/$p)" ]
- then
- head -n 1 $fmrk/$p >> workspace.$nextLevel
- else
- cat $fmrk/$p >> workspace.$nextLevel
- fi
- elif [ -f $ftr/$p ]
- then
- cat $ftr/$p >> output
- fi
- fi
- done < workspace.$counter
- counter="$(expr $counter + 1)"
-done
-
-base64 -d output #> $dirWeWere/$outputFilename
-rm $dirWeWere/.pwd
diff --git a/bin/ak-fs-get b/bin/ak-fs-get
deleted file mode 100755
index ea56caa..0000000
--- a/bin/ak-fs-get
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/bin/bash
-PROGRAM="$(basename $0)"
-# set -xe
-if [ -z $1 ]
-then
- echo "Please provide a SHA512 hash"
- exit 1
-fi
-if [ -z $2 ]
-then
- echo "Please an output filename"
- exit 2
-fi
-
-echo $1 | grep "[0123456789abcdef]\{128\}"
-if [ $? -ne 0 ]
-then
- echo "Look, I asked for a SHA512 hash, please try again"
- exit 1
-fi
-treeRootHash="$1"
-outputFilename="$2"
-
-fmrk="$AK_WORKDIR/fmrk"
-ftr="$AK_WORKDIR/ftr"
-
-# This would be a kind of bootstrap for remote downloads
-#
-#remoteMrk="http://z.kaotisk-hund.com:8610/mrk"
-#remoteTr="http://z.kaotisk-hund.com:8610/tr"
-#
-pwd>.pwd
-
-dirWeWere=$(cat .pwd)
-
-# Enter temp folder
-TEMPASSIN="$(ak-tempassin)"
-cd $TEMPASSIN
-
-findDepth(){
- currentNode="$1"
- pathToNode="$fmrk/$(ak-sm-hash-to-path --path $currentNode)"
- if [ -f $pathToNode ] && [ "$(du -b $pathToNode | awk '{print $1}')" == "258" ]
- then
- fileHead="$(head -n 1 $pathToNode)"
- counter="$(expr $counter + 1)"
- findDepth "$fileHead"
- elif [ ! -f $pathToNode ]
- then
- printf "%s" "$counter" > depth
- else
- exit 111
-# Try to download stuff
-# wget -s $remoteMrk/$currentNode -O $fmrk/$currentNode
-# if [ "$?" -ne 0 ]
-# then
-# exit 111
-# fi
-# findDepth "$currentNode"
- fi
-}
-
-currentNode="$treeRootHash"
-counter=0
-
-printf "%s" "$currentNode" > workspace.0
-findDepth "$currentNode"
-depth="$(expr `cat depth` + 1)"
-counter="0"
-printf "%s" "$depth"
-if [ -f output ]
-then
- rm output
-fi
-touch output
-
-while [ "$counter" != "$depth" ]
-do
- printf "Entering loop... %s %s\n" "$counter" "$depth"
- while IFS="" read -r p || [ -n "$p" ]
- do
- nextLevel="$(expr $counter + 1)"
- if [ "$p" == "" ]
- then
- echo hi
- else
- expectedPath="$fmrk/$(ak-sm-hash-to-path --path $p)"
- if [ -f $expectedPath ]
- then
- if [ "$(head -n 1 $expectedPath)" == "$(tail -n 1 $expectedPath)" ]
- then
- head -n 1 $expectedPath >> workspace.$nextLevel
- else
- cat $expectedPath >> workspace.$nextLevel
- fi
- elif [ -f $ftr/$p ]
- then
- cat $ftr/$p >> output
- fi
- fi
- done < workspace.$counter
- counter="$(expr $counter + 1)"
-done
-
-base64 -d output > $dirWeWere/$outputFilename
-rm $dirWeWere/.pwd
-printf "Recreation of $treeRootHash as $outputFilename succeeded!"
diff --git a/lib/_ak_fs b/lib/_ak_fs
index 527a78b..ea6abb4 100755
--- a/lib/_ak_fs
+++ b/lib/_ak_fs
@@ -27,3 +27,348 @@ _ak_fs_create_dir_for_hash(){
mkdir -p "$1/$(_ak_fs_return_hash_dir $2)"
fi
}
+
+# Append last chk if not even number
+_ak_fs_appendLastIfNotEven(){
+ if [ "$(( $(wc -l "$1" | awk '{ print $1 }') % 2))" -ne 0 ]
+ then
+ tail -n 1 "$1" >> "$1"
+ fi
+}
+
+_ak_fs_import(){
+ #
+ # The concept is bit more complicated now
+ #
+ # 1. For a given file we split in 4KB files inside a temporary directory
+ #
+ # 2. We then create a map file and a merkle tree containing the resulted files
+ # and their sha512sum.
+ #
+ # 3. We move the splitted files to our $CHKDIR named after their checksums
+ #
+ # 4. We move the merkle tree pairs to $MERKLEDIR
+ #
+ # We ultimately want to be seeding the file so
+ #
+ # 4. We append the checksum of the original file with its name into the map file
+ #
+ # 5. We rename the map file after its checksum and move it to maps directory
+ #
+ # 6. We are done!
+ #
+
+ # The directory where the chunked data will be living at
+ CHKDIR="$AK_WORKDIR/ftr"
+ # The directory for the map files so we can reconstruct the file
+ FILEMAPSDIR="$AK_WORKDIR/fmp"
+ # Merkle tree file/references
+ MERKLEDIR="$AK_WORKDIR/fmrk"
+ # A temporary root dir to work on
+ TEMPORARYDIR="$(ak-tempassin)"
+ # A subdir to split the files there
+ TECHDIR="$TEMPORARYDIR/chks"
+ # A pin point to return from where we came from
+ CURRENTDIR="$(pwd)"
+
+ # Checking directories and create them if necessary
+ # rm -rf $TEMPORARYDIR
+
+ # TECHDIR
+ if [ ! -d "$TECHDIR" ]
+ then
+ mkdir -p "$TECHDIR"
+ if [ $? -eq 0 ]
+ then
+ _ak_log_info "Folder $TECHDIR created!"
+ else
+ _ak_log_error "Problem occured while creating $TECHDIR"
+ exit 1
+ fi
+ else
+ _ak_log_info "Temp dir found"
+ fi
+
+ # FILEMAPSDIR
+ if [ ! -d "$FILEMAPSDIR" ]
+ then
+ mkdir -p "$FILEMAPSDIR"
+ if [ $? -eq 0 ]
+ then
+ _ak_log_info "Folder $FILEMAPSDIR created!"
+ else
+ _ak_log_error "Problem occured while creating $FILEMAPSDIR"
+ exit 1
+ fi
+ else
+ _ak_log_info "Mapsdir found"
+ fi
+
+ # CHKDIR
+ if [ ! -d "$CHKDIR" ]
+ then
+ mkdir -p "$CHKDIR"
+ if [ $? -eq 0 ]
+ then
+ _ak_log_info "Folder $CHKDIR created!"
+ else
+ _ak_log_error "Problem occured while creating $CHKDIR"
+ exit 1
+ fi
+ else
+ _ak_log_info "Workdir found"
+ fi
+
+ # MERKLEDIR
+ if [ ! -d "$MERKLEDIR" ]
+ then
+ mkdir -p "$MERKLEDIR"
+ if [ $? -eq 0 ]
+ then
+ _ak_log_info "Folder $MERKLEDIR created!"
+ else
+ _ak_log_error "Problem occured while creating $MERKLEDIR"
+ echo "ERROR Can't create $MERKLEDIR"
+ exit 1
+ fi
+ else
+ _ak_log_info "Workdir found"
+ fi
+ if [ ! -f "$1" ]
+ then
+ _ak_log_error "File $1 not found"
+ exit 1
+ else
+ # TODO
+ # Side hustle, save the original hash and original filename
+ # This won't be expected in general
+ # The idea is:
+ # sha256sum as quick pointer to root of the tree
+ #
+ sha512sum "$1" > $TEMPORARYDIR/3rd_gen_map
+ base64 $1 > file
+ FILE="file"
+ fi
+
+ # Uncomment next line in case you want to debug the resulting script as well
+ # echo 'set -xe' > $TEMPORARYDIR/cmd_queue.sh
+
+ # We get the SHA512 hash for the $FILE given
+ CHECKSUM=$(sha512sum "$FILE"|awk '{print $1}')
+ FILE_SIZE="$(du -b $FILE | awk '{ print $1 }')"
+ if [ $FILE_SIZE -lt 4097 ]
+ then
+ cp $FILE "$TECHDIR/$(basename "$FILE")-00000000000000000000000000000000000000000000000000.chk"
+ else
+ FACTOR=1024
+ while [ $(( $FILE_SIZE / $FACTOR )) -gt 250 ]
+ do
+ FACTOR=$(( $FACTOR * 2 ))
+ done
+ _ak_log_info "Gonna split in $FACTOR size"
+ sleep 30
+ # We split the file into 4*1024 bytes and output the chunks into TECHDIR
+ split -a 50 -b $FACTOR --additional-suffix ".chk" -d "$FILE" "$TECHDIR/$(basename "$FILE")-"
+ fi
+
+ # We go over there...
+ cd $TECHDIR
+ #set -xe
+ # We get every chunks' SHA512 and we craft a script to rename the chunks and
+ # move them to CHKDIR
+ for file in $TEMPORARYDIR/chks/*
+ do
+ sha512sum $file >> $TEMPORARYDIR/map
+ done
+ _ak_fs_appendLastIfNotEven "$TEMPORARYDIR/map"
+ # Figure out how many times we need to pack
+ totalChunks=`grep 'chk' $TEMPORARYDIR/map | wc -l`
+ temp="$totalChunks"
+ timesRan=0
+ while [ $temp -ne 1 ]
+ do
+ temp=`expr $temp / 2`
+ timesRan=`expr $timesRan + 1`
+ done
+ printf "Ran %s times \n" "$timesRan"
+ printf "Total chunks %s \n" "$totalChunks"
+
+ workingIndex="$TEMPORARYDIR/map"
+ c=$timesRan
+ while [ $c -ne 0 ]
+ do
+ a=1
+ printf "Level: %s, will work on %s chunks\n" "$c" "$totalChunks"
+ while [[ "$a" -lt "$totalChunks" ]]
+ do
+ b=`expr "$a" + 1`
+ sed -n "$a"p "$workingIndex" | awk '{ print $1 }' >> level.$c.pair.$a-$b
+ sed -n "$b"p "$workingIndex" | awk '{ print $1 }' >> level.$c.pair.$a-$b
+ shaSum="$(sha512sum level.$c.pair.$a-$b | awk '{ print $1 }')"
+ mkdir -p $MERKLEDIR/$(_ak_fs_return_hash_dir $shaSum)
+ cp level.$c.pair.$a-$b $MERKLEDIR/$(_ak_fs_return_hash_path $shaSum)
+ sha512sum level.$c.pair.$a-$b | awk '{ print $1 }' >> level.$c.map
+ a=`expr "$a" + 2`
+ done
+ workingIndex="level.$c.map"
+ _ak_fs_appendLastIfNotEven "$workingIndex"
+ shaSum=`sha512sum $workingIndex | awk '{ print $1 }'`
+ mkdir -p $MERKLEDIR/$(_ak_fs_return_hash_dir $shaSum)
+ cp $workingIndex $MERKLEDIR/$(_ak_fs_return_hash_path $shaSum)
+ # cp $workingIndex $MERKLEDIR/$shaSum
+ totalChunks=`cat $workingIndex | wc -l`
+ c=`expr $c - 1`
+ done
+
+ if [ -f level.1.map ]
+ then
+ sha512sum level.1.map
+ sha512sum level.1.map >> $TEMPORARYDIR/3rd_gen_map
+ else
+ echo error
+ exit 1
+ fi
+
+ # Reset file with uniq
+ cat $TEMPORARYDIR/map | uniq > $TEMPORARYDIR/map2
+ cat $TEMPORARYDIR/map2 > $TEMPORARYDIR/map
+ rm $TEMPORARYDIR/map2
+
+ counter=0
+ while IFS="" read -r p || [ -n "$p" ]
+ do
+ printf "mv %s %s/%s\n" "$(echo $p | awk '{ print $2 }')" "$CHKDIR" "$(echo $p | awk '{ print $1 }')" >> $TEMPORARYDIR/cmd_queue.sh
+ counter=`expr "$counter" + 1`
+ done < $TEMPORARYDIR/map
+
+ # We run the crafted script
+ sh $TEMPORARYDIR/cmd_queue.sh
+
+ # and we delete it
+ rm $TEMPORARYDIR/cmd_queue.sh
+
+ # We inform the map about the original $FILE name and SHA512
+ echo "$CHECKSUM $(basename "$FILE")" >> $TEMPORARYDIR/map
+
+ # We get the SHA512 hash of the resulted map file
+ MAPFILEHASH="$(sha512sum $TEMPORARYDIR/map | awk '{ print $1 }')"
+
+ # and we rename it with it and move it to FILEMAPSDIR
+ `sha512sum $TEMPORARYDIR/map | awk '{print "mv " $2 " '$FILEMAPSDIR/'" $1}'`
+
+ mp512p="$(sha512sum $TEMPORARYDIR/3rd_gen_map | awk '{print $1}')"
+ mv $TEMPORARYDIR/3rd_gen_map $FILEMAPSDIR/$mp512p
+
+ # We remove the TEMPORARYDIR
+ rm -rf $TEMPORARYDIR
+
+ # and print the MAPFILEHASH
+ echo "$MAPFILEHASH"
+
+}
+
+_ak_fs_find_depth(){
+ currentNode="$1"
+ pathToNode="$fmrk/$(_ak_fs_return_hash_path $currentNode)"
+ if [ -f $pathToNode ] && [ "$(du -b $pathToNode | awk '{print $1}')" == "258" ]
+ then
+ fileHead="$(head -n 1 $pathToNode)"
+ counter="$(expr $counter + 1)"
+ _ak_fs_find_depth "$fileHead"
+ elif [ ! -f $pathToNode ]
+ then
+ printf "%s" "$counter" > depth
+ else
+ exit 111
+ # Try to download stuff
+ # wget -s $remoteMrk/$currentNode -O $fmrk/$currentNode
+ # if [ "$?" -ne 0 ]
+ # then
+ # exit 111
+ # fi
+ # _ak_fs_find_depth "$currentNode"
+ fi
+}
+
+_ak_fs_cat(){
+ if [ -z $1 ]
+ then
+ echo "Please provide a SHA512 hash"
+ exit 1
+ fi
+ echo $1 | grep "[0123456789abcdef]\{128\}"
+ if [ $? -ne 0 ]
+ then
+ echo "Look, I asked for a SHA512 hash, please try again"
+ exit 1
+ fi
+ treeRootHash="$1"
+ fmrk="$AK_WORKDIR/fmrk"
+ ftr="$AK_WORKDIR/ftr"
+ # Enter temp folder
+ TEMPASSIN="$(ak-tempassin)"
+ cd $TEMPASSIN
+ currentNode="$treeRootHash"
+ counter=0
+ printf "%s" "$currentNode" > workspace.0
+ _ak_fs_find_depth "$currentNode"
+ depth="$(expr `cat depth` + 1)"
+ counter="0"
+ printf "%s" "$depth"
+ if [ -f output ]
+ then
+ rm output
+ fi
+ touch output
+ while [ "$counter" != "$depth" ]
+ do
+ _ak_log_debug "Entering loop... $counter $depth"
+ while IFS="" read -r p || [ -n "$p" ]
+ do
+ nextLevel="$(expr $counter + 1)"
+ if [ "$p" == "" ]
+ then
+ echo hi
+ else
+ expectedPath="$fmrk/$(_ak_fs_return_hash_path $p)"
+ if [ -f $expectedPath ]
+ then
+ if [ "$(head -n 1 $expectedPath)" == "$(tail -n 1 $expectedPath)" ]
+ then
+ head -n 1 $expectedPath >> workspace.$nextLevel
+ else
+ cat $expectedPath >> workspace.$nextLevel
+ fi
+ elif [ -f $ftr/$p ]
+ then
+ cat $ftr/$p >> output
+ fi
+ fi
+ done < workspace.$counter
+ counter="$(expr $counter + 1)"
+ done
+
+ base64 -d output
+ _ak_log_info "Recreation of $treeRootHash succeeded!"
+}
+
+_ak_fs_export(){
+ if [ -z $1 ]
+ then
+ _ak_log_error "Please provide a SHA512 hash"
+ exit 1
+ fi
+ if [ -z $2 ]
+ then
+ _ak_log_error "Please an output filename"
+ exit 2
+ fi
+ outputFilename="$2"
+ echo $1 | grep "[0123456789abcdef]\{128\}"
+ if [ $? -ne 0 ]
+ then
+ _ak_log_error "Look, I asked for a SHA512 hash, please try again"
+ exit 1
+ fi
+ _ak_fs_export "$1" > $outputFilename
+}