Browse Source

SSH Upload automation

Eeems 10 years ago
parent
commit
001d8859be
4 changed files with 95 additions and 28 deletions
  1. 18 4
      bin/repo-build
  2. 75 24
      bin/repo-update
  3. 1 0
      etc/repo.conf
  4. 1 0
      omni.db

+ 18 - 4
bin/repo-build

@@ -4,10 +4,11 @@ if [[ "$1" != "" ]];then
 else
 	override=false;
 fi;
-root="$(dirname $BASH_SOURCE)/..";
+root="$(readlink -f $(dirname $BASH_SOURCE)/..)";
+. $root/etc/repo.conf
 . $root/etc/packages.conf
-rm -f $root/repo/latest/i686/*;
-rm -f $root/repo/latest/x86-64/*;
+rm -f $root/repo/latest/i686/*.pkg.tar.xz;
+rm -f $root/repo/latest/x86-64/*.pkg.tar.xz;
 for val in "${packages[@]}"; do
 	unset package;
 	declare -A package;
@@ -90,4 +91,17 @@ for val in "${packages[@]}"; do
 		cp $item $root/repo/latest/x86-64/$item;
 	done;
 	echo -e "\tDone"
-done;
+done;
+echo "Building Repository";
+cd $root/repo/latest/
+ls -l $root/repo/latest/ | egrep '^d' | awk '{print $9}' | while read arch; do
+	if [ -d "$root/repo/latest/$arch" ];then
+		echo -e "\t$arch";
+		cd $root/repo/latest/$arch;
+		rm -f $reponame.db.tar.gz;
+		touch $reponame.db.tar.gz;
+		repo-add $reponame.db.tar.gz *.pkg.tar.xz;
+		rm -f $reponame.db.tar.gz.old;
+	fi;
+done;
+cd $root;

+ 75 - 24
bin/repo-update

@@ -1,10 +1,13 @@
 #!/bin/bash
+set -e;
 if [[ "$1" != "" ]];then
+	host_to_sync="$1";
 	force=true;
 else
 	force=false;
 fi;
-root="$(dirname $BASH_SOURCE)/..";
+root="$(readlink -f $(dirname $BASH_SOURCE)/..)";
+. $root/etc/repo.conf
 . $root/etc/sites.conf
 for val in "${sites[@]}"; do
 	unset site;
@@ -12,27 +15,75 @@ for val in "${sites[@]}"; do
 	eval "site=($val)";
 	host=${site[host]};
 	user=${site[username]};
-	echo "Updating $user@$host";
-	case ${site[type]} in
-		ssh)
-			echo -e "\tUploading files";
-			expect -c "
-				set timeout 1
-				log_user 0
-				spawn scp -r $root/skel $user@$host:${site[root]}
-					expect yes/no { send yes\r ; exp_continue }
-					expect password: {
-						send $(echo ${site[password]} | base64 --decode | gpg -d -q --no-mdc-warning)\r 
-						log_user 1
-						set timeout -1
-					}
-					expect eof {
-						exit
-					}
-				}";
-			echo -e "\tDone uploading"
-		;;
-		*)
-			echo -e "\tType '${site[type]}' not implemented.";
-	esac;
+	if ! $force || [[ "$host_to_sync" == "all" ]] || [[ "$host_to_sync" == "$user@$host" ]];then
+		echo "Updating $user@$host";
+		case ${site[type]} in
+			ssh)
+				escp(){
+					length=$(($#-1));
+					files=${@:1:$length};
+					expect -c "
+						set timeout 1
+						log_user 0
+						spawn scp -r $files \"$user@$host:${site[root]}/${!#}\"
+						expect yes/no { send yes\r ; exp_continue }
+						expect password: {
+							send $(echo ${site[password]} | base64 --decode | gpg -d -q --no-mdc-warning)\r 
+							set timeout -1
+						}
+						expect eof {
+							exit
+						}";
+				}
+				essh(){
+					args="$@";
+					expect -c "
+						set timeout 1
+						log_user 0
+						spawn ssh $user@$host $args
+						expect yes/no { send yes\r ; exp_continue }
+						expect password: {
+							send $(echo ${site[password]} | base64 --decode | gpg -d -q --no-mdc-warning)\r 
+							set timeout -1
+						}
+						expect eof {
+							exit
+						}";
+				}
+				upload_local_dir(){
+					find $root/$1 -mindepth 1 | while read file; do
+						if [ -f "$file" ] && [[ "$(basename $file)" != '.gitignore' ]] && [[ "$(basename $file)" != '$reponame.db' ]];then
+							echo -e "\t\tF: $(basename $file)";
+							nfile=${file:((${#root}+${#1}+2))};
+							escp $file $nfile;
+						elif [ -d "$file" ];then
+							file=${file:((${#root}+${#1}+2))};
+							echo -e "\t\tD: $file";
+							essh mkdir -p ${site[root]}/$2/$file;
+						fi;
+					done;
+				}
+				echo -e "\tUploading files to ${site[root]}";
+				essh mkdir -p ${site[root]}/;
+				upload_local_dir skel;
+				if $force; then
+					upload_local_dir repo/latest;
+				else
+					upload_local_dir repo/updates;
+					ls -l $root/repo/latest/ | egrep '^d' | awk '{print $9}' | while read arch; do
+						if [ -d "$root/repo/latest/$arch" ];then
+							escp $root/repo/latest/$arch/$reponame.db.tar.gz /$arch/$reponame.db.tar.gz;
+							essh cd ${site[root]}/$arch && rm -f $reponame.db && ln -s $reponame.db.tar.gz $reponame.db;
+						fi;
+					done;
+				fi;
+				echo -e "\tDone.";
+			;;
+			*)
+				echo -e "\tType '${site[type]}' not implemented.";
+		esac;
+	fi;
+done;
+ls -l $root/repo/updates/ | egrep '^d' | awk '{print $9}' | while read arch; do
+	rm -f $root/repo/updates/$arch/*.pkg.tar.xz;
 done;

+ 1 - 0
etc/Makefile.conf → etc/repo.conf

@@ -1,3 +1,4 @@
 ############################################################
 #                       Basic Config                       #
 ############################################################
+reponame=omni

+ 1 - 0
omni.db

@@ -0,0 +1 @@
+omni.db.tar.gz